@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 @@
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/handoff.ts"],"names":[],"mappings":";;;AAAA,2BAA6D;AAC7D,+BAA+B;AAElB,QAAA,YAAY,GAAG,cAAc,CAAC;AAK3C,MAAM,aAAa,GAAG,CAAC,UAAkB,EAAE,EAAE,CAAC,IAAA,cAAO,EAAC,UAAU,EAAE,oBAAY,CAAC,CAAC;AAEzE,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAgC,EAAE;IAC9E,MAAM,IAAI,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAEvC,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAE/D,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACnE,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAC3B,CAAC,KAAK,EAAmC,EAAE,CACzC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAQ,KAAK,CAAC,CAAC,CAAkB,CAAC,EAAE,KAAK,QAAQ,CAClG,CACF;YACH,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAnBW,QAAA,WAAW,eAmBtB;AAEK,MAAM,aAAa,GAAG,CAAC,OAA0D,EAAE,EAAE;;IAC1F,MAAM,OAAO,mCACR,IAAA,mBAAW,EAAC,OAAO,CAAC,UAAU,CAAC,KAClC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,MAAA,OAAO,CAAC,EAAE,mCAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAC/D,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAElG,IAAA,kBAAa,EAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3F,CAAC,CAAC;AARW,QAAA,aAAa,iBAQxB"}
@@ -1,7 +1,10 @@
1
+ import { ProductSource } from './base';
1
2
  import { Problem } from './problem';
2
3
  import { ResolvedPart, ResolvedProduct } from './resolve-product';
3
4
  export declare const FIXTURES_SPECIFIER = "@system/fixtures";
4
5
  export declare const SHARED_PREFIX = "@shared/";
6
+ /** The folder of helper code that is no part: a product's own, a sketch's, or a sketch variant's, imported as `@shared/<path>`. */
7
+ export declare const SHARED_FOLDER = "shared";
5
8
  export type PartImport = {
6
9
  kind: 'part';
7
10
  layer: string;
@@ -49,15 +52,36 @@ export type SharedDirs = {
49
52
  sharedDir?: string;
50
53
  variantSharedDir?: string;
51
54
  };
52
- /** The folders `@shared/<path>` looks in, the variant's own `shared/` first. */
53
- export declare const sharedDirsOf: (product: SharedDirs) => string[];
55
+ type SharedSource = Pick<ProductSource, 'dir'> & {
56
+ base: Pick<ProductSource, 'dir'> | null;
57
+ };
58
+ /** The `shared/` folders of a product and of its base, in that order. */
59
+ export declare const productSharedDirsOf: (product: SharedSource) => string[];
60
+ /** The folders `@shared/<path>` looks in, first match wins: the variant's own `shared/`, the sketch's, the product's, its base's. */
61
+ export declare const sharedDirsOf: (product: SharedDirs & SharedSource) => string[];
62
+ /**
63
+ * The files in the product's own `shared/` folders, the variant's and the sketch's included but not its base's, that
64
+ * `files` import through `@shared/...` or a relative import, also through each other.
65
+ */
66
+ export declare const ownSharedFilesOf: (product: SharedDirs & SharedSource, files: string[]) => string[];
54
67
  /** The file `@shared/<path>` resolves to, the variant's own copy first; `null` when no folder holds it. */
55
68
  export declare const sharedFileOf: (options: {
56
69
  dirs: string[];
57
70
  path: string;
58
71
  }) => string | null;
59
72
  /**
60
- * Imports and stylesheet `url(@assets/...)` that name no part, fixture set or asset file, `@shared/` imports outside a sketch variant (`sharedDir` is the
73
+ * The files of the product's and its base's `shared/` folders that `files` import as `@shared/<path>`, and the
74
+ * files those reach in turn, each with its path inside its `shared/` folder, sorted by that path.
75
+ */
76
+ export declare const importedSharedOf: (options: {
77
+ product: SharedSource;
78
+ files: string[];
79
+ }) => {
80
+ path: string;
81
+ file: string;
82
+ }[];
83
+ /**
84
+ * Imports and stylesheet `url(@assets/...)` that name no part, fixture set, asset file or `shared/` file (`sharedDir` is the
61
85
  * sketch's `shared/` folder, `assetsDir` the variant's `assets/`), and relative imports that reach into another part.
62
86
  */
63
87
  export declare const importProblemsOf: (product: ResolvedProduct & SharedDirs & {
@@ -68,3 +92,4 @@ export declare const partsReachedFrom: (options: {
68
92
  product: ResolvedProduct;
69
93
  from: ResolvedPart;
70
94
  }) => ResolvedPart[];
95
+ export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.partsReachedFrom = exports.importProblemsOf = exports.sharedFileOf = exports.sharedDirsOf = exports.partDependenciesOf = exports.folderModulesOf = exports.importsOfPart = exports.classifyImport = exports.partSpecifierOf = exports.SHARED_PREFIX = exports.FIXTURES_SPECIFIER = void 0;
3
+ exports.partsReachedFrom = exports.importProblemsOf = exports.importedSharedOf = exports.sharedFileOf = exports.ownSharedFilesOf = exports.sharedDirsOf = exports.productSharedDirsOf = exports.partDependenciesOf = exports.folderModulesOf = exports.importsOfPart = exports.classifyImport = exports.partSpecifierOf = exports.SHARED_FOLDER = exports.SHARED_PREFIX = exports.FIXTURES_SPECIFIER = void 0;
4
4
  const fs_1 = require("fs");
5
5
  const path_1 = require("path");
6
6
  const vite_paths_1 = require("../vite-paths");
@@ -10,6 +10,8 @@ const ts_source_1 = require("./ts-source");
10
10
  const SYSTEM = '@system/';
11
11
  exports.FIXTURES_SPECIFIER = '@system/fixtures';
12
12
  exports.SHARED_PREFIX = '@shared/';
13
+ /** The folder of helper code that is no part: a product's own, a sketch's, or a sketch variant's, imported as `@shared/<path>`. */
14
+ exports.SHARED_FOLDER = 'shared';
13
15
  const STYLESHEET = /\.css(?:\?.*)?$/u;
14
16
  const partSpecifierOf = (part) => `${SYSTEM}${(0, resolve_product_1.partKeyOf)(part)}`;
15
17
  exports.partSpecifierOf = partSpecifierOf;
@@ -79,9 +81,54 @@ const leavesFolder = (part, specifier) => {
79
81
  const path = (0, path_1.relative)(folder, (0, path_1.resolve)(folder, (_a = specifier.split('?')[0]) !== null && _a !== void 0 ? _a : specifier));
80
82
  return path.startsWith('..') || (0, path_1.isAbsolute)(path);
81
83
  };
82
- /** The folders `@shared/<path>` looks in, the variant's own `shared/` first. */
83
- const sharedDirsOf = (product) => [product.variantSharedDir, product.sharedDir].filter((dir) => dir !== undefined);
84
+ /** The `shared/` folders of a product and of its base, in that order. */
85
+ const productSharedDirsOf = (product) => [
86
+ (0, path_1.resolve)(product.dir, exports.SHARED_FOLDER),
87
+ ...(product.base ? [(0, path_1.resolve)(product.base.dir, exports.SHARED_FOLDER)] : []),
88
+ ];
89
+ exports.productSharedDirsOf = productSharedDirsOf;
90
+ /** The folders `@shared/<path>` looks in, first match wins: the variant's own `shared/`, the sketch's, the product's, its base's. */
91
+ const sharedDirsOf = (product) => [
92
+ ...[product.variantSharedDir, product.sharedDir].filter((dir) => dir !== undefined),
93
+ ...(0, exports.productSharedDirsOf)(product),
94
+ ];
84
95
  exports.sharedDirsOf = sharedDirsOf;
96
+ const isBelow = (dir, file) => {
97
+ const path = (0, path_1.relative)(dir, file);
98
+ return path !== '' && !path.startsWith('..') && !(0, path_1.isAbsolute)(path);
99
+ };
100
+ /**
101
+ * The files in the product's own `shared/` folders, the variant's and the sketch's included but not its base's, that
102
+ * `files` import through `@shared/...` or a relative import, also through each other.
103
+ */
104
+ const ownSharedFilesOf = (product, files) => {
105
+ var _a;
106
+ const dirs = (0, exports.sharedDirsOf)(product);
107
+ const own = [product.variantSharedDir, product.sharedDir, (0, path_1.resolve)(product.dir, exports.SHARED_FOLDER)].filter((dir) => dir !== undefined);
108
+ const found = new Set();
109
+ const queue = [...files];
110
+ for (let file = queue.shift(); file !== undefined; file = queue.shift()) {
111
+ if (!file.endsWith('.ts') || !(0, fs_1.existsSync)(file))
112
+ continue;
113
+ for (const specifier of (0, ts_source_1.importsOf)((0, fs_1.readFileSync)(file, 'utf8'))) {
114
+ const imported = (0, exports.classifyImport)(specifier);
115
+ const path = (_a = specifier.split('?')[0]) !== null && _a !== void 0 ? _a : specifier;
116
+ const shared = imported.kind === 'shared'
117
+ ? (0, exports.sharedFileOf)({ dirs, path: imported.path })
118
+ : imported.kind === 'relative'
119
+ ? STYLESHEET.test(path)
120
+ ? (0, path_1.resolve)((0, path_1.dirname)(file), path)
121
+ : (0, vite_paths_1.sourceFileOf)((0, path_1.resolve)((0, path_1.dirname)(file), path))
122
+ : null;
123
+ if (!shared || found.has(shared) || !(0, fs_1.existsSync)(shared) || !own.some((dir) => isBelow(dir, shared)))
124
+ continue;
125
+ found.add(shared);
126
+ queue.push(shared);
127
+ }
128
+ }
129
+ return [...found].sort();
130
+ };
131
+ exports.ownSharedFilesOf = ownSharedFilesOf;
85
132
  /** The file `@shared/<path>` resolves to, the variant's own copy first; `null` when no folder holds it. */
86
133
  const sharedFileOf = (options) => {
87
134
  var _a;
@@ -95,8 +142,38 @@ const sharedFileOf = (options) => {
95
142
  return null;
96
143
  };
97
144
  exports.sharedFileOf = sharedFileOf;
145
+ const SOURCE_FILE = /\.(?:ts|js|mjs)$/u;
146
+ /**
147
+ * The files of the product's and its base's `shared/` folders that `files` import as `@shared/<path>`, and the
148
+ * files those reach in turn, each with its path inside its `shared/` folder, sorted by that path.
149
+ */
150
+ const importedSharedOf = (options) => {
151
+ var _a;
152
+ const dirs = (0, exports.productSharedDirsOf)(options.product);
153
+ const reached = new Map();
154
+ const queue = options.files.filter((file) => SOURCE_FILE.test(file));
155
+ for (let file = queue.shift(); file !== undefined; file = queue.shift()) {
156
+ for (const specifier of (0, ts_source_1.importsOf)((0, fs_1.readFileSync)(file, 'utf8'))) {
157
+ const imported = (0, exports.classifyImport)(specifier);
158
+ const path = (_a = specifier.split('?')[0]) !== null && _a !== void 0 ? _a : specifier;
159
+ const found = imported.kind === 'shared'
160
+ ? (0, exports.sharedFileOf)({ dirs, path: imported.path })
161
+ : imported.kind === 'relative' && reached.has(file)
162
+ ? (0, exports.sharedFileOf)({ dirs: [(0, path_1.dirname)(file)], path })
163
+ : null;
164
+ const dir = found ? dirs.find((candidate) => found.startsWith(`${candidate}${path_1.sep}`)) : undefined;
165
+ if (!found || !dir || reached.has(found))
166
+ continue;
167
+ reached.set(found, (0, path_1.relative)(dir, found).split(path_1.sep).join('/'));
168
+ if (SOURCE_FILE.test(found))
169
+ queue.push(found);
170
+ }
171
+ }
172
+ return [...reached].map(([file, path]) => ({ path, file })).sort((a, b) => a.path.localeCompare(b.path));
173
+ };
174
+ exports.importedSharedOf = importedSharedOf;
98
175
  /**
99
- * Imports and stylesheet `url(@assets/...)` that name no part, fixture set or asset file, `@shared/` imports outside a sketch variant (`sharedDir` is the
176
+ * Imports and stylesheet `url(@assets/...)` that name no part, fixture set, asset file or `shared/` file (`sharedDir` is the
100
177
  * sketch's `shared/` folder, `assetsDir` the variant's `assets/`), and relative imports that reach into another part.
101
178
  */
102
179
  const importProblemsOf = (product) => {
@@ -125,10 +202,10 @@ const importProblemsOf = (product) => {
125
202
  return problem(`${imported.specifier} resolves to a part without ${imported.name}.css`);
126
203
  if (imported.kind === 'fixtures' && !product.fixtures)
127
204
  return problem(`${exports.FIXTURES_SPECIFIER} resolves to no fixtures.ts`);
128
- if (imported.kind === 'shared' && !product.sharedDir)
129
- return problem(`${imported.specifier} - only a part in a sketch variant may import the sketch's ${exports.SHARED_PREFIX}`);
130
205
  if (imported.kind === 'shared' && !(0, exports.sharedFileOf)({ dirs: (0, exports.sharedDirsOf)(product), path: imported.path }))
131
- return problem(`${imported.specifier} resolves to no file in the variant's or the sketch's shared/ folder`);
206
+ return problem(product.sharedDir
207
+ ? `${imported.specifier} resolves to no file in the variant's, the sketch's or the product's shared/ folder`
208
+ : `${imported.specifier} resolves to no file in the product's shared/ folder`);
132
209
  if (imported.kind === 'asset' && !(0, assets_1.assetFileOf)({ product, path: imported.path }))
133
210
  return problem(`${imported.specifier} resolves to no file in an assets/ folder`);
134
211
  if (imported.kind === 'relative' && leavesFolder(part, imported.specifier))
@@ -1 +1 @@
1
- {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/imports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/imports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { ResolvedPart, ResolvedProduct } from './resolve-product';
2
+ export declare const INVENTORY_FILE = "inventory.json";
3
+ /** The control ids of a page and its part hash, as the user approved them in Studio. */
4
+ export type InventoryApproval = {
5
+ ids: string[];
6
+ hash: string;
7
+ by: string;
8
+ at: string;
9
+ };
10
+ /** Whether the approved inventory of a page still holds: its ids and hash match, it reopened, or it never was approved. */
11
+ export type InventoryState = {
12
+ state: 'approved';
13
+ } | {
14
+ state: 'reopened';
15
+ added: string[];
16
+ removed: string[];
17
+ changed: boolean;
18
+ } | {
19
+ state: 'none';
20
+ };
21
+ /** The directory whose merged.json and inventory.json hold a part: its base's for a part the product takes from its base. */
22
+ export declare const partOwnerOf: (options: {
23
+ product: ResolvedProduct;
24
+ part: ResolvedPart;
25
+ }) => ResolvedProduct | {
26
+ dir: string;
27
+ base: null;
28
+ };
29
+ export declare const readInventory: (productDir: string) => Record<string, InventoryApproval>;
30
+ export declare const writeInventoryApproval: (options: {
31
+ productDir: string;
32
+ part: string;
33
+ approval: InventoryApproval;
34
+ }) => void;
35
+ export declare const inventoryStateOf: (options: {
36
+ approval: InventoryApproval | undefined;
37
+ ids: string[];
38
+ hash: string;
39
+ }) => InventoryState;
40
+ /** Why a page's inventory is not approved, for a gap line or Studio, or `null` when it is. */
41
+ export declare const inventoryReasonOf: (state: InventoryState) => string | null;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inventoryReasonOf = exports.inventoryStateOf = exports.writeInventoryApproval = exports.readInventory = exports.partOwnerOf = exports.INVENTORY_FILE = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ exports.INVENTORY_FILE = 'inventory.json';
7
+ const inventoryFileOf = (productDir) => (0, path_1.resolve)(productDir, exports.INVENTORY_FILE);
8
+ const isApproval = (value) => {
9
+ if (!value || typeof value !== 'object' || Array.isArray(value))
10
+ return false;
11
+ const { ids, hash, by, at } = value;
12
+ return (Array.isArray(ids) &&
13
+ ids.every((id) => typeof id === 'string') &&
14
+ typeof hash === 'string' &&
15
+ typeof by === 'string' &&
16
+ typeof at === 'string');
17
+ };
18
+ /** The directory whose merged.json and inventory.json hold a part: its base's for a part the product takes from its base. */
19
+ const partOwnerOf = (options) => options.part.origin === 'base' && options.product.base
20
+ ? { dir: options.product.base.dir, base: null }
21
+ : options.product;
22
+ exports.partOwnerOf = partOwnerOf;
23
+ const readInventory = (productDir) => {
24
+ const file = inventoryFileOf(productDir);
25
+ if (!(0, fs_1.existsSync)(file))
26
+ return {};
27
+ try {
28
+ const parsed = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
29
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
30
+ ? Object.fromEntries(Object.entries(parsed).filter((entry) => isApproval(entry[1])))
31
+ : {};
32
+ }
33
+ catch (_a) {
34
+ return {};
35
+ }
36
+ };
37
+ exports.readInventory = readInventory;
38
+ const writeInventoryApproval = (options) => {
39
+ const { productDir, part, approval } = options;
40
+ const approvals = Object.assign(Object.assign({}, (0, exports.readInventory)(productDir)), { [part]: Object.assign(Object.assign({}, approval), { ids: [...approval.ids].sort() }) });
41
+ const sorted = Object.fromEntries(Object.entries(approvals).sort(([a], [b]) => a.localeCompare(b)));
42
+ (0, fs_1.writeFileSync)(inventoryFileOf(productDir), `${JSON.stringify(sorted, null, 2)}\n`);
43
+ };
44
+ exports.writeInventoryApproval = writeInventoryApproval;
45
+ const inventoryStateOf = (options) => {
46
+ const { approval, ids, hash } = options;
47
+ if (!approval)
48
+ return { state: 'none' };
49
+ const added = ids.filter((id) => !approval.ids.includes(id)).sort();
50
+ const removed = approval.ids.filter((id) => !ids.includes(id)).sort();
51
+ const changed = approval.hash !== hash;
52
+ return added.length > 0 || removed.length > 0 || changed
53
+ ? { state: 'reopened', added, removed, changed }
54
+ : { state: 'approved' };
55
+ };
56
+ exports.inventoryStateOf = inventoryStateOf;
57
+ /** Why a page's inventory is not approved, for a gap line or Studio, or `null` when it is. */
58
+ const inventoryReasonOf = (state) => {
59
+ if (state.state === 'approved')
60
+ return null;
61
+ if (state.state === 'none')
62
+ return 'its control inventory is not approved';
63
+ const reasons = [
64
+ ...(state.added.length > 0 ? [`added ${state.added.join(', ')}`] : []),
65
+ ...(state.removed.length > 0 ? [`removed ${state.removed.join(', ')}`] : []),
66
+ ...(state.changed ? ['the part changed'] : []),
67
+ ];
68
+ return `its approved control inventory reopened: ${reasons.join('; ')}`;
69
+ };
70
+ exports.inventoryReasonOf = inventoryReasonOf;
71
+ //# sourceMappingURL=inventory-approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inventory-approval.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/inventory-approval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { Browser } from '../thumb';
2
+ import { FrameAddress, FrameBox, SeenFrame } from './complete';
3
+ import { InventoryApproval, InventoryState } from './inventory-approval';
4
+ import { ResolvedProduct } from './resolve-product';
5
+ import { SystemModules } from './system-modules';
6
+ /** `declared` is marked and declared; `undeclared` (red) is a control without a declaration; `unclassified` (amber) only looks interactive. */
7
+ export type InventoryStatus = 'declared' | 'undeclared' | 'unclassified';
8
+ /** One numbered control in a rest frame. A control keeps its number in every frame that draws it. */
9
+ export type InventoryControl = {
10
+ number: number;
11
+ id: string;
12
+ status: InventoryStatus;
13
+ kind: string;
14
+ inputs: string[];
15
+ surfaces: string[];
16
+ states: number;
17
+ box: FrameBox | null;
18
+ };
19
+ /** A rest frame of a page, the URL of its picture and the controls it draws, in its pixels. */
20
+ export type InventoryFrame = FrameAddress & {
21
+ shot: string;
22
+ controls: InventoryControl[];
23
+ };
24
+ /** The control inventory of a page, its part hash, and whether its approval holds. `dir` holds its inventory.json. */
25
+ export type Inventory = {
26
+ part: string;
27
+ dir: string;
28
+ hash: string;
29
+ ids: string[];
30
+ findings: number;
31
+ approval: InventoryApproval | null;
32
+ state: InventoryState;
33
+ reason: string | null;
34
+ frames: InventoryFrame[];
35
+ };
36
+ /** Numbers the declared, undeclared and unclassified controls each rest frame draws, top to bottom. */
37
+ export declare const inventoryFramesOf: (options: {
38
+ product: string;
39
+ part: string;
40
+ controls: unknown;
41
+ frames: SeenFrame[];
42
+ addresses: FrameAddress[];
43
+ }) => InventoryFrame[];
44
+ /** Draws the rest frames of a page and answers its control inventory and approval state, or why it cannot. */
45
+ export declare const inventoryOf: (options: {
46
+ product: ResolvedProduct;
47
+ part: string;
48
+ system: SystemModules;
49
+ base: string;
50
+ load: (id: string) => Promise<unknown>;
51
+ draw: <T>(job: (browser: Browser) => Promise<T>) => Promise<T>;
52
+ }) => Promise<Inventory | string>;
53
+ /**
54
+ * Records the user's approval of the inventory Studio showed, or answers why it is refused: `hash` is the part hash
55
+ * that inventory had, and a page with an undeclared or unclassified control cannot be approved.
56
+ */
57
+ export declare const approveInventory: (options: {
58
+ inventory: Inventory;
59
+ hash: unknown;
60
+ by: unknown;
61
+ at?: string;
62
+ }) => {
63
+ status: number;
64
+ error: string;
65
+ } | InventoryApproval;
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __rest = (this && this.__rest) || function (s, e) {
12
+ var t = {};
13
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
14
+ t[p] = s[p];
15
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
16
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
17
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
18
+ t[p[i]] = s[p[i]];
19
+ }
20
+ return t;
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.approveInventory = exports.inventoryOf = exports.inventoryFramesOf = void 0;
24
+ const shot_1 = require("../shot");
25
+ const complete_1 = require("./complete");
26
+ const inventory_approval_1 = require("./inventory-approval");
27
+ const resolve_product_1 = require("./resolve-product");
28
+ const shotOf = (options) => {
29
+ const { product, part, address } = options;
30
+ const search = new URLSearchParams({ product, part, state: address.state });
31
+ if (address.preset !== null)
32
+ search.set('preset', address.preset);
33
+ else if (address.width !== null)
34
+ search.set('width', String(address.width));
35
+ return `${shot_1.SHOT_PATH}?${search.toString()}`;
36
+ };
37
+ const byPlace = (a, b) => { var _a, _b, _c, _d, _e, _f, _g, _h; return ((_b = (_a = a.box) === null || _a === void 0 ? void 0 : _a.y) !== null && _b !== void 0 ? _b : Infinity) - ((_d = (_c = b.box) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : Infinity) || ((_f = (_e = a.box) === null || _e === void 0 ? void 0 : _e.x) !== null && _f !== void 0 ? _f : Infinity) - ((_h = (_g = b.box) === null || _g === void 0 ? void 0 : _g.x) !== null && _h !== void 0 ? _h : Infinity); };
38
+ /** Numbers the declared, undeclared and unclassified controls each rest frame draws, top to bottom. */
39
+ const inventoryFramesOf = (options) => {
40
+ var _a, _b;
41
+ const { product, part, frames, addresses } = options;
42
+ const declared = (_a = (0, complete_1.declaredControlsOf)(options.controls)) !== null && _a !== void 0 ? _a : {};
43
+ const isFinding = (0, complete_1.isFindingOf)(declared);
44
+ const rest = frames.filter((frame) => frame.interaction === null);
45
+ const drawn = rest.map((frame) => {
46
+ var _a;
47
+ return [
48
+ ...frame.controls.map((control) => {
49
+ var _a, _b, _c, _d;
50
+ const known = declared[control.id];
51
+ return {
52
+ key: `declared ${control.id}`,
53
+ id: control.id,
54
+ status: known ? 'declared' : 'undeclared',
55
+ kind: (_a = known === null || known === void 0 ? void 0 : known.kind) !== null && _a !== void 0 ? _a : '',
56
+ inputs: (_b = known === null || known === void 0 ? void 0 : known.input) !== null && _b !== void 0 ? _b : [],
57
+ surfaces: Object.keys((_c = known === null || known === void 0 ? void 0 : known.surfaces) !== null && _c !== void 0 ? _c : {}),
58
+ box: (_d = control.box) !== null && _d !== void 0 ? _d : null,
59
+ };
60
+ }),
61
+ ...((_a = frame.found) !== null && _a !== void 0 ? _a : []).filter(isFinding).map((found) => {
62
+ var _a;
63
+ return ({
64
+ key: (0, complete_1.findingKeyOf)(found),
65
+ id: found.path,
66
+ status: found.kind === 'control' ? 'undeclared' : 'unclassified',
67
+ kind: found.what,
68
+ inputs: [],
69
+ surfaces: [],
70
+ box: (_a = found.box) !== null && _a !== void 0 ? _a : null,
71
+ });
72
+ }),
73
+ ].sort(byPlace);
74
+ });
75
+ const numbers = new Map();
76
+ const counts = new Map();
77
+ for (const controls of drawn) {
78
+ for (const { key } of controls)
79
+ if (!numbers.has(key))
80
+ numbers.set(key, numbers.size + 1);
81
+ for (const key of new Set(controls.map((control) => control.key)))
82
+ counts.set(key, ((_b = counts.get(key)) !== null && _b !== void 0 ? _b : 0) + 1);
83
+ }
84
+ return rest.flatMap((frame, index) => {
85
+ var _a;
86
+ const address = addresses.find((candidate) => candidate.state === frame.state);
87
+ return address
88
+ ? [
89
+ Object.assign(Object.assign({}, address), { shot: shotOf({ product, part, address }), controls: ((_a = drawn[index]) !== null && _a !== void 0 ? _a : []).map((_a) => {
90
+ var _b, _c;
91
+ var { key } = _a, control = __rest(_a, ["key"]);
92
+ return (Object.assign(Object.assign({}, control), { number: (_b = numbers.get(key)) !== null && _b !== void 0 ? _b : 0, states: (_c = counts.get(key)) !== null && _c !== void 0 ? _c : 0 }));
93
+ }) }),
94
+ ]
95
+ : [];
96
+ });
97
+ };
98
+ exports.inventoryFramesOf = inventoryFramesOf;
99
+ /** Draws the rest frames of a page and answers its control inventory and approval state, or why it cannot. */
100
+ const inventoryOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
101
+ var _a, _b, _c;
102
+ const { product, part } = options;
103
+ const resolved = product.parts.find((candidate) => (0, resolve_product_1.partKeyOf)(candidate) === part);
104
+ if (!resolved)
105
+ return `product "${product.name}" has no part "${part}"`;
106
+ if (resolved.layer !== 'pages')
107
+ return `${part} is no page - only a page has a control inventory`;
108
+ const sight = yield (0, complete_1.seePart)(Object.assign(Object.assign({}, options), { part: resolved, restOnly: true }));
109
+ if (typeof sight === 'string')
110
+ return (_a = sight.split('\n')[0]) !== null && _a !== void 0 ? _a : '';
111
+ if (sight.refused.length > 0)
112
+ return sight.refused.join('; ');
113
+ const frames = (0, exports.inventoryFramesOf)({
114
+ product: product.name,
115
+ part,
116
+ controls: (_b = sight.definition) === null || _b === void 0 ? void 0 : _b.controls,
117
+ frames: sight.seen,
118
+ addresses: sight.addresses,
119
+ });
120
+ const ids = (0, complete_1.inventoryIdsOf)(sight.seen);
121
+ const approval = (_c = (0, inventory_approval_1.readInventory)(sight.owner.dir)[part]) !== null && _c !== void 0 ? _c : null;
122
+ const state = (0, inventory_approval_1.inventoryStateOf)({ approval: approval !== null && approval !== void 0 ? approval : undefined, ids, hash: sight.hash });
123
+ const findings = new Set(frames.flatMap((frame) => frame.controls.filter((control) => control.status !== 'declared').map((control) => control.number))).size;
124
+ return {
125
+ part,
126
+ hash: sight.hash,
127
+ ids,
128
+ findings,
129
+ approval,
130
+ state,
131
+ reason: (0, inventory_approval_1.inventoryReasonOf)(state),
132
+ frames,
133
+ dir: sight.owner.dir,
134
+ };
135
+ });
136
+ exports.inventoryOf = inventoryOf;
137
+ /**
138
+ * Records the user's approval of the inventory Studio showed, or answers why it is refused: `hash` is the part hash
139
+ * that inventory had, and a page with an undeclared or unclassified control cannot be approved.
140
+ */
141
+ const approveInventory = (options) => {
142
+ var _a;
143
+ const { inventory, hash, by } = options;
144
+ if (typeof by !== 'string' || by.trim() === '')
145
+ return { status: 400, error: 'by is required' };
146
+ if (typeof hash !== 'string' || hash === '')
147
+ return { status: 400, error: 'hash is required' };
148
+ if (inventory.findings > 0)
149
+ return {
150
+ status: 422,
151
+ error: `${inventory.part} has ${inventory.findings} undeclared or unclassified control(s) - declare them before approving`,
152
+ };
153
+ if (hash !== inventory.hash)
154
+ return {
155
+ status: 409,
156
+ error: `${inventory.part} changed since its inventory was shown - reload and check it again`,
157
+ };
158
+ const approval = {
159
+ ids: inventory.ids,
160
+ hash,
161
+ by: by.trim(),
162
+ at: (_a = options.at) !== null && _a !== void 0 ? _a : new Date().toISOString(),
163
+ };
164
+ (0, inventory_approval_1.writeInventoryApproval)({ productDir: inventory.dir, part: inventory.part, approval });
165
+ return approval;
166
+ };
167
+ exports.approveInventory = approveInventory;
168
+ //# sourceMappingURL=inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inventory.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/inventory.ts"],"names":[],"mappings":"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"}