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

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 (140) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/design/contrast.ts +49 -0
  3. package/design/define-call.ts +5 -8
  4. package/design/define-part.ts +63 -1
  5. package/design/morph.ts +67 -0
  6. package/design/motion-runtime.ts +200 -0
  7. package/design/web/env.d.ts +6 -2
  8. package/design/web/frame.ts +39 -1
  9. package/package.json +2 -1
  10. package/src/lib/design/changed-parts.d.ts +4 -4
  11. package/src/lib/design/changed-parts.js +10 -6
  12. package/src/lib/design/changed-parts.js.map +1 -1
  13. package/src/lib/design/contact-sheet.d.ts +26 -13
  14. package/src/lib/design/contact-sheet.js +122 -40
  15. package/src/lib/design/contact-sheet.js.map +1 -1
  16. package/src/lib/design/design-command.js +20 -2
  17. package/src/lib/design/design-command.js.map +1 -1
  18. package/src/lib/design/generated-stylesheets.d.ts +15 -0
  19. package/src/lib/design/generated-stylesheets.js +52 -0
  20. package/src/lib/design/generated-stylesheets.js.map +1 -0
  21. package/src/lib/design/inbox-command.d.ts +1 -0
  22. package/src/lib/design/inbox-command.js +15 -0
  23. package/src/lib/design/inbox-command.js.map +1 -1
  24. package/src/lib/design/merge-compare.d.ts +10 -0
  25. package/src/lib/design/merge-compare.js +17 -4
  26. package/src/lib/design/merge-compare.js.map +1 -1
  27. package/src/lib/design/paths.d.ts +11 -0
  28. package/src/lib/design/paths.js.map +1 -1
  29. package/src/lib/design/serve.js +74 -18
  30. package/src/lib/design/serve.js.map +1 -1
  31. package/src/lib/design/shot-command.d.ts +4 -4
  32. package/src/lib/design/shot-command.js +48 -40
  33. package/src/lib/design/shot-command.js.map +1 -1
  34. package/src/lib/design/shot.d.ts +14 -4
  35. package/src/lib/design/shot.js +71 -50
  36. package/src/lib/design/shot.js.map +1 -1
  37. package/src/lib/design/sketch-command.js +55 -24
  38. package/src/lib/design/sketch-command.js.map +1 -1
  39. package/src/lib/design/sketch-stylesheets.d.ts +7 -0
  40. package/src/lib/design/sketch-stylesheets.js +63 -0
  41. package/src/lib/design/sketch-stylesheets.js.map +1 -0
  42. package/src/lib/design/studio-api.d.ts +9 -6
  43. package/src/lib/design/studio-api.js +50 -16
  44. package/src/lib/design/studio-api.js.map +1 -1
  45. package/src/lib/design/system/check-system.js +8 -0
  46. package/src/lib/design/system/check-system.js.map +1 -1
  47. package/src/lib/design/system/comments/comment.d.ts +17 -0
  48. package/src/lib/design/system/comments/comment.js +35 -1
  49. package/src/lib/design/system/comments/comment.js.map +1 -1
  50. package/src/lib/design/system/comments/complete.js +4 -2
  51. package/src/lib/design/system/comments/complete.js.map +1 -1
  52. package/src/lib/design/system/complete-command.d.ts +9 -0
  53. package/src/lib/design/system/complete-command.js +64 -0
  54. package/src/lib/design/system/complete-command.js.map +1 -0
  55. package/src/lib/design/system/complete.d.ts +73 -0
  56. package/src/lib/design/system/complete.js +655 -0
  57. package/src/lib/design/system/complete.js.map +1 -0
  58. package/src/lib/design/system/contrast-check.d.ts +26 -0
  59. package/src/lib/design/system/contrast-check.js +153 -0
  60. package/src/lib/design/system/contrast-check.js.map +1 -0
  61. package/src/lib/design/system/imports.d.ts +28 -3
  62. package/src/lib/design/system/imports.js +84 -7
  63. package/src/lib/design/system/imports.js.map +1 -1
  64. package/src/lib/design/system/list-system.d.ts +11 -0
  65. package/src/lib/design/system/list-system.js +17 -1
  66. package/src/lib/design/system/list-system.js.map +1 -1
  67. package/src/lib/design/system/product-stylesheets.d.ts +3 -0
  68. package/src/lib/design/system/product-stylesheets.js +40 -0
  69. package/src/lib/design/system/product-stylesheets.js.map +1 -0
  70. package/src/lib/design/system/render-check.js +11 -3
  71. package/src/lib/design/system/render-check.js.map +1 -1
  72. package/src/lib/design/system/rules/canonical-class.d.ts +9 -0
  73. package/src/lib/design/system/rules/canonical-class.js +132 -0
  74. package/src/lib/design/system/rules/canonical-class.js.map +1 -0
  75. package/src/lib/design/system/rules/inline-svg.d.ts +7 -0
  76. package/src/lib/design/system/rules/inline-svg.js +28 -0
  77. package/src/lib/design/system/rules/inline-svg.js.map +1 -0
  78. package/src/lib/design/system/rules/motion.d.ts +4 -0
  79. package/src/lib/design/system/rules/motion.js +46 -2
  80. package/src/lib/design/system/rules/motion.js.map +1 -1
  81. package/src/lib/design/system/rules/utility-css.d.ts +11 -0
  82. package/src/lib/design/system/rules/utility-css.js +290 -0
  83. package/src/lib/design/system/rules/utility-css.js.map +1 -0
  84. package/src/lib/design/system/sketch/baseline.d.ts +3 -2
  85. package/src/lib/design/system/sketch/baseline.js +10 -4
  86. package/src/lib/design/system/sketch/baseline.js.map +1 -1
  87. package/src/lib/design/system/sketch/merge-preview.d.ts +4 -2
  88. package/src/lib/design/system/sketch/merge-preview.js +20 -3
  89. package/src/lib/design/system/sketch/merge-preview.js.map +1 -1
  90. package/src/lib/design/system/sketch/merge-shared.d.ts +42 -6
  91. package/src/lib/design/system/sketch/merge-shared.js +122 -24
  92. package/src/lib/design/system/sketch/merge-shared.js.map +1 -1
  93. package/src/lib/design/system/sketch/merge.d.ts +3 -3
  94. package/src/lib/design/system/sketch/merge.js +54 -29
  95. package/src/lib/design/system/sketch/merge.js.map +1 -1
  96. package/src/lib/design/system/sketch/merged-parts.d.ts +7 -0
  97. package/src/lib/design/system/sketch/merged-parts.js +13 -1
  98. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  99. package/src/lib/design/system/sketch/no-visible-change.d.ts +4 -3
  100. package/src/lib/design/system/sketch/no-visible-change.js +50 -19
  101. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
  102. package/src/lib/design/system/sketch/overlay.js +7 -2
  103. package/src/lib/design/system/sketch/overlay.js.map +1 -1
  104. package/src/lib/design/system/sketch/part-definition.d.ts +12 -0
  105. package/src/lib/design/system/sketch/part-definition.js +40 -1
  106. package/src/lib/design/system/sketch/part-definition.js.map +1 -1
  107. package/src/lib/design/system/sketch/sketch.d.ts +8 -3
  108. package/src/lib/design/system/sketch/sketch.js +76 -34
  109. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  110. package/src/lib/design/system/sketch/unchanged-states.d.ts +10 -4
  111. package/src/lib/design/system/sketch/unchanged-states.js +37 -23
  112. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
  113. package/src/lib/design/system/system-modules.d.ts +5 -1
  114. package/src/lib/design/system/system-modules.js +26 -8
  115. package/src/lib/design/system/system-modules.js.map +1 -1
  116. package/src/lib/design/system/system-tsconfig.js +2 -1
  117. package/src/lib/design/system/system-tsconfig.js.map +1 -1
  118. package/src/lib/design/thumb.d.ts +6 -2
  119. package/src/lib/design/thumb.js +36 -15
  120. package/src/lib/design/thumb.js.map +1 -1
  121. package/src/lib/design/variant-diff.d.ts +12 -10
  122. package/src/lib/design/variant-diff.js +14 -13
  123. package/src/lib/design/variant-diff.js.map +1 -1
  124. package/src/lib/design/warm-pages.d.ts +20 -0
  125. package/src/lib/design/warm-pages.js +78 -0
  126. package/src/lib/design/warm-pages.js.map +1 -0
  127. package/src/lib/update/commits.d.ts +9 -0
  128. package/src/lib/update/commits.js +15 -1
  129. package/src/lib/update/commits.js.map +1 -1
  130. package/src/lib/update/migration-manifest.d.ts +6 -0
  131. package/src/lib/update/migration-manifest.js +7 -0
  132. package/src/lib/update/migration-manifest.js.map +1 -1
  133. package/src/lib/update/migrations-command.js +1 -0
  134. package/src/lib/update/migrations-command.js.map +1 -1
  135. package/src/lib/update/run-migrations.d.ts +22 -0
  136. package/src/lib/update/run-migrations.js +60 -1
  137. package/src/lib/update/run-migrations.js.map +1 -1
  138. package/src/lib/update/update-command.d.ts +10 -0
  139. package/src/lib/update/update-command.js +28 -2
  140. package/src/lib/update/update-command.js.map +1 -1
@@ -10,32 +10,46 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.sketchShowsNoChange = void 0;
13
+ const merge_compare_1 = require("../../merge-compare");
13
14
  const list_system_1 = require("../list-system");
14
15
  const product_1 = require("../product");
15
16
  const resolve_product_1 = require("../resolve-product");
17
+ const merge_preview_1 = require("./merge-preview");
16
18
  const overlay_1 = require("./overlay");
17
19
  const sketch_1 = require("./sketch");
18
20
  const unchanged_states_1 = require("./unchanged-states");
19
- const variantChangeOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
20
- var _a;
21
+ const affectedChangeOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
21
22
  const { product, sketch, variant, load, pictureOf } = options;
22
- const others = (0, product_1.partFilesOf)((0, sketch_1.variantDirOf)(sketch, variant))
23
- .parts.map(resolve_product_1.partKeyOf)
24
- .filter((key) => key !== sketch.target);
25
- if (others.length > 0)
26
- return `variant ${variant} also holds ${others.join(', ')}`;
27
- const file = (_a = (0, overlay_1.overlaySketch)({ product, sketch, variant }).parts.find((part) => (0, resolve_product_1.partKeyOf)(part) === sketch.target)) === null || _a === void 0 ? void 0 : _a.file;
23
+ const { changed } = yield (0, merge_compare_1.compareMerge)({
24
+ product,
25
+ sketch,
26
+ variant,
27
+ size: null,
28
+ params: new URLSearchParams(),
29
+ pictureOf,
30
+ load: (part) => load(Object.assign(Object.assign({}, part), { sketch: null })),
31
+ });
32
+ if (changed.length === 0)
33
+ return null;
34
+ const rows = changed.map((row) => [row.part, row.state, row.error ? `(${row.error})` : ''].filter((entry) => entry !== '').join(' '));
35
+ return `variant ${variant} changes ${rows.join(', ')}`;
36
+ });
37
+ const partChangeOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
38
+ var _a;
39
+ const { product, sketch, variant, load, pictureOf, part, named } = options;
40
+ const file = (_a = (0, overlay_1.overlaySketch)({ product, sketch, variant }).parts.find((entry) => (0, resolve_product_1.partKeyOf)(entry) === part)) === null || _a === void 0 ? void 0 : _a.file;
28
41
  if (!file)
29
- return `variant ${variant} does not draw ${sketch.target}`;
42
+ return `variant ${variant} does not draw ${part}`;
30
43
  const read = yield (0, list_system_1.readPartModule)({
31
44
  part: { file },
32
45
  product: product.name,
33
46
  load: () => load({ file, product: product.name, sketch: { target: sketch.target, variant } }),
34
47
  });
48
+ const of = named ? ` ${part}` : '';
35
49
  if (read.problem)
36
- return `variant ${variant} does not load: ${read.problem}`;
50
+ return `variant ${variant}${of} does not load: ${read.problem}`;
37
51
  if (read.states.length === 0)
38
- return `variant ${variant} has no states`;
52
+ return `variant ${variant}${of} has no states`;
39
53
  const failures = new Set();
40
54
  const recording = (picture) => __awaiter(void 0, void 0, void 0, function* () {
41
55
  try {
@@ -46,23 +60,40 @@ const variantChangeOf = (options) => __awaiter(void 0, void 0, void 0, function*
46
60
  throw error;
47
61
  }
48
62
  });
49
- const unchanged = yield (0, unchanged_states_1.unchangedStatesOf)({ product, sketch, variant, load, pictureOf: recording });
63
+ const unchanged = yield (0, unchanged_states_1.unchangedStatesOf)({ product, sketch, variant, load, pictureOf: recording, part });
50
64
  const changed = read.states.filter((state) => !unchanged.includes(state));
51
65
  if (changed.length === 0)
52
66
  return null;
53
67
  const failed = failures.size > 0 ? ` - a shot failed: ${[...failures].join('; ')}` : '';
54
- return `variant ${variant} changes ${changed.join(', ')}${failed}`;
68
+ return `variant ${variant} changes${of} ${changed.join(', ')}${failed}`;
69
+ });
70
+ const variantChangeOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
71
+ const { product, sketch, variant } = options;
72
+ const others = (0, product_1.partFilesOf)((0, sketch_1.variantDirOf)(sketch, variant))
73
+ .parts.map(resolve_product_1.partKeyOf)
74
+ .filter((key) => !sketch.targets.includes(key));
75
+ if (others.length > 0)
76
+ return `variant ${variant} also holds ${others.join(', ')}`;
77
+ const parts = [...sketch.targets, ...(0, merge_preview_1.mergePreviewOf)({ product, sketch, variant }).shared];
78
+ for (const part of parts) {
79
+ const change = yield partChangeOf(Object.assign(Object.assign({}, options), { part, named: parts.length > 1 }));
80
+ if (change !== null)
81
+ return change;
82
+ }
83
+ return affectedChangeOf(options);
55
84
  });
56
85
  /**
57
- * `true` when every state of every variant of the sketch draws the same pixels as the product does now, in
58
- * every frame; otherwise why not. A variant that holds another part than the target, or a state that fails to
59
- * draw, counts as a change.
86
+ * `true` when every state of every target of every live variant of the sketch draws the same pixels as the product
87
+ * does now, in every frame, and so does each state of every part a `shared/` edit of the variant reaches and of every
88
+ * part that shows one of them; otherwise why not. A variant that holds a part other than a target, or a state that
89
+ * fails to draw, counts as a change.
60
90
  */
61
91
  const sketchShowsNoChange = (options) => __awaiter(void 0, void 0, void 0, function* () {
62
92
  const { sketch } = options;
63
- if (sketch.variants.length === 0)
64
- return 'the sketch has no variant';
65
- const changes = yield Promise.all(sketch.variants.map((variant) => variantChangeOf(Object.assign(Object.assign({}, options), { variant }))));
93
+ const live = sketch.variants.filter((variant) => !(0, sketch_1.rejectionOf)(sketch, variant));
94
+ if (live.length === 0)
95
+ return 'the sketch has no live variant';
96
+ const changes = yield Promise.all(live.map((variant) => variantChangeOf(Object.assign(Object.assign({}, options), { variant }))));
66
97
  const found = changes.filter((change) => change !== null);
67
98
  return found.length === 0 ? true : found.join('; ');
68
99
  });
@@ -1 +1 @@
1
- {"version":3,"file":"no-visible-change.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/no-visible-change.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,gDAAgD;AAChD,wCAAyC;AACzC,wDAAgE;AAChE,uCAA0C;AAC1C,qCAAgD;AAChD,yDAAyE;AAEzE,MAAM,eAAe,GAAG,CAAO,OAM9B,EAA0B,EAAE;;IAC3B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9D,MAAM,MAAM,GAAG,IAAA,qBAAW,EAAC,IAAA,qBAAY,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACtD,KAAK,CAAC,GAAG,CAAC,2BAAS,CAAC;SACpB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,WAAW,OAAO,eAAe,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAEnF,MAAM,IAAI,GAAG,MAAA,IAAA,uBAAa,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CACjE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,2BAAS,EAAC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,CAC5C,0CAAE,IAAI,CAAC;IAER,IAAI,CAAC,IAAI;QAAE,OAAO,WAAW,OAAO,kBAAkB,MAAM,CAAC,MAAM,EAAE,CAAC;IAEtE,MAAM,IAAI,GAAG,MAAM,IAAA,4BAAc,EAAC;QAChC,IAAI,EAAE,EAAE,IAAI,EAAE;QACd,OAAO,EAAE,OAAO,CAAC,IAAI;QACrB,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;KAC9F,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,WAAW,OAAO,mBAAmB,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7E,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,OAAO,gBAAgB,CAAC;IAExE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,SAAS,GAAc,CAAO,OAAO,EAAE,EAAE;QAC7C,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACrE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAA,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,IAAA,oCAAiB,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IACpG,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAE1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAExF,OAAO,WAAW,OAAO,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;AACrE,CAAC,CAAA,CAAC;AAEF;;;;GAIG;AACI,MAAM,mBAAmB,GAAG,CAAO,OAKzC,EAA0B,EAAE;IAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,2BAA2B,CAAC;IAErE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,iCAAM,OAAO,KAAE,OAAO,IAAG,CAAC,CAAC,CAAC;IAC9G,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IAE1D,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC,CAAA,CAAC;AAdW,QAAA,mBAAmB,uBAc9B"}
1
+ {"version":3,"file":"no-visible-change.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/no-visible-change.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,10 @@ const layers_1 = require("../layers");
8
8
  const product_1 = require("../product");
9
9
  const resolve_product_1 = require("../resolve-product");
10
10
  const sketch_1 = require("./sketch");
11
- const mayChange = (sketch, part) => (0, resolve_product_1.partKeyOf)(part) === sketch.target || part.layer === sketch.layer || layers_1.LAYER_USES[sketch.layer].includes(part.layer);
11
+ const mayChange = (sketch, part) => sketch.targets.some((key) => {
12
+ const layer = key.split('/')[0];
13
+ return key === (0, resolve_product_1.partKeyOf)(part) || part.layer === layer || layers_1.LAYER_USES[layer].includes(part.layer);
14
+ });
12
15
  /**
13
16
  * The product as one variant of a sketch draws it: each part the variant holds replaces the part the
14
17
  * product resolves under the same name, or joins it when the product has none. `sketched` names the
@@ -30,7 +33,9 @@ const overlaySketch = (options) => {
30
33
  .map((part) => ({
31
34
  rule: 'SKETCH',
32
35
  file: part.file,
33
- message: `a sketch on ${sketch.target} may change ${sketch.layer} and the layers below it, not ${(0, resolve_product_1.partKeyOf)(part)}`,
36
+ message: sketch.targets.length > 1
37
+ ? `a sketch on ${sketch.targets.join(', ')} may change their layers and the layers below them, not ${(0, resolve_product_1.partKeyOf)(part)}`
38
+ : `a sketch on ${sketch.target} may change ${sketch.layer} and the layers below it, not ${(0, resolve_product_1.partKeyOf)(part)}`,
34
39
  }));
35
40
  return Object.assign(Object.assign({}, product), { parts, fixtures: (_a = (0, product_1.fixturesOf)(dir)) !== null && _a !== void 0 ? _a : product.fixtures, problems: [...product.problems, ...own.problems, ...outside], sketched: [...keys], sharedDir: (0, sketch_1.sharedDirOf)(sketch), variantSharedDir: (0, sketch_1.variantSharedDirOf)(sketch, variant), assetsDir: (0, path_1.resolve)(dir, assets_1.ASSETS_FOLDER) });
36
41
  };
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/overlay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/overlay.ts"],"names":[],"mappings":"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"}
@@ -29,3 +29,15 @@ export declare const widthsOf: (source: string) => number[] | null;
29
29
  * without running it. An empty list when it has none or they are not written as a literal list.
30
30
  */
31
31
  export declare const interactionNamesOf: (source: string) => string[];
32
+ /**
33
+ * The motions a part file writes in `definePart({ motions: { … } })` with the `from` and `to` it gives as string
34
+ * literals, and the `motion` each literal rule in `rules` names, read without running it.
35
+ */
36
+ export declare const motionRefsOf: (source: string) => {
37
+ motions: {
38
+ name: string;
39
+ from: string | null;
40
+ to: string | null;
41
+ }[];
42
+ ruleMotions: string[];
43
+ };
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.interactionNamesOf = exports.widthsOf = exports.hasBadWidths = exports.withMadeBy = exports.withNote = exports.noteOf = exports.madeByOf = exports.stateNamesOf = void 0;
6
+ exports.motionRefsOf = exports.interactionNamesOf = exports.widthsOf = exports.hasBadWidths = exports.withMadeBy = exports.withNote = exports.noteOf = exports.madeByOf = exports.stateNamesOf = void 0;
7
7
  const typescript_1 = __importDefault(require("typescript"));
8
8
  const definitionOf = (source) => {
9
9
  const file = typescript_1.default.createSourceFile('part.ts', source, typescript_1.default.ScriptTarget.Latest, true);
@@ -154,4 +154,43 @@ const interactionNamesOf = (source) => {
154
154
  return interactions.elements.flatMap((element) => typescript_1.default.isStringLiteral(element) || typescript_1.default.isNoSubstitutionTemplateLiteral(element) ? [element.text] : []);
155
155
  };
156
156
  exports.interactionNamesOf = interactionNamesOf;
157
+ const literalOf = (node) => node && (typescript_1.default.isStringLiteral(node) || typescript_1.default.isNoSubstitutionTemplateLiteral(node)) ? node.text : null;
158
+ /**
159
+ * The motions a part file writes in `definePart({ motions: { … } })` with the `from` and `to` it gives as string
160
+ * literals, and the `motion` each literal rule in `rules` names, read without running it.
161
+ */
162
+ const motionRefsOf = (source) => {
163
+ var _a, _b;
164
+ const { definition } = definitionOf(source);
165
+ const motions = definition ? (_a = propertyOf(definition, 'motions')) === null || _a === void 0 ? void 0 : _a.initializer : undefined;
166
+ const rules = definition ? (_b = propertyOf(definition, 'rules')) === null || _b === void 0 ? void 0 : _b.initializer : undefined;
167
+ return {
168
+ motions: motions && typescript_1.default.isObjectLiteralExpression(motions)
169
+ ? motions.properties.flatMap((property) => {
170
+ var _a, _b;
171
+ if (!typescript_1.default.isPropertyAssignment(property) || !typescript_1.default.isObjectLiteralExpression(property.initializer))
172
+ return [];
173
+ const name = nameOf(property.name);
174
+ if (name === null)
175
+ return [];
176
+ const body = property.initializer;
177
+ return [
178
+ {
179
+ name,
180
+ from: literalOf((_a = propertyOf(body, 'from')) === null || _a === void 0 ? void 0 : _a.initializer),
181
+ to: literalOf((_b = propertyOf(body, 'to')) === null || _b === void 0 ? void 0 : _b.initializer),
182
+ },
183
+ ];
184
+ })
185
+ : [],
186
+ ruleMotions: rules && typescript_1.default.isArrayLiteralExpression(rules)
187
+ ? rules.elements.flatMap((rule) => {
188
+ var _a;
189
+ const name = typescript_1.default.isObjectLiteralExpression(rule) ? literalOf((_a = propertyOf(rule, 'motion')) === null || _a === void 0 ? void 0 : _a.initializer) : null;
190
+ return name === null ? [] : [name];
191
+ })
192
+ : [],
193
+ };
194
+ };
195
+ exports.motionRefsOf = motionRefsOf;
157
196
  //# sourceMappingURL=part-definition.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"part-definition.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/part-definition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"part-definition.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/part-definition.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { SHARED_FOLDER } from '../imports';
1
2
  import { Layer } from '../layers';
2
3
  import { ResolvedProduct } from '../resolve-product';
3
4
  export declare const SKETCH_STATUSES: readonly ["in progress", "ready"];
@@ -55,6 +56,8 @@ export type SketchRound = {
55
56
  };
56
57
  export type SketchFile = {
57
58
  target: string;
59
+ /** Every part the sketch targets, `target` first; absent on a sketch with one target. */
60
+ targets?: string[];
58
61
  status: SketchStatus;
59
62
  createdAt: string;
60
63
  /** The content hash of each part and of the fixtures in the product when the sketch was created or rebased. */
@@ -67,6 +70,7 @@ export type SketchFile = {
67
70
  };
68
71
  /** A sketch as read: `rounds` holds at least one round, and `variantInfo` names the round of every variant. */
69
72
  export type Sketch = SketchFile & {
73
+ targets: string[];
70
74
  rounds: SketchRound[];
71
75
  variantInfo: Record<string, SketchVariantInfo>;
72
76
  product: string;
@@ -83,8 +87,7 @@ export declare const sketchDirOf: (options: {
83
87
  sketch: SketchTarget;
84
88
  }) => string;
85
89
  export declare const variantDirOf: (sketch: Sketch, variant: string) => string;
86
- /** The folder of a sketch that holds no variant: code every variant imports as `@shared/<path>`. */
87
- export declare const SHARED_FOLDER = "shared";
90
+ export { SHARED_FOLDER };
88
91
  export declare const sharedDirOf: (sketch: Pick<Sketch, "dir">) => string;
89
92
  /** A variant's own `shared/` folder: a file there wins over the sketch's `shared/` file of the same path. */
90
93
  export declare const variantSharedDirOf: (sketch: Sketch, variant: string) => string;
@@ -110,6 +113,7 @@ export declare const listSketches: (options: {
110
113
  productDir: string;
111
114
  product: string;
112
115
  }) => (string | Sketch)[];
116
+ /** The open sketch that targets `sketch`, found by its first target or by any other it names; `null` when none does. */
113
117
  export declare const findSketch: (options: {
114
118
  productDir: string;
115
119
  product: string;
@@ -135,11 +139,12 @@ export declare const sketchSourceOf: (options: {
135
139
  * author. Each variant starts from `like` when given - renamed to the target, without its `madeBy`, and with its
136
140
  * sketch's `shared/` folder - else from the part the product resolves for the target, or from an empty part when the
137
141
  * target is new. A part's own `shared/` folder becomes the sketch's, imported as `@shared/`. A target holds one open
138
- * sketch at a time.
142
+ * sketch at a time. Each of `others` joins every variant the same way, as a further target; `like` takes one target only.
139
143
  */
140
144
  export declare const createSketch: (options: {
141
145
  product: ResolvedProduct;
142
146
  sketch: SketchTarget;
147
+ others?: SketchTarget[];
143
148
  variants: string[];
144
149
  roundTitle?: string;
145
150
  roundNote?: string;
@@ -18,6 +18,7 @@ const json_layout_1 = require("../../json-layout");
18
18
  const status_1 = require("../../status");
19
19
  const assets_1 = require("../assets");
20
20
  const imports_1 = require("../imports");
21
+ Object.defineProperty(exports, "SHARED_FOLDER", { enumerable: true, get: function () { return imports_1.SHARED_FOLDER; } });
21
22
  const layers_1 = require("../layers");
22
23
  const resolve_product_1 = require("../resolve-product");
23
24
  const baseline_1 = require("./baseline");
@@ -33,12 +34,10 @@ const sketchDirOf = (options) => (0, path_1.resolve)((0, exports.sketchesDirOf)(
33
34
  exports.sketchDirOf = sketchDirOf;
34
35
  const variantDirOf = (sketch, variant) => (0, path_1.resolve)(sketch.dir, variant);
35
36
  exports.variantDirOf = variantDirOf;
36
- /** The folder of a sketch that holds no variant: code every variant imports as `@shared/<path>`. */
37
- exports.SHARED_FOLDER = 'shared';
38
- const sharedDirOf = (sketch) => (0, path_1.resolve)(sketch.dir, exports.SHARED_FOLDER);
37
+ const sharedDirOf = (sketch) => (0, path_1.resolve)(sketch.dir, imports_1.SHARED_FOLDER);
39
38
  exports.sharedDirOf = sharedDirOf;
40
39
  /** A variant's own `shared/` folder: a file there wins over the sketch's `shared/` file of the same path. */
41
- const variantSharedDirOf = (sketch, variant) => (0, path_1.resolve)((0, exports.variantDirOf)(sketch, variant), exports.SHARED_FOLDER);
40
+ const variantSharedDirOf = (sketch, variant) => (0, path_1.resolve)((0, exports.variantDirOf)(sketch, variant), imports_1.SHARED_FOLDER);
42
41
  exports.variantSharedDirOf = variantSharedDirOf;
43
42
  const SOURCE = /\.(?:ts|js|mjs)$/u;
44
43
  const sourceFilesIn = (dir) => (0, fs_1.existsSync)(dir)
@@ -49,7 +48,7 @@ const sourceFilesIn = (dir) => (0, fs_1.existsSync)(dir)
49
48
  exports.sourceFilesIn = sourceFilesIn;
50
49
  const liftShared = (options) => {
51
50
  const { partDir, sketchSharedDir } = options;
52
- const shared = (0, path_1.resolve)(partDir, exports.SHARED_FOLDER);
51
+ const shared = (0, path_1.resolve)(partDir, imports_1.SHARED_FOLDER);
53
52
  if (!(0, fs_1.existsSync)(shared))
54
53
  return;
55
54
  for (const file of (0, exports.sourceFilesIn)(partDir)) {
@@ -66,6 +65,23 @@ const liftShared = (options) => {
66
65
  (0, fs_1.cpSync)(shared, sketchSharedDir, { recursive: true });
67
66
  (0, fs_1.rmSync)(shared, { recursive: true });
68
67
  };
68
+ const sharedClashOf = (parts) => {
69
+ const seen = new Map();
70
+ for (const part of parts) {
71
+ if (!part)
72
+ continue;
73
+ const shared = (0, path_1.resolve)((0, path_1.dirname)(part.file), imports_1.SHARED_FOLDER);
74
+ for (const file of (0, assets_1.filesBelow)(shared)) {
75
+ const path = (0, path_1.relative)(shared, file).split(path_1.sep).join('/');
76
+ const source = (0, fs_1.readFileSync)(file, 'utf8');
77
+ const held = seen.get(path);
78
+ if (held && held.source !== source)
79
+ return `${held.key} and ${(0, resolve_product_1.partKeyOf)(part)} each hold a different ${imports_1.SHARED_FOLDER}/${path} - rename one, then open the sketch`;
80
+ seen.set(path, { key: (0, resolve_product_1.partKeyOf)(part), source });
81
+ }
82
+ }
83
+ return undefined;
84
+ };
69
85
  /** Reads `<layer>/<name>` as a sketch target, or answers with why it is not one. */
70
86
  const parseTarget = (value) => {
71
87
  const [layer = '', name = '', ...rest] = (value !== null && value !== void 0 ? value : '').split('/');
@@ -74,7 +90,7 @@ const parseTarget = (value) => {
74
90
  return { layer, name };
75
91
  };
76
92
  exports.parseTarget = parseTarget;
77
- const isVariantName = (name) => NAME.test(name) && name !== exports.SHARED_FOLDER;
93
+ const isVariantName = (name) => NAME.test(name) && name !== imports_1.SHARED_FOLDER;
78
94
  exports.isVariantName = isVariantName;
79
95
  const foldersOf = (dir) => (0, fs_1.existsSync)(dir)
80
96
  ? (0, fs_1.readdirSync)(dir)
@@ -154,7 +170,7 @@ const authorsOf = (sketch, variant) => { var _a, _b, _c; return (_c = (_b = (_a
154
170
  exports.authorsOf = authorsOf;
155
171
  /** The sketch in a sketch folder, or why it cannot be read. */
156
172
  const readSketch = (options) => {
157
- var _a, _b, _c, _d;
173
+ var _a, _b, _c, _d, _e;
158
174
  const { product, dir } = options;
159
175
  const file = (0, path_1.resolve)(dir, exports.SKETCH_FILE);
160
176
  if (!(0, fs_1.existsSync)(file))
@@ -169,6 +185,12 @@ const readSketch = (options) => {
169
185
  const target = (0, exports.parseTarget)(parsed.target);
170
186
  if (typeof target === 'string')
171
187
  return `${file}: ${target}`;
188
+ const targets = (_a = parsed.targets) !== null && _a !== void 0 ? _a : [(0, resolve_product_1.partKeyOf)(target)];
189
+ if (!Array.isArray(targets) ||
190
+ targets[0] !== (0, resolve_product_1.partKeyOf)(target) ||
191
+ new Set(targets).size !== targets.length ||
192
+ targets.some((entry) => typeof (0, exports.parseTarget)(entry) === 'string'))
193
+ return `${file}: targets must list unique <layer>/<name> keys, the target first`;
172
194
  if (!isStatus(parsed.status))
173
195
  return `${file}: status must be one of ${exports.SKETCH_STATUSES.join(', ')}`;
174
196
  if (parsed.variantInfo !== undefined && !isVariantInfo(parsed.variantInfo))
@@ -177,16 +199,17 @@ const readSketch = (options) => {
177
199
  return `${file}: rejections must be { <variant>: [{ by: designer | agent, decidedAt, reason?, reasonBy?, reopened?: { by, decidedAt, reason? } }] }, each but the last reopened`;
178
200
  if (parsed.rounds !== undefined && !isRounds(parsed.rounds))
179
201
  return `${file}: rounds must be a non-empty list of { key, title, note } with unique keys`;
180
- const rounds = (_a = parsed.rounds) !== null && _a !== void 0 ? _a : [firstRoundOf()];
202
+ const rounds = (_b = parsed.rounds) !== null && _b !== void 0 ? _b : [firstRoundOf()];
181
203
  const running = (0, exports.runningRoundOf)({ rounds }).key;
182
- const variants = foldersOf(dir).filter((folder) => folder !== exports.SHARED_FOLDER);
204
+ const variants = foldersOf(dir).filter((folder) => folder !== imports_1.SHARED_FOLDER);
183
205
  const variantInfo = Object.assign({}, parsed.variantInfo);
184
206
  for (const variant of variants)
185
- variantInfo[variant] = Object.assign(Object.assign({}, variantInfo[variant]), { round: (_c = (_b = variantInfo[variant]) === null || _b === void 0 ? void 0 : _b.round) !== null && _c !== void 0 ? _c : running });
207
+ variantInfo[variant] = Object.assign(Object.assign({}, variantInfo[variant]), { round: (_d = (_c = variantInfo[variant]) === null || _c === void 0 ? void 0 : _c.round) !== null && _d !== void 0 ? _d : running });
186
208
  const lost = variants.find((variant) => !rounds.some((round) => { var _a; return round.key === ((_a = variantInfo[variant]) === null || _a === void 0 ? void 0 : _a.round); }));
187
209
  if (lost !== undefined)
188
- return `${file}: variant ${lost} names round "${(_d = variantInfo[lost]) === null || _d === void 0 ? void 0 : _d.round}", which rounds does not hold`;
189
- return Object.assign(Object.assign({}, parsed), { rounds,
210
+ return `${file}: variant ${lost} names round "${(_e = variantInfo[lost]) === null || _e === void 0 ? void 0 : _e.round}", which rounds does not hold`;
211
+ return Object.assign(Object.assign({}, parsed), { targets,
212
+ rounds,
190
213
  variantInfo,
191
214
  product, layer: target.layer, name: target.name, dir,
192
215
  variants });
@@ -195,13 +218,18 @@ exports.readSketch = readSketch;
195
218
  /** Every sketch folder of a product, read; a folder that cannot be read answers with its problem. */
196
219
  const listSketches = (options) => foldersOf((0, exports.sketchesDirOf)(options.productDir)).map((folder) => (0, exports.readSketch)({ product: options.product, dir: (0, path_1.resolve)((0, exports.sketchesDirOf)(options.productDir), folder) }));
197
220
  exports.listSketches = listSketches;
221
+ /** The open sketch that targets `sketch`, found by its first target or by any other it names; `null` when none does. */
198
222
  const findSketch = (options) => {
223
+ var _a;
199
224
  const dir = (0, exports.sketchDirOf)(options);
200
- return (0, fs_1.existsSync)(dir) ? (0, exports.readSketch)({ product: options.product, dir }) : null;
225
+ if ((0, fs_1.existsSync)(dir))
226
+ return (0, exports.readSketch)({ product: options.product, dir });
227
+ const key = (0, resolve_product_1.partKeyOf)(options.sketch);
228
+ return ((_a = (0, exports.listSketches)(options).find((sketch) => typeof sketch !== 'string' && sketch.targets.includes(key))) !== null && _a !== void 0 ? _a : null);
201
229
  };
202
230
  exports.findSketch = findSketch;
203
231
  const writeSketchFile = (sketch) => {
204
- const file = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ target: (0, resolve_product_1.partKeyOf)(sketch), status: sketch.status, createdAt: sketch.createdAt }, (sketch.baseline ? { baseline: sketch.baseline } : {})), (sketch.decision ? { decision: sketch.decision } : {})), { rounds: sketch.rounds }), (Object.keys(sketch.variantInfo).length > 0 ? { variantInfo: sketch.variantInfo } : {})), (sketch.rejections && Object.keys(sketch.rejections).length > 0 ? { rejections: sketch.rejections } : {}));
232
+ const file = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ target: (0, resolve_product_1.partKeyOf)(sketch) }, (sketch.targets.length > 1 ? { targets: sketch.targets } : {})), { status: sketch.status, createdAt: sketch.createdAt }), (sketch.baseline ? { baseline: sketch.baseline } : {})), (sketch.decision ? { decision: sketch.decision } : {})), { rounds: sketch.rounds }), (Object.keys(sketch.variantInfo).length > 0 ? { variantInfo: sketch.variantInfo } : {})), (sketch.rejections && Object.keys(sketch.rejections).length > 0 ? { rejections: sketch.rejections } : {}));
205
233
  (0, fs_1.writeFileSync)((0, path_1.resolve)(sketch.dir, exports.SKETCH_FILE), (0, json_layout_1.jsonLayoutOf)(file));
206
234
  };
207
235
  exports.writeSketchFile = writeSketchFile;
@@ -288,14 +316,22 @@ const variantInfoOf = (options) => {
288
316
  * author. Each variant starts from `like` when given - renamed to the target, without its `madeBy`, and with its
289
317
  * sketch's `shared/` folder - else from the part the product resolves for the target, or from an empty part when the
290
318
  * target is new. A part's own `shared/` folder becomes the sketch's, imported as `@shared/`. A target holds one open
291
- * sketch at a time.
319
+ * sketch at a time. Each of `others` joins every variant the same way, as a further target; `like` takes one target only.
292
320
  */
293
321
  const createSketch = (options) => {
322
+ var _a;
294
323
  const { product, sketch, variants, roundTitle, roundNote, author, like, variantNotes } = options;
295
324
  const dir = (0, exports.sketchDirOf)({ productDir: product.dir, sketch });
296
325
  const key = (0, resolve_product_1.partKeyOf)(sketch);
297
- if ((0, fs_1.existsSync)(dir))
298
- return `${key} already has an open sketch - merge or discard it first`;
326
+ const all = [sketch, ...((_a = options.others) !== null && _a !== void 0 ? _a : [])];
327
+ const targets = all.map(resolve_product_1.partKeyOf);
328
+ if (new Set(targets).size !== targets.length)
329
+ return 'name each target once';
330
+ if (like && all.length > 1)
331
+ return '--like starts one target - open a sketch with several targets without it';
332
+ const taken = all.find((target) => (0, exports.findSketch)({ productDir: product.dir, product: product.name, sketch: target }) !== null);
333
+ if ((0, fs_1.existsSync)(dir) || taken)
334
+ return `${(0, resolve_product_1.partKeyOf)(taken !== null && taken !== void 0 ? taken : sketch)} already has an open sketch - merge or discard it first`;
299
335
  if (variants.length === 0)
300
336
  return 'name at least one variant';
301
337
  const invalid = variants.find((variant) => !(0, exports.isVariantName)(variant));
@@ -303,34 +339,40 @@ const createSketch = (options) => {
303
339
  return `"${invalid}" is no variant name - use lower case letters, digits and dashes, and not "shared"`;
304
340
  if (new Set(variants).size !== variants.length)
305
341
  return 'each variant name must be unique';
306
- const existing = product.parts.find((part) => (0, resolve_product_1.partKeyOf)(part) === key);
342
+ const clash = like
343
+ ? undefined
344
+ : sharedClashOf(all.map((target) => product.parts.find((part) => (0, resolve_product_1.partKeyOf)(part) === (0, resolve_product_1.partKeyOf)(target))));
345
+ if (clash)
346
+ return clash;
307
347
  for (const variant of variants) {
308
- const folder = (0, path_1.resolve)(dir, variant, sketch.layer, sketch.name);
309
- (0, fs_1.mkdirSync)(folder, { recursive: true });
310
348
  (0, fs_1.mkdirSync)((0, path_1.resolve)(dir, variant, assets_1.ASSETS_FOLDER), { recursive: true });
311
- if (like) {
312
- copyPartAs({ from: like, to: folder, name: sketch.name });
313
- liftShared({ partDir: folder, sketchSharedDir: (0, path_1.resolve)(dir, exports.SHARED_FOLDER) });
314
- }
315
- else if (existing) {
316
- (0, fs_1.cpSync)((0, path_1.resolve)(existing.file, '..'), folder, { recursive: true });
317
- liftShared({ partDir: folder, sketchSharedDir: (0, path_1.resolve)(dir, exports.SHARED_FOLDER) });
318
- }
319
- else {
320
- if (sketch.layer === 'pages') {
349
+ for (const target of all) {
350
+ const folder = (0, path_1.resolve)(dir, variant, target.layer, target.name);
351
+ const existing = product.parts.find((part) => (0, resolve_product_1.partKeyOf)(part) === (0, resolve_product_1.partKeyOf)(target));
352
+ (0, fs_1.mkdirSync)(folder, { recursive: true });
353
+ if (like) {
354
+ copyPartAs({ from: like, to: folder, name: target.name });
355
+ liftShared({ partDir: folder, sketchSharedDir: (0, path_1.resolve)(dir, imports_1.SHARED_FOLDER) });
356
+ }
357
+ else if (existing) {
358
+ (0, fs_1.cpSync)((0, path_1.resolve)(existing.file, '..'), folder, { recursive: true });
359
+ liftShared({ partDir: folder, sketchSharedDir: (0, path_1.resolve)(dir, imports_1.SHARED_FOLDER) });
360
+ }
361
+ else if (target.layer === 'pages') {
321
362
  const widths = [...new Set(Object.values(product.presets).map((preset) => preset.width))].sort((a, b) => a - b);
322
- (0, fs_1.writeFileSync)((0, path_1.resolve)(folder, `${sketch.name}.ts`), pageStubOf({ name: sketch.name, madeBy: author, widths }));
363
+ (0, fs_1.writeFileSync)((0, path_1.resolve)(folder, `${target.name}.ts`), pageStubOf({ name: target.name, madeBy: author, widths }));
323
364
  }
324
365
  else {
325
- (0, fs_1.writeFileSync)((0, path_1.resolve)(folder, `${sketch.name}.ts`), stubOf(sketch.name));
326
- (0, fs_1.writeFileSync)((0, path_1.resolve)(folder, `${sketch.name}.css`), '');
366
+ (0, fs_1.writeFileSync)((0, path_1.resolve)(folder, `${target.name}.ts`), stubOf(target.name));
367
+ (0, fs_1.writeFileSync)((0, path_1.resolve)(folder, `${target.name}.css`), '');
327
368
  }
328
369
  }
329
370
  }
330
371
  if (like === null || like === void 0 ? void 0 : like.shared)
331
- (0, fs_1.cpSync)(like.shared, (0, path_1.resolve)(dir, exports.SHARED_FOLDER), { recursive: true });
372
+ (0, fs_1.cpSync)(like.shared, (0, path_1.resolve)(dir, imports_1.SHARED_FOLDER), { recursive: true });
332
373
  const created = {
333
374
  target: key,
375
+ targets,
334
376
  status: 'in progress',
335
377
  createdAt: new Date().toISOString(),
336
378
  baseline: (0, baseline_1.baselineOf)(product),