@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
package/src/lib/design/serve.js
CHANGED
|
@@ -9,14 +9,29 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.serveDesign = void 0;
|
|
12
|
+
exports.serveDesign = exports.createDesignServer = void 0;
|
|
13
13
|
const fs_1 = require("fs");
|
|
14
|
+
const net_1 = require("net");
|
|
14
15
|
const path_1 = require("path");
|
|
16
|
+
const calls_1 = require("./calls");
|
|
15
17
|
const calls_tsconfig_1 = require("./calls-tsconfig");
|
|
18
|
+
const legacy_1 = require("./legacy");
|
|
16
19
|
const vite_paths_1 = require("./vite-paths");
|
|
20
|
+
const studio_api_1 = require("./studio-api");
|
|
21
|
+
const force_interactions_1 = require("./force-interactions");
|
|
22
|
+
const product_command_1 = require("./product-command");
|
|
17
23
|
const render_1 = require("./render");
|
|
18
24
|
const render_packages_1 = require("./render-packages");
|
|
25
|
+
const part_marks_1 = require("./part-marks");
|
|
26
|
+
const shot_1 = require("./shot");
|
|
27
|
+
const changed_parts_1 = require("./changed-parts");
|
|
19
28
|
const stamp_1 = require("./stamp");
|
|
29
|
+
const list_system_1 = require("./system/list-system");
|
|
30
|
+
const resolve_product_1 = require("./system/resolve-product");
|
|
31
|
+
const system_modules_1 = require("./system/system-modules");
|
|
32
|
+
const kit_1 = require("./system/kit");
|
|
33
|
+
const system_tsconfig_1 = require("./system/system-tsconfig");
|
|
34
|
+
const sketch_1 = require("./system/sketch/sketch");
|
|
20
35
|
const thumb_1 = require("./thumb");
|
|
21
36
|
const paths_1 = require("./paths");
|
|
22
37
|
const VIRTUAL = 'virtual:design-explore';
|
|
@@ -24,9 +39,7 @@ const VIRTUAL = 'virtual:design-explore';
|
|
|
24
39
|
const projectOf = (slug) => { var _a; return (_a = slug.split('/')[0]) !== null && _a !== void 0 ? _a : ''; };
|
|
25
40
|
const registry = (target) => {
|
|
26
41
|
const root = (0, paths_1.callsRootOf)(target);
|
|
27
|
-
const entries = (0,
|
|
28
|
-
.sort()
|
|
29
|
-
.map((file) => [(0, vite_paths_1.callSlugOf)(file), (0, vite_paths_1.fsUrl)((0, path_1.resolve)(root, file))]);
|
|
42
|
+
const entries = (0, calls_1.callSlugsOf)(target).map((slug) => [slug, (0, vite_paths_1.fsUrl)((0, path_1.resolve)(root, slug, 'call.ts'))]);
|
|
30
43
|
return `export const calls = {\n${entries
|
|
31
44
|
.map(([slug, url]) => ` ${JSON.stringify(slug)}: () => import(${JSON.stringify(url)}),`)
|
|
32
45
|
.join('\n')}\n};\n`;
|
|
@@ -53,103 +66,419 @@ const workspaceAliases = (target) => {
|
|
|
53
66
|
];
|
|
54
67
|
});
|
|
55
68
|
};
|
|
69
|
+
// Sequential on purpose: Vite appends a sheet's <style> when its import settles, so parallel
|
|
70
|
+
// imports let the head order, and with it the winning rule, change from load to load.
|
|
71
|
+
const settingsLoaders = (options) => `{\n${Object.entries(options.settings)
|
|
72
|
+
.map(([name, entry]) => {
|
|
73
|
+
var _a;
|
|
74
|
+
return ` ${JSON.stringify(name)}: () => Promise.resolve()${((_a = entry.styles) !== null && _a !== void 0 ? _a : [])
|
|
75
|
+
.map((style) => (0, path_1.resolve)(options.target, style))
|
|
76
|
+
.map((file) => (options.products ? (0, system_modules_1.productModuleIdOf)({ file, product: name }) : file))
|
|
77
|
+
.map((file) => `.then(() => import(${JSON.stringify((0, vite_paths_1.fsUrl)(file))}))`)
|
|
78
|
+
.join('')},`;
|
|
79
|
+
})
|
|
80
|
+
.join('\n')}\n}`;
|
|
81
|
+
const themesOfSettings = (settings) => JSON.stringify(Object.fromEntries(Object.entries(settings).map(([name, entry]) => {
|
|
82
|
+
var _a, _b, _c, _d;
|
|
83
|
+
return [
|
|
84
|
+
name,
|
|
85
|
+
{ surface: (_b = (_a = entry.themes) === null || _a === void 0 ? void 0 : _a.surface) !== null && _b !== void 0 ? _b : [], color: (_d = (_c = entry.themes) === null || _c === void 0 ? void 0 : _c.color) !== null && _d !== void 0 ? _d : [] },
|
|
86
|
+
];
|
|
87
|
+
})));
|
|
56
88
|
/**
|
|
57
|
-
* The stylesheet of every project, each behind its own loader. A frame loads the
|
|
58
|
-
*
|
|
89
|
+
* The stylesheet of every project and every product, each behind its own loader. A frame loads the
|
|
90
|
+
* one it draws for: two projects define the same theme variables, so a frame that loaded both would
|
|
59
91
|
* draw under whichever stylesheet came last.
|
|
60
92
|
*/
|
|
61
93
|
const env = (target, config) => {
|
|
62
94
|
var _a, _b;
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
.map((style) => `import(${JSON.stringify((0, vite_paths_1.fsUrl)((0, path_1.resolve)(target, style)))})`)
|
|
67
|
-
.join(', ')}]),`;
|
|
68
|
-
});
|
|
69
|
-
const themes = Object.fromEntries(Object.entries((_b = config.projects) !== null && _b !== void 0 ? _b : {}).map(([name, project]) => {
|
|
70
|
-
var _a, _b, _c, _d;
|
|
71
|
-
return [
|
|
72
|
-
name,
|
|
73
|
-
{ surface: (_b = (_a = project.themes) === null || _a === void 0 ? void 0 : _a.surface) !== null && _b !== void 0 ? _b : [], color: (_d = (_c = project.themes) === null || _c === void 0 ? void 0 : _c.color) !== null && _d !== void 0 ? _d : [] },
|
|
74
|
-
];
|
|
75
|
-
}));
|
|
76
|
-
return (`const envs = {\n${loaders.join('\n')}\n};\n` +
|
|
95
|
+
const projects = (_a = config.projects) !== null && _a !== void 0 ? _a : {};
|
|
96
|
+
const products = (_b = config.products) !== null && _b !== void 0 ? _b : {};
|
|
97
|
+
return (`const envs = ${settingsLoaders({ target, settings: projects })};\n` +
|
|
77
98
|
`export const loadEnv = (project) => (envs[project] ?? (() => Promise.resolve()))();\n` +
|
|
78
|
-
`const themes = ${
|
|
79
|
-
`export const themesOf = (project) => themes[project] ?? { surface: [], color: [] };\n`
|
|
99
|
+
`const themes = ${themesOfSettings(projects)};\n` +
|
|
100
|
+
`export const themesOf = (project) => themes[project] ?? { surface: [], color: [] };\n` +
|
|
101
|
+
`const productEnvs = ${settingsLoaders({ target, settings: products, products: true })};\n` +
|
|
102
|
+
`export const loadProductEnv = (product) => (productEnvs[product] ?? (() => Promise.resolve()))();\n`);
|
|
103
|
+
};
|
|
104
|
+
/** Each product's parts, keyed `<layer>/<name>`, each loaded as the product resolves it. */
|
|
105
|
+
const partsRegistry = (options) => options.parts
|
|
106
|
+
.map((part) => `${options.indent}${JSON.stringify((0, resolve_product_1.partKeyOf)(part))}: () => import(${JSON.stringify((0, vite_paths_1.fsUrl)((0, system_modules_1.productModuleIdOf)({ file: part.file, product: options.product, sketch: options.sketch })))}),`)
|
|
107
|
+
.join('\n');
|
|
108
|
+
const sketchRegistry = (system, product) => system
|
|
109
|
+
.sketchesOf(product)
|
|
110
|
+
.map(({ target, variants }) => ` ${JSON.stringify(target)}: {\n${variants
|
|
111
|
+
.map((variant) => {
|
|
112
|
+
var _a, _b;
|
|
113
|
+
return ` ${JSON.stringify(variant)}: {\n${partsRegistry({
|
|
114
|
+
parts: (_b = (_a = system.drawnOf(product, { target, variant })) === null || _a === void 0 ? void 0 : _a.parts) !== null && _b !== void 0 ? _b : [],
|
|
115
|
+
product,
|
|
116
|
+
sketch: { target, variant },
|
|
117
|
+
indent: ' ',
|
|
118
|
+
})}\n },`;
|
|
119
|
+
})
|
|
120
|
+
.join('\n')}\n },`)
|
|
121
|
+
.join('\n');
|
|
122
|
+
/** The loader of the tokens stylesheets a product, or one sketch variant, draws under, in order; `null` without one. */
|
|
123
|
+
const tokensLoaderOf = (options) => {
|
|
124
|
+
const { system, product, sketch } = options;
|
|
125
|
+
const imports = system
|
|
126
|
+
.tokenStylesheetsOf({ product, sketch })
|
|
127
|
+
.map((css) => `import(${JSON.stringify((0, vite_paths_1.fsUrl)((0, system_modules_1.stylesheetModuleIdOf)({ file: css, query: 'inline', product, sketch: sketch !== null && sketch !== void 0 ? sketch : null })))})`);
|
|
128
|
+
if (imports.length === 0)
|
|
129
|
+
return null;
|
|
130
|
+
if (imports.length === 1)
|
|
131
|
+
return `() => ${imports[0]}`;
|
|
132
|
+
return `() => Promise.all([${imports.join(', ')}]).then((sheets) => ({ default: sheets.map((sheet) => sheet.default).join('\\n') }))`;
|
|
80
133
|
};
|
|
134
|
+
const tokensRegistry = (system) => `export const tokens = {\n${system
|
|
135
|
+
.products()
|
|
136
|
+
.flatMap((product) => {
|
|
137
|
+
const loader = tokensLoaderOf({ system, product });
|
|
138
|
+
return loader ? [` ${JSON.stringify(product)}: ${loader},`] : [];
|
|
139
|
+
})
|
|
140
|
+
.join('\n')}\n};\nexport const sketchTokens = {\n${system
|
|
141
|
+
.products()
|
|
142
|
+
.map((product) => ` ${JSON.stringify(product)}: {\n${system
|
|
143
|
+
.sketchesOf(product)
|
|
144
|
+
.map(({ target, variants }) => ` ${JSON.stringify(target)}: {\n${variants
|
|
145
|
+
.flatMap((variant) => {
|
|
146
|
+
const loader = tokensLoaderOf({ system, product, sketch: { target, variant } });
|
|
147
|
+
return loader ? [` ${JSON.stringify(variant)}: ${loader},`] : [];
|
|
148
|
+
})
|
|
149
|
+
.join('\n')}\n },`)
|
|
150
|
+
.join('\n')}\n },`)
|
|
151
|
+
.join('\n')}\n};\n`;
|
|
152
|
+
const systemRegistry = (system) => `export const parts = {\n${system
|
|
153
|
+
.products()
|
|
154
|
+
.map((product) => { var _a, _b; return ` ${JSON.stringify(product)}: {\n${partsRegistry({ parts: (_b = (_a = system.productOf(product)) === null || _a === void 0 ? void 0 : _a.parts) !== null && _b !== void 0 ? _b : [], product, indent: ' ' })}\n },`; })
|
|
155
|
+
.join('\n')}\n};\nexport const sketchParts = {\n${system
|
|
156
|
+
.products()
|
|
157
|
+
.map((product) => ` ${JSON.stringify(product)}: {\n${sketchRegistry(system, product)}\n },`)
|
|
158
|
+
.join('\n')}\n};\n${tokensRegistry(system)}`;
|
|
159
|
+
const sendJson = (response, answer) => {
|
|
160
|
+
response.setHeader('access-control-allow-origin', '*');
|
|
161
|
+
(0, thumb_1.send)(response, { status: answer.status, type: 'application/json', body: JSON.stringify(answer.body) });
|
|
162
|
+
};
|
|
163
|
+
const isCommentFile = (file) => file.endsWith('.json') && (0, path_1.basename)((0, path_1.dirname)(file)) === 'comments';
|
|
164
|
+
const isNoteFile = (file) => file.endsWith('.json') && (0, path_1.basename)((0, path_1.dirname)(file)) === 'notes';
|
|
165
|
+
const isFlowFile = (file) => file.endsWith('.json') && (0, path_1.basename)((0, path_1.dirname)(file)) === 'flows';
|
|
166
|
+
const isDecisionFile = (file) => (0, path_1.basename)(file) === sketch_1.SKETCH_FILE || isCommentFile(file) || isNoteFile(file);
|
|
81
167
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
168
|
+
* A server-sent event stream for Studio: `comments` when a comment file changed, `notes` when a note file changed,
|
|
169
|
+
* `flows` when a flow file changed, and `parts` with the parts any change redraws and the revision it gave them.
|
|
84
170
|
*/
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
171
|
+
const createDesignEvents = () => {
|
|
172
|
+
const listeners = new Set();
|
|
173
|
+
return {
|
|
174
|
+
middleware: (request, response) => {
|
|
175
|
+
response.writeHead(200, {
|
|
176
|
+
'content-type': 'text/event-stream',
|
|
177
|
+
'cache-control': 'no-cache',
|
|
178
|
+
connection: 'keep-alive',
|
|
179
|
+
'access-control-allow-origin': '*',
|
|
180
|
+
});
|
|
181
|
+
response.write(': open\n\n');
|
|
182
|
+
listeners.add(response);
|
|
183
|
+
request.on('close', () => listeners.delete(response));
|
|
184
|
+
},
|
|
185
|
+
signal: (event, data = {}) => {
|
|
186
|
+
for (const response of listeners)
|
|
187
|
+
response.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`);
|
|
188
|
+
},
|
|
189
|
+
close: () => {
|
|
190
|
+
for (const response of listeners)
|
|
191
|
+
response.end();
|
|
192
|
+
listeners.clear();
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
const isInside = (folder, file) => file.startsWith(`${folder}${path_1.sep}`);
|
|
197
|
+
/**
|
|
198
|
+
* Serves the call registry, each product's parts and each project's and product's global stylesheet
|
|
199
|
+
* to the frame page, resolves `@system/...` per product, and renders the Angular templates a drawing
|
|
200
|
+
* asks for with `ng()`.
|
|
201
|
+
*/
|
|
202
|
+
const withAssetUrls = (system) => {
|
|
203
|
+
const marks = (0, part_marks_1.partMarksTransform)(system);
|
|
204
|
+
return (code, id) => { var _a; return (_a = system.withAssetUrls(code, id)) !== null && _a !== void 0 ? _a : marks(code, id); };
|
|
205
|
+
};
|
|
206
|
+
const designExplore = ({ target, config, system }) => {
|
|
207
|
+
const renderer = (0, render_1.createRenderer)({ target, config });
|
|
208
|
+
return {
|
|
209
|
+
name: 'design-explore',
|
|
210
|
+
enforce: 'pre',
|
|
211
|
+
resolveId: (id, importer) => {
|
|
212
|
+
var _a, _b, _c;
|
|
213
|
+
if (id === VIRTUAL || id === `${VIRTUAL}/env` || id === `${VIRTUAL}/system`)
|
|
214
|
+
return `\0${id}`;
|
|
215
|
+
return ((_a = system.resolveId(id, importer)) !== null && _a !== void 0 ? _a : (0, render_packages_1.mappedSubpathOf)({ specifier: id, packages: (_c = (_b = config.render) === null || _b === void 0 ? void 0 : _b.packages) !== null && _c !== void 0 ? _c : {}, target }));
|
|
216
|
+
},
|
|
217
|
+
load: (id) => {
|
|
218
|
+
if (id === `\0${VIRTUAL}`)
|
|
219
|
+
return registry(target);
|
|
220
|
+
if (id === `\0${VIRTUAL}/env`)
|
|
221
|
+
return env(target, config);
|
|
222
|
+
if (id === `\0${VIRTUAL}/system`)
|
|
223
|
+
return systemRegistry(system);
|
|
224
|
+
return null;
|
|
225
|
+
},
|
|
226
|
+
transform: withAssetUrls(system),
|
|
227
|
+
transformIndexHtml: {
|
|
228
|
+
order: 'pre',
|
|
229
|
+
handler: (html, ctx) => {
|
|
230
|
+
var _a, _b, _c, _d, _e, _f;
|
|
231
|
+
if (!ctx.path.includes('frame'))
|
|
232
|
+
return html;
|
|
233
|
+
const asked = new URL((_a = ctx.originalUrl) !== null && _a !== void 0 ? _a : ctx.path, 'http://localhost');
|
|
234
|
+
const product = asked.searchParams.get('product');
|
|
235
|
+
const head = product
|
|
236
|
+
? (_c = (_b = config.products) === null || _b === void 0 ? void 0 : _b[product]) === null || _c === void 0 ? void 0 : _c.head
|
|
237
|
+
: (_f = (_d = config.projects) === null || _d === void 0 ? void 0 : _d[projectOf((_e = asked.searchParams.get('call')) !== null && _e !== void 0 ? _e : '')]) === null || _f === void 0 ? void 0 : _f.head;
|
|
238
|
+
if (!head)
|
|
239
|
+
return html;
|
|
240
|
+
return html.replace('<!--head-->', (0, fs_1.readFileSync)((0, path_1.resolve)(target, head), 'utf8'));
|
|
241
|
+
},
|
|
112
242
|
},
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
243
|
+
/** The registries are built once per load, so a new call or part folder is invisible until it is invalidated. */
|
|
244
|
+
configureServer: (vite) => {
|
|
245
|
+
var _a, _b, _c;
|
|
246
|
+
const callsRoot = (0, paths_1.callsRootOf)(target);
|
|
247
|
+
const designRoot = (0, path_1.resolve)(target, paths_1.DESIGN_DIR);
|
|
248
|
+
const stamp = (0, stamp_1.buildStampOf)();
|
|
249
|
+
const base = () => {
|
|
250
|
+
var _a;
|
|
251
|
+
const address = (_a = vite.httpServer) === null || _a === void 0 ? void 0 : _a.address();
|
|
252
|
+
return `http://localhost:${address && typeof address === 'object' ? address.port : (0, paths_1.portOf)(config)}`;
|
|
253
|
+
};
|
|
254
|
+
const thumbs = (0, thumb_1.createThumbnailer)({ target, base });
|
|
255
|
+
const shots = (0, shot_1.createPartShooter)({
|
|
256
|
+
target,
|
|
257
|
+
base,
|
|
258
|
+
system,
|
|
259
|
+
statesOf: (_a) => __awaiter(void 0, [_a], void 0, function* ({ product, part, sketch }) {
|
|
260
|
+
var _b, _c;
|
|
261
|
+
const file = (_b = system.partOf({ product, part, sketch })) === null || _b === void 0 ? void 0 : _b.file;
|
|
262
|
+
if (!file)
|
|
263
|
+
return null;
|
|
264
|
+
const module = (yield vite.ssrLoadModule((0, system_modules_1.productModuleIdOf)({ file, product, sketch })));
|
|
265
|
+
const states = (_c = module.default) === null || _c === void 0 ? void 0 : _c.states;
|
|
266
|
+
return states && typeof states === 'object' ? Object.keys(states) : [];
|
|
267
|
+
}),
|
|
268
|
+
});
|
|
269
|
+
const baseDirs = [
|
|
270
|
+
...new Set(system.products().flatMap((name) => { var _a, _b, _c; return (_c = (_b = (_a = system.productOf(name)) === null || _a === void 0 ? void 0 : _a.base) === null || _b === void 0 ? void 0 : _b.dir) !== null && _c !== void 0 ? _c : []; })),
|
|
271
|
+
].filter((dir) => !isInside(designRoot, dir));
|
|
272
|
+
const reload = (id) => {
|
|
273
|
+
const module = vite.moduleGraph.getModuleById(`\0${id}`);
|
|
274
|
+
if (module)
|
|
275
|
+
vite.moduleGraph.invalidateModule(module);
|
|
276
|
+
};
|
|
277
|
+
const unresolveParts = () => {
|
|
278
|
+
for (const module of vite.moduleGraph.idToModuleMap.values()) {
|
|
279
|
+
if ((0, system_modules_1.productOfModuleId)(module.id))
|
|
280
|
+
vite.moduleGraph.invalidateModule(module);
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
const forgetCalls = (file) => {
|
|
284
|
+
thumbs.forget((0, path_1.relative)(callsRoot, file));
|
|
285
|
+
shots.forgetCalls((0, path_1.relative)(callsRoot, file));
|
|
286
|
+
};
|
|
287
|
+
const events = createDesignEvents();
|
|
288
|
+
let revision = 0;
|
|
289
|
+
const redraw = (change) => {
|
|
290
|
+
if (!change.all && change.parts.length === 0 && !change.errored)
|
|
291
|
+
return;
|
|
292
|
+
revision += 1;
|
|
293
|
+
if (change.all)
|
|
294
|
+
shots.clear();
|
|
295
|
+
else
|
|
296
|
+
shots.forget(change);
|
|
297
|
+
events.signal('parts', Object.assign({ revision }, change));
|
|
298
|
+
};
|
|
299
|
+
const hot = (_b = (_a = vite.environments) === null || _a === void 0 ? void 0 : _a['client']) === null || _b === void 0 ? void 0 : _b.hot;
|
|
300
|
+
if (hot) {
|
|
301
|
+
const send = hot.send.bind(hot);
|
|
302
|
+
hot.send = (payload, data) => {
|
|
303
|
+
// HMR is disabled: Studio must replace frames when Vite invalidates optimized dependency URLs.
|
|
304
|
+
if (typeof payload === 'object' && payload.type === 'full-reload') {
|
|
305
|
+
thumbs.clear();
|
|
306
|
+
redraw(changed_parts_1.ALL_PARTS);
|
|
307
|
+
}
|
|
308
|
+
return typeof payload === 'string' ? send(payload, data) : send(payload);
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
const configPath = (0, paths_1.configPathOf)(target);
|
|
312
|
+
const reloadConfig = () => {
|
|
313
|
+
let next;
|
|
314
|
+
try {
|
|
315
|
+
next = (0, paths_1.readConfig)(target);
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
console.error(`design-explore: ${configPath} is invalid, keeping the last good config (${error instanceof Error ? error.message : String(error)})`);
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
if (!next)
|
|
322
|
+
return;
|
|
323
|
+
for (const key of Object.keys(config))
|
|
324
|
+
delete config[key];
|
|
325
|
+
Object.assign(config, next);
|
|
326
|
+
system.forget();
|
|
327
|
+
reload(`${VIRTUAL}/env`);
|
|
328
|
+
reload(`${VIRTUAL}/system`);
|
|
329
|
+
redraw(changed_parts_1.ALL_PARTS);
|
|
330
|
+
};
|
|
331
|
+
const reloadFlows = () => {
|
|
332
|
+
thumbs.clear();
|
|
333
|
+
shots.clear();
|
|
334
|
+
events.signal('flows');
|
|
335
|
+
};
|
|
336
|
+
const refresh = (file) => {
|
|
337
|
+
if ((0, path_1.resolve)(file) === configPath)
|
|
338
|
+
return reloadConfig();
|
|
339
|
+
if (isCommentFile(file))
|
|
340
|
+
return events.signal('comments');
|
|
341
|
+
if (isNoteFile(file))
|
|
342
|
+
return events.signal('notes');
|
|
343
|
+
if (isFlowFile(file))
|
|
344
|
+
return reloadFlows();
|
|
345
|
+
forgetCalls(file);
|
|
346
|
+
if ((0, vite_paths_1.isCallFile)({ callsRoot, file }))
|
|
347
|
+
return reload(VIRTUAL);
|
|
348
|
+
if (isDecisionFile(file))
|
|
349
|
+
return;
|
|
350
|
+
if (isInside(callsRoot, file) || ![designRoot, ...baseDirs].some((dir) => isInside(dir, file)))
|
|
351
|
+
return;
|
|
352
|
+
system.forget();
|
|
353
|
+
unresolveParts();
|
|
354
|
+
reload(`${VIRTUAL}/system`);
|
|
355
|
+
redraw((0, changed_parts_1.addedPartsOf)({ designRoot, baseDirs, system, file: (0, path_1.resolve)(file) }));
|
|
356
|
+
};
|
|
357
|
+
const change = (file) => {
|
|
358
|
+
var _a;
|
|
359
|
+
if ((0, path_1.resolve)(file) === configPath)
|
|
360
|
+
return reloadConfig();
|
|
361
|
+
if (isCommentFile(file))
|
|
362
|
+
return events.signal('comments');
|
|
363
|
+
if (isNoteFile(file))
|
|
364
|
+
return events.signal('notes');
|
|
365
|
+
if (isFlowFile(file))
|
|
366
|
+
return reloadFlows();
|
|
367
|
+
forgetCalls(file);
|
|
368
|
+
const dependents = (0, shot_1.dependentIdsOf)((_a = vite.moduleGraph.getModulesByFile(file)) !== null && _a !== void 0 ? _a : []);
|
|
369
|
+
redraw((0, changed_parts_1.changedPartsOf)({ target, config, system, file, dependents }));
|
|
370
|
+
};
|
|
371
|
+
const answer = (handle) => (request, response) => {
|
|
372
|
+
var _a;
|
|
373
|
+
return void handle(new URL((_a = request.url) !== null && _a !== void 0 ? _a : '', 'http://localhost'), request).then((answered) => sendJson(response, answered), (error) => sendJson(response, {
|
|
374
|
+
status: 500,
|
|
375
|
+
body: { error: error instanceof Error ? error.message : String(error) },
|
|
376
|
+
}));
|
|
377
|
+
};
|
|
378
|
+
vite.middlewares.use(stamp_1.STAMP_PATH, (_request, response) => {
|
|
379
|
+
response.setHeader('content-type', 'application/json');
|
|
380
|
+
response.end(JSON.stringify(stamp));
|
|
381
|
+
});
|
|
382
|
+
vite.middlewares.use(render_1.RENDER_PATH, (0, render_1.renderMiddleware)(renderer));
|
|
383
|
+
vite.middlewares.use(render_1.FORCE_PATH, render_1.forceMiddleware);
|
|
384
|
+
vite.middlewares.use(thumb_1.THUMB_PATH, thumbs.middleware);
|
|
385
|
+
vite.middlewares.use(shot_1.SHOT_PATH, shots.middleware);
|
|
386
|
+
vite.middlewares.use(list_system_1.SYSTEM_PATH, answer((url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
387
|
+
var _a;
|
|
388
|
+
const asked = url.searchParams.get('product');
|
|
389
|
+
if (asked && !((_a = config.products) === null || _a === void 0 ? void 0 : _a[asked]))
|
|
390
|
+
return { status: 404, body: { error: `no product "${asked}"` } };
|
|
391
|
+
const products = yield (0, list_system_1.listSystem)({
|
|
392
|
+
target,
|
|
393
|
+
system,
|
|
394
|
+
products: asked ? [asked] : system.products(),
|
|
395
|
+
load: ({ file, product }) => vite.ssrLoadModule((0, system_modules_1.productModuleIdOf)({ file, product })),
|
|
396
|
+
});
|
|
397
|
+
return { status: 200, body: products };
|
|
398
|
+
})));
|
|
399
|
+
vite.middlewares.use(product_command_1.PRODUCT_PATH, answer((_url, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
400
|
+
const created = yield (0, product_command_1.newProductAnswer)({ target, request });
|
|
401
|
+
if (created.status === 201)
|
|
402
|
+
reloadConfig();
|
|
403
|
+
return created;
|
|
404
|
+
})));
|
|
405
|
+
vite.middlewares.use(calls_1.CALLS_PATH, answer(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
406
|
+
return ({
|
|
407
|
+
status: 200,
|
|
408
|
+
body: yield (0, calls_1.listCalls)({ target, load: (file) => vite.ssrLoadModule(file) }),
|
|
409
|
+
});
|
|
410
|
+
})));
|
|
411
|
+
vite.middlewares.use(legacy_1.TRANSFER_PATH, answer((url, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
412
|
+
var _a;
|
|
413
|
+
if (request.method !== 'POST')
|
|
414
|
+
return { status: 405, body: { error: 'POST only' } };
|
|
415
|
+
const result = (0, legacy_1.markTransferred)({ target, slug: (_a = url.searchParams.get('call')) !== null && _a !== void 0 ? _a : '' });
|
|
416
|
+
const status = result === 'missing' ? 404 : result === 'unreadable' ? 422 : 200;
|
|
417
|
+
return { status, body: { result } };
|
|
418
|
+
})));
|
|
419
|
+
const studio = (path, handle) => vite.middlewares.use(path, answer((url, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
420
|
+
return handle({
|
|
421
|
+
target,
|
|
422
|
+
url,
|
|
423
|
+
request,
|
|
424
|
+
load: ({ file, product, sketch }) => vite.ssrLoadModule((0, system_modules_1.productModuleIdOf)({ file, product, sketch })),
|
|
425
|
+
pictureOf: shots.pictureOf,
|
|
426
|
+
boxOf: shots.changedBoxOf,
|
|
427
|
+
});
|
|
428
|
+
})));
|
|
429
|
+
studio(studio_api_1.SKETCHES_PATH, studio_api_1.sketchesAnswer);
|
|
430
|
+
studio(studio_api_1.SKETCH_PREVIEW_PATH, studio_api_1.sketchPreviewAnswer);
|
|
431
|
+
studio(studio_api_1.SKETCH_COMPARE_PATH, studio_api_1.sketchCompareAnswer);
|
|
432
|
+
studio(studio_api_1.SKETCH_DIFF_PATH, studio_api_1.sketchDiffAnswer);
|
|
433
|
+
studio(studio_api_1.SKETCH_CROP_PATH, studio_api_1.sketchCropAnswer);
|
|
434
|
+
studio(studio_api_1.SKETCH_DECISION_PATH, studio_api_1.sketchDecisionAnswer);
|
|
435
|
+
studio(studio_api_1.SKETCH_MERGE_PATH, studio_api_1.sketchMergeAnswer);
|
|
436
|
+
studio(studio_api_1.SKETCH_DISCARD_PATH, studio_api_1.sketchDiscardAnswer);
|
|
437
|
+
studio(studio_api_1.COMMENTS_PATH, studio_api_1.commentsAnswer);
|
|
438
|
+
studio(studio_api_1.COMMENT_PATH, studio_api_1.commentAnswer);
|
|
439
|
+
studio(studio_api_1.COMMENT_DONE_PATH, studio_api_1.commentDoneAnswer);
|
|
440
|
+
studio(studio_api_1.COMMENT_WITHDRAW_PATH, studio_api_1.commentWithdrawAnswer);
|
|
441
|
+
studio(studio_api_1.COMMENT_REPLY_PATH, studio_api_1.commentReplyAnswer);
|
|
442
|
+
studio(studio_api_1.FLOWS_PATH, studio_api_1.flowsAnswer);
|
|
443
|
+
studio(studio_api_1.NOTES_PATH, studio_api_1.notesAnswer);
|
|
444
|
+
studio(studio_api_1.NOTE_PATH, studio_api_1.noteAnswer);
|
|
445
|
+
studio(studio_api_1.NOTE_CHANGE_PATH, studio_api_1.noteChangeAnswer);
|
|
446
|
+
studio(studio_api_1.NOTE_DELETE_PATH, studio_api_1.noteDeleteAnswer);
|
|
447
|
+
studio(studio_api_1.FLOW_NOTE_PATH, studio_api_1.flowNoteAnswer);
|
|
448
|
+
studio(studio_api_1.FLOW_NOTE_CHANGE_PATH, studio_api_1.flowNoteChangeAnswer);
|
|
449
|
+
studio(studio_api_1.FLOW_NOTE_DELETE_PATH, studio_api_1.flowNoteDeleteAnswer);
|
|
450
|
+
vite.middlewares.use(studio_api_1.COMMENT_EVENTS_PATH, events.middleware);
|
|
451
|
+
(_c = vite.httpServer) === null || _c === void 0 ? void 0 : _c.on('close', () => {
|
|
452
|
+
events.close();
|
|
453
|
+
void Promise.all([thumbs.close(), shots.close()]);
|
|
454
|
+
});
|
|
455
|
+
vite.watcher.add([designRoot, ...baseDirs]);
|
|
456
|
+
vite.watcher.on('add', refresh);
|
|
457
|
+
vite.watcher.on('unlink', refresh);
|
|
458
|
+
vite.watcher.on('change', change);
|
|
459
|
+
},
|
|
460
|
+
closeBundle: () => renderer.close(),
|
|
461
|
+
};
|
|
462
|
+
};
|
|
463
|
+
const freePortOf = () => new Promise((resolvePort, reject) => {
|
|
464
|
+
const probe = (0, net_1.createServer)();
|
|
465
|
+
probe.once('error', reject);
|
|
466
|
+
probe.listen(0, () => {
|
|
467
|
+
const { port } = probe.address();
|
|
468
|
+
probe.close(() => resolvePort(port));
|
|
469
|
+
});
|
|
141
470
|
});
|
|
142
471
|
/**
|
|
143
|
-
*
|
|
144
|
-
*
|
|
472
|
+
* The Vite server that draws a checkout: listening on the configured port to serve the frames, or in
|
|
473
|
+
* middleware mode only to load design modules for a command. With `port`, it listens there instead
|
|
474
|
+
* (0 picks a free one), quiet, unwatched and with a dependency cache of its own, so a command can draw
|
|
475
|
+
* while the user's server runs.
|
|
145
476
|
*/
|
|
146
|
-
const
|
|
147
|
-
const { target } = options;
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
return 1;
|
|
152
|
-
}
|
|
477
|
+
const createDesignServer = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
478
|
+
const { target, config, listen, sketchesRoot } = options;
|
|
479
|
+
const host = options.host || process.env['DE_HOST'] || undefined;
|
|
480
|
+
const own = listen && options.port !== undefined;
|
|
481
|
+
const port = own ? yield freePortOf() : options.listenOn;
|
|
153
482
|
(0, calls_tsconfig_1.writeCallsTsconfig)(target);
|
|
154
483
|
// Vite reads a tsconfig out of the working directory to transpile a call, and the calls sit
|
|
155
484
|
// outside its root. From a directory that holds none, every call compiles to an empty module.
|
|
@@ -157,31 +486,86 @@ const serveDesign = (options) => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
157
486
|
const { createServer } = yield import('vite');
|
|
158
487
|
const { default: tailwind } = yield import('@tailwindcss/postcss');
|
|
159
488
|
const here = (0, paths_1.assetRoot)();
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
489
|
+
const system = (0, system_modules_1.createSystemModules)({ target, config, sketchesRoot });
|
|
490
|
+
if (listen) {
|
|
491
|
+
for (const name of system.products()) {
|
|
492
|
+
const product = system.productOf(name);
|
|
493
|
+
if (product)
|
|
494
|
+
(0, system_tsconfig_1.writeEditorTsconfig)({ target, product });
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
const baseDirs = system.products().flatMap((name) => { var _a, _b, _c; return (_c = (_b = (_a = system.productOf(name)) === null || _a === void 0 ? void 0 : _a.base) === null || _b === void 0 ? void 0 : _b.dir) !== null && _c !== void 0 ? _c : []; });
|
|
498
|
+
const server = yield createServer(Object.assign(Object.assign(Object.assign({ configFile: false, root: (0, path_1.resolve)(here, 'web'),
|
|
163
499
|
// Every drawing is ruled under Tailwind 4, whatever the checkout installs. The tool brings its
|
|
164
500
|
// own pipeline so no checkout's postcss config reaches a drawing.
|
|
165
|
-
css: { postcss: { plugins: [tailwind()] } },
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
501
|
+
css: { postcss: { plugins: [tailwind(), (0, force_interactions_1.forceInteractionsPlugin)()] } }, cacheDir: (0, paths_1.viteCacheOf)(target, own ? 'vite-check' : 'vite'), resolve: {
|
|
502
|
+
alias: [
|
|
503
|
+
{ find: /^@design-explore$/, replacement: (0, path_1.resolve)(here, 'define-call.ts') },
|
|
504
|
+
{ find: new RegExp(`^${system_tsconfig_1.DESIGN_SYSTEM_SPECIFIER}$`), replacement: (0, path_1.resolve)(here, 'define-part.ts') },
|
|
505
|
+
{ find: new RegExp(`^${kit_1.KIT_SPECIFIER}$`), replacement: (0, path_1.resolve)(here, 'wireframe-kit.ts') },
|
|
506
|
+
...workspaceAliases(target),
|
|
507
|
+
],
|
|
508
|
+
},
|
|
170
509
|
// A design mock ships as TS that imports CSS with `?inline`, which the dependency pre-bundler
|
|
171
510
|
// can not load.
|
|
172
|
-
optimizeDeps: { exclude: ['@ethlete/components', '@ethlete/core'] },
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
port: (0, paths_1.portOf)(config),
|
|
176
|
-
strictPort: true,
|
|
511
|
+
optimizeDeps: { exclude: ['@ethlete/components', '@ethlete/core'] }, plugins: [designExplore({ target, config, system })] }, (listen ? {} : { appType: 'custom' })), (listen && !own ? {} : { logLevel: 'error' })), { server: Object.assign(Object.assign({
|
|
512
|
+
// Studio swaps a frame for a fresh one once it has painted; a Vite reload would blank every frame at once.
|
|
513
|
+
hmr: false }, (listen
|
|
514
|
+
? Object.assign(Object.assign(Object.assign({ port: port !== null && port !== void 0 ? port : (0, paths_1.portOf)(config) }, (host ? { host } : {})), { strictPort: true }), (own ? { watch: null } : {})) : { middlewareMode: true, ws: false, watch: null })), {
|
|
177
515
|
// The frame page lives inside this package, which is outside the checkout it draws. Vite
|
|
178
516
|
// serves neither root unless both are allowed.
|
|
179
|
-
fs: { allow: [target, here] }
|
|
180
|
-
|
|
517
|
+
fs: { allow: [target, here, ...baseDirs] } }) }));
|
|
518
|
+
const listening = server.listen.bind(server);
|
|
519
|
+
server.listen = (...args) => listening(...args).catch((error) => {
|
|
520
|
+
const code = error === null || error === void 0 ? void 0 : error.code;
|
|
521
|
+
if (code !== 'EPERM' && code !== 'EACCES')
|
|
522
|
+
throw error;
|
|
523
|
+
throw new Error(`design-explore: cannot open a local port (${code}) - the environment forbids listening, so nothing was drawn. This is a permission failure, not a drawing failure: run outside the sandbox.`);
|
|
524
|
+
});
|
|
525
|
+
return server;
|
|
526
|
+
});
|
|
527
|
+
exports.createDesignServer = createDesignServer;
|
|
528
|
+
const exitWhenStdinCloses = (server) => {
|
|
529
|
+
let closing = false;
|
|
530
|
+
const shutDown = () => {
|
|
531
|
+
if (closing)
|
|
532
|
+
return;
|
|
533
|
+
closing = true;
|
|
534
|
+
void server.close().finally(() => process.exit(0));
|
|
535
|
+
};
|
|
536
|
+
process.stdin.once('end', shutDown);
|
|
537
|
+
process.stdin.once('close', shutDown);
|
|
538
|
+
process.stdin.resume();
|
|
539
|
+
};
|
|
540
|
+
/**
|
|
541
|
+
* Starts the design server for a checkout and keeps it running. The returned exit code is the
|
|
542
|
+
* command's, not the server's: a listening server holds the process open on its own.
|
|
543
|
+
*/
|
|
544
|
+
const serveDesign = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
545
|
+
const { target, host } = options;
|
|
546
|
+
const config = (0, paths_1.readConfig)(target);
|
|
547
|
+
if (!config) {
|
|
548
|
+
console.error(`design-explore: no config at ${(0, paths_1.configPathOf)(target)}`);
|
|
549
|
+
return 1;
|
|
550
|
+
}
|
|
551
|
+
(0, paths_1.snapshotPackage)(target);
|
|
552
|
+
const ownedByStudio = process.env['ETHLETE_DESIGN_EXIT_ON_STDIN_CLOSE'] === '1';
|
|
553
|
+
const server = yield (0, exports.createDesignServer)({
|
|
554
|
+
target,
|
|
555
|
+
config,
|
|
556
|
+
listen: true,
|
|
557
|
+
host,
|
|
558
|
+
listenOn: ownedByStudio ? undefined : yield freePortOf(),
|
|
181
559
|
});
|
|
182
560
|
yield server.listen();
|
|
183
561
|
console.log(`design-explore: drawing ${target}`);
|
|
562
|
+
if (!ownedByStudio) {
|
|
563
|
+
console.log(`design-explore: not started by Studio, so it listens on a free port and leaves ${(0, paths_1.portOf)(config)} to Studio`);
|
|
564
|
+
}
|
|
184
565
|
server.printUrls();
|
|
566
|
+
if (ownedByStudio) {
|
|
567
|
+
exitWhenStdinCloses(server);
|
|
568
|
+
}
|
|
185
569
|
return 0;
|
|
186
570
|
});
|
|
187
571
|
exports.serveDesign = serveDesign;
|