@ethlete/cli 3.0.0-next.23 → 3.0.0-next.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/design/contrast.ts +49 -0
  3. package/design/define-call.ts +48 -8
  4. package/design/define-part.ts +83 -1
  5. package/design/embed-page.ts +37 -4
  6. package/design/icon-sheet.ts +151 -0
  7. package/design/mark-part.ts +79 -2
  8. package/design/morph.ts +67 -0
  9. package/design/motion-runtime.ts +407 -0
  10. package/design/spring.ts +53 -0
  11. package/design/token-sheet.ts +87 -0
  12. package/design/web/env.d.ts +6 -2
  13. package/design/web/frame.ts +159 -6
  14. package/package.json +2 -1
  15. package/src/lib/design/calls-tsconfig.js +1 -2
  16. package/src/lib/design/calls-tsconfig.js.map +1 -1
  17. package/src/lib/design/changed-parts.d.ts +4 -4
  18. package/src/lib/design/changed-parts.js +10 -6
  19. package/src/lib/design/changed-parts.js.map +1 -1
  20. package/src/lib/design/contact-sheet.d.ts +26 -13
  21. package/src/lib/design/contact-sheet.js +122 -40
  22. package/src/lib/design/contact-sheet.js.map +1 -1
  23. package/src/lib/design/design-command.js +50 -2
  24. package/src/lib/design/design-command.js.map +1 -1
  25. package/src/lib/design/force-interactions.d.ts +2 -1
  26. package/src/lib/design/force-interactions.js +7 -4
  27. package/src/lib/design/force-interactions.js.map +1 -1
  28. package/src/lib/design/generated-stylesheets.d.ts +15 -0
  29. package/src/lib/design/generated-stylesheets.js +52 -0
  30. package/src/lib/design/generated-stylesheets.js.map +1 -0
  31. package/src/lib/design/inbox-command.d.ts +1 -0
  32. package/src/lib/design/inbox-command.js +15 -0
  33. package/src/lib/design/inbox-command.js.map +1 -1
  34. package/src/lib/design/mcp-command.d.ts +60 -0
  35. package/src/lib/design/mcp-command.js +327 -0
  36. package/src/lib/design/mcp-command.js.map +1 -0
  37. package/src/lib/design/merge-compare.d.ts +10 -0
  38. package/src/lib/design/merge-compare.js +17 -4
  39. package/src/lib/design/merge-compare.js.map +1 -1
  40. package/src/lib/design/motion-command.d.ts +71 -0
  41. package/src/lib/design/motion-command.js +314 -0
  42. package/src/lib/design/motion-command.js.map +1 -0
  43. package/src/lib/design/motion-endpoint.d.ts +61 -0
  44. package/src/lib/design/motion-endpoint.js +133 -0
  45. package/src/lib/design/motion-endpoint.js.map +1 -0
  46. package/src/lib/design/motion-flow.d.ts +5 -0
  47. package/src/lib/design/motion-flow.js +29 -0
  48. package/src/lib/design/motion-flow.js.map +1 -0
  49. package/src/lib/design/motion-shot.d.ts +43 -0
  50. package/src/lib/design/motion-shot.js +97 -0
  51. package/src/lib/design/motion-shot.js.map +1 -0
  52. package/src/lib/design/paths.d.ts +11 -0
  53. package/src/lib/design/paths.js.map +1 -1
  54. package/src/lib/design/ready-shots.d.ts +7 -0
  55. package/src/lib/design/ready-shots.js +22 -1
  56. package/src/lib/design/ready-shots.js.map +1 -1
  57. package/src/lib/design/render-packages.d.ts +9 -0
  58. package/src/lib/design/render-packages.js +13 -3
  59. package/src/lib/design/render-packages.js.map +1 -1
  60. package/src/lib/design/render.js +3 -3
  61. package/src/lib/design/render.js.map +1 -1
  62. package/src/lib/design/serve.js +108 -21
  63. package/src/lib/design/serve.js.map +1 -1
  64. package/src/lib/design/shot-command.d.ts +12 -6
  65. package/src/lib/design/shot-command.js +60 -48
  66. package/src/lib/design/shot-command.js.map +1 -1
  67. package/src/lib/design/shot.d.ts +30 -4
  68. package/src/lib/design/shot.js +138 -53
  69. package/src/lib/design/shot.js.map +1 -1
  70. package/src/lib/design/sketch-command.js +132 -39
  71. package/src/lib/design/sketch-command.js.map +1 -1
  72. package/src/lib/design/sketch-stylesheets.d.ts +7 -0
  73. package/src/lib/design/sketch-stylesheets.js +63 -0
  74. package/src/lib/design/sketch-stylesheets.js.map +1 -0
  75. package/src/lib/design/studio-api.d.ts +28 -6
  76. package/src/lib/design/studio-api.js +102 -17
  77. package/src/lib/design/studio-api.js.map +1 -1
  78. package/src/lib/design/system/check-system.js +8 -0
  79. package/src/lib/design/system/check-system.js.map +1 -1
  80. package/src/lib/design/system/comments/comment.d.ts +17 -0
  81. package/src/lib/design/system/comments/comment.js +35 -1
  82. package/src/lib/design/system/comments/comment.js.map +1 -1
  83. package/src/lib/design/system/comments/complete.js +4 -2
  84. package/src/lib/design/system/comments/complete.js.map +1 -1
  85. package/src/lib/design/system/complete-command.d.ts +9 -0
  86. package/src/lib/design/system/complete-command.js +134 -0
  87. package/src/lib/design/system/complete-command.js.map +1 -0
  88. package/src/lib/design/system/complete.d.ts +171 -0
  89. package/src/lib/design/system/complete.js +1106 -0
  90. package/src/lib/design/system/complete.js.map +1 -0
  91. package/src/lib/design/system/contrast-check.d.ts +26 -0
  92. package/src/lib/design/system/contrast-check.js +153 -0
  93. package/src/lib/design/system/contrast-check.js.map +1 -0
  94. package/src/lib/design/system/exceptions.d.ts +59 -0
  95. package/src/lib/design/system/exceptions.js +132 -0
  96. package/src/lib/design/system/exceptions.js.map +1 -0
  97. package/src/lib/design/system/flows/flow.d.ts +3 -0
  98. package/src/lib/design/system/flows/flow.js +5 -3
  99. package/src/lib/design/system/flows/flow.js.map +1 -1
  100. package/src/lib/design/system/handoff.d.ts +11 -0
  101. package/src/lib/design/system/handoff.js +30 -0
  102. package/src/lib/design/system/handoff.js.map +1 -0
  103. package/src/lib/design/system/imports.d.ts +28 -3
  104. package/src/lib/design/system/imports.js +84 -7
  105. package/src/lib/design/system/imports.js.map +1 -1
  106. package/src/lib/design/system/inventory-approval.d.ts +41 -0
  107. package/src/lib/design/system/inventory-approval.js +71 -0
  108. package/src/lib/design/system/inventory-approval.js.map +1 -0
  109. package/src/lib/design/system/inventory.d.ts +65 -0
  110. package/src/lib/design/system/inventory.js +168 -0
  111. package/src/lib/design/system/inventory.js.map +1 -0
  112. package/src/lib/design/system/list-system.d.ts +11 -0
  113. package/src/lib/design/system/list-system.js +26 -3
  114. package/src/lib/design/system/list-system.js.map +1 -1
  115. package/src/lib/design/system/product-stylesheets.d.ts +3 -0
  116. package/src/lib/design/system/product-stylesheets.js +40 -0
  117. package/src/lib/design/system/product-stylesheets.js.map +1 -0
  118. package/src/lib/design/system/render-check.js +30 -4
  119. package/src/lib/design/system/render-check.js.map +1 -1
  120. package/src/lib/design/system/resolve-product.d.ts +2 -3
  121. package/src/lib/design/system/resolve-product.js +4 -6
  122. package/src/lib/design/system/resolve-product.js.map +1 -1
  123. package/src/lib/design/system/rules/canonical-class.d.ts +9 -0
  124. package/src/lib/design/system/rules/canonical-class.js +132 -0
  125. package/src/lib/design/system/rules/canonical-class.js.map +1 -0
  126. package/src/lib/design/system/rules/inline-svg.d.ts +7 -0
  127. package/src/lib/design/system/rules/inline-svg.js +28 -0
  128. package/src/lib/design/system/rules/inline-svg.js.map +1 -0
  129. package/src/lib/design/system/rules/motion.d.ts +4 -0
  130. package/src/lib/design/system/rules/motion.js +46 -2
  131. package/src/lib/design/system/rules/motion.js.map +1 -1
  132. package/src/lib/design/system/rules/stale-replace.js +41 -2
  133. package/src/lib/design/system/rules/stale-replace.js.map +1 -1
  134. package/src/lib/design/system/rules/token-selectors.js +1 -1
  135. package/src/lib/design/system/rules/token-selectors.js.map +1 -1
  136. package/src/lib/design/system/rules/utility-css.d.ts +11 -0
  137. package/src/lib/design/system/rules/utility-css.js +290 -0
  138. package/src/lib/design/system/rules/utility-css.js.map +1 -0
  139. package/src/lib/design/system/sketch/baseline.d.ts +3 -2
  140. package/src/lib/design/system/sketch/baseline.js +10 -4
  141. package/src/lib/design/system/sketch/baseline.js.map +1 -1
  142. package/src/lib/design/system/sketch/host-edit.d.ts +4 -0
  143. package/src/lib/design/system/sketch/host-edit.js +68 -0
  144. package/src/lib/design/system/sketch/host-edit.js.map +1 -0
  145. package/src/lib/design/system/sketch/merge-preview.d.ts +4 -2
  146. package/src/lib/design/system/sketch/merge-preview.js +20 -3
  147. package/src/lib/design/system/sketch/merge-preview.js.map +1 -1
  148. package/src/lib/design/system/sketch/merge-shared.d.ts +42 -6
  149. package/src/lib/design/system/sketch/merge-shared.js +122 -24
  150. package/src/lib/design/system/sketch/merge-shared.js.map +1 -1
  151. package/src/lib/design/system/sketch/merge.d.ts +6 -5
  152. package/src/lib/design/system/sketch/merge.js +95 -35
  153. package/src/lib/design/system/sketch/merge.js.map +1 -1
  154. package/src/lib/design/system/sketch/merged-parts.d.ts +17 -0
  155. package/src/lib/design/system/sketch/merged-parts.js +35 -2
  156. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  157. package/src/lib/design/system/sketch/no-visible-change.d.ts +10 -3
  158. package/src/lib/design/system/sketch/no-visible-change.js +75 -20
  159. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
  160. package/src/lib/design/system/sketch/overlay.js +16 -3
  161. package/src/lib/design/system/sketch/overlay.js.map +1 -1
  162. package/src/lib/design/system/sketch/part-definition.d.ts +12 -0
  163. package/src/lib/design/system/sketch/part-definition.js +40 -1
  164. package/src/lib/design/system/sketch/part-definition.js.map +1 -1
  165. package/src/lib/design/system/sketch/sketch.d.ts +40 -3
  166. package/src/lib/design/system/sketch/sketch.js +147 -50
  167. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  168. package/src/lib/design/system/sketch/unchanged-states.d.ts +10 -4
  169. package/src/lib/design/system/sketch/unchanged-states.js +37 -23
  170. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
  171. package/src/lib/design/system/sketch/unused-closure.d.ts +12 -0
  172. package/src/lib/design/system/sketch/unused-closure.js +185 -0
  173. package/src/lib/design/system/sketch/unused-closure.js.map +1 -0
  174. package/src/lib/design/system/system-modules.d.ts +5 -1
  175. package/src/lib/design/system/system-modules.js +32 -17
  176. package/src/lib/design/system/system-modules.js.map +1 -1
  177. package/src/lib/design/system/system-tsconfig.d.ts +2 -1
  178. package/src/lib/design/system/system-tsconfig.js +11 -6
  179. package/src/lib/design/system/system-tsconfig.js.map +1 -1
  180. package/src/lib/design/thumb.d.ts +6 -2
  181. package/src/lib/design/thumb.js +36 -15
  182. package/src/lib/design/thumb.js.map +1 -1
  183. package/src/lib/design/variant-diff.d.ts +12 -10
  184. package/src/lib/design/variant-diff.js +14 -13
  185. package/src/lib/design/variant-diff.js.map +1 -1
  186. package/src/lib/design/warm-pages.d.ts +20 -0
  187. package/src/lib/design/warm-pages.js +78 -0
  188. package/src/lib/design/warm-pages.js.map +1 -0
  189. package/src/lib/update/commits.d.ts +9 -0
  190. package/src/lib/update/commits.js +15 -1
  191. package/src/lib/update/commits.js.map +1 -1
  192. package/src/lib/update/migration-manifest.d.ts +6 -0
  193. package/src/lib/update/migration-manifest.js +7 -0
  194. package/src/lib/update/migration-manifest.js.map +1 -1
  195. package/src/lib/update/migrations-command.js +1 -0
  196. package/src/lib/update/migrations-command.js.map +1 -1
  197. package/src/lib/update/run-migrations.d.ts +22 -0
  198. package/src/lib/update/run-migrations.js +60 -1
  199. package/src/lib/update/run-migrations.js.map +1 -1
  200. package/src/lib/update/update-command.d.ts +10 -0
  201. package/src/lib/update/update-command.js +28 -2
  202. package/src/lib/update/update-command.js.map +1 -1
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.importsAnyOf = exports.changesOnlyImports = void 0;
7
+ const typescript_1 = __importDefault(require("typescript"));
8
+ const imports_1 = require("../imports");
9
+ const resolve_product_1 = require("../resolve-product");
10
+ const ts_source_1 = require("../ts-source");
11
+ const IMPORTED = '\u0000';
12
+ const importedBindingsOf = (source) => new Set(source.statements.filter(typescript_1.default.isImportDeclaration).flatMap((declaration) => {
13
+ const clause = declaration.importClause;
14
+ const bindings = clause === null || clause === void 0 ? void 0 : clause.namedBindings;
15
+ return [
16
+ ...((clause === null || clause === void 0 ? void 0 : clause.name) ? [clause.name.text] : []),
17
+ ...(bindings && typescript_1.default.isNamespaceImport(bindings) ? [bindings.name.text] : []),
18
+ ...(bindings && typescript_1.default.isNamedImports(bindings) ? bindings.elements.map((element) => element.name.text) : []),
19
+ ];
20
+ }));
21
+ const rootOf = (node) => typescript_1.default.isPropertyAccessExpression(node) ? rootOf(node.expression) : node;
22
+ const tokensOf = (text) => {
23
+ const scanner = typescript_1.default.createScanner(typescript_1.default.ScriptTarget.Latest, true, typescript_1.default.LanguageVariant.Standard, text);
24
+ const tokens = [];
25
+ for (let kind = scanner.scan(); kind !== typescript_1.default.SyntaxKind.EndOfFileToken; kind = scanner.scan())
26
+ tokens.push(scanner.getTokenText());
27
+ return tokens;
28
+ };
29
+ /** The source without its import declarations, each use of an imported name (with its member access) as one token. */
30
+ const bodyOf = (text) => {
31
+ const source = typescript_1.default.createSourceFile('part.ts', text, typescript_1.default.ScriptTarget.Latest, true);
32
+ const imported = importedBindingsOf(source);
33
+ const ranges = [];
34
+ const visit = (node) => {
35
+ if (typescript_1.default.isImportDeclaration(node)) {
36
+ ranges.push({ start: node.getStart(source), end: node.end, with: ' ' });
37
+ return;
38
+ }
39
+ const root = typescript_1.default.isPropertyAccessExpression(node) || typescript_1.default.isIdentifier(node) ? rootOf(node) : null;
40
+ if (root &&
41
+ typescript_1.default.isIdentifier(root) &&
42
+ imported.has(root.text) &&
43
+ !(typescript_1.default.isPropertyAccessExpression(node.parent) && node.parent.expression === node) &&
44
+ !(typescript_1.default.isPropertyAccessExpression(node.parent) && node.parent.name === node)) {
45
+ ranges.push({ start: node.getStart(source), end: node.end, with: ` ${IMPORTED} ` });
46
+ return;
47
+ }
48
+ typescript_1.default.forEachChild(node, visit);
49
+ };
50
+ visit(source);
51
+ const sorted = ranges.sort((a, b) => a.start - b.start);
52
+ let body = '';
53
+ let at = 0;
54
+ for (const range of sorted) {
55
+ body += `${text.slice(at, range.start)}${range.with}`;
56
+ at = range.end;
57
+ }
58
+ return tokensOf(body + text.slice(at)).join(' ');
59
+ };
60
+ /** Whether `after` differs from `before` only in what it imports and how it spells the imported names it uses. */
61
+ const changesOnlyImports = (before, after) => bodyOf(before) === bodyOf(after);
62
+ exports.changesOnlyImports = changesOnlyImports;
63
+ /** Whether a part source imports one of `targets` (`<layer>/<name>` keys). */
64
+ const importsAnyOf = (source, targets) => (0, ts_source_1.importsOf)(source)
65
+ .map(imports_1.classifyImport)
66
+ .some((imported) => imported.kind === 'part' && targets.includes((0, resolve_product_1.partKeyOf)(imported)));
67
+ exports.importsAnyOf = importsAnyOf;
68
+ //# sourceMappingURL=host-edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-edit.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/host-edit.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,13 @@ import { ResolvedProduct } from '../resolve-product';
2
2
  import { Sketch } from './sketch';
3
3
  export type MergePreview = {
4
4
  changed: string[];
5
+ shared: string[];
5
6
  affected: string[];
6
7
  };
7
8
  /**
8
- * What a merge of one variant changes: the parts the variant holds, and each element and page that
9
- * uses one of them, directly or through another part.
9
+ * What a merge of one variant changes: the parts the variant holds and, in `shared`, each other part that imports a
10
+ * `shared/` file the variant edits (both in `changed`), and each element and page that uses one of them, directly or
11
+ * through another part.
10
12
  */
11
13
  export declare const mergePreviewOf: (options: {
12
14
  product: ResolvedProduct;
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.mergePreviewOf = void 0;
4
+ const path_1 = require("path");
4
5
  const imports_1 = require("../imports");
5
6
  const resolve_product_1 = require("../resolve-product");
7
+ const merge_shared_1 = require("./merge-shared");
6
8
  const overlay_1 = require("./overlay");
9
+ const sketch_1 = require("./sketch");
7
10
  const SHOWN = new Set(['elements', 'pages']);
8
11
  const usersOf = (product) => {
9
12
  var _a;
@@ -16,14 +19,27 @@ const usersOf = (product) => {
16
19
  }
17
20
  return users;
18
21
  };
22
+ const sharedReachOf = (options) => {
23
+ const { product, held } = options;
24
+ const edited = new Set((0, merge_shared_1.editedSharedPathsOf)(options));
25
+ if (edited.size === 0)
26
+ return [];
27
+ return product.parts
28
+ .filter((part) => !held.has((0, resolve_product_1.partKeyOf)(part)))
29
+ .filter((part) => (0, imports_1.importedSharedOf)({ product, files: (0, sketch_1.sourceFilesIn)((0, path_1.dirname)(part.file)) }).some(({ path }) => edited.has(path)))
30
+ .map(resolve_product_1.partKeyOf);
31
+ };
19
32
  /**
20
- * What a merge of one variant changes: the parts the variant holds, and each element and page that
21
- * uses one of them, directly or through another part.
33
+ * What a merge of one variant changes: the parts the variant holds and, in `shared`, each other part that imports a
34
+ * `shared/` file the variant edits (both in `changed`), and each element and page that uses one of them, directly or
35
+ * through another part.
22
36
  */
23
37
  const mergePreviewOf = (options) => {
24
38
  var _a;
25
39
  const users = usersOf(options.product);
26
- const changed = new Set((0, overlay_1.overlaySketch)(options).sketched);
40
+ const held = new Set((0, overlay_1.overlaySketch)(options).sketched);
41
+ const shared = sharedReachOf(Object.assign(Object.assign({}, options), { held }));
42
+ const changed = new Set([...held, ...shared]);
27
43
  const reached = new Set();
28
44
  const queue = [...changed];
29
45
  for (let key = queue.shift(); key !== undefined; key = queue.shift()) {
@@ -36,6 +52,7 @@ const mergePreviewOf = (options) => {
36
52
  }
37
53
  return {
38
54
  changed: [...changed].sort(),
55
+ shared: shared.sort(),
39
56
  affected: [...reached].filter((key) => { var _a; return !changed.has(key) && SHOWN.has((_a = key.split('/')[0]) !== null && _a !== void 0 ? _a : ''); }).sort(),
40
57
  };
41
58
  };
@@ -1 +1 @@
1
- {"version":3,"file":"merge-preview.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/merge-preview.ts"],"names":[],"mappings":";;;AAAA,wCAAgD;AAChD,wDAAgE;AAChE,uCAA0C;AAK1C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AAE7C,MAAM,OAAO,GAAG,CAAC,OAAwB,EAAE,EAAE;;IAC3C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,KAAK,MAAM,UAAU,IAAI,IAAA,4BAAkB,EAAC,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,GAAG,GAAG,IAAA,2BAAS,EAAC,UAAU,CAAC,CAAC;YAElC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAA,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAA,2BAAS,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;;GAGG;AACI,MAAM,cAAc,GAAG,CAAC,OAI9B,EAAgB,EAAE;;IACjB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAA,uBAAa,EAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAE3B,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,SAAS,EAAE,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QACrE,KAAK,MAAM,IAAI,IAAI,MAAA,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,EAAE,EAAE,CAAC;YACxC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAEhC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE;QAC5B,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,WAAC,OAAA,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAA,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC,CAAA,EAAA,CAAC,CAAC,IAAI,EAAE;KACvG,CAAC;AACJ,CAAC,CAAC;AAvBW,QAAA,cAAc,kBAuBzB"}
1
+ {"version":3,"file":"merge-preview.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/merge-preview.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,61 @@
1
+ import { ProductSource } from '../base';
1
2
  import { Sketch } from './sketch';
2
3
  type PartFile = {
3
4
  layer: string;
4
5
  name: string;
5
6
  file: string;
6
7
  };
8
+ type SharedProduct = Pick<ProductSource, 'dir'> & {
9
+ base: Pick<ProductSource, 'dir'> | null;
10
+ };
7
11
  /**
8
- * What a merge does with the sketch's `shared/` folder: `carry` when the target imports it, `drop` when no part
9
- * does, or why the merge must stop - a part other than the target imports it, or the target holds a `shared/`
10
- * folder of its own.
12
+ * What a merge does with the sketch's `shared/` folder: `carry` names the folder of each target with the paths of the
13
+ * files the product's `shared/` does not hold that it takes - each file it imports, directly or through another such
14
+ * file, and each file nobody imports that its `shared/` held in the product; a file nobody imports and no target held
15
+ * goes to the one target importing `@shared/`. Or why the merge must stop - a part other than a target imports one, a
16
+ * target taking files holds a `shared/` folder of its own, or a file nobody imports has no target to go to.
11
17
  */
12
18
  export declare const sharedPlanOf: (options: {
13
19
  sketch: Sketch;
20
+ variant: string;
14
21
  parts: PartFile[];
15
- }) => "carry" | "drop" | string;
22
+ product: SharedProduct & {
23
+ parts: PartFile[];
24
+ };
25
+ }) => {
26
+ carry: {
27
+ targetDir: string;
28
+ paths: string[];
29
+ }[];
30
+ } | string;
31
+ /**
32
+ * The files of the sketch's and the variant's `shared/` whose path the product's or its base's `shared/` holds, each
33
+ * with the file it replaces in the product's own `shared/`.
34
+ */
35
+ export declare const productSharedChangesOf: (options: {
36
+ sketch: Sketch;
37
+ variant: string;
38
+ product: SharedProduct;
39
+ }) => {
40
+ from: string;
41
+ to: string;
42
+ }[];
43
+ /** The paths of the product's or its base's `shared/` files that the sketch's or the variant's `shared/` changes. */
44
+ export declare const editedSharedPathsOf: (options: {
45
+ sketch: Sketch;
46
+ variant: string;
47
+ product: SharedProduct;
48
+ }) => string[];
16
49
  /**
17
- * Copies the sketch's `shared/` folder, then the picked variant's own `shared/` over it, into the merged target's folder
18
- * and turns each `@shared/` import there into a relative one.
50
+ * Copies the files at `paths` of the sketch's `shared/` folder, the picked variant's own `shared/` winning, into the
51
+ * merged target's folder, and turns each `@shared/` import there of a file the product's `shared/` does not hold into a
52
+ * relative one.
19
53
  */
20
54
  export declare const carryShared: (options: {
21
55
  sketch: Sketch;
22
56
  variant: string;
23
57
  targetDir: string;
58
+ paths: string[];
59
+ product: SharedProduct;
24
60
  }) => void;
25
61
  export {};
@@ -1,50 +1,148 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.carryShared = exports.sharedPlanOf = void 0;
3
+ exports.carryShared = exports.editedSharedPathsOf = exports.productSharedChangesOf = exports.sharedPlanOf = void 0;
4
4
  const fs_1 = require("fs");
5
5
  const path_1 = require("path");
6
+ const assets_1 = require("../assets");
6
7
  const imports_1 = require("../imports");
7
8
  const resolve_product_1 = require("../resolve-product");
8
9
  const ts_source_1 = require("../ts-source");
9
10
  const sketch_1 = require("./sketch");
10
- const importsShared = (file) => (0, ts_source_1.importsOf)((0, fs_1.readFileSync)(file, 'utf8')).some((specifier) => specifier.startsWith(imports_1.SHARED_PREFIX));
11
- const sharedImportersOf = (parts) => parts.filter((part) => (0, sketch_1.sourceFilesIn)((0, path_1.dirname)(part.file)).some(importsShared));
11
+ const inProductShared = (product, path) => (0, imports_1.sharedFileOf)({ dirs: (0, imports_1.productSharedDirsOf)(product), path }) !== null;
12
+ const importsSketchShared = (product, file) => (0, ts_source_1.importsOf)((0, fs_1.readFileSync)(file, 'utf8')).some((specifier) => specifier.startsWith(imports_1.SHARED_PREFIX) && !inProductShared(product, specifier.slice(imports_1.SHARED_PREFIX.length)));
13
+ const sharedImportersOf = (product, parts) => parts.filter((part) => (0, sketch_1.sourceFilesIn)((0, path_1.dirname)(part.file)).some((file) => importsSketchShared(product, file)));
14
+ const sketchSharedDirsOf = (sketch, variant) => [
15
+ (0, sketch_1.variantSharedDirOf)(sketch, variant),
16
+ (0, sketch_1.sharedDirOf)(sketch),
17
+ ];
18
+ /** The files of the sketch's and the variant's `shared/` under their path there, the variant's file winning. */
19
+ const sketchSharedFilesOf = (sketch, variant) => {
20
+ const files = new Map();
21
+ for (const dir of sketchSharedDirsOf(sketch, variant).reverse())
22
+ for (const file of (0, assets_1.filesBelow)(dir))
23
+ files.set((0, path_1.relative)(dir, file), file);
24
+ return files;
25
+ };
26
+ const SOURCE = /\.(?:ts|js|mjs)$/u;
27
+ const reachedSharedOf = (options) => {
28
+ const { dirs, partDir, product } = options;
29
+ const reached = new Set();
30
+ const queue = (0, sketch_1.sourceFilesIn)(partDir).map((file) => ({ file, at: null }));
31
+ for (let next = queue.shift(); next; next = queue.shift()) {
32
+ for (const specifier of (0, ts_source_1.importsOf)((0, fs_1.readFileSync)(next.file, 'utf8'))) {
33
+ const path = specifier.startsWith(imports_1.SHARED_PREFIX)
34
+ ? specifier.slice(imports_1.SHARED_PREFIX.length)
35
+ : next.at !== null && specifier.startsWith('.')
36
+ ? (0, path_1.join)((0, path_1.dirname)(next.at), specifier)
37
+ : null;
38
+ if (path === null || path.startsWith('..'))
39
+ continue;
40
+ if (specifier.startsWith(imports_1.SHARED_PREFIX) && inProductShared(product, path))
41
+ continue;
42
+ const file = (0, imports_1.sharedFileOf)({ dirs, path });
43
+ const dir = file && dirs.find((candidate) => !(0, path_1.relative)(candidate, file).startsWith('..'));
44
+ if (!file || !dir)
45
+ continue;
46
+ const at = (0, path_1.relative)(dir, file);
47
+ if (reached.has(at))
48
+ continue;
49
+ reached.add(at);
50
+ if (SOURCE.test(at))
51
+ queue.push({ file, at });
52
+ }
53
+ }
54
+ return reached;
55
+ };
12
56
  /**
13
- * What a merge does with the sketch's `shared/` folder: `carry` when the target imports it, `drop` when no part
14
- * does, or why the merge must stop - a part other than the target imports it, or the target holds a `shared/`
15
- * folder of its own.
57
+ * What a merge does with the sketch's `shared/` folder: `carry` names the folder of each target with the paths of the
58
+ * files the product's `shared/` does not hold that it takes - each file it imports, directly or through another such
59
+ * file, and each file nobody imports that its `shared/` held in the product; a file nobody imports and no target held
60
+ * goes to the one target importing `@shared/`. Or why the merge must stop - a part other than a target imports one, a
61
+ * target taking files holds a `shared/` folder of its own, or a file nobody imports has no target to go to.
16
62
  */
17
63
  const sharedPlanOf = (options) => {
18
- const { sketch, parts } = options;
19
- const importers = sharedImportersOf(parts);
20
- const others = importers.filter((part) => (0, resolve_product_1.partKeyOf)(part) !== sketch.target);
21
- const target = importers.find((part) => (0, resolve_product_1.partKeyOf)(part) === sketch.target);
64
+ const { sketch, variant, parts, product } = options;
65
+ const importers = sharedImportersOf(product, parts);
66
+ const others = importers.filter((part) => !sketch.targets.includes((0, resolve_product_1.partKeyOf)(part)));
67
+ const takers = sketch.targets.join(', ');
22
68
  if (others.length > 0)
23
- return `${others.map(resolve_product_1.partKeyOf).join(', ')} import ${imports_1.SHARED_PREFIX} - only ${sketch.target} takes the sketch's ${sketch_1.SHARED_FOLDER}/ into the product; move that code into the part`;
24
- if (!target)
25
- return 'drop';
26
- if ((0, fs_1.existsSync)((0, path_1.resolve)((0, path_1.dirname)(target.file), sketch_1.SHARED_FOLDER)))
27
- return `${sketch.target} holds a ${sketch_1.SHARED_FOLDER}/ folder of its own and imports ${imports_1.SHARED_PREFIX} - rename the folder`;
28
- return 'carry';
69
+ return `${others.map(resolve_product_1.partKeyOf).join(', ')} import ${imports_1.SHARED_PREFIX} - only ${takers} take${sketch.targets.length > 1 ? '' : 's'} the sketch's ${imports_1.SHARED_FOLDER}/ into the product; move that code into the part`;
70
+ const dirs = sketchSharedDirsOf(sketch, variant);
71
+ const targets = parts.filter((part) => sketch.targets.includes((0, resolve_product_1.partKeyOf)(part)));
72
+ const reached = targets.map((part) => reachedSharedOf({ dirs, partDir: (0, path_1.dirname)(part.file), product }));
73
+ const unreached = [...sketchSharedFilesOf(sketch, variant).keys()].filter((path) => !inProductShared(product, path) && !reached.some((paths) => paths.has(path)));
74
+ const heldBy = (part, path) => product.parts.some((held) => (0, resolve_product_1.partKeyOf)(held) === (0, resolve_product_1.partKeyOf)(part) && (0, fs_1.existsSync)((0, path_1.resolve)((0, path_1.dirname)(held.file), imports_1.SHARED_FOLDER, path)));
75
+ const ownersOf = (path) => targets.filter((part) => heldBy(part, path));
76
+ const solo = importers.length === 1 ? importers[0] : undefined;
77
+ const orphan = importers.length > 1 ? unreached.find((path) => ownersOf(path).length === 0) : undefined;
78
+ if (orphan !== undefined)
79
+ return `${imports_1.SHARED_FOLDER}/${orphan.split(path_1.sep).join('/')} is imported by no target and was held by none in the product - import it or delete it`;
80
+ const carry = targets
81
+ .map((part, index) => {
82
+ var _a;
83
+ return ({
84
+ part,
85
+ paths: [
86
+ ...((_a = reached[index]) !== null && _a !== void 0 ? _a : []),
87
+ ...unreached.filter((path) => (ownersOf(path).length > 0 ? heldBy(part, path) : part === solo)),
88
+ ].sort(),
89
+ });
90
+ })
91
+ .filter(({ paths }) => paths.length > 0);
92
+ const owning = carry.find(({ part }) => (0, fs_1.existsSync)((0, path_1.resolve)((0, path_1.dirname)(part.file), imports_1.SHARED_FOLDER)));
93
+ if (owning)
94
+ return `${(0, resolve_product_1.partKeyOf)(owning.part)} holds a ${imports_1.SHARED_FOLDER}/ folder of its own and imports ${imports_1.SHARED_PREFIX} - rename the folder`;
95
+ return { carry: carry.map(({ part, paths }) => ({ targetDir: (0, path_1.resolve)(product.dir, part.layer, part.name), paths })) };
29
96
  };
30
97
  exports.sharedPlanOf = sharedPlanOf;
98
+ /**
99
+ * The files of the sketch's and the variant's `shared/` whose path the product's or its base's `shared/` holds, each
100
+ * with the file it replaces in the product's own `shared/`.
101
+ */
102
+ const productSharedChangesOf = (options) => {
103
+ const { sketch, variant, product } = options;
104
+ return [...sketchSharedFilesOf(sketch, variant)]
105
+ .filter(([path]) => inProductShared(product, path))
106
+ .map(([path, file]) => ({ from: file, to: (0, path_1.resolve)(product.dir, imports_1.SHARED_FOLDER, path) }));
107
+ };
108
+ exports.productSharedChangesOf = productSharedChangesOf;
109
+ /** The paths of the product's or its base's `shared/` files that the sketch's or the variant's `shared/` changes. */
110
+ const editedSharedPathsOf = (options) => {
111
+ const { sketch, variant, product } = options;
112
+ return [...sketchSharedFilesOf(sketch, variant)].flatMap(([path, file]) => {
113
+ const own = (0, imports_1.sharedFileOf)({ dirs: (0, imports_1.productSharedDirsOf)(product), path });
114
+ return own && (0, fs_1.readFileSync)(own, 'utf8') !== (0, fs_1.readFileSync)(file, 'utf8') ? [path.split(path_1.sep).join('/')] : [];
115
+ });
116
+ };
117
+ exports.editedSharedPathsOf = editedSharedPathsOf;
31
118
  const relativeSpecifierOf = (options) => {
32
119
  const path = (0, path_1.relative)((0, path_1.dirname)(options.from), options.to).split(path_1.sep).join('/');
33
120
  return path.startsWith('.') ? path : `./${path}`;
34
121
  };
35
122
  /**
36
- * Copies the sketch's `shared/` folder, then the picked variant's own `shared/` over it, into the merged target's folder
37
- * and turns each `@shared/` import there into a relative one.
123
+ * Copies the files at `paths` of the sketch's `shared/` folder, the picked variant's own `shared/` winning, into the
124
+ * merged target's folder, and turns each `@shared/` import there of a file the product's `shared/` does not hold into a
125
+ * relative one.
38
126
  */
39
127
  const carryShared = (options) => {
40
- const { sketch, variant, targetDir } = options;
41
- const shared = (0, path_1.resolve)(targetDir, sketch_1.SHARED_FOLDER);
42
- for (const dir of [(0, sketch_1.sharedDirOf)(sketch), (0, sketch_1.variantSharedDirOf)(sketch, variant)])
43
- if ((0, fs_1.existsSync)(dir))
44
- (0, fs_1.cpSync)(dir, shared, { recursive: true });
128
+ const { sketch, variant, targetDir, paths, product } = options;
129
+ const shared = (0, path_1.resolve)(targetDir, imports_1.SHARED_FOLDER);
130
+ const files = sketchSharedFilesOf(sketch, variant);
131
+ for (const path of paths) {
132
+ const file = files.get(path);
133
+ if (!file)
134
+ continue;
135
+ (0, fs_1.mkdirSync)((0, path_1.dirname)((0, path_1.resolve)(shared, path)), { recursive: true });
136
+ (0, fs_1.cpSync)(file, (0, path_1.resolve)(shared, path));
137
+ }
45
138
  for (const file of (0, sketch_1.sourceFilesIn)(targetDir)) {
46
139
  const source = (0, fs_1.readFileSync)(file, 'utf8');
47
- const rewritten = source.replace(new RegExp(`(['"])${imports_1.SHARED_PREFIX}([^'"]+)\\1`, 'gu'), (...[, quote, path]) => `${quote}${relativeSpecifierOf({ from: file, to: (0, path_1.resolve)(shared, path !== null && path !== void 0 ? path : '') })}${quote}`);
140
+ const rewritten = source.replace(new RegExp(`(['"])${imports_1.SHARED_PREFIX}([^'"]+)\\1`, 'gu'), (...args) => {
141
+ const [match = '', quote = '', path = ''] = args;
142
+ return inProductShared(product, path)
143
+ ? match
144
+ : `${quote}${relativeSpecifierOf({ from: file, to: (0, path_1.resolve)(shared, path) })}${quote}`;
145
+ });
48
146
  if (rewritten !== source)
49
147
  (0, fs_1.writeFileSync)(file, rewritten);
50
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"merge-shared.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/merge-shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merge-shared.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/merge-shared.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,11 @@ export type MergeRefusal = {
8
8
  };
9
9
  /**
10
10
  * Merges the variant the user picked in a ready sketch into the product: copies each part it holds
11
- * over the product's, sets `note` (when given) and `madeBy` (the file's own plus the variant's authors) on the target, runs the check
12
- * records each merged part's hash in `merged.json` and deletes the sketch. A target the product only takes from its base is copied into the product first. When the check fails, the
13
- * product's old files come back and the sketch stays. Each file in the variant's `assets/` goes into the product's `assets/`. The sketch's `shared/` folder goes into the target's folder when the
14
- * target imports it, with its `@shared/` imports made relative; any other part that imports it stops the merge. Otherwise the open comments on its variants are addressed, by `author` or the user. Refuses without a
11
+ * over the product's - a part the product takes from its base over the base's, unless the sketch was opened with
12
+ * `override`; `into-base` also removes the product copy and its `merged.json` entry - sets `note` (when given) and `madeBy` (the file's own plus the variant's authors) on the target, runs the check
13
+ * records each merged part's hash in `merged.json` and deletes the sketch. With `override`, a target the product only takes from its base is copied into the product first. When the check fails, the
14
+ * product's old files come back and the sketch stays. Each file in the variant's `assets/` goes into the product's `assets/`. A file of the sketch's `shared/` folder whose path the product's `shared/` holds
15
+ * replaces it there; the rest goes into the target's folder when the target imports it, with its `@shared/` imports made relative; any other part that imports it stops the merge. Otherwise the addressed comments on its variants, and those on the merged parts that have no sketch, are resolved, and the open ones on its variants are addressed, by `author` or the user. Refuses without a
15
16
  * pick, and when a part the variant replaces changed in the product since the sketch's baseline. Answers with the merged part keys, or with why nothing was merged - and, when a rebase
16
17
  * would let it, the parts that changed (`[]` without a baseline).
17
18
  */
@@ -23,7 +24,7 @@ export declare const mergeSketch: (options: {
23
24
  note?: string;
24
25
  author?: string;
25
26
  }) => string[] | MergeRefusal;
26
- /** Deletes a sketch with all its variants and marks the open comments on them addressed, by `author` or the user. */
27
+ /** Deletes a sketch with all its variants and resolves the addressed comments on them and marks the open ones addressed, by `author` or the user. */
27
28
  export declare const discardSketch: (options: {
28
29
  target: string;
29
30
  sketch: Sketch;