@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.
- package/dist/cli/reverse.d.ts +3 -0
- package/dist/cli/reverse.d.ts.map +1 -0
- package/dist/cli/reverse.js +17 -0
- package/dist/cli/reverse.js.map +1 -0
- package/dist/cli/run.js +6 -1
- package/dist/cli/run.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/orchestrate.d.ts +10 -1
- package/dist/orchestrate.d.ts.map +1 -1
- package/dist/orchestrate.js +60 -2
- package/dist/orchestrate.js.map +1 -1
- package/dist/reference.d.ts +19 -0
- package/dist/reference.d.ts.map +1 -0
- package/dist/reference.js +43 -0
- package/dist/reference.js.map +1 -0
- package/dist/reverse.d.ts +14 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +68 -0
- package/dist/reverse.js.map +1 -0
- package/dist/specTokens.d.ts +14 -0
- package/dist/specTokens.d.ts.map +1 -0
- package/dist/specTokens.js +50 -0
- package/dist/specTokens.js.map +1 -0
- package/package.json +14 -13
|
@@ -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.
|
package/dist/cli/run.js.map
CHANGED
|
@@ -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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/orchestrate.d.ts
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"orchestrate.d.ts","sourceRoot":"","sources":["../src/orchestrate.ts"],"names":[],"mappings":"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"}
|
package/dist/orchestrate.js
CHANGED
|
@@ -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
|
|
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).
|
package/dist/orchestrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../src/orchestrate.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/reverse.js
ADDED
|
@@ -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
|
+
"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.
|
|
22
|
-
"@design-parity/resolver": "^0.1.
|
|
23
|
-
"@design-parity/policy": "^0.1.
|
|
24
|
-
"@design-parity/diff": "^0.1.
|
|
25
|
-
"@design-parity/report-html": "^0.1.
|
|
26
|
-
"@design-parity/checks": "^0.1.
|
|
27
|
-
"@design-parity/candidate": "^0.1.
|
|
28
|
-
"@design-parity/adapter-figma": "^0.1.
|
|
29
|
-
"@design-parity/adapter-stitch": "^0.1.
|
|
30
|
-
"@design-parity/adapter-claude-design": "^0.1.
|
|
31
|
-
"@design-parity/adapter-bundle": "^0.1.
|
|
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",
|