@ethlete/cli 3.0.0-next.21 → 3.0.0-next.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +198 -0
- package/design/assets.d.ts +9 -0
- package/design/define-call.ts +20 -11
- package/design/define-part.ts +102 -0
- package/design/embed-page.ts +70 -0
- package/design/interaction-rows.ts +32 -0
- package/design/mark-part.ts +66 -0
- package/design/svg-asset.ts +36 -0
- package/design/systems/config.json +10 -0
- package/design/systems/ethlete-components/components/button/button.ts +18 -0
- package/design/web/env.d.ts +20 -0
- package/design/web/frame.ts +173 -41
- package/design/wireframe-kit.ts +386 -0
- package/package.json +4 -2
- package/playwright/failure-reporter.d.ts +2 -0
- package/playwright/failure-reporter.js +1 -0
- package/src/index.js.map +1 -1
- package/src/lib/api/api-command.js.map +1 -1
- package/src/lib/api/api-context.js.map +1 -1
- package/src/lib/api/api-state.js.map +1 -1
- package/src/lib/api/auth-hint.js.map +1 -1
- package/src/lib/api/clear.js.map +1 -1
- package/src/lib/api/clone.js.map +1 -1
- package/src/lib/api/compose.js.map +1 -1
- package/src/lib/api/definition.js.map +1 -1
- package/src/lib/api/doctor.js.map +1 -1
- package/src/lib/api/fingerprint.js.map +1 -1
- package/src/lib/api/git.js.map +1 -1
- package/src/lib/api/help.js.map +1 -1
- package/src/lib/api/index.js.map +1 -1
- package/src/lib/api/load-definitions.js.map +1 -1
- package/src/lib/api/lock.js.map +1 -1
- package/src/lib/api/parse-argv.js.map +1 -1
- package/src/lib/api/ports.js.map +1 -1
- package/src/lib/api/resolve-checkout.js.map +1 -1
- package/src/lib/api/run-locked.js.map +1 -1
- package/src/lib/api/run-ready.js.map +1 -1
- package/src/lib/api/run-snapshot.js.map +1 -1
- package/src/lib/api/run-status.js.map +1 -1
- package/src/lib/api/run.js.map +1 -1
- package/src/lib/api/seeds.js.map +1 -1
- package/src/lib/api/setup.js.map +1 -1
- package/src/lib/api/snapshot.js.map +1 -1
- package/src/lib/api/state.js.map +1 -1
- package/src/lib/api/suggest.js.map +1 -1
- package/src/lib/api/validate-definition.js.map +1 -1
- package/src/lib/auth/auth-command.js.map +1 -1
- package/src/lib/auth/composer-auth.js.map +1 -1
- package/src/lib/auth/composer-repositories.js.map +1 -1
- package/src/lib/auth/gitlab-token.js.map +1 -1
- package/src/lib/auth/index.js.map +1 -1
- package/src/lib/config/diagnose.js.map +1 -1
- package/src/lib/config/index.js.map +1 -1
- package/src/lib/config/local-config.js.map +1 -1
- package/src/lib/design/asset-shot.d.ts +26 -0
- package/src/lib/design/asset-shot.js +191 -0
- package/src/lib/design/asset-shot.js.map +1 -0
- package/src/lib/design/browser.js.map +1 -1
- package/src/lib/design/calls-tsconfig.d.ts +14 -1
- package/src/lib/design/calls-tsconfig.js +23 -18
- package/src/lib/design/calls-tsconfig.js.map +1 -1
- package/src/lib/design/calls.d.ts +28 -0
- package/src/lib/design/calls.js +58 -0
- package/src/lib/design/calls.js.map +1 -0
- package/src/lib/design/changed-parts.d.ts +51 -0
- package/src/lib/design/changed-parts.js +103 -0
- package/src/lib/design/changed-parts.js.map +1 -0
- package/src/lib/design/check.js +53 -54
- package/src/lib/design/check.js.map +1 -1
- package/src/lib/design/contact-sheet.d.ts +86 -0
- package/src/lib/design/contact-sheet.js +197 -0
- package/src/lib/design/contact-sheet.js.map +1 -0
- package/src/lib/design/design-command.js +167 -6
- package/src/lib/design/design-command.js.map +1 -1
- package/src/lib/design/force-interactions.d.ts +13 -0
- package/src/lib/design/force-interactions.js +75 -0
- package/src/lib/design/force-interactions.js.map +1 -0
- package/src/lib/design/inbox-command.d.ts +21 -0
- package/src/lib/design/inbox-command.js +156 -0
- package/src/lib/design/inbox-command.js.map +1 -0
- package/src/lib/design/index.js.map +1 -1
- package/src/lib/design/json-layout.d.ts +5 -0
- package/src/lib/design/json-layout.js +41 -0
- package/src/lib/design/json-layout.js.map +1 -0
- package/src/lib/design/legacy.d.ts +7 -0
- package/src/lib/design/legacy.js +23 -8
- package/src/lib/design/legacy.js.map +1 -1
- package/src/lib/design/merge-compare.d.ts +57 -0
- package/src/lib/design/merge-compare.js +80 -0
- package/src/lib/design/merge-compare.js.map +1 -0
- package/src/lib/design/missing-package.js.map +1 -1
- package/src/lib/design/new-call.js.map +1 -1
- package/src/lib/design/part-marks.d.ts +12 -0
- package/src/lib/design/part-marks.js +38 -0
- package/src/lib/design/part-marks.js.map +1 -0
- package/src/lib/design/paths.d.ts +35 -2
- package/src/lib/design/paths.js +62 -4
- package/src/lib/design/paths.js.map +1 -1
- package/src/lib/design/product-command.d.ts +38 -0
- package/src/lib/design/product-command.js +158 -0
- package/src/lib/design/product-command.js.map +1 -0
- package/src/lib/design/ready-shots.d.ts +13 -0
- package/src/lib/design/ready-shots.js +55 -0
- package/src/lib/design/ready-shots.js.map +1 -0
- package/src/lib/design/render-fields.js.map +1 -1
- package/src/lib/design/render-packages.js.map +1 -1
- package/src/lib/design/render-worker.js.map +1 -1
- package/src/lib/design/render.d.ts +11 -2
- package/src/lib/design/render.js +60 -15
- package/src/lib/design/render.js.map +1 -1
- package/src/lib/design/serve.d.ts +17 -0
- package/src/lib/design/serve.js +487 -103
- package/src/lib/design/serve.js.map +1 -1
- package/src/lib/design/shot-command.d.ts +100 -0
- package/src/lib/design/shot-command.js +453 -0
- package/src/lib/design/shot-command.js.map +1 -0
- package/src/lib/design/shot.d.ts +97 -0
- package/src/lib/design/shot.js +346 -0
- package/src/lib/design/shot.js.map +1 -0
- package/src/lib/design/sketch-at.d.ts +16 -0
- package/src/lib/design/sketch-at.js +34 -0
- package/src/lib/design/sketch-at.js.map +1 -0
- package/src/lib/design/sketch-command.d.ts +15 -0
- package/src/lib/design/sketch-command.js +618 -0
- package/src/lib/design/sketch-command.js.map +1 -0
- package/src/lib/design/ssr-shims.js.map +1 -1
- package/src/lib/design/stamp.js.map +1 -1
- package/src/lib/design/status.d.ts +2 -2
- package/src/lib/design/status.js +2 -2
- package/src/lib/design/status.js.map +1 -1
- package/src/lib/design/studio-api.d.ts +112 -0
- package/src/lib/design/studio-api.js +489 -0
- package/src/lib/design/studio-api.js.map +1 -0
- package/src/lib/design/system/accept-command.d.ts +7 -0
- package/src/lib/design/system/accept-command.js +55 -0
- package/src/lib/design/system/accept-command.js.map +1 -0
- package/src/lib/design/system/assets.d.ts +34 -0
- package/src/lib/design/system/assets.js +64 -0
- package/src/lib/design/system/assets.js.map +1 -0
- package/src/lib/design/system/base.d.ts +33 -0
- package/src/lib/design/system/base.js +49 -0
- package/src/lib/design/system/base.js.map +1 -0
- package/src/lib/design/system/check-system.d.ts +23 -0
- package/src/lib/design/system/check-system.js +151 -0
- package/src/lib/design/system/check-system.js.map +1 -0
- package/src/lib/design/system/colour.d.ts +2 -0
- package/src/lib/design/system/colour.js +9 -0
- package/src/lib/design/system/colour.js.map +1 -0
- package/src/lib/design/system/comments/comment.d.ts +196 -0
- package/src/lib/design/system/comments/comment.js +332 -0
- package/src/lib/design/system/comments/comment.js.map +1 -0
- package/src/lib/design/system/comments/complete.d.ts +15 -0
- package/src/lib/design/system/comments/complete.js +63 -0
- package/src/lib/design/system/comments/complete.js.map +1 -0
- package/src/lib/design/system/comments/inbox.d.ts +49 -0
- package/src/lib/design/system/comments/inbox.js +100 -0
- package/src/lib/design/system/comments/inbox.js.map +1 -0
- package/src/lib/design/system/css-source.d.ts +12 -0
- package/src/lib/design/system/css-source.js +39 -0
- package/src/lib/design/system/css-source.js.map +1 -0
- package/src/lib/design/system/flows/flow.d.ts +66 -0
- package/src/lib/design/system/flows/flow.js +157 -0
- package/src/lib/design/system/flows/flow.js.map +1 -0
- package/src/lib/design/system/imports.d.ts +70 -0
- package/src/lib/design/system/imports.js +159 -0
- package/src/lib/design/system/imports.js.map +1 -0
- package/src/lib/design/system/kit.d.ts +4 -0
- package/src/lib/design/system/kit.js +51 -0
- package/src/lib/design/system/kit.js.map +1 -0
- package/src/lib/design/system/layers.d.ts +9 -0
- package/src/lib/design/system/layers.js +16 -0
- package/src/lib/design/system/layers.js.map +1 -0
- package/src/lib/design/system/list-system.d.ts +104 -0
- package/src/lib/design/system/list-system.js +212 -0
- package/src/lib/design/system/list-system.js.map +1 -0
- package/src/lib/design/system/notes/note.d.ts +53 -0
- package/src/lib/design/system/notes/note.js +116 -0
- package/src/lib/design/system/notes/note.js.map +1 -0
- package/src/lib/design/system/part-command.d.ts +7 -0
- package/src/lib/design/system/part-command.js +134 -0
- package/src/lib/design/system/part-command.js.map +1 -0
- package/src/lib/design/system/problem.d.ts +5 -0
- package/src/lib/design/system/problem.js +3 -0
- package/src/lib/design/system/problem.js.map +1 -0
- package/src/lib/design/system/product.d.ts +18 -0
- package/src/lib/design/system/product.js +35 -0
- package/src/lib/design/system/product.js.map +1 -0
- package/src/lib/design/system/render-check.d.ts +45 -0
- package/src/lib/design/system/render-check.js +427 -0
- package/src/lib/design/system/render-check.js.map +1 -0
- package/src/lib/design/system/resolve-product.d.ts +32 -0
- package/src/lib/design/system/resolve-product.js +62 -0
- package/src/lib/design/system/resolve-product.js.map +1 -0
- package/src/lib/design/system/rules/component-copy.d.ts +7 -0
- package/src/lib/design/system/rules/component-copy.js +53 -0
- package/src/lib/design/system/rules/component-copy.js.map +1 -0
- package/src/lib/design/system/rules/flow.d.ts +8 -0
- package/src/lib/design/system/rules/flow.js +60 -0
- package/src/lib/design/system/rules/flow.js.map +1 -0
- package/src/lib/design/system/rules/hard-coded-colour.d.ts +7 -0
- package/src/lib/design/system/rules/hard-coded-colour.js +27 -0
- package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -0
- package/src/lib/design/system/rules/interactions.d.ts +4 -0
- package/src/lib/design/system/rules/interactions.js +16 -0
- package/src/lib/design/system/rules/interactions.js.map +1 -0
- package/src/lib/design/system/rules/kit-outside-pages.d.ts +4 -0
- package/src/lib/design/system/rules/kit-outside-pages.js +14 -0
- package/src/lib/design/system/rules/kit-outside-pages.js.map +1 -0
- package/src/lib/design/system/rules/motion.d.ts +4 -0
- package/src/lib/design/system/rules/motion.js +13 -0
- package/src/lib/design/system/rules/motion.js.map +1 -0
- package/src/lib/design/system/rules/stale-comment.d.ts +8 -0
- package/src/lib/design/system/rules/stale-comment.js +51 -0
- package/src/lib/design/system/rules/stale-comment.js.map +1 -0
- package/src/lib/design/system/rules/stale-replace.d.ts +4 -0
- package/src/lib/design/system/rules/stale-replace.js +65 -0
- package/src/lib/design/system/rules/stale-replace.js.map +1 -0
- package/src/lib/design/system/rules/svg-asset.d.ts +6 -0
- package/src/lib/design/system/rules/svg-asset.js +30 -0
- package/src/lib/design/system/rules/svg-asset.js.map +1 -0
- package/src/lib/design/system/rules/token-selectors.d.ts +3 -0
- package/src/lib/design/system/rules/token-selectors.js +87 -0
- package/src/lib/design/system/rules/token-selectors.js.map +1 -0
- package/src/lib/design/system/rules/undefined-token.d.ts +8 -0
- package/src/lib/design/system/rules/undefined-token.js +103 -0
- package/src/lib/design/system/rules/undefined-token.js.map +1 -0
- package/src/lib/design/system/rules/unused-shared-export.d.ts +18 -0
- package/src/lib/design/system/rules/unused-shared-export.js +60 -0
- package/src/lib/design/system/rules/unused-shared-export.js.map +1 -0
- package/src/lib/design/system/rules/upward-dependency.d.ts +4 -0
- package/src/lib/design/system/rules/upward-dependency.js +17 -0
- package/src/lib/design/system/rules/upward-dependency.js.map +1 -0
- package/src/lib/design/system/rules/widths.d.ts +4 -0
- package/src/lib/design/system/rules/widths.js +14 -0
- package/src/lib/design/system/rules/widths.js.map +1 -0
- package/src/lib/design/system/sketch/baseline.d.ts +38 -0
- package/src/lib/design/system/sketch/baseline.js +66 -0
- package/src/lib/design/system/sketch/baseline.js.map +1 -0
- package/src/lib/design/system/sketch/check-format.d.ts +17 -0
- package/src/lib/design/system/sketch/check-format.js +56 -0
- package/src/lib/design/system/sketch/check-format.js.map +1 -0
- package/src/lib/design/system/sketch/check-sketches.d.ts +38 -0
- package/src/lib/design/system/sketch/check-sketches.js +104 -0
- package/src/lib/design/system/sketch/check-sketches.js.map +1 -0
- package/src/lib/design/system/sketch/cli-args.d.ts +26 -0
- package/src/lib/design/system/sketch/cli-args.js +63 -0
- package/src/lib/design/system/sketch/cli-args.js.map +1 -0
- package/src/lib/design/system/sketch/duplicate-class.d.ts +14 -0
- package/src/lib/design/system/sketch/duplicate-class.js +57 -0
- package/src/lib/design/system/sketch/duplicate-class.js.map +1 -0
- package/src/lib/design/system/sketch/merge-preview.d.ts +15 -0
- package/src/lib/design/system/sketch/merge-preview.js +43 -0
- package/src/lib/design/system/sketch/merge-preview.js.map +1 -0
- package/src/lib/design/system/sketch/merge-shared.d.ts +25 -0
- package/src/lib/design/system/sketch/merge-shared.js +53 -0
- package/src/lib/design/system/sketch/merge-shared.js.map +1 -0
- package/src/lib/design/system/sketch/merge.d.ts +31 -0
- package/src/lib/design/system/sketch/merge.js +148 -0
- package/src/lib/design/system/sketch/merge.js.map +1 -0
- package/src/lib/design/system/sketch/merged-parts.d.ts +59 -0
- package/src/lib/design/system/sketch/merged-parts.js +134 -0
- package/src/lib/design/system/sketch/merged-parts.js.map +1 -0
- package/src/lib/design/system/sketch/no-visible-change.d.ts +15 -0
- package/src/lib/design/system/sketch/no-visible-change.js +70 -0
- package/src/lib/design/system/sketch/no-visible-change.js.map +1 -0
- package/src/lib/design/system/sketch/overlay.d.ts +20 -0
- package/src/lib/design/system/sketch/overlay.js +38 -0
- package/src/lib/design/system/sketch/overlay.js.map +1 -0
- package/src/lib/design/system/sketch/part-definition.d.ts +31 -0
- package/src/lib/design/system/sketch/part-definition.js +157 -0
- package/src/lib/design/system/sketch/part-definition.js.map +1 -0
- package/src/lib/design/system/sketch/shared-class.d.ts +9 -0
- package/src/lib/design/system/sketch/shared-class.js +65 -0
- package/src/lib/design/system/sketch/shared-class.js.map +1 -0
- package/src/lib/design/system/sketch/sketch.d.ts +267 -0
- package/src/lib/design/system/sketch/sketch.js +568 -0
- package/src/lib/design/system/sketch/sketch.js.map +1 -0
- package/src/lib/design/system/sketch/unchanged-states.d.ts +23 -0
- package/src/lib/design/system/sketch/unchanged-states.js +144 -0
- package/src/lib/design/system/sketch/unchanged-states.js.map +1 -0
- package/src/lib/design/system/sketch/unused-files.d.ts +10 -0
- package/src/lib/design/system/sketch/unused-files.js +56 -0
- package/src/lib/design/system/sketch/unused-files.js.map +1 -0
- package/src/lib/design/system/system-command.d.ts +9 -0
- package/src/lib/design/system/system-command.js +56 -0
- package/src/lib/design/system/system-command.js.map +1 -0
- package/src/lib/design/system/system-modules.d.ts +58 -0
- package/src/lib/design/system/system-modules.js +189 -0
- package/src/lib/design/system/system-modules.js.map +1 -0
- package/src/lib/design/system/system-tsconfig.d.ts +26 -0
- package/src/lib/design/system/system-tsconfig.js +68 -0
- package/src/lib/design/system/system-tsconfig.js.map +1 -0
- package/src/lib/design/system/ts-source.d.ts +13 -0
- package/src/lib/design/system/ts-source.js +108 -0
- package/src/lib/design/system/ts-source.js.map +1 -0
- package/src/lib/design/system-use.js.map +1 -1
- package/src/lib/design/thumb.d.ts +48 -4
- package/src/lib/design/thumb.js +127 -37
- package/src/lib/design/thumb.js.map +1 -1
- package/src/lib/design/typecheck.d.ts +29 -0
- package/src/lib/design/typecheck.js +77 -0
- package/src/lib/design/typecheck.js.map +1 -0
- package/src/lib/design/variant-diff.d.ts +64 -0
- package/src/lib/design/variant-diff.js +92 -0
- package/src/lib/design/variant-diff.js.map +1 -0
- package/src/lib/design/vite-paths.d.ts +2 -0
- package/src/lib/design/vite-paths.js +10 -1
- package/src/lib/design/vite-paths.js.map +1 -1
- package/src/lib/doctor/doctor-command.js.map +1 -1
- package/src/lib/doctor/index.js.map +1 -1
- package/src/lib/index.js.map +1 -1
- package/src/lib/invocation.js +6 -2
- package/src/lib/invocation.js.map +1 -1
- package/src/lib/playwright/failure-reporter.d.ts +35 -0
- package/src/lib/playwright/failure-reporter.js +66 -0
- package/src/lib/playwright/failure-reporter.js.map +1 -0
- package/src/lib/release.js.map +1 -1
- package/src/lib/update/agent-rules-sync.js.map +1 -1
- package/src/lib/update/agent-setup.js.map +1 -1
- package/src/lib/update/ai.js.map +1 -1
- package/src/lib/update/args.js.map +1 -1
- package/src/lib/update/available-migrations.js.map +1 -1
- package/src/lib/update/commits.js.map +1 -1
- package/src/lib/update/gitignore.js.map +1 -1
- package/src/lib/update/index.js.map +1 -1
- package/src/lib/update/migration-manifest.js.map +1 -1
- package/src/lib/update/migration-record.js.map +1 -1
- package/src/lib/update/migrations-command.js.map +1 -1
- package/src/lib/update/package-manager.d.ts +1 -1
- package/src/lib/update/package-manager.js.map +1 -1
- package/src/lib/update/packages.js.map +1 -1
- package/src/lib/update/pending.js.map +1 -1
- package/src/lib/update/plan.js.map +1 -1
- package/src/lib/update/registry.js.map +1 -1
- package/src/lib/update/run-migrations.js.map +1 -1
- package/src/lib/update/scan.js.map +1 -1
- package/src/lib/update/semver.js.map +1 -1
- package/src/lib/update/tasks.js.map +1 -1
- package/src/lib/update/update-command.js.map +1 -1
- package/src/lib/utils.js.map +1 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.classesOf = exports.declarationValueOf = exports.cssBlocksOf = void 0;
|
|
4
|
+
const withoutComments = (css) => css.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
5
|
+
/**
|
|
6
|
+
* Splits CSS into the text before each `{` (selectors) and the text before each `;` or `}`
|
|
7
|
+
* (declarations). At-rule preludes are dropped. Text after the last delimiter counts as a
|
|
8
|
+
* declaration, so an inline `style="…"` attribute reads as one.
|
|
9
|
+
*/
|
|
10
|
+
const cssBlocksOf = (css) => {
|
|
11
|
+
const selectors = [];
|
|
12
|
+
const declarations = [];
|
|
13
|
+
let buffer = '';
|
|
14
|
+
const flush = (into) => {
|
|
15
|
+
const text = buffer.trim();
|
|
16
|
+
if (text && !text.startsWith('@'))
|
|
17
|
+
into.push(text);
|
|
18
|
+
buffer = '';
|
|
19
|
+
};
|
|
20
|
+
for (const char of withoutComments(css)) {
|
|
21
|
+
if (char === '{')
|
|
22
|
+
flush(selectors);
|
|
23
|
+
else if (char === ';' || char === '}')
|
|
24
|
+
flush(declarations);
|
|
25
|
+
else
|
|
26
|
+
buffer += char;
|
|
27
|
+
}
|
|
28
|
+
flush(declarations);
|
|
29
|
+
return { selectors, declarations };
|
|
30
|
+
};
|
|
31
|
+
exports.cssBlocksOf = cssBlocksOf;
|
|
32
|
+
const declarationValueOf = (declaration) => {
|
|
33
|
+
const colon = declaration.indexOf(':');
|
|
34
|
+
return colon === -1 ? null : declaration.slice(colon + 1);
|
|
35
|
+
};
|
|
36
|
+
exports.declarationValueOf = declarationValueOf;
|
|
37
|
+
const classesOf = (selector) => [...selector.matchAll(/\.(-?[_a-zA-Z][\w-]*)/g)].map((match) => { var _a; return (_a = match[1]) !== null && _a !== void 0 ? _a : ''; });
|
|
38
|
+
exports.classesOf = classesOf;
|
|
39
|
+
//# sourceMappingURL=css-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-source.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/css-source.ts"],"names":[],"mappings":";;;AAEA,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;AAE9E;;;;GAIG;AACI,MAAM,WAAW,GAAG,CAAC,GAAW,EAAa,EAAE;IACpD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,MAAM,KAAK,GAAG,CAAC,IAAc,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE3B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,GAAG,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,IAAI,KAAK,GAAG;YAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aAC9B,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG;YAAE,KAAK,CAAC,YAAY,CAAC,CAAC;;YACtD,MAAM,IAAI,IAAI,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,CAAC;IAEpB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AACrC,CAAC,CAAC;AArBW,QAAA,WAAW,eAqBtB;AAEK,MAAM,kBAAkB,GAAG,CAAC,WAAmB,EAAE,EAAE;IACxD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEvC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAJW,QAAA,kBAAkB,sBAI7B;AAEK,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,EAAE,CAC5C,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAA,EAAA,CAAC,CAAC;AADrE,QAAA,SAAS,aAC4D"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { CommentPoint } from '../comments/comment';
|
|
2
|
+
export type FlowState = {
|
|
3
|
+
part: string;
|
|
4
|
+
state: string;
|
|
5
|
+
};
|
|
6
|
+
/** `position` is the frame's top-left corner on the flow canvas in CSS pixels; without one Studio lays the frame out. */
|
|
7
|
+
export type FlowFrame = FlowState & {
|
|
8
|
+
position?: CommentPoint;
|
|
9
|
+
};
|
|
10
|
+
export type FlowLine = {
|
|
11
|
+
from: FlowState;
|
|
12
|
+
to: FlowState;
|
|
13
|
+
label?: string;
|
|
14
|
+
};
|
|
15
|
+
/** A note of the flow itself, such as a heading over a group of frames; `at` is its top-left corner on the flow canvas, and may be negative. */
|
|
16
|
+
export type FlowNote = {
|
|
17
|
+
id: string;
|
|
18
|
+
text: string;
|
|
19
|
+
at?: CommentPoint;
|
|
20
|
+
};
|
|
21
|
+
export type FlowFile = {
|
|
22
|
+
frames: FlowFrame[];
|
|
23
|
+
lines?: FlowLine[];
|
|
24
|
+
notes?: FlowNote[];
|
|
25
|
+
};
|
|
26
|
+
export type DesignFlow = {
|
|
27
|
+
name: string;
|
|
28
|
+
file: string;
|
|
29
|
+
frames: FlowFrame[];
|
|
30
|
+
lines: FlowLine[];
|
|
31
|
+
notes: FlowNote[];
|
|
32
|
+
};
|
|
33
|
+
/** What a change sets: a new text, a new place, or `at: null` to let Studio place the note. */
|
|
34
|
+
export type FlowNoteChange = {
|
|
35
|
+
text?: string;
|
|
36
|
+
at?: CommentPoint | null;
|
|
37
|
+
};
|
|
38
|
+
export declare const flowsDirOf: (productDir: string) => string;
|
|
39
|
+
export declare const flowStateKeyOf: (state: FlowState) => string;
|
|
40
|
+
/** Every flow of a product, `<product>/flows/<name>.json`, by name; a file that cannot be read answers with its problem. */
|
|
41
|
+
export declare const listFlows: (productDir: string) => {
|
|
42
|
+
flows: DesignFlow[];
|
|
43
|
+
unreadable: {
|
|
44
|
+
file: string;
|
|
45
|
+
problem: string;
|
|
46
|
+
}[];
|
|
47
|
+
};
|
|
48
|
+
/** Adds a free note to a flow file. Answers with the note, or with why the flow cannot take it. */
|
|
49
|
+
export declare const addFlowNote: (options: {
|
|
50
|
+
productDir: string;
|
|
51
|
+
name: string;
|
|
52
|
+
note: Omit<FlowNote, "id">;
|
|
53
|
+
}) => FlowNote | string;
|
|
54
|
+
/** Changes the text or the place of a free note in a flow file. Answers with the changed note. */
|
|
55
|
+
export declare const changeFlowNote: (options: {
|
|
56
|
+
productDir: string;
|
|
57
|
+
name: string;
|
|
58
|
+
id: string;
|
|
59
|
+
change: FlowNoteChange;
|
|
60
|
+
}) => FlowNote | string;
|
|
61
|
+
/** Deletes a free note from a flow file. Answers with the deleted note. */
|
|
62
|
+
export declare const deleteFlowNote: (options: {
|
|
63
|
+
productDir: string;
|
|
64
|
+
name: string;
|
|
65
|
+
id: string;
|
|
66
|
+
}) => FlowNote | string;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.deleteFlowNote = exports.changeFlowNote = exports.addFlowNote = exports.listFlows = exports.flowStateKeyOf = exports.flowsDirOf = void 0;
|
|
15
|
+
const fs_1 = require("fs");
|
|
16
|
+
const path_1 = require("path");
|
|
17
|
+
const comment_1 = require("../comments/comment");
|
|
18
|
+
const note_1 = require("../notes/note");
|
|
19
|
+
const flowsDirOf = (productDir) => (0, path_1.resolve)(productDir, 'flows');
|
|
20
|
+
exports.flowsDirOf = flowsDirOf;
|
|
21
|
+
const flowStateKeyOf = (state) => `${state.part}#${state.state}`;
|
|
22
|
+
exports.flowStateKeyOf = flowStateKeyOf;
|
|
23
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
24
|
+
const isText = (value) => typeof value === 'string' && value.trim() !== '';
|
|
25
|
+
const FLOW_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]*$/u;
|
|
26
|
+
const isCanvasPoint = (value) => isRecord(value) && Number.isFinite(value['x']) && Number.isFinite(value['y']);
|
|
27
|
+
const isState = (value) => isRecord(value) && isText(value['part']) && isText(value['state']);
|
|
28
|
+
const frameProblemOf = (frame, index) => {
|
|
29
|
+
if (!isState(frame))
|
|
30
|
+
return `frames[${index}] must be { part: "<layer>/<name>", state, position? }`;
|
|
31
|
+
const { position } = frame;
|
|
32
|
+
return position !== undefined && !(0, comment_1.isPoint)(position)
|
|
33
|
+
? `frames[${index}].position must be { x, y } in CSS pixels, both >= 0`
|
|
34
|
+
: null;
|
|
35
|
+
};
|
|
36
|
+
const lineProblemOf = (line, index) => isRecord(line) &&
|
|
37
|
+
isState(line['from']) &&
|
|
38
|
+
isState(line['to']) &&
|
|
39
|
+
(line['label'] === undefined || isText(line['label']))
|
|
40
|
+
? null
|
|
41
|
+
: `lines[${index}] must be { from: { part, state }, to: { part, state }, label? }`;
|
|
42
|
+
const noteProblemOf = (note, index) => isRecord(note) &&
|
|
43
|
+
isText(note['id']) &&
|
|
44
|
+
isText(note['text']) &&
|
|
45
|
+
(note['at'] === undefined || isCanvasPoint(note['at']))
|
|
46
|
+
? null
|
|
47
|
+
: `notes[${index}] must be { id, text, at?: { x, y } }, at in CSS pixels on the flow canvas`;
|
|
48
|
+
const shapeProblemOf = (value) => {
|
|
49
|
+
var _a, _b, _c, _d;
|
|
50
|
+
if (!isRecord(value))
|
|
51
|
+
return 'must be a JSON object { frames, lines?, notes? }';
|
|
52
|
+
if (!Array.isArray(value['frames']))
|
|
53
|
+
return 'frames must be a list';
|
|
54
|
+
if (value['lines'] !== undefined && !Array.isArray(value['lines']))
|
|
55
|
+
return 'lines must be a list';
|
|
56
|
+
if (value['notes'] !== undefined && !Array.isArray(value['notes']))
|
|
57
|
+
return 'notes must be a list';
|
|
58
|
+
const problem = (_c = (_a = value['frames'].map(frameProblemOf).find((found) => found !== null)) !== null && _a !== void 0 ? _a : ((_b = value['lines']) !== null && _b !== void 0 ? _b : []).map(lineProblemOf).find((found) => found !== null)) !== null && _c !== void 0 ? _c : ((_d = value['notes']) !== null && _d !== void 0 ? _d : []).map(noteProblemOf).find((found) => found !== null);
|
|
59
|
+
return problem !== null && problem !== void 0 ? problem : null;
|
|
60
|
+
};
|
|
61
|
+
const flowOf = ({ parsed, name, file }) => {
|
|
62
|
+
var _a, _b;
|
|
63
|
+
return ({
|
|
64
|
+
name,
|
|
65
|
+
file,
|
|
66
|
+
frames: parsed.frames.map(({ part, state, position }) => (Object.assign({ part, state }, (position ? { position } : {})))),
|
|
67
|
+
lines: ((_a = parsed.lines) !== null && _a !== void 0 ? _a : []).map(({ from, to, label }) => (Object.assign({ from: { part: from.part, state: from.state }, to: { part: to.part, state: to.state } }, (label ? { label } : {})))),
|
|
68
|
+
notes: ((_b = parsed.notes) !== null && _b !== void 0 ? _b : []).map(({ id, text, at }) => (Object.assign({ id, text }, (at ? { at } : {})))),
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
/** Every flow of a product, `<product>/flows/<name>.json`, by name; a file that cannot be read answers with its problem. */
|
|
72
|
+
const listFlows = (productDir) => {
|
|
73
|
+
const dir = (0, exports.flowsDirOf)(productDir);
|
|
74
|
+
const files = (0, fs_1.existsSync)(dir) ? (0, fs_1.readdirSync)(dir).filter((name) => name.endsWith('.json')) : [];
|
|
75
|
+
const read = files.sort().map((name) => {
|
|
76
|
+
const file = (0, path_1.resolve)(dir, name);
|
|
77
|
+
try {
|
|
78
|
+
const parsed = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
|
|
79
|
+
const problem = shapeProblemOf(parsed);
|
|
80
|
+
return problem
|
|
81
|
+
? { file, problem }
|
|
82
|
+
: flowOf({ parsed: parsed, name: name.slice(0, -'.json'.length), file });
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
return { file, problem: `is no JSON: ${error instanceof Error ? error.message : String(error)}` };
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return {
|
|
89
|
+
flows: read.filter((entry) => !('problem' in entry)),
|
|
90
|
+
unreadable: read.filter((entry) => 'problem' in entry),
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
exports.listFlows = listFlows;
|
|
94
|
+
const readFlowFile = (productDir, name) => {
|
|
95
|
+
if (!FLOW_NAME.test(name))
|
|
96
|
+
return `"${name}" is no flow name`;
|
|
97
|
+
const file = (0, path_1.resolve)((0, exports.flowsDirOf)(productDir), `${name}.json`);
|
|
98
|
+
if (!(0, fs_1.existsSync)(file))
|
|
99
|
+
return `no flow "${name}"`;
|
|
100
|
+
try {
|
|
101
|
+
const parsed = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
|
|
102
|
+
const problem = shapeProblemOf(parsed);
|
|
103
|
+
return problem ? `flows/${name}.json ${problem} - fix it first` : { file, parsed: parsed };
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
return `flows/${name}.json is no JSON - fix it first: ${error instanceof Error ? error.message : String(error)}`;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
/** Rewrites only the `notes` of a readable flow file; every other key, unknown ones too, stays as it was. */
|
|
110
|
+
const withFlowNotes = (options) => {
|
|
111
|
+
var _a;
|
|
112
|
+
const read = readFlowFile(options.productDir, options.name);
|
|
113
|
+
if (typeof read === 'string')
|
|
114
|
+
return read;
|
|
115
|
+
const updated = options.update((_a = read.parsed.notes) !== null && _a !== void 0 ? _a : []);
|
|
116
|
+
if (typeof updated === 'string')
|
|
117
|
+
return updated;
|
|
118
|
+
const problem = updated.notes.map(noteProblemOf).find((found) => found !== null);
|
|
119
|
+
if (problem)
|
|
120
|
+
return problem;
|
|
121
|
+
const written = Object.fromEntries(Object.entries(Object.assign(Object.assign({}, read.parsed), { notes: updated.notes })).filter(([key, value]) => key !== 'notes' || value.length > 0));
|
|
122
|
+
(0, fs_1.writeFileSync)(read.file, `${JSON.stringify(written, null, 2)}\n`);
|
|
123
|
+
return updated.answer;
|
|
124
|
+
};
|
|
125
|
+
const noNoteIn = (name, id) => `flow "${name}" has no note "${id}"`;
|
|
126
|
+
/** Adds a free note to a flow file. Answers with the note, or with why the flow cannot take it. */
|
|
127
|
+
const addFlowNote = (options) => {
|
|
128
|
+
const { text, at } = options.note;
|
|
129
|
+
const note = Object.assign({ id: (0, note_1.newNoteId)(), text }, (at === undefined ? {} : { at }));
|
|
130
|
+
return withFlowNotes(Object.assign(Object.assign({}, options), { update: (notes) => ({ notes: [...notes, note], answer: note }) }));
|
|
131
|
+
};
|
|
132
|
+
exports.addFlowNote = addFlowNote;
|
|
133
|
+
/** Changes the text or the place of a free note in a flow file. Answers with the changed note. */
|
|
134
|
+
const changeFlowNote = (options) => {
|
|
135
|
+
const { name, id, change } = options;
|
|
136
|
+
return withFlowNotes(Object.assign(Object.assign({}, options), { update: (notes) => {
|
|
137
|
+
var _a, _b;
|
|
138
|
+
const found = notes.find((note) => note.id === id);
|
|
139
|
+
if (!found)
|
|
140
|
+
return noNoteIn(name, id);
|
|
141
|
+
const { at: before } = found, rest = __rest(found, ["at"]);
|
|
142
|
+
const at = change.at === undefined ? before : ((_a = change.at) !== null && _a !== void 0 ? _a : undefined);
|
|
143
|
+
const changed = Object.assign(Object.assign(Object.assign({}, rest), { text: (_b = change.text) !== null && _b !== void 0 ? _b : found.text }), (at ? { at } : {}));
|
|
144
|
+
return { notes: notes.map((note) => (note.id === id ? changed : note)), answer: changed };
|
|
145
|
+
} }));
|
|
146
|
+
};
|
|
147
|
+
exports.changeFlowNote = changeFlowNote;
|
|
148
|
+
/** Deletes a free note from a flow file. Answers with the deleted note. */
|
|
149
|
+
const deleteFlowNote = (options) => {
|
|
150
|
+
const { name, id } = options;
|
|
151
|
+
return withFlowNotes(Object.assign(Object.assign({}, options), { update: (notes) => {
|
|
152
|
+
const found = notes.find((note) => note.id === id);
|
|
153
|
+
return found ? { notes: notes.filter((note) => note !== found), answer: found } : noNoteIn(name, id);
|
|
154
|
+
} }));
|
|
155
|
+
};
|
|
156
|
+
exports.deleteFlowNote = deleteFlowNote;
|
|
157
|
+
//# sourceMappingURL=flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/flows/flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Problem } from './problem';
|
|
2
|
+
import { ResolvedPart, ResolvedProduct } from './resolve-product';
|
|
3
|
+
export declare const FIXTURES_SPECIFIER = "@system/fixtures";
|
|
4
|
+
export declare const SHARED_PREFIX = "@shared/";
|
|
5
|
+
export type PartImport = {
|
|
6
|
+
kind: 'part';
|
|
7
|
+
layer: string;
|
|
8
|
+
name: string;
|
|
9
|
+
specifier: string;
|
|
10
|
+
stylesheet?: true;
|
|
11
|
+
} | {
|
|
12
|
+
kind: 'fixtures';
|
|
13
|
+
specifier: string;
|
|
14
|
+
} | {
|
|
15
|
+
kind: 'shared';
|
|
16
|
+
path: string;
|
|
17
|
+
specifier: string;
|
|
18
|
+
} | {
|
|
19
|
+
kind: 'asset';
|
|
20
|
+
path: string;
|
|
21
|
+
specifier: string;
|
|
22
|
+
} | {
|
|
23
|
+
kind: 'relative';
|
|
24
|
+
specifier: string;
|
|
25
|
+
} | {
|
|
26
|
+
kind: 'other';
|
|
27
|
+
specifier: string;
|
|
28
|
+
};
|
|
29
|
+
export declare const partSpecifierOf: (part: {
|
|
30
|
+
layer: string;
|
|
31
|
+
name: string;
|
|
32
|
+
}) => string;
|
|
33
|
+
export declare const classifyImport: (specifier: string) => PartImport;
|
|
34
|
+
export declare const importsOfPart: (part: ResolvedPart) => PartImport[];
|
|
35
|
+
/** The modules of the part's own folder its file imports, directly or through another such module. */
|
|
36
|
+
export declare const folderModulesOf: (part: ResolvedPart) => {
|
|
37
|
+
file: string;
|
|
38
|
+
source: string;
|
|
39
|
+
}[];
|
|
40
|
+
/** The parts a part imports, from its file or from a plain module of its own folder that the file imports. */
|
|
41
|
+
export declare const partDependenciesOf: (part: ResolvedPart) => {
|
|
42
|
+
kind: "part";
|
|
43
|
+
layer: string;
|
|
44
|
+
name: string;
|
|
45
|
+
specifier: string;
|
|
46
|
+
stylesheet?: true;
|
|
47
|
+
}[];
|
|
48
|
+
export type SharedDirs = {
|
|
49
|
+
sharedDir?: string;
|
|
50
|
+
variantSharedDir?: string;
|
|
51
|
+
};
|
|
52
|
+
/** The folders `@shared/<path>` looks in, the variant's own `shared/` first. */
|
|
53
|
+
export declare const sharedDirsOf: (product: SharedDirs) => string[];
|
|
54
|
+
/** The file `@shared/<path>` resolves to, the variant's own copy first; `null` when no folder holds it. */
|
|
55
|
+
export declare const sharedFileOf: (options: {
|
|
56
|
+
dirs: string[];
|
|
57
|
+
path: string;
|
|
58
|
+
}) => string | null;
|
|
59
|
+
/**
|
|
60
|
+
* Imports and stylesheet `url(@assets/...)` that name no part, fixture set or asset file, `@shared/` imports outside a sketch variant (`sharedDir` is the
|
|
61
|
+
* sketch's `shared/` folder, `assetsDir` the variant's `assets/`), and relative imports that reach into another part.
|
|
62
|
+
*/
|
|
63
|
+
export declare const importProblemsOf: (product: ResolvedProduct & SharedDirs & {
|
|
64
|
+
assetsDir?: string;
|
|
65
|
+
}) => Problem[];
|
|
66
|
+
/** The parts `from` imports, directly or through another part, as the product resolves them. */
|
|
67
|
+
export declare const partsReachedFrom: (options: {
|
|
68
|
+
product: ResolvedProduct;
|
|
69
|
+
from: ResolvedPart;
|
|
70
|
+
}) => ResolvedPart[];
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
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;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const vite_paths_1 = require("../vite-paths");
|
|
7
|
+
const assets_1 = require("./assets");
|
|
8
|
+
const resolve_product_1 = require("./resolve-product");
|
|
9
|
+
const ts_source_1 = require("./ts-source");
|
|
10
|
+
const SYSTEM = '@system/';
|
|
11
|
+
exports.FIXTURES_SPECIFIER = '@system/fixtures';
|
|
12
|
+
exports.SHARED_PREFIX = '@shared/';
|
|
13
|
+
const STYLESHEET = /\.css(?:\?.*)?$/u;
|
|
14
|
+
const partSpecifierOf = (part) => `${SYSTEM}${(0, resolve_product_1.partKeyOf)(part)}`;
|
|
15
|
+
exports.partSpecifierOf = partSpecifierOf;
|
|
16
|
+
const classifyImport = (specifier) => {
|
|
17
|
+
if (specifier === exports.FIXTURES_SPECIFIER)
|
|
18
|
+
return { kind: 'fixtures', specifier };
|
|
19
|
+
if (specifier.startsWith(SYSTEM)) {
|
|
20
|
+
const [layer = '', ...path] = specifier.slice(SYSTEM.length).split('/');
|
|
21
|
+
const name = path.join('/');
|
|
22
|
+
const stylesheet = STYLESHEET.exec(name);
|
|
23
|
+
return stylesheet
|
|
24
|
+
? { kind: 'part', layer, name: name.slice(0, stylesheet.index), specifier, stylesheet: true }
|
|
25
|
+
: { kind: 'part', layer, name, specifier };
|
|
26
|
+
}
|
|
27
|
+
const asset = (0, assets_1.assetPathOf)(specifier);
|
|
28
|
+
if (asset !== null)
|
|
29
|
+
return { kind: 'asset', path: asset, specifier };
|
|
30
|
+
if (specifier.startsWith(exports.SHARED_PREFIX))
|
|
31
|
+
return { kind: 'shared', path: specifier.slice(exports.SHARED_PREFIX.length), specifier };
|
|
32
|
+
if (specifier.startsWith('.'))
|
|
33
|
+
return { kind: 'relative', specifier };
|
|
34
|
+
return { kind: 'other', specifier };
|
|
35
|
+
};
|
|
36
|
+
exports.classifyImport = classifyImport;
|
|
37
|
+
const importsOfPart = (part) => (0, ts_source_1.importsOf)(part.source).map(exports.classifyImport);
|
|
38
|
+
exports.importsOfPart = importsOfPart;
|
|
39
|
+
/** The modules of the part's own folder its file imports, directly or through another such module. */
|
|
40
|
+
const folderModulesOf = (part) => {
|
|
41
|
+
var _a;
|
|
42
|
+
const folder = (0, path_1.dirname)(part.file);
|
|
43
|
+
const seen = new Set([part.file]);
|
|
44
|
+
const queue = [{ file: part.file, source: part.source }];
|
|
45
|
+
const modules = [];
|
|
46
|
+
for (let current = queue.shift(); current !== undefined; current = queue.shift()) {
|
|
47
|
+
for (const specifier of (0, ts_source_1.importsOf)(current.source)) {
|
|
48
|
+
if (!specifier.startsWith('.') || STYLESHEET.test(specifier))
|
|
49
|
+
continue;
|
|
50
|
+
const file = (0, vite_paths_1.sourceFileOf)((0, path_1.resolve)((0, path_1.dirname)(current.file), (_a = specifier.split('?')[0]) !== null && _a !== void 0 ? _a : specifier));
|
|
51
|
+
const path = file === null ? '..' : (0, path_1.relative)(folder, file);
|
|
52
|
+
if (file === null || seen.has(file) || path.startsWith('..') || (0, path_1.isAbsolute)(path))
|
|
53
|
+
continue;
|
|
54
|
+
seen.add(file);
|
|
55
|
+
const module = { file, source: (0, fs_1.readFileSync)(file, 'utf8') };
|
|
56
|
+
modules.push(module);
|
|
57
|
+
queue.push(module);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return modules;
|
|
61
|
+
};
|
|
62
|
+
exports.folderModulesOf = folderModulesOf;
|
|
63
|
+
/** The parts a part imports, from its file or from a plain module of its own folder that the file imports. */
|
|
64
|
+
const partDependenciesOf = (part) => {
|
|
65
|
+
const seen = new Set();
|
|
66
|
+
return [part, ...(0, exports.folderModulesOf)(part)]
|
|
67
|
+
.flatMap((module) => (0, ts_source_1.importsOf)(module.source).map(exports.classifyImport))
|
|
68
|
+
.flatMap((imported) => {
|
|
69
|
+
if (imported.kind !== 'part' || seen.has(imported.specifier))
|
|
70
|
+
return [];
|
|
71
|
+
seen.add(imported.specifier);
|
|
72
|
+
return [imported];
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
exports.partDependenciesOf = partDependenciesOf;
|
|
76
|
+
const leavesFolder = (part, specifier) => {
|
|
77
|
+
var _a;
|
|
78
|
+
const folder = (0, path_1.dirname)(part.file);
|
|
79
|
+
const path = (0, path_1.relative)(folder, (0, path_1.resolve)(folder, (_a = specifier.split('?')[0]) !== null && _a !== void 0 ? _a : specifier));
|
|
80
|
+
return path.startsWith('..') || (0, path_1.isAbsolute)(path);
|
|
81
|
+
};
|
|
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
|
+
exports.sharedDirsOf = sharedDirsOf;
|
|
85
|
+
/** The file `@shared/<path>` resolves to, the variant's own copy first; `null` when no folder holds it. */
|
|
86
|
+
const sharedFileOf = (options) => {
|
|
87
|
+
var _a;
|
|
88
|
+
const path = (_a = options.path.split('?')[0]) !== null && _a !== void 0 ? _a : options.path;
|
|
89
|
+
for (const dir of options.dirs) {
|
|
90
|
+
const file = (0, path_1.resolve)(dir, path);
|
|
91
|
+
const found = STYLESHEET.test(file) ? ((0, fs_1.existsSync)(file) ? file : null) : (0, vite_paths_1.sourceFileOf)(file);
|
|
92
|
+
if (found)
|
|
93
|
+
return found;
|
|
94
|
+
}
|
|
95
|
+
return null;
|
|
96
|
+
};
|
|
97
|
+
exports.sharedFileOf = sharedFileOf;
|
|
98
|
+
/**
|
|
99
|
+
* Imports and stylesheet `url(@assets/...)` that name no part, fixture set or asset file, `@shared/` imports outside a sketch variant (`sharedDir` is the
|
|
100
|
+
* sketch's `shared/` folder, `assetsDir` the variant's `assets/`), and relative imports that reach into another part.
|
|
101
|
+
*/
|
|
102
|
+
const importProblemsOf = (product) => {
|
|
103
|
+
const parts = new Map(product.parts.map((part) => [(0, resolve_product_1.partKeyOf)(part), part]));
|
|
104
|
+
const missingCssAssets = (part) => {
|
|
105
|
+
var _a;
|
|
106
|
+
return (0, assets_1.cssAssetPathsOf)((_a = part.cssSource) !== null && _a !== void 0 ? _a : '')
|
|
107
|
+
.filter((path) => !(0, assets_1.assetFileOf)({ product, path }))
|
|
108
|
+
.map((path) => {
|
|
109
|
+
var _a;
|
|
110
|
+
return ({
|
|
111
|
+
rule: 'IMPORT',
|
|
112
|
+
file: (_a = part.css) !== null && _a !== void 0 ? _a : part.file,
|
|
113
|
+
message: `url(${assets_1.ASSETS_PREFIX}${path}) resolves to no file in an assets/ folder`,
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
return product.parts.flatMap((part) => [
|
|
118
|
+
...missingCssAssets(part),
|
|
119
|
+
...(0, exports.importsOfPart)(part).flatMap((imported) => {
|
|
120
|
+
var _a;
|
|
121
|
+
const problem = (message) => [{ rule: 'IMPORT', file: part.file, message }];
|
|
122
|
+
if (imported.kind === 'part' && !parts.has((0, resolve_product_1.partKeyOf)(imported)))
|
|
123
|
+
return problem(`${imported.specifier} resolves to no part`);
|
|
124
|
+
if (imported.kind === 'part' && imported.stylesheet && !((_a = parts.get((0, resolve_product_1.partKeyOf)(imported))) === null || _a === void 0 ? void 0 : _a.css))
|
|
125
|
+
return problem(`${imported.specifier} resolves to a part without ${imported.name}.css`);
|
|
126
|
+
if (imported.kind === 'fixtures' && !product.fixtures)
|
|
127
|
+
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
|
+
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`);
|
|
132
|
+
if (imported.kind === 'asset' && !(0, assets_1.assetFileOf)({ product, path: imported.path }))
|
|
133
|
+
return problem(`${imported.specifier} resolves to no file in an assets/ folder`);
|
|
134
|
+
if (imported.kind === 'relative' && leavesFolder(part, imported.specifier))
|
|
135
|
+
return problem(`"${imported.specifier}" leaves the part's folder - import another part as @system/<layer>/<name>`);
|
|
136
|
+
return [];
|
|
137
|
+
}),
|
|
138
|
+
]);
|
|
139
|
+
};
|
|
140
|
+
exports.importProblemsOf = importProblemsOf;
|
|
141
|
+
/** The parts `from` imports, directly or through another part, as the product resolves them. */
|
|
142
|
+
const partsReachedFrom = (options) => {
|
|
143
|
+
const parts = new Map(options.product.parts.map((part) => [(0, resolve_product_1.partKeyOf)(part), part]));
|
|
144
|
+
const reached = new Map();
|
|
145
|
+
const queue = [options.from];
|
|
146
|
+
for (let part = queue.shift(); part !== undefined; part = queue.shift()) {
|
|
147
|
+
for (const dependency of (0, exports.partDependenciesOf)(part)) {
|
|
148
|
+
const key = (0, resolve_product_1.partKeyOf)(dependency);
|
|
149
|
+
const found = parts.get(key);
|
|
150
|
+
if (!found || reached.has(key))
|
|
151
|
+
continue;
|
|
152
|
+
reached.set(key, found);
|
|
153
|
+
queue.push(found);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return [...reached.values()];
|
|
157
|
+
};
|
|
158
|
+
exports.partsReachedFrom = partsReachedFrom;
|
|
159
|
+
//# sourceMappingURL=imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,4 @@
|
|
|
1
|
+
export declare const KIT_SPECIFIER = "@design-system/kit";
|
|
2
|
+
export declare const importsKit: (source: string) => boolean;
|
|
3
|
+
/** How many calls of a wireframe kit part a part's source writes, read from the source without a render. */
|
|
4
|
+
export declare const kitUsesOf: (source: string) => number;
|
|
@@ -0,0 +1,51 @@
|
|
|
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.kitUsesOf = exports.importsKit = exports.KIT_SPECIFIER = void 0;
|
|
7
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
8
|
+
const ts_source_1 = require("./ts-source");
|
|
9
|
+
exports.KIT_SPECIFIER = '@design-system/kit';
|
|
10
|
+
const importsKit = (source) => (0, ts_source_1.importsOf)(source).includes(exports.KIT_SPECIFIER);
|
|
11
|
+
exports.importsKit = importsKit;
|
|
12
|
+
const kitBindingsOf = (file) => {
|
|
13
|
+
var _a;
|
|
14
|
+
const named = new Set();
|
|
15
|
+
const namespaces = new Set();
|
|
16
|
+
for (const statement of file.statements) {
|
|
17
|
+
if (!typescript_1.default.isImportDeclaration(statement) ||
|
|
18
|
+
!typescript_1.default.isStringLiteral(statement.moduleSpecifier) ||
|
|
19
|
+
statement.moduleSpecifier.text !== exports.KIT_SPECIFIER)
|
|
20
|
+
continue;
|
|
21
|
+
const bindings = (_a = statement.importClause) === null || _a === void 0 ? void 0 : _a.namedBindings;
|
|
22
|
+
if (bindings && typescript_1.default.isNamespaceImport(bindings))
|
|
23
|
+
namespaces.add(bindings.name.text);
|
|
24
|
+
if (bindings && typescript_1.default.isNamedImports(bindings))
|
|
25
|
+
bindings.elements.forEach((element) => named.add(element.name.text));
|
|
26
|
+
}
|
|
27
|
+
return { named, namespaces };
|
|
28
|
+
};
|
|
29
|
+
/** How many calls of a wireframe kit part a part's source writes, read from the source without a render. */
|
|
30
|
+
const kitUsesOf = (source) => {
|
|
31
|
+
const file = typescript_1.default.createSourceFile('part.ts', source, typescript_1.default.ScriptTarget.Latest, true);
|
|
32
|
+
const { named, namespaces } = kitBindingsOf(file);
|
|
33
|
+
let uses = 0;
|
|
34
|
+
const visit = (node) => {
|
|
35
|
+
if (typescript_1.default.isCallExpression(node)) {
|
|
36
|
+
const callee = node.expression;
|
|
37
|
+
if (typescript_1.default.isIdentifier(callee) && named.has(callee.text))
|
|
38
|
+
uses++;
|
|
39
|
+
if (typescript_1.default.isPropertyAccessExpression(callee) &&
|
|
40
|
+
typescript_1.default.isIdentifier(callee.expression) &&
|
|
41
|
+
namespaces.has(callee.expression.text))
|
|
42
|
+
uses++;
|
|
43
|
+
}
|
|
44
|
+
typescript_1.default.forEachChild(node, visit);
|
|
45
|
+
};
|
|
46
|
+
if (named.size > 0 || namespaces.size > 0)
|
|
47
|
+
visit(file);
|
|
48
|
+
return uses;
|
|
49
|
+
};
|
|
50
|
+
exports.kitUsesOf = kitUsesOf;
|
|
51
|
+
//# sourceMappingURL=kit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kit.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/kit.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAC5B,2CAAwC;AAE3B,QAAA,aAAa,GAAG,oBAAoB,CAAC;AAE3C,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,qBAAa,CAAC,CAAC;AAA3E,QAAA,UAAU,cAAiE;AAExF,MAAM,aAAa,GAAG,CAAC,IAAmB,EAAE,EAAE;;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,IACE,CAAC,oBAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC;YAClC,CAAC,oBAAE,CAAC,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC;YAC9C,SAAS,CAAC,eAAe,CAAC,IAAI,KAAK,qBAAa;YAEhD,SAAS;QAEX,MAAM,QAAQ,GAAG,MAAA,SAAS,CAAC,YAAY,0CAAE,aAAa,CAAC;QAEvD,IAAI,QAAQ,IAAI,oBAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnF,IAAI,QAAQ,IAAI,oBAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;YAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC/B,CAAC,CAAC;AAEF,4GAA4G;AACrG,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,EAAE;IAC1C,MAAM,IAAI,GAAG,oBAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,oBAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClF,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,EAAE;QAC9B,IAAI,oBAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;YAE/B,IAAI,oBAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,IAAI,EAAE,CAAC;YAC9D,IACE,oBAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC;gBACrC,oBAAE,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;gBAClC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;gBAEtC,IAAI,EAAE,CAAC;QACX,CAAC;QAED,oBAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAEvD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAvBW,QAAA,SAAS,aAuBpB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const LAYERS: readonly ["foundations", "components", "elements", "pages"];
|
|
2
|
+
export type Layer = (typeof LAYERS)[number];
|
|
3
|
+
/** The layers a part of each layer may import. */
|
|
4
|
+
export declare const LAYER_USES: Record<Layer, readonly Layer[]>;
|
|
5
|
+
export declare const isLayer: (name: string) => name is Layer;
|
|
6
|
+
export declare const mayUse: (options: {
|
|
7
|
+
from: Layer;
|
|
8
|
+
to: Layer;
|
|
9
|
+
}) => boolean;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mayUse = exports.isLayer = exports.LAYER_USES = exports.LAYERS = void 0;
|
|
4
|
+
exports.LAYERS = ['foundations', 'components', 'elements', 'pages'];
|
|
5
|
+
/** The layers a part of each layer may import. */
|
|
6
|
+
exports.LAYER_USES = {
|
|
7
|
+
foundations: ['foundations'],
|
|
8
|
+
components: ['foundations', 'components'],
|
|
9
|
+
elements: ['foundations', 'components'],
|
|
10
|
+
pages: ['foundations', 'components', 'elements'],
|
|
11
|
+
};
|
|
12
|
+
const isLayer = (name) => exports.LAYERS.includes(name);
|
|
13
|
+
exports.isLayer = isLayer;
|
|
14
|
+
const mayUse = (options) => exports.LAYER_USES[options.from].includes(options.to);
|
|
15
|
+
exports.mayUse = mayUse;
|
|
16
|
+
//# sourceMappingURL=layers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layers.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/layers.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG,CAAC,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,CAAU,CAAC;AAIlF,kDAAkD;AACrC,QAAA,UAAU,GAAoC;IACzD,WAAW,EAAE,CAAC,aAAa,CAAC;IAC5B,UAAU,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC;IACzC,QAAQ,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC;IACvC,KAAK,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,UAAU,CAAC;CACjD,CAAC;AAEK,MAAM,OAAO,GAAG,CAAC,IAAY,EAAiB,EAAE,CAAE,cAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAAxF,QAAA,OAAO,WAAiF;AAE9F,MAAM,MAAM,GAAG,CAAC,OAAmC,EAAE,EAAE,CAAC,kBAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAAhG,QAAA,MAAM,UAA0F"}
|