@design-parity/action 0.1.3 → 0.1.4
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/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/orchestrate.d.ts.map +1 -1
- package/dist/orchestrate.js +37 -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/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/index.d.ts
CHANGED
|
@@ -17,6 +17,8 @@ export type { RunConfig } from "./config.js";
|
|
|
17
17
|
export { renderReport, renderBootstrapNotice, REPORT_MARKER, CMP_PROMOTION, } from "./report.js";
|
|
18
18
|
export { selectMode } from "./mode.js";
|
|
19
19
|
export type { ActionMode, ModeInputs } from "./mode.js";
|
|
20
|
+
export { runReverse } from "./reverse.js";
|
|
21
|
+
export type { ReverseIO } from "./reverse.js";
|
|
20
22
|
export { pushBack, decidePushBack } from "./pushback.js";
|
|
21
23
|
export type { PushBackGate, PushBackOptions, PushBackReport, PushBackComponent, PushBackSkip, PushBackError, PushedImage, } from "./pushback.js";
|
|
22
24
|
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,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
|
@@ -12,6 +12,7 @@ export { buildCandidateProvider, loadPrecomputed, precomputedSource, providerFro
|
|
|
12
12
|
export { resolveRunConfig } from "./config.js";
|
|
13
13
|
export { renderReport, renderBootstrapNotice, REPORT_MARKER, CMP_PROMOTION, } from "./report.js";
|
|
14
14
|
export { selectMode } from "./mode.js";
|
|
15
|
+
export { runReverse } from "./reverse.js";
|
|
15
16
|
export { pushBack, decidePushBack } from "./pushback.js";
|
|
16
17
|
export { baselineSummary, renderBaselineIndex, writeBaselineArtifacts, } from "./baseline.js";
|
|
17
18
|
// 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,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"}
|
|
@@ -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":"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,EAIL,KAAK,UAAU,EACf,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAS7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,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;AAiDD,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,CA6HvB"}
|
package/dist/orchestrate.js
CHANGED
|
@@ -1,13 +1,37 @@
|
|
|
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
|
+
/**
|
|
13
|
+
* Drop design-system findings (`detail.scope === "design-system"`) whose
|
|
14
|
+
* signature was already reported this run, keeping all other findings and order.
|
|
15
|
+
* Mutates `seen` with each newly kept signature.
|
|
16
|
+
*/
|
|
17
|
+
function dedupeDesignSystem(findings, seen) {
|
|
18
|
+
return findings.filter((f) => {
|
|
19
|
+
if (f.detail?.scope !== "design-system")
|
|
20
|
+
return true;
|
|
21
|
+
if (seen.has(f.message))
|
|
22
|
+
return false;
|
|
23
|
+
seen.add(f.message);
|
|
24
|
+
return true;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/** The verdict status implied by a finding set (mirrors the diff engine's rule). */
|
|
28
|
+
function verdictStatus(findings) {
|
|
29
|
+
if (findings.some((f) => f.severity === "error"))
|
|
30
|
+
return "fail";
|
|
31
|
+
if (findings.some((f) => f.severity === "warn"))
|
|
32
|
+
return "warn";
|
|
33
|
+
return "pass";
|
|
34
|
+
}
|
|
11
35
|
/** A filesystem-safe slug for a component id (`ui/Tile.kt#LightOn_Dark` → `ui-Tile-kt-LightOn_Dark`). */
|
|
12
36
|
function sanitizeId(code) {
|
|
13
37
|
return code.replace(/[^a-z0-9_]+/gi, "-").replace(/^-+|-+$/g, "");
|
|
@@ -37,6 +61,8 @@ export async function orchestrate(options) {
|
|
|
37
61
|
const results = [];
|
|
38
62
|
const warnings = [];
|
|
39
63
|
let status = "pass";
|
|
64
|
+
// Signatures of design-system findings already reported this run (see below).
|
|
65
|
+
const seenDesignSystem = new Set();
|
|
40
66
|
for (const corr of options.correspondences) {
|
|
41
67
|
const result = {
|
|
42
68
|
code: corr.code,
|
|
@@ -52,7 +78,7 @@ export async function orchestrate(options) {
|
|
|
52
78
|
results.push(result);
|
|
53
79
|
continue;
|
|
54
80
|
}
|
|
55
|
-
const reference = await adapter
|
|
81
|
+
const reference = await resolveReference(adapter, corr, ctx);
|
|
56
82
|
result.reference = reference;
|
|
57
83
|
const candidate = await options.candidate(corr.code, ctx);
|
|
58
84
|
if (!candidate) {
|
|
@@ -80,8 +106,17 @@ export async function orchestrate(options) {
|
|
|
80
106
|
...(native ? { checks: nativeChecksProvider(native) } : {}),
|
|
81
107
|
};
|
|
82
108
|
const { verdict, summary, triptychs } = await diff(reference, candidate, diffOptions);
|
|
109
|
+
// The design-system audit runs per component but its palette is shared, so
|
|
110
|
+
// drop drift already reported on an earlier component — each design-system
|
|
111
|
+
// finding surfaces once per run, not once per screen (#78 Phase 3).
|
|
112
|
+
const deduped = dedupeDesignSystem(verdict.findings, seenDesignSystem);
|
|
83
113
|
result.verdict = verdict;
|
|
84
114
|
result.summary = summary;
|
|
115
|
+
if (deduped.length !== verdict.findings.length) {
|
|
116
|
+
verdict.findings = deduped;
|
|
117
|
+
verdict.status = verdictStatus(deduped);
|
|
118
|
+
result.summary = renderSummary(verdict);
|
|
119
|
+
}
|
|
85
120
|
result.triptychs = triptychs;
|
|
86
121
|
// Emit the self-contained HTML comparison page alongside the triptychs,
|
|
87
122
|
// 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":"AAsBA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,IAAI,
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@design-parity/action",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
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.4",
|
|
23
|
+
"@design-parity/resolver": "^0.1.4",
|
|
24
|
+
"@design-parity/policy": "^0.1.4",
|
|
25
|
+
"@design-parity/diff": "^0.1.4",
|
|
26
|
+
"@design-parity/report-html": "^0.1.4",
|
|
27
|
+
"@design-parity/checks": "^0.1.4",
|
|
28
|
+
"@design-parity/candidate": "^0.1.4",
|
|
29
|
+
"@design-parity/adapter-figma": "^0.1.4",
|
|
30
|
+
"@design-parity/adapter-stitch": "^0.1.4",
|
|
31
|
+
"@design-parity/adapter-claude-design": "^0.1.4",
|
|
32
|
+
"@design-parity/adapter-bundle": "^0.1.4"
|
|
32
33
|
},
|
|
33
34
|
"repository": {
|
|
34
35
|
"type": "git",
|