@terrazzo/parser 2.0.0-alpha.7 → 2.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/index.d.ts +39 -6
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +578 -512
  4. package/dist/index.js.map +1 -1
  5. package/package.json +3 -3
  6. package/src/build/index.ts +0 -209
  7. package/src/config.ts +0 -304
  8. package/src/index.ts +0 -95
  9. package/src/lib/code-frame.ts +0 -177
  10. package/src/lib/momoa.ts +0 -10
  11. package/src/lib/resolver-utils.ts +0 -35
  12. package/src/lint/index.ts +0 -142
  13. package/src/lint/plugin-core/index.ts +0 -103
  14. package/src/lint/plugin-core/lib/docs.ts +0 -3
  15. package/src/lint/plugin-core/rules/a11y-min-contrast.ts +0 -91
  16. package/src/lint/plugin-core/rules/a11y-min-font-size.ts +0 -66
  17. package/src/lint/plugin-core/rules/colorspace.ts +0 -108
  18. package/src/lint/plugin-core/rules/consistent-naming.ts +0 -65
  19. package/src/lint/plugin-core/rules/descriptions.ts +0 -43
  20. package/src/lint/plugin-core/rules/duplicate-values.ts +0 -85
  21. package/src/lint/plugin-core/rules/max-gamut.ts +0 -144
  22. package/src/lint/plugin-core/rules/required-children.ts +0 -106
  23. package/src/lint/plugin-core/rules/required-modes.ts +0 -75
  24. package/src/lint/plugin-core/rules/required-type.ts +0 -28
  25. package/src/lint/plugin-core/rules/required-typography-properties.ts +0 -65
  26. package/src/lint/plugin-core/rules/valid-boolean.ts +0 -41
  27. package/src/lint/plugin-core/rules/valid-border.ts +0 -57
  28. package/src/lint/plugin-core/rules/valid-color.ts +0 -265
  29. package/src/lint/plugin-core/rules/valid-cubic-bezier.ts +0 -83
  30. package/src/lint/plugin-core/rules/valid-dimension.ts +0 -199
  31. package/src/lint/plugin-core/rules/valid-duration.ts +0 -123
  32. package/src/lint/plugin-core/rules/valid-font-family.ts +0 -68
  33. package/src/lint/plugin-core/rules/valid-font-weight.ts +0 -89
  34. package/src/lint/plugin-core/rules/valid-gradient.ts +0 -79
  35. package/src/lint/plugin-core/rules/valid-link.ts +0 -41
  36. package/src/lint/plugin-core/rules/valid-number.ts +0 -63
  37. package/src/lint/plugin-core/rules/valid-shadow.ts +0 -67
  38. package/src/lint/plugin-core/rules/valid-string.ts +0 -41
  39. package/src/lint/plugin-core/rules/valid-stroke-style.ts +0 -104
  40. package/src/lint/plugin-core/rules/valid-transition.ts +0 -61
  41. package/src/lint/plugin-core/rules/valid-typography.ts +0 -67
  42. package/src/logger.ts +0 -213
  43. package/src/parse/index.ts +0 -124
  44. package/src/parse/load.ts +0 -172
  45. package/src/parse/normalize.ts +0 -163
  46. package/src/parse/process.ts +0 -251
  47. package/src/parse/token.ts +0 -553
  48. package/src/resolver/create-synthetic-resolver.ts +0 -86
  49. package/src/resolver/index.ts +0 -7
  50. package/src/resolver/load.ts +0 -215
  51. package/src/resolver/normalize.ts +0 -133
  52. package/src/resolver/validate.ts +0 -375
  53. package/src/types.ts +0 -468
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@terrazzo/parser",
3
- "version": "2.0.0-alpha.7",
3
+ "version": "2.0.0-beta.0",
4
4
  "description": "Parser/validator for the Design Tokens Community Group (DTCG) standard.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@humanwhocodes/momoa": "^3.3.10",
38
- "@types/babel__code-frame": "^7.0.6",
38
+ "@types/babel__code-frame": "^7.27.0",
39
39
  "@types/culori": "^4.0.1",
40
40
  "culori": "^4.0.2",
41
41
  "fast-deep-equal": "^3.1.3",
@@ -44,7 +44,7 @@
44
44
  "scule": "^1.3.0",
45
45
  "wildcard-match": "^5.1.4",
46
46
  "@terrazzo/json-schema-tools": "^0.2.0",
47
- "@terrazzo/token-tools": "^2.0.0-alpha.7"
47
+ "@terrazzo/token-tools": "^2.0.0-beta.0"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "yaml-to-momoa": "0.0.8"
@@ -1,209 +0,0 @@
1
- import type { InputSourceWithDocument } from '@terrazzo/json-schema-tools';
2
- import type { TokenNormalized } from '@terrazzo/token-tools';
3
- import wcmatch from 'wildcard-match';
4
- import Logger, { type LogEntry } from '../logger.js';
5
- import type { BuildRunnerResult, ConfigInit, Resolver, TokenTransformed, TransformParams } from '../types.js';
6
-
7
- export interface BuildRunnerOptions {
8
- sources: InputSourceWithDocument[];
9
- config: ConfigInit;
10
- resolver: Resolver;
11
- logger?: Logger;
12
- }
13
- export const SINGLE_VALUE = 'SINGLE_VALUE';
14
- export const MULTI_VALUE = 'MULTI_VALUE';
15
-
16
- /** Validate plugin setTransform() calls for immediate feedback */
17
- function validateTransformParams({
18
- params,
19
- logger,
20
- pluginName,
21
- }: {
22
- params: TokenTransformed;
23
- logger: Logger;
24
- pluginName: string;
25
- }): void {
26
- const baseMessage: LogEntry = { group: 'plugin', label: pluginName, message: '' };
27
-
28
- // validate value is valid for SINGLE_VALUE or MULTI_VALUE
29
- if (
30
- !params.value ||
31
- (typeof params.value !== 'string' && typeof params.value !== 'object') ||
32
- Array.isArray(params.value)
33
- ) {
34
- logger.error({
35
- ...baseMessage,
36
- message: `setTransform() value expected string or object of strings, received ${
37
- Array.isArray(params.value) ? 'Array' : typeof params.value
38
- }`,
39
- });
40
- }
41
- if (typeof params.value === 'object' && Object.values(params.value).some((v) => typeof v !== 'string')) {
42
- logger.error({
43
- ...baseMessage,
44
- message: 'setTransform() value expected object of strings, received some non-string values',
45
- });
46
- }
47
- }
48
-
49
- /** Run build stage */
50
- export default async function build(
51
- tokens: Record<string, TokenNormalized>,
52
- { resolver, sources, logger = new Logger(), config }: BuildRunnerOptions,
53
- ): Promise<BuildRunnerResult> {
54
- const formats: Record<string, TokenTransformed[]> = {};
55
- const result: BuildRunnerResult = { outputFiles: [] };
56
-
57
- function getTransforms(params: TransformParams) {
58
- if (!params?.format) {
59
- logger.warn({ group: 'plugin', message: '"format" missing from getTransforms(), no tokens returned.' });
60
- return [];
61
- }
62
-
63
- const tokenMatcher = params.id ? wcmatch(Array.isArray(params.id) ? params.id : [params.id]) : null;
64
- const modeMatcher = params.mode ? wcmatch(params.mode) : null;
65
-
66
- return (formats[params.format!] ?? []).filter((token) => {
67
- if (params.$type) {
68
- if (typeof params.$type === 'string' && token.token.$type !== params.$type) {
69
- return false;
70
- } else if (Array.isArray(params.$type) && !params.$type.some(($type) => token.token.$type === $type)) {
71
- return false;
72
- }
73
- }
74
- if (params.id && params.id !== '*' && tokenMatcher && !tokenMatcher(token.token.id)) {
75
- return false;
76
- }
77
- if (modeMatcher && !modeMatcher(token.mode)) {
78
- return false;
79
- }
80
- return true;
81
- });
82
- }
83
-
84
- // transform()
85
- let transformsLocked = false; // prevent plugins from transforming after stage has ended
86
- const startTransform = performance.now();
87
- for (const plugin of config.plugins) {
88
- if (typeof plugin.transform === 'function') {
89
- await plugin.transform({
90
- context: { logger },
91
- tokens,
92
- sources,
93
- getTransforms,
94
- setTransform(id, params) {
95
- if (transformsLocked) {
96
- logger.warn({
97
- message: 'Attempted to call setTransform() after transform step has completed.',
98
- group: 'plugin',
99
- label: plugin.name,
100
- });
101
- return;
102
- }
103
- const token = tokens[id]!;
104
-
105
- const cleanValue: TokenTransformed['value'] =
106
- typeof params.value === 'string' ? params.value : { ...(params.value as Record<string, string>) };
107
- validateTransformParams({
108
- logger,
109
- params: { ...(params as any), value: cleanValue },
110
- pluginName: plugin.name,
111
- });
112
-
113
- // upsert
114
- if (!formats[params.format]) {
115
- formats[params.format] = [];
116
- }
117
- const foundTokenI = formats[params.format]!.findIndex(
118
- (t) =>
119
- id === t.id &&
120
- (!params.localID || params.localID === t.localID) &&
121
- (!params.mode || params.mode === t.mode),
122
- );
123
- if (foundTokenI === -1) {
124
- formats[params.format]!.push({
125
- ...params,
126
- id,
127
- value: cleanValue,
128
- type: typeof cleanValue === 'string' ? SINGLE_VALUE : MULTI_VALUE,
129
- mode: params.mode || '.',
130
- token: structuredClone(token),
131
- } as TokenTransformed);
132
- } else {
133
- formats[params.format]![foundTokenI]!.value = cleanValue;
134
- formats[params.format]![foundTokenI]!.type = typeof cleanValue === 'string' ? SINGLE_VALUE : MULTI_VALUE;
135
- }
136
- },
137
- resolver,
138
- });
139
- }
140
- }
141
- transformsLocked = true;
142
- logger.debug({
143
- group: 'parser',
144
- label: 'transform',
145
- message: 'transform() step',
146
- timing: performance.now() - startTransform,
147
- });
148
-
149
- // build()
150
- const startBuild = performance.now();
151
- await Promise.all(
152
- config.plugins.map(async (plugin) => {
153
- if (typeof plugin.build === 'function') {
154
- const pluginBuildStart = performance.now();
155
- await plugin.build({
156
- context: { logger },
157
- tokens,
158
- sources,
159
- getTransforms,
160
- resolver,
161
- outputFile(filename, contents) {
162
- const resolved = new URL(filename, config.outDir);
163
- if (result.outputFiles.some((f) => new URL(f.filename, config.outDir).href === resolved.href)) {
164
- logger.error({
165
- group: 'plugin',
166
- message: `Can’t overwrite file "${filename}"`,
167
- label: plugin.name,
168
- });
169
- }
170
- result.outputFiles.push({
171
- filename,
172
- contents,
173
- plugin: plugin.name,
174
- time: performance.now() - pluginBuildStart,
175
- });
176
- },
177
- });
178
- }
179
- }),
180
- );
181
- logger.debug({
182
- group: 'parser',
183
- label: 'build',
184
- message: 'build() step',
185
- timing: performance.now() - startBuild,
186
- });
187
-
188
- // buildEnd()
189
- const startBuildEnd = performance.now();
190
- await Promise.all(
191
- config.plugins.map(async (plugin) =>
192
- plugin.buildEnd?.({
193
- context: { logger },
194
- tokens,
195
- getTransforms,
196
- sources,
197
- outputFiles: structuredClone(result.outputFiles),
198
- }),
199
- ),
200
- );
201
- logger.debug({
202
- group: 'parser',
203
- label: 'build',
204
- message: 'buildEnd() step',
205
- timing: performance.now() - startBuildEnd,
206
- });
207
-
208
- return result;
209
- }
package/src/config.ts DELETED
@@ -1,304 +0,0 @@
1
- import { merge } from 'merge-anything';
2
- import coreLintPlugin, { RECOMMENDED_CONFIG } from './lint/plugin-core/index.js';
3
- import Logger from './logger.js';
4
- import type { Config, ConfigInit, ConfigOptions, LintRuleSeverity } from './types.js';
5
-
6
- const TRAILING_SLASH_RE = /\/*$/;
7
-
8
- /**
9
- * Validate and normalize a config
10
- */
11
- export default function defineConfig(
12
- rawConfig: Config,
13
- { logger = new Logger(), cwd }: ConfigOptions = {} as ConfigOptions,
14
- ): ConfigInit {
15
- const configStart = performance.now();
16
-
17
- if (!cwd) {
18
- logger.error({ group: 'config', label: 'core', message: 'defineConfig() missing `cwd` for JS API' });
19
- }
20
-
21
- const config = merge({}, rawConfig) as unknown as ConfigInit;
22
-
23
- // 1. normalize and init
24
- normalizeTokens({ rawConfig, config, logger, cwd });
25
- normalizeOutDir({ config, cwd, logger });
26
- normalizePlugins({ config, logger });
27
- normalizeLint({ config, logger });
28
- normalizeIgnore({ config, logger });
29
-
30
- // 2. Start build by calling config()
31
- for (const plugin of config.plugins) {
32
- plugin.config?.({ ...config }, { logger });
33
- }
34
-
35
- // 3. finish
36
- logger.debug({
37
- group: 'parser',
38
- label: 'config',
39
- message: 'Finish config validation',
40
- timing: performance.now() - configStart,
41
- });
42
- return config;
43
- }
44
-
45
- /** Normalize config.tokens */
46
- function normalizeTokens({
47
- rawConfig,
48
- config,
49
- logger,
50
- cwd,
51
- }: {
52
- rawConfig: Config;
53
- config: ConfigInit;
54
- logger: Logger;
55
- cwd: URL;
56
- }) {
57
- if (rawConfig.tokens === undefined) {
58
- config.tokens = [
59
- // @ts-expect-error we’ll normalize in next step
60
- './tokens.json',
61
- ];
62
- } else if (typeof rawConfig.tokens === 'string') {
63
- config.tokens = [
64
- // @ts-expect-error we’ll normalize in next step
65
- rawConfig.tokens,
66
- ];
67
- } else if (Array.isArray(rawConfig.tokens)) {
68
- config.tokens = [];
69
- for (const file of rawConfig.tokens) {
70
- if (typeof file === 'string' || (file as URL) instanceof URL) {
71
- config.tokens.push(
72
- // @ts-expect-error we’ll normalize in next step
73
- file,
74
- );
75
- } else {
76
- logger.error({
77
- group: 'config',
78
- label: 'tokens',
79
- message: `Expected array of strings, encountered ${JSON.stringify(file)}`,
80
- });
81
- }
82
- }
83
- } else {
84
- logger.error({
85
- group: 'config',
86
- label: 'tokens',
87
- message: `Expected string or array of strings, received ${typeof rawConfig.tokens}`,
88
- });
89
- }
90
- for (let i = 0; i < config.tokens!.length; i++) {
91
- const filepath = config.tokens[i]!;
92
- if (filepath instanceof URL) {
93
- continue; // skip if already resolved
94
- }
95
- try {
96
- config.tokens[i] = new URL(filepath, cwd);
97
- } catch {
98
- logger.error({ group: 'config', label: 'tokens', message: `Invalid URL ${filepath}` });
99
- }
100
- }
101
- }
102
-
103
- /** Normalize config.outDir */
104
- function normalizeOutDir({ config, cwd, logger }: { config: ConfigInit; logger: Logger; cwd: URL }) {
105
- if (config.outDir instanceof URL) {
106
- // noop
107
- } else if (typeof config.outDir === 'undefined') {
108
- config.outDir = new URL('./tokens/', cwd);
109
- } else if (typeof config.outDir !== 'string') {
110
- logger.error({
111
- group: 'config',
112
- label: 'outDir',
113
- message: `Expected string, received ${JSON.stringify(config.outDir)}`,
114
- });
115
- } else {
116
- config.outDir = new URL(config.outDir, cwd);
117
- // always add trailing slash so URL treats it as a directory.
118
- // do AFTER it has been normalized to POSIX paths with `href` (don’t use Node internals here! This may run in the browser)
119
- config.outDir = new URL(config.outDir.href.replace(TRAILING_SLASH_RE, '/'));
120
- }
121
- }
122
-
123
- /** Normalize config.plugins */
124
- function normalizePlugins({ config, logger }: { config: ConfigInit; logger: Logger }) {
125
- if (typeof config.plugins === 'undefined') {
126
- config.plugins = [];
127
- }
128
- if (!Array.isArray(config.plugins)) {
129
- logger.error({
130
- group: 'config',
131
- label: 'plugins',
132
- message: `Expected array of plugins, received ${JSON.stringify(config.plugins)}`,
133
- });
134
- }
135
- config.plugins.push(coreLintPlugin());
136
- for (let n = 0; n < config.plugins.length; n++) {
137
- const plugin = config.plugins[n];
138
- if (typeof plugin !== 'object') {
139
- logger.error({
140
- group: 'config',
141
- label: `plugin[${n}]`,
142
- message: `Expected output plugin, received ${JSON.stringify(plugin)}`,
143
- });
144
- } else if (!plugin.name) {
145
- logger.error({ group: 'config', label: `plugin[${n}]`, message: `Missing "name"` });
146
- }
147
- }
148
- // order plugins with "enforce"
149
- config.plugins.sort((a, b) => {
150
- if (a.enforce === 'pre' && b.enforce !== 'pre') {
151
- return -1;
152
- } else if (a.enforce === 'post' && b.enforce !== 'post') {
153
- return 1;
154
- }
155
- return 0;
156
- });
157
- }
158
-
159
- function normalizeLint({ config, logger }: { config: ConfigInit; logger: Logger }) {
160
- if (config.lint !== undefined) {
161
- if (config.lint === null || typeof config.lint !== 'object' || Array.isArray(config.lint)) {
162
- logger.error({ group: 'config', label: 'lint', message: 'Must be an object' });
163
- }
164
- if (!config.lint.build) {
165
- config.lint.build = { enabled: true };
166
- }
167
- if (config.lint.build.enabled !== undefined) {
168
- if (typeof config.lint.build.enabled !== 'boolean') {
169
- logger.error({
170
- group: 'config',
171
- label: 'lint › build › enabled',
172
- message: `Expected boolean, received ${JSON.stringify(config.lint.build)}`,
173
- });
174
- }
175
- } else {
176
- config.lint.build.enabled = true;
177
- }
178
-
179
- if (config.lint.rules === undefined) {
180
- config.lint.rules = { ...RECOMMENDED_CONFIG };
181
- } else {
182
- if (config.lint.rules === null || typeof config.lint.rules !== 'object' || Array.isArray(config.lint.rules)) {
183
- logger.error({
184
- group: 'config',
185
- label: 'lint › rules',
186
- message: `Expected object, received ${JSON.stringify(config.lint.rules)}`,
187
- });
188
- return;
189
- }
190
-
191
- const allRules = new Map<string, string>();
192
- for (const plugin of config.plugins) {
193
- if (typeof plugin.lint !== 'function') {
194
- continue;
195
- }
196
- const pluginRules = plugin.lint();
197
- if (!pluginRules || Array.isArray(pluginRules) || typeof pluginRules !== 'object') {
198
- logger.error({
199
- group: 'config',
200
- label: `plugin › ${plugin.name}`,
201
- message: `Expected object for lint() received ${JSON.stringify(pluginRules)}`,
202
- });
203
- continue;
204
- }
205
- for (const rule of Object.keys(pluginRules)) {
206
- // Note: sometimes plugins will be loaded multiple times, in which case it’s expected
207
- // they’re register rules again for lint(). Only throw an error if plugin A and plugin B’s
208
- // rules conflict.
209
- if (allRules.get(rule) && allRules.get(rule) !== plugin.name) {
210
- logger.error({
211
- group: 'config',
212
- label: `plugin › ${plugin.name}`,
213
- message: `Duplicate rule ${rule} already registered by plugin ${allRules.get(rule)}`,
214
- });
215
- }
216
- allRules.set(rule, plugin.name);
217
- }
218
- }
219
-
220
- for (const id of Object.keys(config.lint.rules)) {
221
- if (!allRules.has(id)) {
222
- logger.error({
223
- group: 'config',
224
- label: `lint › rule › ${id}`,
225
- message: 'Unknown rule. Is the plugin installed?',
226
- });
227
- }
228
-
229
- const value = config.lint.rules[id];
230
- let severity: LintRuleSeverity = 'off';
231
- let options: any = {};
232
- if (typeof value === 'number' || typeof value === 'string') {
233
- severity = value;
234
- } else if (Array.isArray(value)) {
235
- severity = value[0] as LintRuleSeverity;
236
- options = value[1];
237
- } else if (value !== undefined) {
238
- logger.error({
239
- group: 'config',
240
- label: `lint › rule › ${id}`,
241
- message: `Invalid eyntax. Expected \`string | number | Array\`, received ${JSON.stringify(value)}}`,
242
- });
243
- }
244
- config.lint.rules[id] = [severity, options];
245
- if (typeof severity === 'number') {
246
- if (severity !== 0 && severity !== 1 && severity !== 2) {
247
- logger.error({
248
- group: 'config',
249
- label: `lint › rule › ${id}`,
250
- message: `Invalid number ${severity}. Specify 0 (off), 1 (warn), or 2 (error).`,
251
- });
252
- }
253
- config.lint.rules[id]![0] = (['off', 'warn', 'error'] as const)[severity]!;
254
- } else if (typeof severity === 'string') {
255
- if (severity !== 'off' && severity !== 'warn' && severity !== 'error') {
256
- logger.error({
257
- group: 'config',
258
- label: `lint › rule › ${id}`,
259
- message: `Invalid string ${JSON.stringify(severity)}. Specify "off", "warn", or "error".`,
260
- });
261
- }
262
- } else if (value !== null) {
263
- logger.error({
264
- group: 'config',
265
- label: `lint › rule › ${id}`,
266
- message: `Expected string or number, received ${JSON.stringify(value)}`,
267
- });
268
- }
269
- }
270
- }
271
- } else {
272
- config.lint = {
273
- build: { enabled: true },
274
- rules: { ...RECOMMENDED_CONFIG },
275
- };
276
- }
277
- }
278
-
279
- function normalizeIgnore({ config, logger }: { config: ConfigInit; logger: Logger }) {
280
- if (!config.ignore) {
281
- config.ignore = {} as typeof config.ignore;
282
- }
283
- config.ignore.tokens ??= [];
284
- config.ignore.deprecated ??= false;
285
- if (!Array.isArray(config.ignore.tokens) || config.ignore.tokens.some((x) => typeof x !== 'string')) {
286
- logger.error({
287
- group: 'config',
288
- label: 'ignore › tokens',
289
- message: `Expected array of strings, received ${JSON.stringify(config.ignore.tokens)}`,
290
- });
291
- }
292
- if (typeof config.ignore.deprecated !== 'boolean') {
293
- logger.error({
294
- group: 'config',
295
- label: 'ignore › deprecated',
296
- message: `Expected boolean, received ${JSON.stringify(config.ignore.deprecated)}`,
297
- });
298
- }
299
- }
300
-
301
- /** Merge configs */
302
- export function mergeConfigs(a: Config, b: Config): Config {
303
- return merge(a, b);
304
- }
package/src/index.ts DELETED
@@ -1,95 +0,0 @@
1
- export type {
2
- AliasToken,
3
- AliasValue,
4
- BooleanToken,
5
- BooleanTokenNormalized,
6
- BooleanValue,
7
- BorderToken,
8
- BorderTokenNormalized,
9
- BorderValue,
10
- BorderValueNormalized,
11
- ColorSpace,
12
- ColorToken,
13
- ColorTokenNormalized,
14
- ColorValue,
15
- ColorValueNormalized,
16
- CubicBezierToken,
17
- CubicBezierTokenNormalized,
18
- CubicBezierValue,
19
- CustomTransformOptions,
20
- DimensionToken,
21
- DimensionTokenNormalized,
22
- DimensionValue,
23
- DurationToken,
24
- DurationTokenNormalized,
25
- DurationValue,
26
- FontFamilyToken,
27
- FontFamilyTokenNormalized,
28
- FontFamilyValue,
29
- FontFamilyValueNormalized,
30
- FontWeightToken,
31
- FontWeightTokenNormalized,
32
- FontWeightValue,
33
- FontWeightValueNormalized,
34
- GradientStop,
35
- GradientStopNormalized,
36
- GradientToken,
37
- GradientTokenNormalized,
38
- GradientValue,
39
- GradientValueNormalized,
40
- Group,
41
- GroupCore,
42
- GroupOrToken,
43
- LinkToken,
44
- LinkTokenNormalized,
45
- LinkValue,
46
- ModeMap,
47
- NumberToken,
48
- NumberTokenNormalized,
49
- NumberValue,
50
- ShadowToken,
51
- ShadowTokenNormalized,
52
- ShadowValue,
53
- ShadowValueNormalized,
54
- StringToken,
55
- StringTokenNormalized,
56
- StringValue,
57
- StrokeStyleToken,
58
- StrokeStyleTokenNormalized,
59
- StrokeStyleValue,
60
- StrokeStyleValueExpanded,
61
- Token,
62
- TokenCore,
63
- TokenMode,
64
- TokenNormalized,
65
- TokenNormalizedCore,
66
- TokenNormalizedSet,
67
- TokensSet,
68
- TransitionToken,
69
- TransitionTokenNormalized,
70
- TransitionValue,
71
- TransitionValueNormalized,
72
- TypographyToken,
73
- TypographyTokenNormalized,
74
- TypographyValue,
75
- TypographyValueNormalized,
76
- } from '@terrazzo/token-tools';
77
-
78
- export * from './build/index.js';
79
- export { default as build } from './build/index.js';
80
-
81
- export * from './config.js';
82
- export { default as defineConfig } from './config.js';
83
-
84
- export * from './lint/index.js';
85
- export { default as lintRunner } from './lint/index.js';
86
-
87
- export * from './logger.js';
88
- export { default as Logger } from './logger.js';
89
-
90
- export * from './parse/index.js';
91
- export { default as parse } from './parse/index.js';
92
-
93
- export * from './resolver/index.js';
94
-
95
- export * from './types.js';