Skip to content

Dispersa Class

new Dispersa(options?: DispersaOptions)
OptionTypeDescription
resolverstring | ResolverDocumentPath to resolver file or inline resolver document
buildPathstringOutput directory when building to disk
validation{ mode?: 'error' | 'warn' | 'off' }Validation mode (default: ‘error’)
import { Dispersa } from 'dispersa'
const dispersa = new Dispersa({
resolver: './tokens.resolver.json',
buildPath: './dist',
validation: { mode: 'warn' },
})

Runs a full build. Never throws — returns a BuildResult with success and optional errors.

build(config: BuildConfig): Promise<BuildResult>
const result = await dispersa.build({
outputs: [css({ name: 'tokens', file: 'tokens.css' })],
})
if (result.success) {
for (const output of result.outputs) {
console.log(`${output.name}: ${output.path}`)
}
} else {
for (const err of result.errors ?? []) {
console.error(`${err.code}: ${err.message}`)
}
}

Same as build, but throws on failure instead of returning errors.

buildOrThrow(config: BuildConfig): Promise<BuildResult>
await dispersa.buildOrThrow({
outputs: [css({ name: 'tokens', file: 'tokens.css' })],
})

Builds a single permutation with the given modifier inputs. Useful for generating one variant at a time.

buildPermutation(config: BuildConfig, modifierInputs?: ModifierInputs): Promise<BuildResult>
const result = await dispersa.buildPermutation(
{
outputs: [css({ name: 'dark', file: 'dark.css' })],
},
{ theme: 'dark', density: 'compact' },
)

Resolves tokens for a resolver without rendering. Returns the resolved token map for the given modifier inputs.

resolveTokens(
resolver: string | ResolverDocument,
modifierInputs?: ModifierInputs,
): Promise<Record<string, ResolvedToken>>
const tokens = await dispersa.resolveTokens('./tokens.resolver.json', {
mode: 'light',
})
console.log(tokens['color.background'])

Resolves tokens for every permutation defined in the resolver. Returns an array of { tokens, modifierInputs }.

resolveAllPermutations(
resolver: string | ResolverDocument,
): Promise<{ tokens: Record<string, ResolvedToken>; modifierInputs: ModifierInputs }[]>
const permutations = await dispersa.resolveAllPermutations('./tokens.resolver.json')
for (const { tokens, modifierInputs } of permutations) {
console.log('Permutation:', modifierInputs)
console.log('Tokens:', Object.keys(tokens).length)
}

Generates TypeScript types for a resolved token map and writes to a file.

generateTypes(
tokens: Record<string, ResolvedToken>,
fileName: string,
options?: { moduleName?: string },
): Promise<void>
const tokens = await dispersa.resolveTokens('./tokens.resolver.json')
await dispersa.generateTypes(tokens, './dist/tokens.d.ts', {
moduleName: 'tokens',
})

Configuration passed to build, buildOrThrow, and buildPermutation:

OptionTypeDescription
resolverstring | ResolverDocumentOverride instance resolver
buildPathstringOverride instance build path
outputsOutputConfig[]Required. Output configurations
filtersFilter[]Global filters applied before any output
transformsTransform[]Global transforms applied before any output
preprocessorsPreprocessor[]Preprocessors applied to raw tokens
permutationsModifierInputs[]Explicit permutation list (overrides resolver)
hooksLifecycleHooksonBuildStart, onBuildEnd

Returned by build, buildOrThrow, and buildPermutation:

PropertyTypeDescription
successbooleanWhether the build completed without errors
outputs{ name: string; path?: string; content: string }[]Per-output results
errorsBuildError[]Present when success is false
PropertyTypeDescription
messagestringHuman-readable error message
codeErrorCodeError category
pathstringFile path when relevant
tokenPathstringToken path when relevant
severity'error' | 'warning'Severity level
suggestionsstring[]Suggested fixes (e.g. similar token names)

'TOKEN_REFERENCE' | 'CIRCULAR_REFERENCE' | 'VALIDATION' | 'COLOR_PARSE' | 'DIMENSION_FORMAT' | 'FILE_OPERATION' | 'CONFIGURATION' | 'BASE_PERMUTATION' | 'MODIFIER' | 'UNKNOWN'