@design-parity/action 0.1.3 → 0.1.5

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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=reverse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse.d.ts","sourceRoot":"","sources":["../../src/cli/reverse.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * `design-parity reverse` — the design→code lookup entry (issue #78 Phase 4).
4
+ *
5
+ * design-parity reverse figma:AbCdEf/1:42 # what implements this node?
6
+ * design-parity reverse --repo . # dump the whole ref → code map
7
+ *
8
+ * A thin wrapper over {@link runReverse}: it owns `process` (argv, cwd, the
9
+ * output streams, and the exit code) so the lookup logic stays unit-testable.
10
+ */
11
+ import { argv, cwd, exit, stderr, stdout } from "node:process";
12
+ import { runReverse } from "../reverse.js";
13
+ exit(await runReverse(argv.slice(2), {
14
+ out: (line) => stdout.write(line + "\n"),
15
+ err: (line) => stderr.write(line + "\n"),
16
+ }, cwd()));
17
+ //# sourceMappingURL=reverse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse.js","sourceRoot":"","sources":["../../src/cli/reverse.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AACH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,IAAI,CACF,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAC9B,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IACxC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;CACzC,EAAE,GAAG,EAAE,CAAC,CACV,CAAC"}
package/dist/cli/run.js CHANGED
@@ -24,6 +24,7 @@ import { buildCandidateProvider } from "../candidate.js";
24
24
  import { resolveRunConfig } from "../config.js";
25
25
  import { createAdapterRegistry } from "../registry.js";
26
26
  import { orchestrate } from "../orchestrate.js";
27
+ import { loadSpecTokens } from "../specTokens.js";
27
28
  import { pushBack } from "../pushback.js";
28
29
  import { renderReport } from "../report.js";
29
30
  function parseArgs(args) {
@@ -72,6 +73,9 @@ async function main() {
72
73
  }
73
74
  const { designMap, direction, cmpCapable, warnings } = await resolveRunConfig(args.repoRoot);
74
75
  const resolved = resolveCorrespondences(args.components, { designMap });
76
+ // Spec tokens a component declares via a committed DTCG file (design-map
77
+ // `tokensFile`, issue #89), loaded once up front so a bad file warns (#1).
78
+ const spec = await loadSpecTokens(designMap, args.repoRoot);
75
79
  const candidateOpts = {
76
80
  repoRoot: args.repoRoot,
77
81
  bundlePaths: args.bundlePaths,
@@ -89,9 +93,10 @@ async function main() {
89
93
  candidate: provider ?? (() => undefined),
90
94
  direction,
91
95
  ...(designMap?.tokens ? { tokenAlias: designMap.tokens } : {}),
96
+ ...(spec.byCode.size > 0 ? { referenceTokens: spec.byCode } : {}),
92
97
  ...(args.outDir ? { outDir: args.outDir } : {}),
93
98
  });
94
- report.warnings.unshift(...warnings, ...resolved.warnings, ...candidateWarnings, ...resolved.unresolved.map((u) => `unresolved (no source matched): ${u}`));
99
+ report.warnings.unshift(...warnings, ...resolved.warnings, ...candidateWarnings, ...spec.warnings, ...resolved.unresolved.map((u) => `unresolved (no source matched): ${u}`));
95
100
  // Promote CMP in the comment for Android-only repos (Principle 6). Read from
96
101
  // the committed config (set false by bootstrap on a non-CMP repo); advisory
97
102
  // only, so it never touches the verdict or exit code.
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -14,9 +14,13 @@ export { buildCandidateProvider, loadPrecomputed, precomputedSource, providerFro
14
14
  export type { BuildProviderOptions } from "./candidate.js";
15
15
  export { resolveRunConfig } from "./config.js";
16
16
  export type { RunConfig } from "./config.js";
17
+ export { loadSpecTokens } from "./specTokens.js";
18
+ export type { SpecTokens } from "./specTokens.js";
17
19
  export { renderReport, renderBootstrapNotice, REPORT_MARKER, CMP_PROMOTION, } from "./report.js";
18
20
  export { selectMode } from "./mode.js";
19
21
  export type { ActionMode, ModeInputs } from "./mode.js";
22
+ export { runReverse } from "./reverse.js";
23
+ export type { ReverseIO } from "./reverse.js";
20
24
  export { pushBack, decidePushBack } from "./pushback.js";
21
25
  export type { PushBackGate, PushBackOptions, PushBackReport, PushBackComponent, PushBackSkip, PushBackError, PushedImage, } from "./pushback.js";
22
26
  export { baselineSummary, renderBaselineIndex, writeBaselineArtifacts, } from "./baseline.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EACV,mBAAmB,EACnB,YAAY,EACZ,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EACL,yBAAyB,EACzB,UAAU,GACX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,aAAa,GACd,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,YAAY,EACV,mBAAmB,EACnB,YAAY,EACZ,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EACL,yBAAyB,EACzB,UAAU,GACX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,aAAa,GACd,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -10,8 +10,10 @@ export { createAdapterRegistry } from "./registry.js";
10
10
  export { orchestrate } from "./orchestrate.js";
11
11
  export { buildCandidateProvider, loadPrecomputed, precomputedSource, providerFromSource, resolveBundlePaths, } from "./candidate.js";
12
12
  export { resolveRunConfig } from "./config.js";
13
+ export { loadSpecTokens } from "./specTokens.js";
13
14
  export { renderReport, renderBootstrapNotice, REPORT_MARKER, CMP_PROMOTION, } from "./report.js";
14
15
  export { selectMode } from "./mode.js";
16
+ export { runReverse } from "./reverse.js";
15
17
  export { pushBack, decidePushBack } from "./pushback.js";
16
18
  export { baselineSummary, renderBaselineIndex, writeBaselineArtifacts, } from "./baseline.js";
17
19
  // GitHub surface
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAS/C,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAWzD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AAQvB,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,yBAAyB,EACzB,UAAU,GACX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAS/C,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAWzD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AAQvB,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,yBAAyB,EACzB,UAAU,GACX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC"}
@@ -8,7 +8,7 @@
8
8
  * error is captured and surfaced, never thrown, and never escalates the overall
9
9
  * status to `fail` — only real verdicts do.
10
10
  */
11
- import type { AdapterContext, CandidateRender, Correspondence, DesignReference, DesignSource, Finding, ResolvedDirection, TokenAliasMap, Verdict, VerdictStatus } from "@design-parity/core";
11
+ import type { AdapterContext, CandidateRender, Correspondence, DesignReference, DesignSource, DesignTokens, Finding, ResolvedDirection, TokenAliasMap, Verdict, VerdictStatus } from "@design-parity/core";
12
12
  import { type DiffConfig, type Triptych } from "@design-parity/diff";
13
13
  import type { AdapterRegistry } from "./registry.js";
14
14
  /** Supplies the candidate render for a component (compose-preview, or precomputed). */
@@ -40,6 +40,15 @@ export interface OrchestrateOptions {
40
40
  * vocabularies (issue #78).
41
41
  */
42
42
  tokenAlias?: TokenAliasMap;
43
+ /**
44
+ * Per-component spec tokens declared in committed config (a `design-map`
45
+ * `tokensFile` DTCG document, issue #89), keyed by code handle. When present
46
+ * for a component, they are merged into the resolved
47
+ * {@link DesignReference.tokens} (declared values win), so a source that
48
+ * doesn't expose tokens still has a spec to diff against. Matched via the
49
+ * Material-role heuristic (issue #87), same as any reference tokens.
50
+ */
51
+ referenceTokens?: ReadonlyMap<string, DesignTokens>;
43
52
  /**
44
53
  * When `outDir` is set, a `README.md` + `index.html` landing page is written at
45
54
  * its root so the published branch has an entry point. These describe where the
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrate.d.ts","sourceRoot":"","sources":["../src/orchestrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,EACf,YAAY,EACZ,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,OAAO,EACP,aAAa,EACd,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAS7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,uFAAuF;AACvF,MAAM,MAAM,iBAAiB,GAAG,CAC9B,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,GAAG,eAAe,GAAG,SAAS,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,QAAQ,EAAE,eAAe,CAAC;IAC1B,sFAAsF;IACtF,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,SAAS,EAAE,iBAAiB,CAAC;IAC7B;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,CACb,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,cAAc,KAChB,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS,CAAC;IAC5D,wEAAwE;IACxE,SAAS,EAAE,iBAAiB,CAAC;IAC7B,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC;;;;OAIG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B;;;;OAIG;IACH,KAAK,CAAC,EAAE;QACN,kFAAkF;QAClF,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,kFAAkF;QAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,oEAAoE;QACpE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,uEAAuE;QACvE,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AA4BD,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,MAAM,EAAE,aAAa,CAAC;IACtB,+EAA+E;IAC/E,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAOD,iEAAiE;AACjE,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAkHvB"}
1
+ {"version":3,"file":"orchestrate.d.ts","sourceRoot":"","sources":["../src/orchestrate.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,54 @@
1
1
  import { readFileSync } from "node:fs";
2
2
  import { mkdir, writeFile } from "node:fs/promises";
3
3
  import { join, resolve } from "node:path";
4
- import { diff, } from "@design-parity/diff";
4
+ import { diff, renderSummary, } from "@design-parity/diff";
5
5
  import { directionPolicy } from "@design-parity/policy";
6
6
  import { renderHtmlReport, renderIndex, } from "@design-parity/report-html";
7
+ import { resolveReference } from "./reference.js";
7
8
  /** Wrap precomputed native findings as a {@link ChecksProvider} for the diff. */
8
9
  function nativeChecksProvider(findings) {
9
10
  return { run: () => findings };
10
11
  }
12
+ /** Merge declared spec tokens over a reference's, per group; declared values win. */
13
+ function mergeReferenceTokens(base, declared) {
14
+ const out = {};
15
+ const spacing = { ...base?.spacing, ...declared.spacing };
16
+ if (Object.keys(spacing).length > 0)
17
+ out.spacing = spacing;
18
+ const radius = { ...base?.radius, ...declared.radius };
19
+ if (Object.keys(radius).length > 0)
20
+ out.radius = radius;
21
+ const colors = { ...base?.colors, ...declared.colors };
22
+ if (Object.keys(colors).length > 0)
23
+ out.colors = colors;
24
+ const typography = { ...base?.typography, ...declared.typography };
25
+ if (Object.keys(typography).length > 0)
26
+ out.typography = typography;
27
+ return out;
28
+ }
29
+ /**
30
+ * Drop design-system findings (`detail.scope === "design-system"`) whose
31
+ * signature was already reported this run, keeping all other findings and order.
32
+ * Mutates `seen` with each newly kept signature.
33
+ */
34
+ function dedupeDesignSystem(findings, seen) {
35
+ return findings.filter((f) => {
36
+ if (f.detail?.scope !== "design-system")
37
+ return true;
38
+ if (seen.has(f.message))
39
+ return false;
40
+ seen.add(f.message);
41
+ return true;
42
+ });
43
+ }
44
+ /** The verdict status implied by a finding set (mirrors the diff engine's rule). */
45
+ function verdictStatus(findings) {
46
+ if (findings.some((f) => f.severity === "error"))
47
+ return "fail";
48
+ if (findings.some((f) => f.severity === "warn"))
49
+ return "warn";
50
+ return "pass";
51
+ }
11
52
  /** A filesystem-safe slug for a component id (`ui/Tile.kt#LightOn_Dark` → `ui-Tile-kt-LightOn_Dark`). */
12
53
  function sanitizeId(code) {
13
54
  return code.replace(/[^a-z0-9_]+/gi, "-").replace(/^-+|-+$/g, "");
@@ -37,6 +78,8 @@ export async function orchestrate(options) {
37
78
  const results = [];
38
79
  const warnings = [];
39
80
  let status = "pass";
81
+ // Signatures of design-system findings already reported this run (see below).
82
+ const seenDesignSystem = new Set();
40
83
  for (const corr of options.correspondences) {
41
84
  const result = {
42
85
  code: corr.code,
@@ -52,7 +95,13 @@ export async function orchestrate(options) {
52
95
  results.push(result);
53
96
  continue;
54
97
  }
55
- const reference = await adapter.resolve(corr.code, corr.ref, ctx);
98
+ const reference = await resolveReference(adapter, corr, ctx);
99
+ // A component can declare its spec tokens via a committed DTCG file
100
+ // (design-map `tokensFile`, issue #89); merge them over whatever the
101
+ // adapter resolved so a token-less source still has a spec to diff.
102
+ const declared = options.referenceTokens?.get(corr.code);
103
+ if (declared)
104
+ reference.tokens = mergeReferenceTokens(reference.tokens, declared);
56
105
  result.reference = reference;
57
106
  const candidate = await options.candidate(corr.code, ctx);
58
107
  if (!candidate) {
@@ -80,8 +129,17 @@ export async function orchestrate(options) {
80
129
  ...(native ? { checks: nativeChecksProvider(native) } : {}),
81
130
  };
82
131
  const { verdict, summary, triptychs } = await diff(reference, candidate, diffOptions);
132
+ // The design-system audit runs per component but its palette is shared, so
133
+ // drop drift already reported on an earlier component — each design-system
134
+ // finding surfaces once per run, not once per screen (#78 Phase 3).
135
+ const deduped = dedupeDesignSystem(verdict.findings, seenDesignSystem);
83
136
  result.verdict = verdict;
84
137
  result.summary = summary;
138
+ if (deduped.length !== verdict.findings.length) {
139
+ verdict.findings = deduped;
140
+ verdict.status = verdictStatus(deduped);
141
+ result.summary = renderSummary(verdict);
142
+ }
85
143
  result.triptychs = triptychs;
86
144
  // Emit the self-contained HTML comparison page alongside the triptychs,
87
145
  // inlining each pair's diff heatmap when the engine produced one (#50).
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../src/orchestrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../src/orchestrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Resolve a {@link Correspondence} to a single {@link DesignReference},
3
+ * merging a multi-node manifest binding (issue: multi-node references).
4
+ *
5
+ * A `design-map.json` entry can bind one code component to several design nodes
6
+ * — a screen's states, themes, or breakpoints living in separate frames. The
7
+ * adapters stay single-node: this resolves each variant-tagged `ref` on its own,
8
+ * re-tags the produced image(s) onto the variant slot the manifest declared, and
9
+ * concatenates them into one reference. Structure/tokens come from the primary
10
+ * (first) node. The variant tags then key each frame against its candidate
11
+ * counterpart in the diff's `pairImages`, so the diff engine is unchanged.
12
+ */
13
+ import type { AdapterContext, Correspondence, DesignReference, ReferenceAdapter } from "@design-parity/core";
14
+ /**
15
+ * Resolve `corr` to one reference. A single-ref link resolves directly; a
16
+ * multi-ref link resolves each node and merges the results.
17
+ */
18
+ export declare function resolveReference(adapter: ReferenceAdapter, corr: Correspondence, ctx: AdapterContext): Promise<DesignReference>;
19
+ //# sourceMappingURL=reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../src/reference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,eAAe,EAEf,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAW7B;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,cAAc,EACpB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,eAAe,CAAC,CAyB1B"}
@@ -0,0 +1,43 @@
1
+ /** Re-tag an image with the variant slot the manifest assigned, if any. */
2
+ function applyVariant(image, variant) {
3
+ const out = { ...image };
4
+ if (variant.state !== undefined)
5
+ out.state = variant.state;
6
+ if (variant.theme !== undefined)
7
+ out.theme = variant.theme;
8
+ if (variant.size !== undefined)
9
+ out.size = variant.size;
10
+ return out;
11
+ }
12
+ /**
13
+ * Resolve `corr` to one reference. A single-ref link resolves directly; a
14
+ * multi-ref link resolves each node and merges the results.
15
+ */
16
+ export async function resolveReference(adapter, corr, ctx) {
17
+ if (!corr.refs)
18
+ return adapter.resolve(corr.code, corr.ref, ctx);
19
+ const referenceImages = [];
20
+ let primary;
21
+ for (const variant of corr.refs) {
22
+ const reference = await adapter.resolve(corr.code, variant.ref, ctx);
23
+ primary ??= reference;
24
+ for (const image of reference.referenceImages) {
25
+ referenceImages.push(applyVariant(image, variant));
26
+ }
27
+ }
28
+ // `corr.refs` is non-empty (the resolver only sets it from a non-empty list),
29
+ // so `primary` is always assigned.
30
+ const base = primary;
31
+ const merged = {
32
+ componentId: base.componentId,
33
+ source: base.source,
34
+ linkMethod: base.linkMethod,
35
+ referenceImages,
36
+ };
37
+ if (base.ref !== undefined)
38
+ merged.ref = base.ref;
39
+ if (base.tokens)
40
+ merged.tokens = base.tokens;
41
+ return merged;
42
+ }
43
+ //# sourceMappingURL=reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.js","sourceRoot":"","sources":["../src/reference.ts"],"names":[],"mappings":"AAqBA,2EAA2E;AAC3E,SAAS,YAAY,CAAC,KAAY,EAAE,OAAmB;IACrD,MAAM,GAAG,GAAU,EAAE,GAAG,KAAK,EAAE,CAAC;IAChC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC3D,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC3D,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACxD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAyB,EACzB,IAAoB,EACpB,GAAmB;IAEnB,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEjE,MAAM,eAAe,GAAY,EAAE,CAAC;IACpC,IAAI,OAAoC,CAAC;IACzC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACrE,OAAO,KAAK,SAAS,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;YAC9C,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,mCAAmC;IACnC,MAAM,IAAI,GAAG,OAA0B,CAAC;IACxC,MAAM,MAAM,GAAoB;QAC9B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,eAAe;KAChB,CAAC;IACF,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IAClD,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** Output sink, injected so the CLI entry owns `process.stdout`/`stderr`. */
2
+ export interface ReverseIO {
3
+ out: (line: string) => void;
4
+ err: (line: string) => void;
5
+ }
6
+ /**
7
+ * Run the reverse lookup. With a `ref` arg it prints the code handle(s) that
8
+ * implement it; with none it dumps the whole `ref → code` map, sorted.
9
+ *
10
+ * Returns the process exit code: 0 found (or full dump), 1 the ref maps to
11
+ * nothing, 2 no readable `design-map.json`.
12
+ */
13
+ export declare function runReverse(args: string[], io: ReverseIO, cwd: string): Promise<number>;
14
+ //# sourceMappingURL=reverse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse.d.ts","sourceRoot":"","sources":["../src/reverse.ts"],"names":[],"mappings":"AAcA,6EAA6E;AAC7E,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAyBD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,EAAE,SAAS,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA+BjB"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * `design-parity reverse` core — the design→code lookup (issue #78 Phase 4).
3
+ *
4
+ * Inverts the committed `design-map.json` (every node of a multi-node binding
5
+ * included) so a design ref can answer "what code implements me?" — the direction
6
+ * a source without Code Connect (Stitch, Claude Design, bundle) otherwise lacks.
7
+ * Pure and offline apart from reading the manifest; the CLI entry
8
+ * (`cli/reverse.ts`) wires this to `process` so the logic stays testable.
9
+ */
10
+ import { join, resolve as resolvePath } from "node:path";
11
+ import { loadDesignMap } from "@design-parity/core";
12
+ import { buildReverseIndex, codeForRef } from "@design-parity/resolver";
13
+ function parseArgs(args, cwd) {
14
+ const out = { repoRoot: cwd };
15
+ for (let i = 0; i < args.length; i++) {
16
+ const a = args[i];
17
+ const next = () => args[(i += 1)];
18
+ switch (a) {
19
+ case "reverse":
20
+ break;
21
+ case "--repo":
22
+ out.repoRoot = resolvePath(next() ?? ".");
23
+ break;
24
+ default:
25
+ if (a && !a.startsWith("--") && out.ref === undefined)
26
+ out.ref = a;
27
+ }
28
+ }
29
+ return out;
30
+ }
31
+ /**
32
+ * Run the reverse lookup. With a `ref` arg it prints the code handle(s) that
33
+ * implement it; with none it dumps the whole `ref → code` map, sorted.
34
+ *
35
+ * Returns the process exit code: 0 found (or full dump), 1 the ref maps to
36
+ * nothing, 2 no readable `design-map.json`.
37
+ */
38
+ export async function runReverse(args, io, cwd) {
39
+ const { repoRoot, ref } = parseArgs(args, cwd);
40
+ let designMap;
41
+ try {
42
+ designMap = await loadDesignMap(join(repoRoot, "design-map.json"));
43
+ }
44
+ catch {
45
+ io.err(`design-parity reverse: no readable design-map.json in ${repoRoot}`);
46
+ return 2;
47
+ }
48
+ const index = buildReverseIndex(designMap);
49
+ if (ref) {
50
+ const codes = codeForRef(index, ref);
51
+ if (codes.length === 0) {
52
+ io.err(`no code maps to '${ref}'`);
53
+ return 1;
54
+ }
55
+ io.out(codes.join("\n"));
56
+ return 0;
57
+ }
58
+ // No ref → dump the whole map, sorted by ref for a stable, greppable listing.
59
+ const refs = [...index.keys()].sort();
60
+ if (refs.length === 0) {
61
+ io.out("(no refs in design-map.json)");
62
+ return 0;
63
+ }
64
+ for (const r of refs)
65
+ io.out(`${r}\t${codeForRef(index, r).join(", ")}`);
66
+ return 0;
67
+ }
68
+ //# sourceMappingURL=reverse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse.js","sourceRoot":"","sources":["../src/reverse.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAaxE,SAAS,SAAS,CAAC,IAAc,EAAE,GAAW;IAC5C,MAAM,GAAG,GAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,QAAQ,CAAC,EAAE,CAAC;YACV,KAAK,SAAS;gBACZ,MAAM;YACR,KAAK,QAAQ;gBACX,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC;gBAC1C,MAAM;YACR;gBACE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS;oBAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAc,EACd,EAAa,EACb,GAAW;IAEX,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAE/C,IAAI,SAAS,CAAC;IACd,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,EAAE,CAAC,GAAG,CAAC,yDAAyD,QAAQ,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAE3C,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,EAAE,CAAC,GAAG,CAAC,oBAAoB,GAAG,GAAG,CAAC,CAAC;YACnC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,8EAA8E;IAC9E,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,EAAE,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type DesignMap, type DesignTokens } from "@design-parity/core";
2
+ export interface SpecTokens {
3
+ /** Code handle → the DTCG-declared spec tokens for that component. */
4
+ byCode: Map<string, DesignTokens>;
5
+ /** Unreadable/invalid token files and per-token DTCG read warnings. */
6
+ warnings: string[];
7
+ }
8
+ /**
9
+ * Resolve every `design-map` entry's `tokensFile` into a code → {@link DesignTokens}
10
+ * map. A missing `designMap`, or no entry declaring a `tokensFile`, yields an
11
+ * empty map and no warnings.
12
+ */
13
+ export declare function loadSpecTokens(designMap: DesignMap | undefined, repoRoot: string): Promise<SpecTokens>;
14
+ //# sourceMappingURL=specTokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specTokens.d.ts","sourceRoot":"","sources":["../src/specTokens.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClC,uEAAuE;IACvE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAyBrB"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Load per-component spec tokens declared via a `design-map.json` entry's
3
+ * `tokensFile` — a committed W3C DTCG document (issue #89). This is how a
4
+ * component whose source doesn't expose tokens (bundle, claude-design), or whose
5
+ * author wants to pin a spec, declares the tokens its render is checked against.
6
+ *
7
+ * Eager and deterministic (Principle 1): every referenced file is read once up
8
+ * front, de-duped by path, so an unreadable or invalid token file surfaces as a
9
+ * run warning instead of silently dropping a component's spec. The loaded tokens
10
+ * are matched against the candidate by the Material-role heuristic (issue #87)
11
+ * and the alias map (issue #78), same as any reference tokens.
12
+ */
13
+ import { join } from "node:path";
14
+ import { loadDtcgTokens, } from "@design-parity/core";
15
+ /**
16
+ * Resolve every `design-map` entry's `tokensFile` into a code → {@link DesignTokens}
17
+ * map. A missing `designMap`, or no entry declaring a `tokensFile`, yields an
18
+ * empty map and no warnings.
19
+ */
20
+ export async function loadSpecTokens(designMap, repoRoot) {
21
+ const byCode = new Map();
22
+ const warnings = [];
23
+ if (!designMap)
24
+ return { byCode, warnings };
25
+ // De-dupe by path so a token file shared across components is read once;
26
+ // `null` records a failed read so we don't retry (or re-warn) it.
27
+ const cache = new Map();
28
+ for (const entry of designMap.components) {
29
+ if (entry.tokensFile === undefined)
30
+ continue;
31
+ let tokens = cache.get(entry.tokensFile);
32
+ if (tokens === undefined) {
33
+ try {
34
+ const result = await loadDtcgTokens(join(repoRoot, entry.tokensFile));
35
+ tokens = result.tokens;
36
+ for (const w of result.warnings)
37
+ warnings.push(`${entry.tokensFile}: ${w}`);
38
+ }
39
+ catch (err) {
40
+ tokens = null;
41
+ warnings.push(err.message);
42
+ }
43
+ cache.set(entry.tokensFile, tokens);
44
+ }
45
+ if (tokens)
46
+ byCode.set(entry.code, tokens);
47
+ }
48
+ return { byCode, warnings };
49
+ }
50
+ //# sourceMappingURL=specTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specTokens.js","sourceRoot":"","sources":["../src/specTokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,cAAc,GAGf,MAAM,qBAAqB,CAAC;AAS7B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAgC,EAChC,QAAgB;IAEhB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAE5C,yEAAyE;IACzE,kEAAkE;IAClE,MAAM,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAC;IACrD,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;YAAE,SAAS;QAC7C,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;gBACtE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBACvB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ;oBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,IAAI,CAAC;gBACd,QAAQ,CAAC,IAAI,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design-parity/action",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Integration layer: wires resolver, adapters, candidate, checks, diff, and policy into a parity run, and surfaces the verdict (CLI now; GitHub Action surface to follow).",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -8,7 +8,8 @@
8
8
  "types": "./dist/index.d.ts",
9
9
  "exports": {
10
10
  ".": "./dist/index.js",
11
- "./run": "./dist/cli/run.js"
11
+ "./run": "./dist/cli/run.js",
12
+ "./reverse": "./dist/cli/reverse.js"
12
13
  },
13
14
  "files": [
14
15
  "dist"
@@ -18,17 +19,17 @@
18
19
  "test": "vitest run"
19
20
  },
20
21
  "dependencies": {
21
- "@design-parity/core": "^0.1.3",
22
- "@design-parity/resolver": "^0.1.3",
23
- "@design-parity/policy": "^0.1.3",
24
- "@design-parity/diff": "^0.1.3",
25
- "@design-parity/report-html": "^0.1.3",
26
- "@design-parity/checks": "^0.1.3",
27
- "@design-parity/candidate": "^0.1.3",
28
- "@design-parity/adapter-figma": "^0.1.3",
29
- "@design-parity/adapter-stitch": "^0.1.3",
30
- "@design-parity/adapter-claude-design": "^0.1.3",
31
- "@design-parity/adapter-bundle": "^0.1.3"
22
+ "@design-parity/core": "^0.1.5",
23
+ "@design-parity/resolver": "^0.1.5",
24
+ "@design-parity/policy": "^0.1.5",
25
+ "@design-parity/diff": "^0.1.5",
26
+ "@design-parity/report-html": "^0.1.5",
27
+ "@design-parity/checks": "^0.1.5",
28
+ "@design-parity/candidate": "^0.1.5",
29
+ "@design-parity/adapter-figma": "^0.1.5",
30
+ "@design-parity/adapter-stitch": "^0.1.5",
31
+ "@design-parity/adapter-claude-design": "^0.1.5",
32
+ "@design-parity/adapter-bundle": "^0.1.5"
32
33
  },
33
34
  "repository": {
34
35
  "type": "git",