Skip to content

JavaScript / TypeScript

The js() builder renders design tokens as ES modules. Supports flat or nested structure, optional lookup helpers, and TypeScript declaration generation.

import { js } from 'dispersa'
OptionTypeDefaultDescription
namestringUnique output identifier
filestring or functionOutput path (supports {*context*} interpolation for modifiers)
preset’bundle’ | ‘standalone''standalone’Output preset
structure’flat’ | ‘nested''nested’Token structure
moduleNamestring’tokens’Module name for exports
generateHelperbooleanGenerate token lookup helper
minifybooleanMinify output
transformsTransform[]Per-output transforms
filtersFilter[]Per-output filters
import { Dispersa, js } from 'dispersa'
import { nameCamelCase, colorToHex, dimensionToPx } from 'dispersa/transforms'
await dispersa.build({
outputs: [
js({
name: 'tokens',
file: 'tokens.js',
structure: 'flat',
moduleName: 'tokens',
transforms: [nameCamelCase(), colorToHex(), dimensionToPx()],
}),
],
})

Output:

export const colorBrandPrimary = '#0066cc'
export const spacingMedium = '16px'
js({
name: 'tokens',
file: 'tokens.js',
structure: 'nested',
moduleName: 'tokens',
transforms: [colorToHex(), dimensionToPx()],
})

Output:

export const color = {
brand: {
primary: '#0066cc'
}
}
export const spacing = {
medium: '16px'
}

When generateHelper is true (bundle mode), a getTokens() lookup function is added:

js({
name: 'tokens',
file: 'tokens.js',
preset: 'bundle',
structure: 'flat',
generateHelper: true,
moduleName: 'tokens',
transforms: [nameCamelCase(), colorToHex()],
})

The helper returns the resolved token set for a given modifier combination (e.g., getTokens({ theme: 'dark' })).

Generate a TypeScript declaration file for your tokens:

const tokens = await dispersa.resolveTokens('./tokens.resolver.json')
await dispersa.generateTypes(tokens, 'tokens.d.ts', { moduleName: 'tokens' })