@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,618 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
12
|
+
var t = {};
|
|
13
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
14
|
+
t[p] = s[p];
|
|
15
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
16
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
18
|
+
t[p[i]] = s[p[i]];
|
|
19
|
+
}
|
|
20
|
+
return t;
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.designSketch = exports.verdictLinesOf = exports.sketchFlagHelpOf = exports.SKETCH_USAGE = void 0;
|
|
24
|
+
const path_1 = require("path");
|
|
25
|
+
const assets_1 = require("./system/assets");
|
|
26
|
+
const comment_1 = require("./system/comments/comment");
|
|
27
|
+
const product_1 = require("./system/product");
|
|
28
|
+
const resolve_product_1 = require("./system/resolve-product");
|
|
29
|
+
const check_format_1 = require("./system/sketch/check-format");
|
|
30
|
+
const check_sketches_1 = require("./system/sketch/check-sketches");
|
|
31
|
+
const cli_args_1 = require("./system/sketch/cli-args");
|
|
32
|
+
const ready_shots_1 = require("./ready-shots");
|
|
33
|
+
const merge_1 = require("./system/sketch/merge");
|
|
34
|
+
const merged_parts_1 = require("./system/sketch/merged-parts");
|
|
35
|
+
const render_check_1 = require("./system/render-check");
|
|
36
|
+
const merge_preview_1 = require("./system/sketch/merge-preview");
|
|
37
|
+
const sketch_1 = require("./system/sketch/sketch");
|
|
38
|
+
exports.SKETCH_USAGE = [
|
|
39
|
+
'sketch new <layer>/<name> --variants a,b --by <model id> [--like <layer>/<name>[:<variant>]] [--round <title>] [--note <text>] [--variant-note <variant>=<text>]… [--product <name>]',
|
|
40
|
+
'sketch variant <layer>/<name> <variant>[,<variant>…] --from <variant> --by <model id> [--round <title> --note <why the running round lost> [--round-note <what the new round shows>]] [--product <name>]',
|
|
41
|
+
'sketch round <layer>/<name> <round> [--title <text>] [--note <text>] [--drops <state,state>] --by <model id> [--product <name>]',
|
|
42
|
+
'sketch list [--product <name>] [--json]',
|
|
43
|
+
'sketch report <layer>/<name> --variant <key> --by <model id> (<text> | --done) [--product <name>]',
|
|
44
|
+
'sketch ready <layer>/<name> --by <model id> [--product <name>]',
|
|
45
|
+
'sketch check [<layer>/<name>] [--fix] [--product <name>]',
|
|
46
|
+
'sketch preview <layer>/<name> <variant> [--product <name>] [--json]',
|
|
47
|
+
'sketch rebase <layer>/<name> --by <model id> [--product <name>]',
|
|
48
|
+
'sketch merge <layer>/<name> [--note <reason>] --by <model id> [--product <name>]',
|
|
49
|
+
'sketch discard <layer>/<name> --by <model id> [--product <name>]',
|
|
50
|
+
'sketch reject <layer>/<name> --variant <key> [--reason <text>] --by <model id | designer> [--product <name>]',
|
|
51
|
+
'sketch reopen <layer>/<name> --variant <key> [--reason <text>] --by <model id | designer> [--product <name>]',
|
|
52
|
+
];
|
|
53
|
+
const FLAG_HELP = {
|
|
54
|
+
'--variants': 'the variant folders to open, a comma list: a,b,c',
|
|
55
|
+
'--variant-note': "the note of one variant, kept in sketch.json apart from the part's merged note; repeat it per variant: a=<text>",
|
|
56
|
+
'--by': 'the exact model id the coordinator gave you, e.g. claude-opus-5-5',
|
|
57
|
+
'--like': 'start each variant from another part, or from a variant of the open sketch on it',
|
|
58
|
+
'--round': 'the title of a new round',
|
|
59
|
+
'--round-note': 'what the new round shows',
|
|
60
|
+
'--from': 'the variant to copy',
|
|
61
|
+
'--title': 'the new title of the round',
|
|
62
|
+
'--drops': 'the states the round drops on purpose, a comma list',
|
|
63
|
+
'--variant': 'the variant the command is about',
|
|
64
|
+
'--reason': 'why; on reject of a variant that is rejected already it sets the reason of that rejection; stored with who wrote it',
|
|
65
|
+
'--done': 'end the live report of the variant',
|
|
66
|
+
'--product': 'the product; needed only when config.json declares more than one and no other product has the sketch',
|
|
67
|
+
'--json': 'print JSON',
|
|
68
|
+
'--fix': "write the variants in the checkout's Prettier format first",
|
|
69
|
+
};
|
|
70
|
+
const VERDICT_BY_HELP = "a model id records the verdict as the agent's; --by designer records it as the designer's - only when the designer said it at this terminal";
|
|
71
|
+
const NOTE_HELP = {
|
|
72
|
+
new: 'what the first round shows',
|
|
73
|
+
variant: 'why the running round lost; needed with --round',
|
|
74
|
+
round: 'what the round shows',
|
|
75
|
+
merge: 'why this variant',
|
|
76
|
+
};
|
|
77
|
+
/** One line per flag the usage line names, for `sketch <command> --help`. */
|
|
78
|
+
const sketchFlagHelpOf = (usage) => {
|
|
79
|
+
var _a, _b;
|
|
80
|
+
const command = (_a = usage.split(' ')[1]) !== null && _a !== void 0 ? _a : '';
|
|
81
|
+
const help = Object.assign(Object.assign(Object.assign({}, FLAG_HELP), { '--note': NOTE_HELP[command] }), (VERDICTS.has(command) ? { '--by': VERDICT_BY_HELP } : {}));
|
|
82
|
+
return [...new Set((_b = usage.match(/--[a-z-]+/gu)) !== null && _b !== void 0 ? _b : [])].flatMap((flag) => help[flag] === undefined ? [] : [` ${flag.padEnd(16)}${help[flag]}`]);
|
|
83
|
+
};
|
|
84
|
+
exports.sketchFlagHelpOf = sketchFlagHelpOf;
|
|
85
|
+
const VERDICTS = new Set(['reject', 'reopen']);
|
|
86
|
+
const WRITES = new Set(['new', 'variant', 'round', 'report', 'ready', 'rebase', 'merge', 'discard', ...VERDICTS]);
|
|
87
|
+
const fail = (message) => {
|
|
88
|
+
console.error(message);
|
|
89
|
+
return 1;
|
|
90
|
+
};
|
|
91
|
+
const productsWithSketchOf = (context, has) => {
|
|
92
|
+
var _a;
|
|
93
|
+
return Object.keys((_a = context.config.products) !== null && _a !== void 0 ? _a : {}).filter((name) => has((0, product_1.productDirOf)({ target: context.target, product: name }), name));
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* The product a sketch command works on: the one `--product` names or the only one the config declares, else the
|
|
97
|
+
* only product with an open sketch on the target - or with any open sketch when the command names no target.
|
|
98
|
+
*/
|
|
99
|
+
const sketchProductOf = (context) => {
|
|
100
|
+
var _a;
|
|
101
|
+
const { target, config, args } = context;
|
|
102
|
+
const asked = args.values['--product'];
|
|
103
|
+
const declared = Object.keys((_a = config.products) !== null && _a !== void 0 ? _a : {});
|
|
104
|
+
if (asked !== undefined || declared.length < 2)
|
|
105
|
+
return (0, cli_args_1.oneProductOf)({ target, config, asked });
|
|
106
|
+
const parsed = (0, sketch_1.parseTarget)(args.positional[0]);
|
|
107
|
+
const holders = args.positional[0] === undefined
|
|
108
|
+
? productsWithSketchOf(context, (productDir, product) => (0, sketch_1.listSketches)({ productDir, product }).some((sketch) => typeof sketch !== 'string'))
|
|
109
|
+
: typeof parsed === 'string'
|
|
110
|
+
? []
|
|
111
|
+
: productsWithSketchOf(context, (productDir, product) => (0, sketch_1.findSketch)({ productDir, product, sketch: parsed }) !== null);
|
|
112
|
+
return (0, cli_args_1.oneProductOf)({ target, config, asked: holders.length === 1 ? holders[0] : undefined });
|
|
113
|
+
};
|
|
114
|
+
const productAndSketchOf = (context) => {
|
|
115
|
+
var _a;
|
|
116
|
+
const { args } = context;
|
|
117
|
+
const product = sketchProductOf(context);
|
|
118
|
+
if (typeof product === 'string')
|
|
119
|
+
return product;
|
|
120
|
+
const parsed = (0, sketch_1.parseTarget)(args.positional[0]);
|
|
121
|
+
if (typeof parsed === 'string')
|
|
122
|
+
return parsed;
|
|
123
|
+
const sketch = (0, sketch_1.findSketch)({ productDir: product.dir, product: product.name, sketch: parsed });
|
|
124
|
+
if (sketch === null)
|
|
125
|
+
return `NO SKETCH on ${(0, resolve_product_1.partKeyOf)(parsed)} in ${product.name}${(_a = context.noSketchHint) !== null && _a !== void 0 ? _a : ''}`;
|
|
126
|
+
if (typeof sketch === 'string')
|
|
127
|
+
return sketch;
|
|
128
|
+
return { product, sketch };
|
|
129
|
+
};
|
|
130
|
+
const withSketch = (context, run) => {
|
|
131
|
+
const found = productAndSketchOf(context);
|
|
132
|
+
return typeof found === 'string' ? fail(found) : run(found);
|
|
133
|
+
};
|
|
134
|
+
const partFileOf = (options) => {
|
|
135
|
+
var _a;
|
|
136
|
+
const { root, sketch, variant } = options;
|
|
137
|
+
const name = (_a = sketch.target.split('/').pop()) !== null && _a !== void 0 ? _a : '';
|
|
138
|
+
return (0, path_1.relative)(root, (0, path_1.resolve)(sketch.dir, variant, sketch.target, `${name}.ts`));
|
|
139
|
+
};
|
|
140
|
+
const variantLineOf = (options) => {
|
|
141
|
+
const { root, sketch, variant } = options;
|
|
142
|
+
return ` ${variant}: ${partFileOf(options)} assets: ${(0, path_1.relative)(root, (0, path_1.resolve)(sketch.dir, variant, assets_1.ASSETS_FOLDER))}/`;
|
|
143
|
+
};
|
|
144
|
+
const created = (context) => {
|
|
145
|
+
var _a, _b, _c, _d;
|
|
146
|
+
const { target, config, args } = context;
|
|
147
|
+
const product = (0, cli_args_1.oneProductOf)({ target, config, asked: args.values['--product'] });
|
|
148
|
+
if (typeof product === 'string')
|
|
149
|
+
return fail(product);
|
|
150
|
+
const parsed = (0, sketch_1.parseTarget)(args.positional[0]);
|
|
151
|
+
if (typeof parsed === 'string')
|
|
152
|
+
return fail(parsed);
|
|
153
|
+
const variants = ((_a = args.values['--variants']) !== null && _a !== void 0 ? _a : '').split(',').filter((variant) => variant !== '');
|
|
154
|
+
const notes = variantNotesOf((_b = args.repeated['--variant-note']) !== null && _b !== void 0 ? _b : [], variants);
|
|
155
|
+
if (typeof notes === 'string')
|
|
156
|
+
return fail(notes);
|
|
157
|
+
if (args.values['--round'] !== undefined && ((_c = args.values['--note']) !== null && _c !== void 0 ? _c : '').trim() === '')
|
|
158
|
+
return fail(`--round needs --note "<what the round shows>" - sketch ready refuses a round without a note`);
|
|
159
|
+
const asked = args.values['--like'];
|
|
160
|
+
const like = asked === undefined ? undefined : (0, sketch_1.sketchSourceOf)({ product, like: asked });
|
|
161
|
+
if (typeof like === 'string')
|
|
162
|
+
return fail(like);
|
|
163
|
+
const sketch = (0, sketch_1.createSketch)({
|
|
164
|
+
product,
|
|
165
|
+
sketch: parsed,
|
|
166
|
+
variants,
|
|
167
|
+
roundTitle: args.values['--round'],
|
|
168
|
+
roundNote: args.values['--note'],
|
|
169
|
+
author: (_d = (0, cli_args_1.authorOf)(args)) !== null && _d !== void 0 ? _d : undefined,
|
|
170
|
+
like,
|
|
171
|
+
variantNotes: notes,
|
|
172
|
+
});
|
|
173
|
+
if (typeof sketch === 'string')
|
|
174
|
+
return fail(sketch);
|
|
175
|
+
(0, check_format_1.formatSketch)({ target, sketch, variants: sketch.variants });
|
|
176
|
+
console.log(`${sketch.target} in progress: ${(0, path_1.relative)(target, sketch.dir)} with ${sketch.variants.join(', ')}`);
|
|
177
|
+
for (const variant of sketch.variants)
|
|
178
|
+
console.log(variantLineOf({ root: target, sketch, variant }));
|
|
179
|
+
const shared = (0, sketch_1.sourceFilesIn)((0, sketch_1.sharedDirOf)(sketch));
|
|
180
|
+
if (shared.length > 0) {
|
|
181
|
+
console.log(` shared by every variant, imported as @shared/<path>; edit it here, not in a copy:`);
|
|
182
|
+
shared.forEach((file) => console.log(` ${(0, path_1.relative)(target, file)}`));
|
|
183
|
+
}
|
|
184
|
+
nextStepsOf(sketch, product.name).forEach((line) => console.log(line));
|
|
185
|
+
return 0;
|
|
186
|
+
};
|
|
187
|
+
const nextStepsOf = (sketch, product) => {
|
|
188
|
+
var _a;
|
|
189
|
+
const at = `${sketch.target} --product ${product}`;
|
|
190
|
+
const first = (_a = sketch.variants[0]) !== null && _a !== void 0 ? _a : '<key>';
|
|
191
|
+
const running = (0, sketch_1.runningRoundOf)(sketch);
|
|
192
|
+
return [
|
|
193
|
+
'Next:',
|
|
194
|
+
` sketch report ${at} --variant ${first} --by <model id> "<what you draw>" while you draw a variant`,
|
|
195
|
+
` sketch report ${at} --variant ${first} --by <model id> --done when you stop drawing it; no report runs yet, so none is needed now`,
|
|
196
|
+
...(running.note.trim() === ''
|
|
197
|
+
? [
|
|
198
|
+
` sketch round ${sketch.target} ${running.key} --product ${product} --note "<what the round shows>" --by <model id>`,
|
|
199
|
+
]
|
|
200
|
+
: []),
|
|
201
|
+
` sketch check ${at}`,
|
|
202
|
+
` sketch ready ${at} --by <model id>`,
|
|
203
|
+
];
|
|
204
|
+
};
|
|
205
|
+
const variantNotesOf = (pairs, variants) => {
|
|
206
|
+
const notes = new Map();
|
|
207
|
+
for (const pair of pairs) {
|
|
208
|
+
const split = pair.indexOf('=');
|
|
209
|
+
const variant = pair.slice(0, split);
|
|
210
|
+
if (split < 1 || !variants.includes(variant))
|
|
211
|
+
return `--variant-note needs <variant>=<text> with one of ${variants.join(', ') || 'the --variants'}; got "${pair}"`;
|
|
212
|
+
notes.set(variant, pair.slice(split + 1).trim());
|
|
213
|
+
}
|
|
214
|
+
return notes;
|
|
215
|
+
};
|
|
216
|
+
const VARIANT_USAGE = 'usage: sketch variant <layer>/<name> <variant>[,<variant>…] --from <variant> [--round <title> --note <why the running round lost> [--round-note <what the new round shows>]]';
|
|
217
|
+
const varied = (context) => {
|
|
218
|
+
var _a;
|
|
219
|
+
return withSketch(Object.assign(Object.assign({}, context), { noSketchHint: ` - start one with: sketch new ${(_a = context.args.positional[0]) !== null && _a !== void 0 ? _a : '<layer>/<name>'} --variants a,b,c --round "<title>"` }), ({ sketch }) => {
|
|
220
|
+
var _a, _b, _c, _d, _e;
|
|
221
|
+
const { positional, values } = context.args;
|
|
222
|
+
const variant = positional[1];
|
|
223
|
+
const from = values['--from'];
|
|
224
|
+
const title = values['--round'];
|
|
225
|
+
const lostNote = values['--note'];
|
|
226
|
+
const roundNote = values['--round-note'];
|
|
227
|
+
if (positional.length !== 2 ||
|
|
228
|
+
!variant ||
|
|
229
|
+
!from ||
|
|
230
|
+
(title === undefined) !== (lostNote === undefined) ||
|
|
231
|
+
(title === undefined && roundNote !== undefined))
|
|
232
|
+
return fail(VARIANT_USAGE);
|
|
233
|
+
const open = title === undefined
|
|
234
|
+
? (0, comment_1.commentsOnSketch)({ productDir: (0, path_1.resolve)(sketch.dir, '..', '..'), product: sketch.product, sketch })
|
|
235
|
+
: [];
|
|
236
|
+
if (open.length > 0)
|
|
237
|
+
return fail([
|
|
238
|
+
`${sketch.target} has ${open.length} open comment(s) - a variant that answers them starts a new round:`,
|
|
239
|
+
...open.map((comment) => { var _a, _b; return ` ${comment.id} on ${(_b = (_a = comment.sketch) === null || _a === void 0 ? void 0 : _a.variant) !== null && _b !== void 0 ? _b : ''}: ${comment.text}`; }),
|
|
240
|
+
`sketch variant ${sketch.target} ${variant} --from <variant> --round "<title>" --note "<why the running round lost>" --round-note "<what the new round shows>"`,
|
|
241
|
+
`if the variant answers none of them, close each first with: inbox done <id> --note <text>`,
|
|
242
|
+
].join('\n'));
|
|
243
|
+
const variants = variant.split(',').filter((name) => name !== '');
|
|
244
|
+
const taken = variants.find((name, index) => sketch.variants.includes(name) || variants.indexOf(name) !== index);
|
|
245
|
+
const invalid = variants.find((name) => !(0, sketch_1.isVariantName)(name));
|
|
246
|
+
if (invalid !== undefined)
|
|
247
|
+
return fail(`"${invalid}" is no variant name - use lower case letters, digits and dashes, and not "shared"`);
|
|
248
|
+
if (taken !== undefined)
|
|
249
|
+
return fail(`${sketch.target} already has a variant "${taken}"`);
|
|
250
|
+
let added = sketch;
|
|
251
|
+
for (const [index, name] of variants.entries()) {
|
|
252
|
+
const next = (0, sketch_1.addVariant)(Object.assign({ sketch: added, variant: name, from, author: (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined }, (index === 0 && title !== undefined && lostNote !== undefined
|
|
253
|
+
? { round: { title, lostNote, note: roundNote } }
|
|
254
|
+
: {})));
|
|
255
|
+
if (typeof next === 'string')
|
|
256
|
+
return fail(next);
|
|
257
|
+
added = next;
|
|
258
|
+
}
|
|
259
|
+
const round = added.rounds.find((entry) => { var _a, _b; return entry.key === ((_b = added.variantInfo[(_a = variants[0]) !== null && _a !== void 0 ? _a : '']) === null || _b === void 0 ? void 0 : _b.round); });
|
|
260
|
+
const previous = title === undefined ? undefined : added.rounds[added.rounds.length - 2];
|
|
261
|
+
if (previous)
|
|
262
|
+
console.log(`why round ${previous.key} ${previous.title} lost: ${(_b = previous.lost) !== null && _b !== void 0 ? _b : ''}`);
|
|
263
|
+
(0, check_format_1.formatSketch)({ target: context.target, sketch: added, variants });
|
|
264
|
+
for (const name of variants) {
|
|
265
|
+
console.log(`${added.target} in progress: variant ${name} from ${from} in round ${(_c = round === null || round === void 0 ? void 0 : round.key) !== null && _c !== void 0 ? _c : ''}`);
|
|
266
|
+
console.log(variantLineOf({ root: context.target, sketch: added, variant: name }));
|
|
267
|
+
}
|
|
268
|
+
if (title !== undefined && (round === null || round === void 0 ? void 0 : round.note) === '')
|
|
269
|
+
console.log(`round ${round.key} has no note yet - sketch ready needs one: sketch round ${added.target} ${round.key} --note "<what the round shows>" --by <model id>`);
|
|
270
|
+
if (title === undefined)
|
|
271
|
+
return 0;
|
|
272
|
+
const addressed = (0, comment_1.addressSketchComments)({
|
|
273
|
+
sketch,
|
|
274
|
+
variant: from,
|
|
275
|
+
reason: 'round',
|
|
276
|
+
author: (_d = (0, cli_args_1.authorOf)(context.args)) !== null && _d !== void 0 ? _d : undefined,
|
|
277
|
+
note: lostNote,
|
|
278
|
+
round: round === null || round === void 0 ? void 0 : round.key,
|
|
279
|
+
});
|
|
280
|
+
if (addressed.length > 0)
|
|
281
|
+
console.log(`addressed ${addressed.length} comment(s) on variant ${from} in round ${(_e = round === null || round === void 0 ? void 0 : round.key) !== null && _e !== void 0 ? _e : ''}: ${addressed.map(({ id }) => id).join(', ')}`);
|
|
282
|
+
return 0;
|
|
283
|
+
});
|
|
284
|
+
};
|
|
285
|
+
const listed = (context) => {
|
|
286
|
+
const names = (0, cli_args_1.productNamesOf)({ config: context.config, asked: context.args.values['--product'] });
|
|
287
|
+
if (typeof names === 'string')
|
|
288
|
+
return fail(names);
|
|
289
|
+
const sketches = names.flatMap((name) => (0, sketch_1.listSketches)({ productDir: (0, product_1.productDirOf)({ target: context.target, product: name }), product: name }));
|
|
290
|
+
const unreadable = sketches.filter((sketch) => typeof sketch === 'string');
|
|
291
|
+
const open = sketches.filter((sketch) => typeof sketch !== 'string');
|
|
292
|
+
unreadable.forEach((problem) => console.error(problem));
|
|
293
|
+
if (context.args.flags.has('--json')) {
|
|
294
|
+
console.log(JSON.stringify(open.map((_a) => {
|
|
295
|
+
var { dir } = _a, sketch = __rest(_a, ["dir"]);
|
|
296
|
+
return (Object.assign(Object.assign({}, sketch), { dir: (0, path_1.relative)(context.target, dir) }));
|
|
297
|
+
}), null, 2));
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
for (const sketch of open) {
|
|
301
|
+
const decided = sketch.decision
|
|
302
|
+
? sketch.decision.kind === 'pick'
|
|
303
|
+
? `, picked ${sketch.decision.variant}`
|
|
304
|
+
: ', discard asked'
|
|
305
|
+
: '';
|
|
306
|
+
const rejected = sketch.variants.filter((variant) => (0, sketch_1.rejectionOf)(sketch, variant));
|
|
307
|
+
console.log(`${sketch.product} ${sketch.target} ${sketch.status} ${sketch.variants.join(', ')}${decided}${rejected.length > 0 ? `, rejected ${rejected.join(', ')}` : ''}`);
|
|
308
|
+
for (const round of sketch.rounds) {
|
|
309
|
+
const variants = sketch.variants.filter((variant) => { var _a; return ((_a = sketch.variantInfo[variant]) === null || _a === void 0 ? void 0 : _a.round) === round.key; });
|
|
310
|
+
console.log(` ${round.key} ${round.title} ${variants.join(', ')}${round.note === '' ? '' : ` - ${round.note}`}${round.lost ? ` - lost: ${round.lost}` : ''}`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
if (open.length === 0)
|
|
314
|
+
console.log('no open sketch');
|
|
315
|
+
}
|
|
316
|
+
return unreadable.length > 0 ? 1 : 0;
|
|
317
|
+
};
|
|
318
|
+
const reported = (context) => withSketch(context, ({ sketch }) => {
|
|
319
|
+
const message = context.args.positional.slice(1).join(' ');
|
|
320
|
+
const variant = context.args.values['--variant'];
|
|
321
|
+
const author = (0, cli_args_1.authorOf)(context.args);
|
|
322
|
+
const done = context.args.flags.has('--done');
|
|
323
|
+
if ((message === '' && !done) || !variant || !author)
|
|
324
|
+
return fail(`usage: sketch report <layer>/<name> --variant <key> --by <model id> (<text> | --done) [--product <name>] - --product is needed when config.json declares more than one product`);
|
|
325
|
+
if (done) {
|
|
326
|
+
(0, sketch_1.finishSketchReport)({ checkout: context.target, sketch, variant });
|
|
327
|
+
console.log(`${sketch.target} variant ${variant} marked done`);
|
|
328
|
+
return 0;
|
|
329
|
+
}
|
|
330
|
+
const reported = (0, sketch_1.reportSketch)({ checkout: context.target, sketch, variant, author, message });
|
|
331
|
+
if (typeof reported === 'string')
|
|
332
|
+
return fail(reported);
|
|
333
|
+
console.log(`reported on ${sketch.target} variant ${variant}: ${message}`);
|
|
334
|
+
return 0;
|
|
335
|
+
});
|
|
336
|
+
const ROUND_USAGE = 'usage: sketch round <layer>/<name> <round> [--title <text>] [--note <text>] [--drops <state,state>] --by <model id>';
|
|
337
|
+
const roundEdited = (context) => withSketch(context, ({ sketch }) => {
|
|
338
|
+
var _a, _b;
|
|
339
|
+
const { positional, values } = context.args;
|
|
340
|
+
const round = positional[1];
|
|
341
|
+
if (positional.length !== 2 || !round)
|
|
342
|
+
return fail(ROUND_USAGE);
|
|
343
|
+
const edited = (0, sketch_1.editRound)({
|
|
344
|
+
sketch,
|
|
345
|
+
round,
|
|
346
|
+
title: values['--title'],
|
|
347
|
+
note: values['--note'],
|
|
348
|
+
drops: (_a = values['--drops']) === null || _a === void 0 ? void 0 : _a.split(',').map((state) => state.trim()).filter((state) => state !== ''),
|
|
349
|
+
});
|
|
350
|
+
if (typeof edited === 'string')
|
|
351
|
+
return fail(edited);
|
|
352
|
+
const entry = edited.rounds.find((candidate) => candidate.key === round);
|
|
353
|
+
console.log(`${edited.target} round ${round}: ${(_b = entry === null || entry === void 0 ? void 0 : entry.title) !== null && _b !== void 0 ? _b : ''}${(entry === null || entry === void 0 ? void 0 : entry.note) ? ` - ${entry.note}` : ''}${(entry === null || entry === void 0 ? void 0 : entry.lost) ? ` - lost: ${entry.lost}` : ''}${(entry === null || entry === void 0 ? void 0 : entry.drops) ? ` - drops ${entry.drops.join(', ')}` : ''}`);
|
|
354
|
+
return 0;
|
|
355
|
+
});
|
|
356
|
+
const readied = (context) => {
|
|
357
|
+
const found = productAndSketchOf(context);
|
|
358
|
+
if (typeof found === 'string')
|
|
359
|
+
return fail(found);
|
|
360
|
+
const status = markedReady(context, found);
|
|
361
|
+
if (typeof status === 'number')
|
|
362
|
+
return status;
|
|
363
|
+
return autoMerged(Object.assign(Object.assign({ context }, found), { sketch: status.ready, again: found.sketch.status === 'ready' }));
|
|
364
|
+
};
|
|
365
|
+
const autoMerged = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
366
|
+
var _a, _b;
|
|
367
|
+
const { context, product, sketch, again } = options;
|
|
368
|
+
if (!again)
|
|
369
|
+
console.log(`${sketch.target} is ready`);
|
|
370
|
+
if (!product.parts.some((part) => (0, resolve_product_1.partKeyOf)(part) === sketch.target)) {
|
|
371
|
+
console.log('auto-merge skipped: new part, the user merges');
|
|
372
|
+
return again ? fail(`${sketch.target} is ready, not in progress`) : 0;
|
|
373
|
+
}
|
|
374
|
+
const noChange = yield (0, ready_shots_1.shotsShowNoChange)({ target: context.target, config: context.config, product, sketch });
|
|
375
|
+
if (noChange !== true) {
|
|
376
|
+
console.log(`auto-merge skipped: ${noChange}`);
|
|
377
|
+
return again ? fail(`${sketch.target} is ready, not in progress`) : 0;
|
|
378
|
+
}
|
|
379
|
+
const author = (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined;
|
|
380
|
+
const variant = (_b = sketch.variants.find((candidate) => !(0, sketch_1.rejectionOf)(sketch, candidate))) !== null && _b !== void 0 ? _b : '';
|
|
381
|
+
const decided = (0, sketch_1.decideSketch)({ sketch, decision: { kind: 'pick', variant } });
|
|
382
|
+
if (typeof decided === 'string')
|
|
383
|
+
return fail(decided);
|
|
384
|
+
const result = (0, merge_1.mergeSketch)({ target: context.target, config: context.config, product, sketch: decided, author });
|
|
385
|
+
if (!Array.isArray(result)) {
|
|
386
|
+
console.warn(`${sketch.target} shows no visible change but did not merge: ${result.reason}`);
|
|
387
|
+
return 0;
|
|
388
|
+
}
|
|
389
|
+
(0, merged_parts_1.recordAutoMerge)({ product, part: sketch.target, by: author !== null && author !== void 0 ? author : 'user' });
|
|
390
|
+
console.log(`No visible change in any state: merged ${sketch.target} automatically.`);
|
|
391
|
+
return 0;
|
|
392
|
+
});
|
|
393
|
+
const markedReady = (context, { product, sketch }) => {
|
|
394
|
+
var _a;
|
|
395
|
+
const lineOf = (variant, problem) => `${sketch.target} ${variant}: ${problem.rule} ${(0, path_1.relative)(context.target, problem.file)}: ${problem.message}`;
|
|
396
|
+
const found = (0, check_sketches_1.variantProblemsOf)({ product, sketch });
|
|
397
|
+
found.forEach(({ variant, before }) => before.forEach((problem) => console.warn(`NOTE (was there before) ${lineOf(variant, problem)}`)));
|
|
398
|
+
const problems = found.flatMap(({ variant, problems }) => [...problems, ...(0, check_format_1.formatProblemsOf)({ target: context.target, sketch, variant })].map((problem) => lineOf(variant, problem)));
|
|
399
|
+
sketch.variants.forEach((variant) => (0, check_sketches_1.variantWarningsOf)({ target: context.target, product, sketch, variant }).forEach((warning) => console.warn(`${sketch.target} ${variant}: ${warning}`)));
|
|
400
|
+
if (problems.length > 0)
|
|
401
|
+
return fail(`${problems.join('\n')}\n${sketch.target} has problems - fix them before ready`);
|
|
402
|
+
const running = (0, sketch_1.runningRoundOf)(sketch);
|
|
403
|
+
if (running.note.trim() === '')
|
|
404
|
+
return fail(`${sketch.target} round ${running.key} has no note - set it with: sketch round ${sketch.target} ${running.key} --note "<what the round shows>" --by <model id>`);
|
|
405
|
+
if (sketch.status === 'ready')
|
|
406
|
+
return { ready: sketch };
|
|
407
|
+
const ready = (0, sketch_1.markSketchReady)({ checkout: context.target, sketch, author: (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined });
|
|
408
|
+
if (typeof ready === 'string')
|
|
409
|
+
return fail(ready);
|
|
410
|
+
return { ready };
|
|
411
|
+
};
|
|
412
|
+
const rebased = (context) => withSketch(context, ({ product, sketch }) => {
|
|
413
|
+
(0, sketch_1.rebaseSketch)({ product, sketch });
|
|
414
|
+
console.log(`${sketch.target} now compares with the product as it is`);
|
|
415
|
+
return 0;
|
|
416
|
+
});
|
|
417
|
+
const checked = (context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
418
|
+
var _a, _b;
|
|
419
|
+
const { target, config, args } = context;
|
|
420
|
+
const product = sketchProductOf(context);
|
|
421
|
+
if (typeof product === 'string')
|
|
422
|
+
return fail(product);
|
|
423
|
+
const asked = args.positional[0];
|
|
424
|
+
const { unreadable, variants } = (0, check_sketches_1.openSketchProblemsOf)(product);
|
|
425
|
+
const chosen = asked === undefined ? variants : variants.filter((entry) => entry.sketch.target === asked);
|
|
426
|
+
if (asked !== undefined && chosen.length === 0)
|
|
427
|
+
return fail(`NO SKETCH on ${asked} in ${product.name}`);
|
|
428
|
+
if (args.flags.has('--fix'))
|
|
429
|
+
new Set(chosen.map((entry) => entry.sketch)).forEach((sketch) => (0, check_format_1.formatSketch)({ target, sketch, variants: sketch.variants }));
|
|
430
|
+
let failed = asked === undefined && unreadable.length > 0;
|
|
431
|
+
if (asked === undefined)
|
|
432
|
+
unreadable.forEach((problem) => console.error(`${problem.rule} ${(0, path_1.relative)(target, problem.file)}: ${problem.message}`));
|
|
433
|
+
for (const { sketch, variant, problems, before } of chosen) {
|
|
434
|
+
const typed = (0, check_sketches_1.typecheckVariant)({ target, product, sketch, variant });
|
|
435
|
+
before.forEach((problem) => console.warn(`NOTE (was there before) ${sketch.target} ${variant}: ${problem.rule} ${(0, path_1.relative)(target, problem.file)}: ${problem.message}`));
|
|
436
|
+
(0, check_sketches_1.variantWarningsOf)({ target, product, sketch, variant }).forEach((warning) => console.warn(`${sketch.target} ${variant}: ${warning}`));
|
|
437
|
+
const all = [
|
|
438
|
+
...problems,
|
|
439
|
+
...(0, check_format_1.formatProblemsOf)({ target, sketch, variant }),
|
|
440
|
+
...(typed.kind === 'failed' ? [{ rule: 'TYPE-ERROR', file: sketch.dir, message: `\n${typed.output}` }] : []),
|
|
441
|
+
...(typed.kind === 'unavailable' ? [{ rule: 'NO-TYPE-CHECKER', file: sketch.dir, message: typed.message }] : []),
|
|
442
|
+
];
|
|
443
|
+
for (const problem of all) {
|
|
444
|
+
console.error(`${sketch.target} ${variant}: ${problem.rule} ${(0, path_1.relative)(target, problem.file)}: ${problem.message}`);
|
|
445
|
+
}
|
|
446
|
+
failed || (failed = all.length > 0);
|
|
447
|
+
}
|
|
448
|
+
if (failed)
|
|
449
|
+
return 1;
|
|
450
|
+
const rendered = yield (0, render_check_1.renderIssuesOf)({
|
|
451
|
+
target,
|
|
452
|
+
config,
|
|
453
|
+
jobs: chosen.map(({ sketch, variant }) => {
|
|
454
|
+
const preview = (0, merge_preview_1.mergePreviewOf)({ product, sketch, variant });
|
|
455
|
+
return {
|
|
456
|
+
product: product.name,
|
|
457
|
+
sketch: { target: sketch.target, variant },
|
|
458
|
+
parts: [...preview.changed, ...preview.affected],
|
|
459
|
+
};
|
|
460
|
+
}),
|
|
461
|
+
});
|
|
462
|
+
if ('unavailable' in rendered)
|
|
463
|
+
console.log(`RENDER CHECK SKIPPED - ${rendered.unavailable}`);
|
|
464
|
+
else {
|
|
465
|
+
for (const { sketch, part, state, size } of rendered.drawn) {
|
|
466
|
+
const rules = [
|
|
467
|
+
...new Set(rendered.issues
|
|
468
|
+
.filter((issue) => {
|
|
469
|
+
var _a, _b;
|
|
470
|
+
return ((_a = issue.sketch) === null || _a === void 0 ? void 0 : _a.target) === (sketch === null || sketch === void 0 ? void 0 : sketch.target) &&
|
|
471
|
+
((_b = issue.sketch) === null || _b === void 0 ? void 0 : _b.variant) === (sketch === null || sketch === void 0 ? void 0 : sketch.variant) &&
|
|
472
|
+
issue.part === part &&
|
|
473
|
+
issue.state === state &&
|
|
474
|
+
issue.size === size;
|
|
475
|
+
})
|
|
476
|
+
.map((issue) => issue.rule)),
|
|
477
|
+
];
|
|
478
|
+
console.log(`${(_a = sketch === null || sketch === void 0 ? void 0 : sketch.target) !== null && _a !== void 0 ? _a : ''} ${(_b = sketch === null || sketch === void 0 ? void 0 : sketch.variant) !== null && _b !== void 0 ? _b : ''}: ${part} ${state} at ${size} ${rules.join(' ') || 'ok'}`);
|
|
479
|
+
}
|
|
480
|
+
rendered.grids.forEach(({ sketch, part, line }) => { var _a, _b; return console.log(`${(_a = sketch === null || sketch === void 0 ? void 0 : sketch.target) !== null && _a !== void 0 ? _a : ''} ${(_b = sketch === null || sketch === void 0 ? void 0 : sketch.variant) !== null && _b !== void 0 ? _b : ''}: ${part} ${line}`); });
|
|
481
|
+
rendered.warnings.forEach((issue) => { var _a, _b, _c, _d; return console.warn(`${(_b = (_a = issue.sketch) === null || _a === void 0 ? void 0 : _a.target) !== null && _b !== void 0 ? _b : ''} ${(_d = (_c = issue.sketch) === null || _c === void 0 ? void 0 : _c.variant) !== null && _d !== void 0 ? _d : ''}: WARNING ${(0, render_check_1.renderIssueLineOf)(issue)}`); });
|
|
482
|
+
rendered.issues.forEach((issue) => { var _a, _b, _c, _d; return console.error(`${(_b = (_a = issue.sketch) === null || _a === void 0 ? void 0 : _a.target) !== null && _b !== void 0 ? _b : ''} ${(_d = (_c = issue.sketch) === null || _c === void 0 ? void 0 : _c.variant) !== null && _d !== void 0 ? _d : ''}: ${(0, render_check_1.renderIssueLineOf)(issue)}`); });
|
|
483
|
+
}
|
|
484
|
+
if ('issues' in rendered && rendered.issues.length > 0)
|
|
485
|
+
return 1;
|
|
486
|
+
console.log('ok');
|
|
487
|
+
return 0;
|
|
488
|
+
});
|
|
489
|
+
const previewed = (context) => withSketch(context, ({ product, sketch }) => {
|
|
490
|
+
const variant = context.args.positional[1];
|
|
491
|
+
if (!variant || !sketch.variants.includes(variant))
|
|
492
|
+
return fail(`${sketch.target} has no variant "${variant !== null && variant !== void 0 ? variant : ''}" - it has ${sketch.variants.join(', ')}`);
|
|
493
|
+
const preview = (0, merge_preview_1.mergePreviewOf)({ product, sketch, variant });
|
|
494
|
+
if (context.args.flags.has('--json')) {
|
|
495
|
+
console.log(JSON.stringify(preview, null, 2));
|
|
496
|
+
}
|
|
497
|
+
else {
|
|
498
|
+
console.log(`changes: ${preview.changed.join(', ')}`);
|
|
499
|
+
console.log(`shows: ${preview.affected.join(', ') || 'no other element or page'}`);
|
|
500
|
+
}
|
|
501
|
+
return 0;
|
|
502
|
+
});
|
|
503
|
+
const merged = (context) => withSketch(context, ({ product, sketch }) => {
|
|
504
|
+
var _a, _b;
|
|
505
|
+
const note = context.args.values['--note'];
|
|
506
|
+
if (context.args.positional.length > 1)
|
|
507
|
+
return fail(`usage: sketch merge <layer>/<name> [--note <reason>] - it merges the variant the user picked`);
|
|
508
|
+
const result = (0, merge_1.mergeSketch)({
|
|
509
|
+
target: context.target,
|
|
510
|
+
config: context.config,
|
|
511
|
+
product,
|
|
512
|
+
sketch,
|
|
513
|
+
note,
|
|
514
|
+
author: (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined,
|
|
515
|
+
});
|
|
516
|
+
if (!Array.isArray(result))
|
|
517
|
+
return fail(result.reason);
|
|
518
|
+
const variant = ((_b = sketch.decision) === null || _b === void 0 ? void 0 : _b.kind) === 'pick' ? sketch.decision.variant : '';
|
|
519
|
+
console.log(`merged ${sketch.target} variant ${variant} into ${product.name}: ${result.join(', ')}`);
|
|
520
|
+
return 0;
|
|
521
|
+
});
|
|
522
|
+
const discarded = (context) => withSketch(context, ({ sketch }) => {
|
|
523
|
+
var _a;
|
|
524
|
+
const problem = (0, merge_1.discardSketch)({ target: context.target, sketch, author: (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined });
|
|
525
|
+
if (problem)
|
|
526
|
+
return fail(problem);
|
|
527
|
+
console.log(`discarded the sketch on ${sketch.target}`);
|
|
528
|
+
return 0;
|
|
529
|
+
});
|
|
530
|
+
const verdictOriginOf = (by, of) => of && of !== by ? ` (reason by the ${of})` : '';
|
|
531
|
+
/** The verdicts a variant had, oldest first, and whether it is rejected now. */
|
|
532
|
+
const verdictLinesOf = (sketch, variant) => {
|
|
533
|
+
var _a, _b;
|
|
534
|
+
const history = (_b = (_a = sketch.rejections) === null || _a === void 0 ? void 0 : _a[variant]) !== null && _b !== void 0 ? _b : [];
|
|
535
|
+
const lines = history.flatMap((rejection) => [
|
|
536
|
+
` rejected by the ${rejection.by} at ${rejection.decidedAt}${verdictOriginOf(rejection.by, rejection.reasonBy)}${rejection.reason ? `: ${rejection.reason}` : ''}`,
|
|
537
|
+
...(rejection.reopened
|
|
538
|
+
? [
|
|
539
|
+
` reopened by the ${rejection.reopened.by} at ${rejection.reopened.decidedAt}${rejection.reopened.reason ? `: ${rejection.reopened.reason}` : ''}`,
|
|
540
|
+
]
|
|
541
|
+
: []),
|
|
542
|
+
]);
|
|
543
|
+
return [`${sketch.target} variant ${variant}: ${(0, sketch_1.rejectionOf)(sketch, variant) ? 'rejected' : 'live'}`, ...lines];
|
|
544
|
+
};
|
|
545
|
+
exports.verdictLinesOf = verdictLinesOf;
|
|
546
|
+
const judged = (kind) => (context) => withSketch(context, ({ sketch }) => {
|
|
547
|
+
var _a;
|
|
548
|
+
const { positional, values } = context.args;
|
|
549
|
+
const variant = values['--variant'];
|
|
550
|
+
const reason = ((_a = values['--reason']) === null || _a === void 0 ? void 0 : _a.trim()) || undefined;
|
|
551
|
+
const by = (0, cli_args_1.authorOf)(context.args) === 'designer' ? 'designer' : 'agent';
|
|
552
|
+
if (positional.length !== 1 || !variant)
|
|
553
|
+
return fail(`usage: sketch ${kind} <layer>/<name> --variant <key> [--reason <text>] --by <model id | designer> [--product <name>]`);
|
|
554
|
+
const decision = kind === 'reject' && reason && (0, sketch_1.rejectionOf)(sketch, variant)
|
|
555
|
+
? { kind: 'reason', variant, reason, by }
|
|
556
|
+
: Object.assign(Object.assign({ kind, variant }, (reason ? { reason } : {})), { by });
|
|
557
|
+
const decided = (0, sketch_1.decideSketch)({ sketch, decision });
|
|
558
|
+
if (typeof decided === 'string')
|
|
559
|
+
return fail(decided);
|
|
560
|
+
(0, exports.verdictLinesOf)(decided, variant).forEach((line) => console.log(line));
|
|
561
|
+
return 0;
|
|
562
|
+
});
|
|
563
|
+
const COMMANDS = {
|
|
564
|
+
new: created,
|
|
565
|
+
variant: varied,
|
|
566
|
+
round: roundEdited,
|
|
567
|
+
list: listed,
|
|
568
|
+
report: reported,
|
|
569
|
+
ready: readied,
|
|
570
|
+
check: checked,
|
|
571
|
+
preview: previewed,
|
|
572
|
+
rebase: rebased,
|
|
573
|
+
merge: merged,
|
|
574
|
+
discard: discarded,
|
|
575
|
+
reject: judged('reject'),
|
|
576
|
+
reopen: judged('reopen'),
|
|
577
|
+
};
|
|
578
|
+
/**
|
|
579
|
+
* `et design sketch <command> …` opens, adds variants to, reports on, readies, checks, previews, rebases, merges and
|
|
580
|
+
* discards sketches, and rejects and reopens their variants.
|
|
581
|
+
*/
|
|
582
|
+
const designSketch = (options) => {
|
|
583
|
+
const { target, argv, invocation } = options;
|
|
584
|
+
const [command = '', ...rest] = argv;
|
|
585
|
+
const run = COMMANDS[command];
|
|
586
|
+
const args = (0, cli_args_1.argsOf)(rest, [
|
|
587
|
+
'--product',
|
|
588
|
+
'--variants',
|
|
589
|
+
'--note',
|
|
590
|
+
'--variant',
|
|
591
|
+
'--by',
|
|
592
|
+
'--from',
|
|
593
|
+
'--round',
|
|
594
|
+
'--round-note',
|
|
595
|
+
'--title',
|
|
596
|
+
'--like',
|
|
597
|
+
'--drops',
|
|
598
|
+
'--variant-note',
|
|
599
|
+
'--reason',
|
|
600
|
+
]);
|
|
601
|
+
const unauthored = typeof args !== 'string' && WRITES.has(command) && (0, cli_args_1.authorOf)(args) === null;
|
|
602
|
+
if (!run || typeof args === 'string' || unauthored) {
|
|
603
|
+
if (typeof args === 'string')
|
|
604
|
+
console.error(args);
|
|
605
|
+
if (!run)
|
|
606
|
+
console.error(`unknown sketch command "${command}"`);
|
|
607
|
+
if (unauthored)
|
|
608
|
+
console.error(`sketch ${command} ${cli_args_1.NEEDS_AUTHOR}`);
|
|
609
|
+
console.error(exports.SKETCH_USAGE.map((line) => `usage: ${invocation} ${line}`).join('\n'));
|
|
610
|
+
return 2;
|
|
611
|
+
}
|
|
612
|
+
const config = (0, cli_args_1.configOf)(target);
|
|
613
|
+
if (typeof config === 'string')
|
|
614
|
+
return fail(config);
|
|
615
|
+
return run({ target, config, args });
|
|
616
|
+
};
|
|
617
|
+
exports.designSketch = designSketch;
|
|
618
|
+
//# sourceMappingURL=sketch-command.js.map
|