@dsgraph/core 0.6.2 → 0.7.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.
package/dist/code.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { type Token } from '@dsgraph/schema';
2
2
  import type { DsGraph } from './graph.js';
3
+ import { type Knowledge, type Role } from './knowledge.js';
3
4
  import type { Input } from './resolver/system.js';
4
5
  /**
5
6
  * What a project's code does with the design system: where it reads tokens (`var(--…)`) and where
@@ -97,13 +98,47 @@ export interface NearestToken {
97
98
  /** Within what people cannot tell apart: ΔE < 1, < 0.5px; equal otherwise. */
98
99
  exact: boolean;
99
100
  }
101
+ /** The role a CSS property's value plays: `color` is text, `background-color` a background. */
102
+ export declare function roleOfProperty(property: string): Role | undefined;
100
103
  /**
101
- * Tokens nearest to a value in one context. Deprecated ones go last; among equally close tokens,
102
- * the ones that reference another token (semantic tokens, which follow themes) come before the
103
- * primitives that hold the value.
104
+ * Where a value is written, as far as choosing a token goes: the CSS property, the states the rule
105
+ * applies in (`:hover` → `hover`) and the component it styles (`.button`, `Button.tsx`).
106
+ */
107
+ export interface StyleContext {
108
+ property?: string;
109
+ /** `hover`, `focus`, `active`, `disabled`, `selected`, `visited`; none for the resting state. */
110
+ states?: string[];
111
+ /** Names of the component the code styles, lower case, without separators: `button`, `actionlist`. */
112
+ components?: string[];
113
+ }
114
+ /**
115
+ * The context of a value written in code, for `nearestTokens`: states from the selector or a
116
+ * class's variants, components from the selector's classes (the block of a BEM class) and the file
117
+ * name (`Button.module.css`, `ActionList/Item.tsx`).
118
+ */
119
+ export declare function styleContext(at: {
120
+ file: string;
121
+ property: string;
122
+ selector?: string;
123
+ source?: string;
124
+ }, knowledge?: Knowledge): StyleContext;
125
+ /**
126
+ * Tokens nearest to a value in one context. Deprecated ones go last. Among exact matches, the name
127
+ * decides, in this order:
128
+ * - a token made for another role goes last (`borderColor.accent` for `color`);
129
+ * - the code's state: `control.bgColor.hover` in a `:hover` rule, and in a rule without one, not
130
+ * a token for hover or disabled;
131
+ * - the code's component: `button.bgColor.rest` in `.button` or `Button.tsx`;
132
+ * - the property's role, as the first part of the name before deeper in it (`fgColor.accent`
133
+ * before `selection.fgColor`).
134
+ * Among equally close tokens, the ones that reference another token (semantic tokens, which follow
135
+ * themes) come before the primitives that hold the value; then general tokens before component ones
136
+ * (`fgColor.accent` before `button.outline.fgColor.rest`), and the one others build on first.
137
+ * `context` is a CSS property or a whole `StyleContext` (see `styleContext`); a knowledge pack adds
138
+ * to the words names are read by.
104
139
  */
105
140
  export declare function nearestTokens(graph: DsGraph, parsed: {
106
141
  type: string;
107
142
  value: unknown;
108
- }, input: Input, limit: number): NearestToken[];
143
+ }, input: Input, limit: number, context?: string | StyleContext, knowledge?: Knowledge): NearestToken[];
109
144
  //# sourceMappingURL=code.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../src/code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../src/code.ts"],"names":[],"mappings":"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"}
package/dist/code.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { canonicalize } from '@dsgraph/schema';
2
+ import { vocabularyOf } from './knowledge.js';
2
3
  import { normalizeName } from './path.js';
3
4
  import { deltaEOK } from './values/color.js';
4
5
  import { toPx } from './values/dimension.js';
@@ -138,12 +139,161 @@ const COMPATIBLE = {
138
139
  number: ['number', 'fontWeight'],
139
140
  fontWeight: ['fontWeight', 'number'],
140
141
  };
142
+ /** The role a CSS property's value plays: `color` is text, `background-color` a background. */
143
+ export function roleOfProperty(property) {
144
+ const p = property.toLowerCase();
145
+ if (/^(color|caret-color|-webkit-text-fill-color|text-decoration-color|text-emphasis-color)$/.test(p))
146
+ return 'text';
147
+ if (/^background(-color)?$|^(fill)$/.test(p))
148
+ return 'background';
149
+ if (/^(border|outline|column-rule)(-(top|right|bottom|left|block|inline)(-(start|end))?)?(-color)?$|^stroke$/.test(p))
150
+ return 'border';
151
+ if (/shadow$/.test(p))
152
+ return 'shadow';
153
+ return undefined;
154
+ }
155
+ /** States in a selector; what `:not()` excludes does not count. */
156
+ const SELECTOR_STATES = [
157
+ [/:hover\b/, 'hover'],
158
+ [/:focus(-visible|-within)?\b/, 'focus'],
159
+ [/:active\b|\[aria-pressed(=["']?true["']?)?\]/, 'active'],
160
+ [/:disabled\b|\[disabled\]|\[aria-disabled(=["']?true["']?)?\]|\.is-disabled\b/, 'disabled'],
161
+ [
162
+ /:checked\b|\[aria-(selected|checked|current)(=["']?(true|page|step)["']?)?\]|\.is-(selected|checked)\b|\[data-state=["']?(checked|on|active)["']?\]/,
163
+ 'selected',
164
+ ],
165
+ [/:visited\b/, 'visited'],
166
+ ];
167
+ /** States of a utility class's variants: `hover:`, `group-focus-visible:`, `aria-disabled:`, `data-[state=checked]:`. */
168
+ function variantStates(source) {
169
+ const m = /^((?:[\w-]+(?:\[[^\]]*\])?:)*)/.exec(source);
170
+ const out = new Set();
171
+ for (const v of (m?.[1] ?? '').split(':').filter(Boolean)) {
172
+ if (/hover/.test(v))
173
+ out.add('hover');
174
+ else if (/focus/.test(v))
175
+ out.add('focus');
176
+ else if (/(^|-)active$|pressed/.test(v))
177
+ out.add('active');
178
+ else if (/disabled/.test(v))
179
+ out.add('disabled');
180
+ else if (/checked|selected|current/.test(v))
181
+ out.add('selected');
182
+ else if (/visited/.test(v))
183
+ out.add('visited');
184
+ }
185
+ return [...out];
186
+ }
187
+ const compact = (name) => normalizeName(name).replace(/\./g, '');
188
+ /**
189
+ * The context of a value written in code, for `nearestTokens`: states from the selector or a
190
+ * class's variants, components from the selector's classes (the block of a BEM class) and the file
191
+ * name (`Button.module.css`, `ActionList/Item.tsx`).
192
+ */
193
+ export function styleContext(at, knowledge) {
194
+ const v = vocabularyOf(knowledge);
195
+ const states = new Set();
196
+ if (at.selector) {
197
+ const sel = at.selector.replace(/:not\([^)]*\)/g, '');
198
+ for (const [re, state] of SELECTOR_STATES)
199
+ if (re.test(sel))
200
+ states.add(state);
201
+ }
202
+ if (at.source)
203
+ for (const s of variantStates(at.source))
204
+ states.add(s);
205
+ const components = new Set();
206
+ const add = (name, isClass) => {
207
+ const c = compact(name);
208
+ const words = normalizeName(name).split('.');
209
+ if (!c || v.generic.has(c) || /^\d/.test(c))
210
+ return;
211
+ // A class that names a state or a role (`.is-active`, `.text`) is not a component.
212
+ if (words.some((w) => v.states.has(w) || v.rest.has(w)) || words[0] === 'is' || words[0] === 'has')
213
+ return;
214
+ if (isClass && Object.values(v.roles).some((re) => re.test(c)))
215
+ return;
216
+ components.add(c);
217
+ };
218
+ for (const cls of at.selector?.match(/\.-?[_a-zA-Z][\w-]*/g) ?? []) {
219
+ const name = cls.slice(1);
220
+ add(name.split(/__|--/)[0], true);
221
+ if (/__|--/.test(name))
222
+ add(name.replace(/--.*$/, ''), true);
223
+ }
224
+ const parts = at.file.split('/');
225
+ const base = parts.at(-1).replace(/(\.(module|styles?|stories|test|spec))*\.[\w]+$/i, '');
226
+ add(base, false);
227
+ // `Button/index.tsx`, `Button/styles.css`: the folder names the component.
228
+ if (parts.length > 1 && v.generic.has(compact(base)))
229
+ add(parts.at(-2), false);
230
+ const ctx = { property: at.property };
231
+ if (states.size)
232
+ ctx.states = [...states].sort();
233
+ if (components.size)
234
+ ctx.components = [...components];
235
+ return ctx;
236
+ }
237
+ /** How a token's name fits the code's states: 2 names the state, 1 says nothing, 0 names another state. */
238
+ function stateScore(words, states, v) {
239
+ const named = new Set(words.map((w) => v.states.get(w)).filter(Boolean));
240
+ if (states.length)
241
+ return states.some((s) => named.has(s)) ? 2 : named.size || words.some((w) => v.rest.has(w)) ? 0 : 1;
242
+ // In the resting state, a token for hover or disabled is the wrong one even with the same value.
243
+ return named.size ? 0 : 1;
244
+ }
245
+ /** Whether a token's name names one of the components: `button` in `button.primary.bgColor`. */
246
+ function componentScore(words, components) {
247
+ if (!components.length)
248
+ return 0;
249
+ for (let i = 0; i < words.length; i++) {
250
+ let joined = '';
251
+ for (let j = i; j < Math.min(words.length, i + 4); j++) {
252
+ joined += words[j];
253
+ if (components.includes(joined))
254
+ return 1;
255
+ }
256
+ }
257
+ return 0;
258
+ }
259
+ const segments = (id) => id.split('.').length;
141
260
  /**
142
- * Tokens nearest to a value in one context. Deprecated ones go last; among equally close tokens,
143
- * the ones that reference another token (semantic tokens, which follow themes) come before the
144
- * primitives that hold the value.
261
+ * How well a token's name says it is made for the role: 2 when the name starts with it (`bgColor.*`,
262
+ * a general token), 1 when it says so further on (`selection.bgColor`), -1 when it names another
263
+ * role, else 0.
145
264
  */
146
- export function nearestTokens(graph, parsed, input, limit) {
265
+ function roleScore(id, role, v) {
266
+ if (!role)
267
+ return 0;
268
+ const name = normalizeName(id);
269
+ const roles = v.roles;
270
+ if (roles[role].test(name.split('.')[0]))
271
+ return 2;
272
+ if (roles[role].test(name))
273
+ return 1;
274
+ return Object.keys(roles).some((r) => r !== role && roles[r].test(name)) ? -1 : 0;
275
+ }
276
+ /**
277
+ * Tokens nearest to a value in one context. Deprecated ones go last. Among exact matches, the name
278
+ * decides, in this order:
279
+ * - a token made for another role goes last (`borderColor.accent` for `color`);
280
+ * - the code's state: `control.bgColor.hover` in a `:hover` rule, and in a rule without one, not
281
+ * a token for hover or disabled;
282
+ * - the code's component: `button.bgColor.rest` in `.button` or `Button.tsx`;
283
+ * - the property's role, as the first part of the name before deeper in it (`fgColor.accent`
284
+ * before `selection.fgColor`).
285
+ * Among equally close tokens, the ones that reference another token (semantic tokens, which follow
286
+ * themes) come before the primitives that hold the value; then general tokens before component ones
287
+ * (`fgColor.accent` before `button.outline.fgColor.rest`), and the one others build on first.
288
+ * `context` is a CSS property or a whole `StyleContext` (see `styleContext`); a knowledge pack adds
289
+ * to the words names are read by.
290
+ */
291
+ export function nearestTokens(graph, parsed, input, limit, context, knowledge) {
292
+ const v = vocabularyOf(knowledge);
293
+ const ctx = typeof context === 'string' ? { property: context } : (context ?? {});
294
+ const role = ctx.property ? roleOfProperty(ctx.property) : undefined;
295
+ const states = ctx.states ?? [];
296
+ const components = ctx.components ?? [];
147
297
  const types = COMPATIBLE[parsed.type] ?? [parsed.type];
148
298
  const out = [];
149
299
  const depth = new Map();
@@ -159,10 +309,35 @@ export function nearestTokens(graph, parsed, input, limit) {
159
309
  out.push(m);
160
310
  depth.set(m, graph.chain(token.id, input).length);
161
311
  }
312
+ // How a name fits the context, worked out once per exact match: [role ok, state, component, role].
313
+ const fits = new Map();
314
+ const fit = (m) => {
315
+ let f = fits.get(m);
316
+ if (!f) {
317
+ const words = normalizeName(m.token.id).split('.');
318
+ const r = roleScore(m.token.id, role, v);
319
+ f = [r < 0 ? 0 : 1, stateScore(words, states, v), componentScore(words, components), r];
320
+ fits.set(m, f);
321
+ }
322
+ return f;
323
+ };
324
+ const byFit = (a, b) => {
325
+ if (!a.exact || !b.exact)
326
+ return 0;
327
+ const fa = fit(a);
328
+ const fb = fit(b);
329
+ for (let i = 0; i < fa.length; i++)
330
+ if (fa[i] !== fb[i])
331
+ return fb[i] - fa[i];
332
+ return 0;
333
+ };
162
334
  return out
163
335
  .sort((a, b) => Number(a.token.deprecated !== null) - Number(b.token.deprecated !== null) ||
336
+ byFit(a, b) ||
164
337
  a.distance - b.distance ||
165
- depth.get(b) - depth.get(a) ||
338
+ Number(depth.get(b) > 1) - Number(depth.get(a) > 1) ||
339
+ segments(a.token.id) - segments(b.token.id) ||
340
+ depth.get(a) - depth.get(b) ||
166
341
  a.token.id.localeCompare(b.token.id))
167
342
  .slice(0, limit);
168
343
  }
package/dist/code.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"code.js","sourceRoot":"","sources":["../src/code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code.js","sourceRoot":"","sources":["../src/code.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from '@dsgraph/schema';
2
- export { type CodeIndex, type CodeLoc, type Coverage, coverageOf, formatCoverage, type NearestToken, nearestTokens, type StyleLiteral, type TokenUse, VarMatcher, valueDistance, varNames, } from './code.js';
2
+ export { type CodeIndex, type CodeLoc, type Coverage, coverageOf, formatCoverage, type NearestToken, nearestTokens, roleOfProperty, type StyleContext, type StyleLiteral, styleContext, type TokenUse, VarMatcher, valueDistance, varNames, } from './code.js';
3
3
  export { DiagnosticBag } from './diagnostics.js';
4
4
  export { type DiffOptions, diff } from './diff/diff.js';
5
5
  export { detectRenames, pathSimilarity, stableIdOf } from './diff/rename.js';
@@ -10,6 +10,7 @@ export { type ResolvedDoc, type ResolvedToken, resolveDoc } from './dtcg/resolve
10
10
  export { DsGraph, type TokenFilter } from './graph.js';
11
11
  export { type ChangeImpact, type Impact, type ImpactSite, impactOf } from './impact.js';
12
12
  export { parseJsonLenient } from './json.js';
13
+ export { type CompiledVocabulary, DEFAULT_VOCABULARY, type Knowledge, type Role, readKnowledge, type Vocabulary, vocabularyOf, } from './knowledge.js';
13
14
  export { NOT_TOKENS } from './not-tokens.js';
14
15
  export { cssVarToName, globToRegExp, matchGlob, matchPath, normalizeName, tokenId } from './path.js';
15
16
  export { getAt, parsePointer, toPointer } from './pointer.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from '@dsgraph/schema';
2
- export { coverageOf, formatCoverage, nearestTokens, VarMatcher, valueDistance, varNames, } from './code.js';
2
+ export { coverageOf, formatCoverage, nearestTokens, roleOfProperty, styleContext, VarMatcher, valueDistance, varNames, } from './code.js';
3
3
  export { DiagnosticBag } from './diagnostics.js';
4
4
  export { diff } from './diff/diff.js';
5
5
  export { detectRenames, pathSimilarity, stableIdOf } from './diff/rename.js';
@@ -10,6 +10,7 @@ export { resolveDoc } from './dtcg/resolve.js';
10
10
  export { DsGraph } from './graph.js';
11
11
  export { impactOf } from './impact.js';
12
12
  export { parseJsonLenient } from './json.js';
13
+ export { DEFAULT_VOCABULARY, readKnowledge, vocabularyOf, } from './knowledge.js';
13
14
  export { NOT_TOKENS } from './not-tokens.js';
14
15
  export { cssVarToName, globToRegExp, matchGlob, matchPath, normalizeName, tokenId } from './path.js';
15
16
  export { getAt, parsePointer, toPointer } from './pointer.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EAIL,UAAU,EACV,cAAc,EAEd,aAAa,EAGb,UAAU,EACV,aAAa,EACb,QAAQ,GACT,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAoB,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAqB,MAAM,kBAAkB,CAAA;AACpG,OAAO,EAAgB,eAAe,EAAgC,MAAM,mBAAmB,CAAA;AAC/F,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAwC,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACpF,OAAO,EAAE,OAAO,EAAoB,MAAM,YAAY,CAAA;AACtD,OAAO,EAAmD,QAAQ,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACpG,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAuB,MAAM,uBAAuB,CAAA;AAC3E,OAAO,EACL,YAAY,EACZ,eAAe,EAEf,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAGlB,aAAa,GACd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,eAAe,EACf,UAAU,EACV,UAAU,EAGV,IAAI,GAEL,MAAM,WAAW,CAAA;AAClB,OAAO,EAAqB,aAAa,EAAE,SAAS,EAAoB,MAAM,eAAe,CAAA;AAC7F,OAAO,EAAE,QAAQ,EAAe,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtF,OAAO,EACL,YAAY,EAGZ,UAAU,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,QAAQ,EACR,aAAa,EACb,UAAU,EACV,QAAQ,EACR,OAAO,GACR,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAA2C,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC7G,OAAO,EAAuB,cAAc,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACjF,OAAO,EAGL,kBAAkB,EAClB,YAAY,EACZ,WAAW,GAEZ,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EAIL,UAAU,EACV,cAAc,EAEd,aAAa,EACb,cAAc,EAGd,YAAY,EAEZ,UAAU,EACV,aAAa,EACb,QAAQ,GACT,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAoB,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAqB,MAAM,kBAAkB,CAAA;AACpG,OAAO,EAAgB,eAAe,EAAgC,MAAM,mBAAmB,CAAA;AAC/F,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAwC,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACpF,OAAO,EAAE,OAAO,EAAoB,MAAM,YAAY,CAAA;AACtD,OAAO,EAAmD,QAAQ,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAEL,kBAAkB,EAGlB,aAAa,EAEb,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACpG,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAuB,MAAM,uBAAuB,CAAA;AAC3E,OAAO,EACL,YAAY,EACZ,eAAe,EAEf,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAGlB,aAAa,GACd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,eAAe,EACf,UAAU,EACV,UAAU,EAGV,IAAI,GAEL,MAAM,WAAW,CAAA;AAClB,OAAO,EAAqB,aAAa,EAAE,SAAS,EAAoB,MAAM,eAAe,CAAA;AAC7F,OAAO,EAAE,QAAQ,EAAe,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtF,OAAO,EACL,YAAY,EAGZ,UAAU,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,QAAQ,EACR,aAAa,EACb,UAAU,EACV,QAAQ,EACR,OAAO,GACR,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAA2C,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC7G,OAAO,EAAuB,cAAc,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACjF,OAAO,EAGL,kBAAkB,EAClB,YAAY,EACZ,WAAW,GAEZ,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Words dsgraph reads token and file names by. The engine carries a small neutral vocabulary that
3
+ * any front-end developer would write; a knowledge pack (`dsgraph/knowledge@1`) adds to it. The
4
+ * pack is data, not code: the engine works the same without it, with fewer names understood.
5
+ */
6
+ /** What a color is for, by words in a token's name. */
7
+ export type Role = 'text' | 'background' | 'border' | 'shadow';
8
+ export interface Vocabulary {
9
+ /** Words that name a role: `fg` and `text` for text, `bg` and `surface` for a background. */
10
+ roles: Record<Role, string[]>;
11
+ /** Words in a token's name that name a state, and the state: `hover` → `hover`. */
12
+ states: Record<string, string>;
13
+ /** Words that name the resting state: `button.bgColor.rest` is for no state. */
14
+ rest: string[];
15
+ /** File, folder and class names that say nothing about the component: `index`, `styles`, `root`. */
16
+ generic: string[];
17
+ }
18
+ /** A knowledge pack: what is known about how design systems name things, beyond the defaults. */
19
+ export interface Knowledge {
20
+ schema: 'dsgraph/knowledge@1';
21
+ /** The pack's own version. */
22
+ version: string;
23
+ /** Added to the default vocabulary, never replacing it. */
24
+ vocabulary?: {
25
+ roles?: Partial<Record<Role, string[]>>;
26
+ states?: Record<string, string>;
27
+ rest?: string[];
28
+ generic?: string[];
29
+ };
30
+ }
31
+ export declare const DEFAULT_VOCABULARY: Vocabulary;
32
+ /** A vocabulary ready to match normalized names (`bg.color.hover`). */
33
+ export interface CompiledVocabulary {
34
+ roles: Record<Role, RegExp>;
35
+ states: Map<string, string>;
36
+ rest: Set<string>;
37
+ generic: Set<string>;
38
+ }
39
+ /** Checks that a value is a knowledge pack dsgraph can read; throws a readable error if not. */
40
+ export declare function readKnowledge(value: unknown): Knowledge;
41
+ /** The default vocabulary, with a pack's words added. */
42
+ export declare function vocabularyOf(knowledge?: Knowledge): CompiledVocabulary;
43
+ //# sourceMappingURL=knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../src/knowledge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uDAAuD;AACvD,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE9D,MAAM,WAAW,UAAU;IACzB,6FAA6F;IAC7F,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IAC7B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,gFAAgF;IAChF,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,oGAAoG;IACpG,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,iGAAiG;AACjG,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,qBAAqB,CAAA;IAC7B,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QACvC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;QACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KACnB,CAAA;CACF;AAED,eAAO,MAAM,kBAAkB,EAAE,UAqDhC,CAAA;AAED,uEAAuE;AACvE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC3B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACrB;AAoBD,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAWvD;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,kBAAkB,CAkBtE"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Words dsgraph reads token and file names by. The engine carries a small neutral vocabulary that
3
+ * any front-end developer would write; a knowledge pack (`dsgraph/knowledge@1`) adds to it. The
4
+ * pack is data, not code: the engine works the same without it, with fewer names understood.
5
+ */
6
+ export const DEFAULT_VOCABULARY = {
7
+ roles: {
8
+ text: ['fg', 'foreground', 'text', 'ink', 'content', 'on', 'link', 'icon'],
9
+ background: ['bg', 'background', 'surface', 'canvas', 'fill', 'container', 'layer', 'backdrop'],
10
+ border: ['border', 'stroke', 'outline', 'divider', 'separator', 'ring'],
11
+ shadow: ['shadow', 'elevation'],
12
+ },
13
+ states: {
14
+ hover: 'hover',
15
+ focus: 'focus',
16
+ active: 'active',
17
+ disabled: 'disabled',
18
+ selected: 'selected',
19
+ visited: 'visited',
20
+ },
21
+ rest: ['rest'],
22
+ generic: [
23
+ 'index',
24
+ 'style',
25
+ 'styles',
26
+ 'main',
27
+ 'app',
28
+ 'global',
29
+ 'globals',
30
+ 'base',
31
+ 'reset',
32
+ 'util',
33
+ 'utils',
34
+ 'utilities',
35
+ 'common',
36
+ 'shared',
37
+ 'theme',
38
+ 'themes',
39
+ 'tokens',
40
+ 'variables',
41
+ 'vars',
42
+ 'mixins',
43
+ 'snippet',
44
+ 'root',
45
+ 'container',
46
+ 'wrapper',
47
+ 'inner',
48
+ 'src',
49
+ 'lib',
50
+ 'components',
51
+ 'ui',
52
+ 'css',
53
+ 'scss',
54
+ 'sass',
55
+ 'assets',
56
+ 'pages',
57
+ 'views',
58
+ ],
59
+ };
60
+ const ROLES = ['text', 'background', 'border', 'shadow'];
61
+ const literal = (w) => w.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
62
+ const words = (list) => list.map((w) => w.toLowerCase());
63
+ function compile(v) {
64
+ const roles = {};
65
+ for (const r of ROLES)
66
+ roles[r] = new RegExp(`(^|\\.)(${words(v.roles[r]).map(literal).join('|')})(\\.|$)`);
67
+ return {
68
+ roles,
69
+ states: new Map(Object.entries(v.states).map(([w, s]) => [w.toLowerCase(), s])),
70
+ rest: new Set(words(v.rest)),
71
+ generic: new Set(words(v.generic)),
72
+ };
73
+ }
74
+ const BASE = compile(DEFAULT_VOCABULARY);
75
+ const compiled = new WeakMap();
76
+ /** Checks that a value is a knowledge pack dsgraph can read; throws a readable error if not. */
77
+ export function readKnowledge(value) {
78
+ const k = value;
79
+ if (!k || typeof k !== 'object' || k.schema !== 'dsgraph/knowledge@1')
80
+ throw new Error('Not a dsgraph knowledge pack: expected schema "dsgraph/knowledge@1"');
81
+ const v = k.vocabulary ?? {};
82
+ const lists = [...Object.values(v.roles ?? {}), v.rest ?? [], v.generic ?? []];
83
+ if (!lists.every((l) => Array.isArray(l) && l.every((w) => typeof w === 'string')))
84
+ throw new Error('Knowledge pack: vocabulary lists must be arrays of words');
85
+ if (!Object.values(v.states ?? {}).every((s) => typeof s === 'string'))
86
+ throw new Error('Knowledge pack: vocabulary.states maps words to state names');
87
+ return k;
88
+ }
89
+ /** The default vocabulary, with a pack's words added. */
90
+ export function vocabularyOf(knowledge) {
91
+ if (!knowledge?.vocabulary)
92
+ return BASE;
93
+ let c = compiled.get(knowledge);
94
+ if (!c) {
95
+ const add = knowledge.vocabulary;
96
+ const d = DEFAULT_VOCABULARY;
97
+ c = compile({
98
+ roles: Object.fromEntries(ROLES.map((r) => [r, [...d.roles[r], ...(add.roles?.[r] ?? [])]])),
99
+ states: { ...d.states, ...add.states },
100
+ rest: [...d.rest, ...(add.rest ?? [])],
101
+ generic: [...d.generic, ...(add.generic ?? [])],
102
+ });
103
+ compiled.set(knowledge, c);
104
+ }
105
+ return c;
106
+ }
107
+ //# sourceMappingURL=knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../src/knowledge.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ export interface BuildOptions {
14
14
  diagnostics?: DiagnosticBag;
15
15
  meta?: Record<string, unknown>;
16
16
  }
17
- export declare const GENERATOR = "dsgraph@0.6.2";
17
+ export declare const GENERATOR = "dsgraph@0.7.0";
18
18
  /** Builds a canonical snapshot by resolving every permutation of contexts (Resolver 2025.10). */
19
19
  export declare function buildSnapshot(system: TokenSystem, opts?: BuildOptions): Promise<Snapshot>;
20
20
  //# sourceMappingURL=snapshot.d.ts.map
package/dist/snapshot.js CHANGED
@@ -3,7 +3,7 @@ import { DiagnosticBag } from './diagnostics.js';
3
3
  import { matchPath } from './path.js';
4
4
  import { createResolver } from './resolver/resolve.js';
5
5
  import { defaultInput, enumerateInputs, modifiersOf, } from './resolver/system.js';
6
- export const GENERATOR = 'dsgraph@0.6.2';
6
+ export const GENERATOR = 'dsgraph@0.7.0';
7
7
  const inputKey = (input) => canonicalize(input);
8
8
  /** Builds a canonical snapshot by resolving every permutation of contexts (Resolver 2025.10). */
9
9
  export async function buildSnapshot(system, opts = {}) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dsgraph/core",
3
- "version": "0.6.2",
3
+ "version": "0.7.0",
4
4
  "description": "Design-system graph core: DTCG 2025.10 + Resolver parsing, canonical values, snapshots, diff and semver. Isomorphic (browser + Node).",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -27,7 +27,7 @@
27
27
  "semver"
28
28
  ],
29
29
  "dependencies": {
30
- "@dsgraph/schema": "0.6.2",
30
+ "@dsgraph/schema": "0.7.0",
31
31
  "culori": "4.0.2",
32
32
  "json5": "2.2.3"
33
33
  },