@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,332 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.addressSketchComments = exports.commentsOnSketch = exports.resolveComment = exports.addressComment = exports.deleteComment = exports.replyToComment = exports.findComment = exports.threadStateOf = exports.lastWordOf = exports.createComment = exports.staleReasonOf = exports.sketchGoneOf = exports.goneSizeOf = exports.goneStateOf = exports.listComments = exports.isOpenComment = exports.isSize = exports.isPoint = exports.commentsDirOf = exports.REST = exports.FITTED = void 0;
|
|
15
|
+
const crypto_1 = require("crypto");
|
|
16
|
+
const fs_1 = require("fs");
|
|
17
|
+
const path_1 = require("path");
|
|
18
|
+
const force_interactions_1 = require("../../force-interactions");
|
|
19
|
+
const resolve_product_1 = require("../resolve-product");
|
|
20
|
+
const overlay_1 = require("../sketch/overlay");
|
|
21
|
+
const part_definition_1 = require("../sketch/part-definition");
|
|
22
|
+
const sketch_1 = require("../sketch/sketch");
|
|
23
|
+
exports.FITTED = 'fitted';
|
|
24
|
+
exports.REST = 'rest';
|
|
25
|
+
const ID = /^[A-Za-z0-9-]+$/u;
|
|
26
|
+
const commentsDirOf = (productDir) => (0, path_1.resolve)(productDir, 'comments');
|
|
27
|
+
exports.commentsDirOf = commentsDirOf;
|
|
28
|
+
const isPoint = (value) => {
|
|
29
|
+
const point = value;
|
|
30
|
+
return typeof (point === null || point === void 0 ? void 0 : point.x) === 'number' && typeof point.y === 'number' && point.x >= 0 && point.y >= 0;
|
|
31
|
+
};
|
|
32
|
+
exports.isPoint = isPoint;
|
|
33
|
+
const isReply = (value) => {
|
|
34
|
+
const reply = value;
|
|
35
|
+
return (((reply === null || reply === void 0 ? void 0 : reply.by) === 'user' || (reply === null || reply === void 0 ? void 0 : reply.by) === 'agent') &&
|
|
36
|
+
typeof reply.text === 'string' &&
|
|
37
|
+
reply.text !== '' &&
|
|
38
|
+
typeof reply.createdAt === 'string' &&
|
|
39
|
+
(reply.author === undefined || (typeof reply.author === 'string' && reply.author !== '')) &&
|
|
40
|
+
(reply.question === undefined || (reply.question === true && reply.by === 'agent')));
|
|
41
|
+
};
|
|
42
|
+
const isSize = (value) => (typeof value === 'string' && value !== '') || (typeof value === 'number' && value > 0);
|
|
43
|
+
exports.isSize = isSize;
|
|
44
|
+
const ADDRESS_REASONS = ['done', 'round', 'merge', 'discard'];
|
|
45
|
+
const isOptionalText = (value) => value === undefined || (typeof value === 'string' && value !== '');
|
|
46
|
+
const isAddressed = (value) => {
|
|
47
|
+
const addressed = value;
|
|
48
|
+
return (((addressed === null || addressed === void 0 ? void 0 : addressed.by) === 'user' || (addressed === null || addressed === void 0 ? void 0 : addressed.by) === 'agent') &&
|
|
49
|
+
ADDRESS_REASONS.some((reason) => reason === addressed.reason) &&
|
|
50
|
+
typeof addressed.addressedAt === 'string' &&
|
|
51
|
+
addressed.addressedAt !== '' &&
|
|
52
|
+
isOptionalText(addressed.author) &&
|
|
53
|
+
isOptionalText(addressed.note) &&
|
|
54
|
+
isOptionalText(addressed.round));
|
|
55
|
+
};
|
|
56
|
+
const isResolution = (value) => {
|
|
57
|
+
const resolved = value;
|
|
58
|
+
return (((resolved === null || resolved === void 0 ? void 0 : resolved.by) === 'user' || (resolved === null || resolved === void 0 ? void 0 : resolved.by) === 'agent') &&
|
|
59
|
+
(resolved.reason === undefined || ADDRESS_REASONS.some((reason) => reason === resolved.reason)) &&
|
|
60
|
+
typeof resolved.resolvedAt === 'string' &&
|
|
61
|
+
resolved.resolvedAt !== '' &&
|
|
62
|
+
isOptionalText(resolved.author) &&
|
|
63
|
+
isOptionalText(resolved.note) &&
|
|
64
|
+
isOptionalText(resolved.round));
|
|
65
|
+
};
|
|
66
|
+
const isKnownInteraction = (value) => value === exports.REST || force_interactions_1.INTERACTIONS.some((known) => known === value);
|
|
67
|
+
const shapeProblemOf = (value) => {
|
|
68
|
+
var _a;
|
|
69
|
+
for (const key of ['part', 'state', 'text', 'createdAt'])
|
|
70
|
+
if (typeof value[key] !== 'string' || value[key] === '')
|
|
71
|
+
return `${key} must be a non-empty string`;
|
|
72
|
+
if (!(0, exports.isSize)(value.size))
|
|
73
|
+
return `size must be a preset name, a width in CSS pixels or "${exports.FITTED}"`;
|
|
74
|
+
if (value.interaction !== undefined && !isKnownInteraction(value.interaction))
|
|
75
|
+
return `interaction must be ${exports.REST} or one of ${force_interactions_1.INTERACTIONS.join(', ')}`;
|
|
76
|
+
if (value.point !== undefined && !(0, exports.isPoint)(value.point))
|
|
77
|
+
return 'point must be { x, y } in CSS pixels, both >= 0';
|
|
78
|
+
if (value.sketch !== undefined &&
|
|
79
|
+
(typeof ((_a = value.sketch) === null || _a === void 0 ? void 0 : _a.target) !== 'string' ||
|
|
80
|
+
typeof value.sketch.variant !== 'string' ||
|
|
81
|
+
(value.sketch.createdAt !== undefined && typeof value.sketch.createdAt !== 'string')))
|
|
82
|
+
return 'sketch must be { target, variant, createdAt? }';
|
|
83
|
+
if (value.replies !== undefined && !(Array.isArray(value.replies) && value.replies.every(isReply)))
|
|
84
|
+
return 'replies must be [{ by: "user" | "agent", author?, text, createdAt, question?: true }], question only on an agent reply';
|
|
85
|
+
if (value.addressed !== undefined && !isAddressed(value.addressed))
|
|
86
|
+
return `addressed must be { by: "user" | "agent", author?, reason: ${ADDRESS_REASONS.join(' | ')}, addressedAt, note?, round? }`;
|
|
87
|
+
if (value.resolved !== undefined && !isResolution(value.resolved))
|
|
88
|
+
return 'resolved must be { by: "user", resolvedAt, note? }';
|
|
89
|
+
return null;
|
|
90
|
+
};
|
|
91
|
+
const migratedOf = (stored) => {
|
|
92
|
+
const legacy = stored.resolved;
|
|
93
|
+
if ((legacy === null || legacy === void 0 ? void 0 : legacy.reason) === undefined)
|
|
94
|
+
return stored;
|
|
95
|
+
const { by, author, reason, resolvedAt, note, round } = legacy;
|
|
96
|
+
if (reason === 'done' && by === 'user')
|
|
97
|
+
return Object.assign(Object.assign({}, stored), { resolved: Object.assign({ by, resolvedAt }, (note ? { note } : {})) });
|
|
98
|
+
return Object.assign(Object.assign({}, stored), { resolved: undefined, addressed: Object.assign(Object.assign(Object.assign(Object.assign({ by }, (author ? { author } : {})), { reason, addressedAt: resolvedAt }), (note ? { note } : {})), (round ? { round } : {})) });
|
|
99
|
+
};
|
|
100
|
+
const rewrite = (file, change) => {
|
|
101
|
+
const changed = change(migratedOf(JSON.parse((0, fs_1.readFileSync)(file, 'utf8'))));
|
|
102
|
+
(0, fs_1.writeFileSync)(file, `${JSON.stringify(changed, null, 2)}\n`);
|
|
103
|
+
return changed;
|
|
104
|
+
};
|
|
105
|
+
const isOpenComment = (comment) => !comment.addressed && !comment.resolved;
|
|
106
|
+
exports.isOpenComment = isOpenComment;
|
|
107
|
+
/**
|
|
108
|
+
* The open comment files of a product, oldest first, or every one with `all` (addressed and resolved too); a file
|
|
109
|
+
* that cannot be read answers with its problem.
|
|
110
|
+
*/
|
|
111
|
+
const listComments = (options) => {
|
|
112
|
+
const dir = (0, exports.commentsDirOf)(options.productDir);
|
|
113
|
+
const files = (0, fs_1.existsSync)(dir) ? (0, fs_1.readdirSync)(dir).filter((name) => name.endsWith('.json')) : [];
|
|
114
|
+
const read = files.map((name) => {
|
|
115
|
+
var _a, _b;
|
|
116
|
+
const file = (0, path_1.resolve)(dir, name);
|
|
117
|
+
try {
|
|
118
|
+
const parsed = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
|
|
119
|
+
const problem = shapeProblemOf(parsed);
|
|
120
|
+
return problem
|
|
121
|
+
? { file, problem }
|
|
122
|
+
: Object.assign(Object.assign({}, migratedOf(parsed)), { interaction: (_a = parsed.interaction) !== null && _a !== void 0 ? _a : exports.REST, replies: (_b = parsed.replies) !== null && _b !== void 0 ? _b : [], id: name.slice(0, -'.json'.length), product: options.product, file });
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
return { file, problem: `is no JSON: ${error instanceof Error ? error.message : String(error)}` };
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
return {
|
|
129
|
+
comments: read
|
|
130
|
+
.filter((entry) => !('problem' in entry))
|
|
131
|
+
.filter((comment) => options.all || (0, exports.isOpenComment)(comment))
|
|
132
|
+
.sort((a, b) => a.createdAt.localeCompare(b.createdAt) || a.id.localeCompare(b.id)),
|
|
133
|
+
unreadable: read.filter((entry) => 'problem' in entry),
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
exports.listComments = listComments;
|
|
137
|
+
/** Why a part key and state name point at nothing in a product, or `null`. A part whose states are not an object literal keeps any state. */
|
|
138
|
+
const goneStateOf = (options) => {
|
|
139
|
+
const { product, part: key, state } = options;
|
|
140
|
+
const part = product.parts.find((candidate) => (0, resolve_product_1.partKeyOf)(candidate) === key);
|
|
141
|
+
if (!part)
|
|
142
|
+
return `part ${key} no longer exists`;
|
|
143
|
+
const states = (0, part_definition_1.stateNamesOf)(part.source);
|
|
144
|
+
return states && !states.includes(state) ? `${key} has no state "${state}"` : null;
|
|
145
|
+
};
|
|
146
|
+
exports.goneStateOf = goneStateOf;
|
|
147
|
+
/** Why a size points at nothing: a preset the product lacks, or a width a part with readable `widths` lacks. */
|
|
148
|
+
const goneSizeOf = (options) => {
|
|
149
|
+
const { product, part: key, size } = options;
|
|
150
|
+
if (typeof size === 'string')
|
|
151
|
+
return size === exports.FITTED || product.presets[size] ? null : `preset "${size}" no longer exists`;
|
|
152
|
+
const part = product.parts.find((candidate) => (0, resolve_product_1.partKeyOf)(candidate) === key);
|
|
153
|
+
const widths = part ? (0, part_definition_1.widthsOf)(part.source) : null;
|
|
154
|
+
return widths === null || widths.includes(size) ? null : `${key} has no width ${size}`;
|
|
155
|
+
};
|
|
156
|
+
exports.goneSizeOf = goneSizeOf;
|
|
157
|
+
/** Why an interaction points at nothing: one the part no longer declares. */
|
|
158
|
+
const goneInteractionOf = (options) => {
|
|
159
|
+
const { product, part: key, interaction = exports.REST } = options;
|
|
160
|
+
if (interaction === exports.REST)
|
|
161
|
+
return null;
|
|
162
|
+
const part = product.parts.find((candidate) => (0, resolve_product_1.partKeyOf)(candidate) === key);
|
|
163
|
+
return part && !(0, part_definition_1.interactionNamesOf)(part.source).includes(interaction)
|
|
164
|
+
? `${key} has no interaction "${interaction}"`
|
|
165
|
+
: null;
|
|
166
|
+
};
|
|
167
|
+
const openSketchOf = ({ product, target }) => {
|
|
168
|
+
const parsed = (0, sketch_1.parseTarget)(target);
|
|
169
|
+
const sketch = typeof parsed === 'string' ? null : (0, sketch_1.findSketch)({ productDir: product.dir, product: product.name, sketch: parsed });
|
|
170
|
+
return sketch && typeof sketch !== 'string' ? sketch : null;
|
|
171
|
+
};
|
|
172
|
+
/** Whether the sketch a comment was made on was merged, discarded or replaced by a later one on the same target. */
|
|
173
|
+
const sketchGoneOf = (options) => {
|
|
174
|
+
const { product, comment } = options;
|
|
175
|
+
if (!comment.sketch)
|
|
176
|
+
return false;
|
|
177
|
+
const sketch = openSketchOf({ product, target: comment.sketch.target });
|
|
178
|
+
return !sketch || (comment.sketch.createdAt !== undefined && comment.sketch.createdAt !== sketch.createdAt);
|
|
179
|
+
};
|
|
180
|
+
exports.sketchGoneOf = sketchGoneOf;
|
|
181
|
+
/**
|
|
182
|
+
* Why a comment no longer points at anything: its sketch variant, part, state, size or interaction is gone.
|
|
183
|
+
* `null` when it still does. A part whose states are not an object literal keeps any state.
|
|
184
|
+
*/
|
|
185
|
+
const staleReasonOf = (options) => {
|
|
186
|
+
var _a;
|
|
187
|
+
const { product, comment } = options;
|
|
188
|
+
let drawn = product;
|
|
189
|
+
if (comment.sketch) {
|
|
190
|
+
const sketch = openSketchOf({ product, target: comment.sketch.target });
|
|
191
|
+
if (!sketch || (0, exports.sketchGoneOf)({ product, comment }))
|
|
192
|
+
return `the sketch on ${comment.sketch.target} no longer exists`;
|
|
193
|
+
if (!sketch.variants.includes(comment.sketch.variant))
|
|
194
|
+
return `the sketch on ${comment.sketch.target} has no variant "${comment.sketch.variant}"`;
|
|
195
|
+
drawn = (0, overlay_1.overlaySketch)({ product, sketch, variant: comment.sketch.variant });
|
|
196
|
+
}
|
|
197
|
+
const gone = (0, exports.goneStateOf)({ product: drawn, part: comment.part, state: comment.state });
|
|
198
|
+
if (gone)
|
|
199
|
+
return gone;
|
|
200
|
+
return ((_a = (0, exports.goneSizeOf)({ product: drawn, part: comment.part, size: comment.size })) !== null && _a !== void 0 ? _a : goneInteractionOf({ product: drawn, part: comment.part, interaction: comment.interaction }));
|
|
201
|
+
};
|
|
202
|
+
exports.staleReasonOf = staleReasonOf;
|
|
203
|
+
let lastCreatedAt = 0;
|
|
204
|
+
const strictlyLaterNow = () => {
|
|
205
|
+
lastCreatedAt = Math.max(Date.now(), lastCreatedAt + 1);
|
|
206
|
+
return new Date(lastCreatedAt).toISOString();
|
|
207
|
+
};
|
|
208
|
+
const newId = () => `${new Date()
|
|
209
|
+
.toISOString()
|
|
210
|
+
.replace(/[-:]/gu, '')
|
|
211
|
+
.replace(/\.\d+Z$/u, 'Z')}-${(0, crypto_1.randomBytes)(2).toString('hex')}`;
|
|
212
|
+
/** Writes a comment on a state of a part, or answers with why it points at nothing. */
|
|
213
|
+
const createComment = (options) => {
|
|
214
|
+
var _a, _b, _c;
|
|
215
|
+
const { product } = options;
|
|
216
|
+
const _d = options.comment, { interaction, sketch } = _d, rest = __rest(_d, ["interaction", "sketch"]);
|
|
217
|
+
const createdAt = sketch && ((_a = openSketchOf({ product, target: sketch.target })) === null || _a === void 0 ? void 0 : _a.createdAt);
|
|
218
|
+
const comment = Object.assign(Object.assign(Object.assign(Object.assign({}, rest), (sketch && { sketch: Object.assign({ target: sketch.target, variant: sketch.variant }, (createdAt && { createdAt })) })), (interaction === undefined || interaction === exports.REST ? {} : { interaction })), { createdAt: strictlyLaterNow() });
|
|
219
|
+
const problem = (_b = shapeProblemOf(Object.assign(Object.assign({}, comment), { interaction }))) !== null && _b !== void 0 ? _b : (0, exports.staleReasonOf)({ product, comment });
|
|
220
|
+
if (problem)
|
|
221
|
+
return problem;
|
|
222
|
+
const dir = (0, exports.commentsDirOf)(product.dir);
|
|
223
|
+
const id = newId();
|
|
224
|
+
const file = (0, path_1.resolve)(dir, `${id}.json`);
|
|
225
|
+
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
226
|
+
(0, fs_1.writeFileSync)(file, `${JSON.stringify(comment, null, 2)}\n`);
|
|
227
|
+
return Object.assign(Object.assign({}, comment), { interaction: (_c = comment.interaction) !== null && _c !== void 0 ? _c : exports.REST, replies: [], id, product: product.name, file });
|
|
228
|
+
};
|
|
229
|
+
exports.createComment = createComment;
|
|
230
|
+
/** Who spoke last in a comment thread: the user wrote the comment, so a thread without replies is the user's. */
|
|
231
|
+
const lastWordOf = (comment) => { var _a, _b; return (_b = (_a = comment.replies[comment.replies.length - 1]) === null || _a === void 0 ? void 0 : _a.by) !== null && _b !== void 0 ? _b : 'user'; };
|
|
232
|
+
exports.lastWordOf = lastWordOf;
|
|
233
|
+
const threadStateOf = (comment) => {
|
|
234
|
+
const last = comment.replies[comment.replies.length - 1];
|
|
235
|
+
if ((last === null || last === void 0 ? void 0 : last.by) !== 'agent')
|
|
236
|
+
return 'agent';
|
|
237
|
+
return last.question ? 'question' : 'answered';
|
|
238
|
+
};
|
|
239
|
+
exports.threadStateOf = threadStateOf;
|
|
240
|
+
const findComment = (options) => {
|
|
241
|
+
const { products, id } = options;
|
|
242
|
+
if (!ID.test(id))
|
|
243
|
+
return `"${id}" is no comment id`;
|
|
244
|
+
for (const product of products) {
|
|
245
|
+
const found = (0, exports.listComments)({ productDir: product.dir, product: product.name, all: true }).comments.find((comment) => comment.id === id);
|
|
246
|
+
if (found === null || found === void 0 ? void 0 : found.resolved)
|
|
247
|
+
return `comment "${id}" is resolved - it takes no reply and no done`;
|
|
248
|
+
if (found)
|
|
249
|
+
return found;
|
|
250
|
+
}
|
|
251
|
+
return `no open comment "${id}"`;
|
|
252
|
+
};
|
|
253
|
+
exports.findComment = findComment;
|
|
254
|
+
/**
|
|
255
|
+
* Adds a reply to the thread of an open or addressed comment, searching the named products. A reply by the user
|
|
256
|
+
* opens an addressed thread again. Answers with the updated comment.
|
|
257
|
+
*/
|
|
258
|
+
const replyToComment = (options) => {
|
|
259
|
+
const { by, author, text, question } = options;
|
|
260
|
+
if (text.trim() === '')
|
|
261
|
+
return 'a reply needs a text';
|
|
262
|
+
if (by === 'agent' && !(author === null || author === void 0 ? void 0 : author.trim()))
|
|
263
|
+
return 'an agent reply needs --by <model id>';
|
|
264
|
+
if (question && by !== 'agent')
|
|
265
|
+
return 'only an agent reply can be a question';
|
|
266
|
+
const found = (0, exports.findComment)(options);
|
|
267
|
+
if (typeof found === 'string')
|
|
268
|
+
return found;
|
|
269
|
+
const reply = Object.assign(Object.assign(Object.assign({ by }, (author ? { author } : {})), { text, createdAt: new Date().toISOString() }), (question ? { question: true } : {}));
|
|
270
|
+
const replies = [...found.replies, reply];
|
|
271
|
+
const addressed = by === 'agent' ? found.addressed : undefined;
|
|
272
|
+
rewrite(found.file, (stored) => (Object.assign(Object.assign({}, stored), { addressed, replies })));
|
|
273
|
+
return Object.assign(Object.assign({}, found), { addressed, replies });
|
|
274
|
+
};
|
|
275
|
+
exports.replyToComment = replyToComment;
|
|
276
|
+
/** Deletes a withdrawn comment thread by its id, searching the named products. Answers with the deleted comment. */
|
|
277
|
+
const deleteComment = (options) => {
|
|
278
|
+
const found = (0, exports.findComment)(options);
|
|
279
|
+
if (typeof found !== 'string')
|
|
280
|
+
(0, fs_1.rmSync)(found.file);
|
|
281
|
+
return found;
|
|
282
|
+
};
|
|
283
|
+
exports.deleteComment = deleteComment;
|
|
284
|
+
const addressedOf = (options) => {
|
|
285
|
+
const { reason, author, note, round } = options;
|
|
286
|
+
return Object.assign(Object.assign(Object.assign(Object.assign({ by: author ? 'agent' : 'user' }, (author ? { author } : {})), { reason, addressedAt: new Date().toISOString() }), ((note === null || note === void 0 ? void 0 : note.trim()) ? { note: note.trim() } : {})), (round ? { round } : {}));
|
|
287
|
+
};
|
|
288
|
+
const withAddressed = (comment, addressed) => {
|
|
289
|
+
rewrite(comment.file, (stored) => (Object.assign(Object.assign({}, stored), { addressed })));
|
|
290
|
+
return Object.assign(Object.assign({}, comment), { addressed });
|
|
291
|
+
};
|
|
292
|
+
/**
|
|
293
|
+
* Marks an open or addressed comment thread as addressed by `inbox done`, searching the named products. Without
|
|
294
|
+
* `author` the user addressed it. Answers with the addressed comment.
|
|
295
|
+
*/
|
|
296
|
+
const addressComment = (options) => {
|
|
297
|
+
const found = (0, exports.findComment)(options);
|
|
298
|
+
return typeof found === 'string' ? found : withAddressed(found, addressedOf(Object.assign(Object.assign({}, options), { reason: 'done' })));
|
|
299
|
+
};
|
|
300
|
+
exports.addressComment = addressComment;
|
|
301
|
+
/** Resolves an open or addressed comment thread for the user, searching the named products: the file stays, marked `resolved`. */
|
|
302
|
+
const resolveComment = (options) => {
|
|
303
|
+
var _a;
|
|
304
|
+
const found = (0, exports.findComment)(options);
|
|
305
|
+
if (typeof found === 'string')
|
|
306
|
+
return found;
|
|
307
|
+
const note = (_a = options.note) === null || _a === void 0 ? void 0 : _a.trim();
|
|
308
|
+
const resolved = Object.assign({ by: 'user', resolvedAt: new Date().toISOString() }, (note ? { note } : {}));
|
|
309
|
+
rewrite(found.file, (stored) => (Object.assign(Object.assign({}, stored), { resolved })));
|
|
310
|
+
return Object.assign(Object.assign({}, found), { resolved });
|
|
311
|
+
};
|
|
312
|
+
exports.resolveComment = resolveComment;
|
|
313
|
+
/** The open comments made on any variant of a sketch, matched by its target and its `createdAt`. */
|
|
314
|
+
const commentsOnSketch = (options) => (0, exports.listComments)(options).comments.filter((comment) => { var _a; return ((_a = comment.sketch) === null || _a === void 0 ? void 0 : _a.target) === options.sketch.target && comment.sketch.createdAt === options.sketch.createdAt; });
|
|
315
|
+
exports.commentsOnSketch = commentsOnSketch;
|
|
316
|
+
/**
|
|
317
|
+
* Marks the open comments on the variants of a sketch, or only those on `variant`, as addressed for `reason`. `round`
|
|
318
|
+
* is the key of the round a `round` answer started; without `author` the user addressed them. Answers with the addressed comments.
|
|
319
|
+
*/
|
|
320
|
+
const addressSketchComments = (options) => {
|
|
321
|
+
const { sketch, variant } = options;
|
|
322
|
+
const addressed = addressedOf(options);
|
|
323
|
+
return (0, exports.commentsOnSketch)({
|
|
324
|
+
productDir: (0, path_1.resolve)(sketch.dir, '..', '..'),
|
|
325
|
+
product: sketch.product,
|
|
326
|
+
sketch,
|
|
327
|
+
})
|
|
328
|
+
.filter((comment) => { var _a; return variant === undefined || ((_a = comment.sketch) === null || _a === void 0 ? void 0 : _a.variant) === variant; })
|
|
329
|
+
.map((comment) => withAddressed(comment, addressed));
|
|
330
|
+
};
|
|
331
|
+
exports.addressSketchComments = addressSketchComments;
|
|
332
|
+
//# sourceMappingURL=comment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comment.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/comments/comment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ResolvedProduct } from '../resolve-product';
|
|
2
|
+
import { DesignComment } from './comment';
|
|
3
|
+
/**
|
|
4
|
+
* Completes a handled comment thread: replaces the `note` of the part it was made on with `note`, then marks the thread addressed
|
|
5
|
+
* with that note, for the user to resolve. A thread on a sketch variant sets the note in the variant's own copy of the part, never in
|
|
6
|
+
* the product, and changes no part file when the variant does not hold the part; otherwise a part taken from the base is copied into the product first.
|
|
7
|
+
* With `author`, its model id is stored where the comment sat unless it is there already: in the authors of
|
|
8
|
+
* the sketch variant, or in the `madeBy` of the part. Answers with the addressed comment, or with why nothing changed.
|
|
9
|
+
*/
|
|
10
|
+
export declare const completeComment: (options: {
|
|
11
|
+
products: ResolvedProduct[];
|
|
12
|
+
id: string;
|
|
13
|
+
note: string;
|
|
14
|
+
author?: string;
|
|
15
|
+
}) => DesignComment | string;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.completeComment = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const resolve_product_1 = require("../resolve-product");
|
|
7
|
+
const overlay_1 = require("../sketch/overlay");
|
|
8
|
+
const sketch_1 = require("../sketch/sketch");
|
|
9
|
+
const part_definition_1 = require("../sketch/part-definition");
|
|
10
|
+
const comment_1 = require("./comment");
|
|
11
|
+
/**
|
|
12
|
+
* Completes a handled comment thread: replaces the `note` of the part it was made on with `note`, then marks the thread addressed
|
|
13
|
+
* with that note, for the user to resolve. A thread on a sketch variant sets the note in the variant's own copy of the part, never in
|
|
14
|
+
* the product, and changes no part file when the variant does not hold the part; otherwise a part taken from the base is copied into the product first.
|
|
15
|
+
* With `author`, its model id is stored where the comment sat unless it is there already: in the authors of
|
|
16
|
+
* the sketch variant, or in the `madeBy` of the part. Answers with the addressed comment, or with why nothing changed.
|
|
17
|
+
*/
|
|
18
|
+
const completeComment = (options) => {
|
|
19
|
+
const { products, id, note, author } = options;
|
|
20
|
+
if (note.trim() === '')
|
|
21
|
+
return 'done needs --note with the note that explains the whole shape of the part';
|
|
22
|
+
const found = (0, comment_1.findComment)({ products: products.map(({ name, dir }) => ({ name, dir })), id });
|
|
23
|
+
if (typeof found === 'string')
|
|
24
|
+
return found;
|
|
25
|
+
const product = products.find(({ name }) => name === found.product);
|
|
26
|
+
const part = product === null || product === void 0 ? void 0 : product.parts.find((candidate) => (0, resolve_product_1.partKeyOf)(candidate) === found.part);
|
|
27
|
+
if (!product || !part)
|
|
28
|
+
return `${found.part} is no part of ${found.product} - the note has nowhere to go`;
|
|
29
|
+
if (found.sketch) {
|
|
30
|
+
const target = (0, sketch_1.parseTarget)(found.sketch.target);
|
|
31
|
+
const sketch = typeof target === 'string'
|
|
32
|
+
? null
|
|
33
|
+
: (0, sketch_1.findSketch)({ productDir: product.dir, product: product.name, sketch: target });
|
|
34
|
+
if (!sketch || typeof sketch === 'string')
|
|
35
|
+
return `${found.sketch.target} is no sketch of ${product.name}`;
|
|
36
|
+
const drawn = (0, overlay_1.overlaySketch)({ product, sketch, variant: found.sketch.variant }).parts.find((candidate) => (0, resolve_product_1.partKeyOf)(candidate) === found.part);
|
|
37
|
+
if (drawn && drawn.file.startsWith(`${sketch.dir}${path_1.sep}`)) {
|
|
38
|
+
const noted = (0, part_definition_1.withNote)((0, fs_1.readFileSync)(drawn.file, 'utf8'), note);
|
|
39
|
+
if (noted === null)
|
|
40
|
+
return `${drawn.file} holds no definePart({ note: '…' }) to set the note on`;
|
|
41
|
+
(0, fs_1.writeFileSync)(drawn.file, noted);
|
|
42
|
+
}
|
|
43
|
+
if (author) {
|
|
44
|
+
const authored = (0, sketch_1.withAuthor)({ sketch, variant: found.sketch.variant, author });
|
|
45
|
+
if (authored !== sketch)
|
|
46
|
+
(0, sketch_1.writeSketchFile)(authored);
|
|
47
|
+
}
|
|
48
|
+
return (0, comment_1.addressComment)({ products: [{ name: product.name, dir: product.dir }], id, author, note });
|
|
49
|
+
}
|
|
50
|
+
const source = (0, fs_1.readFileSync)(part.file, 'utf8');
|
|
51
|
+
const withNoted = (0, part_definition_1.withNote)(source, note);
|
|
52
|
+
const madeBy = (0, part_definition_1.madeByOf)(source);
|
|
53
|
+
const noted = withNoted !== null && author && !madeBy.includes(author) ? (0, part_definition_1.withMadeBy)(withNoted, [...madeBy, author]) : withNoted;
|
|
54
|
+
if (noted === null)
|
|
55
|
+
return `${part.file} holds no definePart({ note: '…' }) to set the note on`;
|
|
56
|
+
const partDir = (0, path_1.resolve)(product.dir, part.layer, part.name);
|
|
57
|
+
if (part.origin === 'base')
|
|
58
|
+
(0, fs_1.cpSync)((0, path_1.dirname)(part.file), partDir, { recursive: true });
|
|
59
|
+
(0, fs_1.writeFileSync)((0, path_1.resolve)(partDir, `${part.name}.ts`), noted);
|
|
60
|
+
return (0, comment_1.addressComment)({ products: [{ name: product.name, dir: product.dir }], id, author, note });
|
|
61
|
+
};
|
|
62
|
+
exports.completeComment = completeComment;
|
|
63
|
+
//# sourceMappingURL=complete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/comments/complete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { DesignConfig } from '../../paths';
|
|
2
|
+
import { DesignComment, ThreadState } from './comment';
|
|
3
|
+
export type InboxComment = Omit<DesignComment, 'file'> & {
|
|
4
|
+
kind: 'comment';
|
|
5
|
+
file: string;
|
|
6
|
+
at: string;
|
|
7
|
+
threadState: ThreadState;
|
|
8
|
+
};
|
|
9
|
+
type DecisionOn = {
|
|
10
|
+
product: string;
|
|
11
|
+
target: string;
|
|
12
|
+
comment?: string;
|
|
13
|
+
at: string;
|
|
14
|
+
};
|
|
15
|
+
export type InboxDecision = (DecisionOn & {
|
|
16
|
+
kind: 'pick';
|
|
17
|
+
variant: string;
|
|
18
|
+
}) | (DecisionOn & {
|
|
19
|
+
kind: 'discard';
|
|
20
|
+
});
|
|
21
|
+
/** A sketch whose baseline is stale: `changed` names the parts that changed in the product, `[]` when it records no baseline. */
|
|
22
|
+
export type InboxRebase = {
|
|
23
|
+
kind: 'rebase';
|
|
24
|
+
product: string;
|
|
25
|
+
target: string;
|
|
26
|
+
changed: string[];
|
|
27
|
+
at: string;
|
|
28
|
+
};
|
|
29
|
+
export type InboxItem = InboxComment | InboxDecision | InboxRebase;
|
|
30
|
+
/**
|
|
31
|
+
* Everything that waits for the agent, across the named products, oldest first: each open comment thread whose
|
|
32
|
+
* last word is the user's and each sketch that needs a rebase. `waiting` holds the open threads whose last word is
|
|
33
|
+
* the agent's and the pick or discard decisions, which the user carries out in Studio. `unreadable` names the files that could not be read.
|
|
34
|
+
*/
|
|
35
|
+
export declare const inboxOf: (options: {
|
|
36
|
+
target: string;
|
|
37
|
+
config: DesignConfig;
|
|
38
|
+
products?: string[];
|
|
39
|
+
}) => {
|
|
40
|
+
items: InboxItem[];
|
|
41
|
+
waiting: (InboxComment | InboxDecision)[];
|
|
42
|
+
unreadable: string[];
|
|
43
|
+
};
|
|
44
|
+
/** The inbox as text, one block per item with the command that settles it, then what waits for the user. */
|
|
45
|
+
export declare const inboxText: (inbox: {
|
|
46
|
+
items: InboxItem[];
|
|
47
|
+
waiting: InboxItem[];
|
|
48
|
+
}, invocation: string) => string;
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inboxText = exports.inboxOf = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const product_1 = require("../product");
|
|
6
|
+
const baseline_1 = require("../sketch/baseline");
|
|
7
|
+
const cli_args_1 = require("../sketch/cli-args");
|
|
8
|
+
const sketch_1 = require("../sketch/sketch");
|
|
9
|
+
const comment_1 = require("./comment");
|
|
10
|
+
/**
|
|
11
|
+
* Everything that waits for the agent, across the named products, oldest first: each open comment thread whose
|
|
12
|
+
* last word is the user's and each sketch that needs a rebase. `waiting` holds the open threads whose last word is
|
|
13
|
+
* the agent's and the pick or discard decisions, which the user carries out in Studio. `unreadable` names the files that could not be read.
|
|
14
|
+
*/
|
|
15
|
+
const inboxOf = (options) => {
|
|
16
|
+
var _a, _b, _c, _d;
|
|
17
|
+
const { target, config } = options;
|
|
18
|
+
const products = (_a = options.products) !== null && _a !== void 0 ? _a : Object.keys((_b = config.products) !== null && _b !== void 0 ? _b : {});
|
|
19
|
+
const items = [];
|
|
20
|
+
const waiting = [];
|
|
21
|
+
const unreadable = [];
|
|
22
|
+
for (const product of products) {
|
|
23
|
+
const productDir = (0, product_1.productDirOf)({ target, product });
|
|
24
|
+
const comments = (0, comment_1.listComments)({ productDir, product });
|
|
25
|
+
unreadable.push(...comments.unreadable.map(({ file, problem }) => `${(0, path_1.relative)(target, file)}: ${problem}`));
|
|
26
|
+
for (const comment of comments.comments) {
|
|
27
|
+
const item = Object.assign(Object.assign({}, comment), { kind: 'comment', file: (0, path_1.relative)(target, comment.file), at: (_d = (_c = comment.replies[comment.replies.length - 1]) === null || _c === void 0 ? void 0 : _c.createdAt) !== null && _d !== void 0 ? _d : comment.createdAt, threadState: (0, comment_1.threadStateOf)(comment) });
|
|
28
|
+
((0, comment_1.lastWordOf)(comment) === 'user' ? items : waiting).push(item);
|
|
29
|
+
}
|
|
30
|
+
const sketches = (0, sketch_1.listSketches)({ productDir, product });
|
|
31
|
+
const resolved = sketches.length > 0 ? (0, cli_args_1.oneProductOf)({ target, config, asked: product }) : null;
|
|
32
|
+
if (typeof resolved === 'string')
|
|
33
|
+
unreadable.push(resolved);
|
|
34
|
+
for (const sketch of sketches) {
|
|
35
|
+
if (typeof sketch === 'string') {
|
|
36
|
+
unreadable.push(sketch);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const changed = resolved && typeof resolved !== 'string' ? (0, baseline_1.staleBaselineOf)({ product: resolved, sketch }) : null;
|
|
40
|
+
if (changed)
|
|
41
|
+
items.push({ kind: 'rebase', product, target: sketch.target, changed, at: sketch.createdAt });
|
|
42
|
+
if (!sketch.decision)
|
|
43
|
+
continue;
|
|
44
|
+
const { decision } = sketch;
|
|
45
|
+
const on = Object.assign({ product, target: sketch.target, at: decision.decidedAt }, (decision.comment ? { comment: decision.comment } : {}));
|
|
46
|
+
waiting.push(decision.kind === 'pick' ? Object.assign(Object.assign({}, on), { kind: 'pick', variant: decision.variant }) : Object.assign(Object.assign({}, on), { kind: 'discard' }));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const byTime = (a, b) => a.at.localeCompare(b.at);
|
|
50
|
+
return { items: items.sort(byTime), waiting: waiting.sort(byTime), unreadable };
|
|
51
|
+
};
|
|
52
|
+
exports.inboxOf = inboxOf;
|
|
53
|
+
const quoted = (text) => JSON.stringify(text);
|
|
54
|
+
const indented = (text, by = ' ') => text.split('\n').map((line) => `${by}${line}`);
|
|
55
|
+
const lineOf = (item, invocation) => {
|
|
56
|
+
const when = item.at.slice(0, 16).replace('T', ' ');
|
|
57
|
+
if (item.kind === 'comment') {
|
|
58
|
+
const where = [
|
|
59
|
+
item.part,
|
|
60
|
+
item.state,
|
|
61
|
+
typeof item.size === 'number' ? `${item.size} px` : item.size,
|
|
62
|
+
...(item.interaction === comment_1.REST ? [] : [item.interaction]),
|
|
63
|
+
...(item.point ? [`at ${item.point.x},${item.point.y}`] : []),
|
|
64
|
+
...(item.sketch ? [`sketch ${item.sketch.target} variant ${item.sketch.variant}`] : []),
|
|
65
|
+
].join(' · ');
|
|
66
|
+
return [
|
|
67
|
+
`${when} ${item.product} comment ${item.id}${item.threadState === 'agent' ? '' : ` (${item.threadState})`} ${where}`,
|
|
68
|
+
...indented(item.text),
|
|
69
|
+
...item.replies.flatMap((reply) => [
|
|
70
|
+
` ${reply.by}${reply.author ? ` ${reply.author}` : ''}${reply.question ? ' asks' : ''}:`,
|
|
71
|
+
...indented(reply.text, ' '),
|
|
72
|
+
]),
|
|
73
|
+
` reply: ${invocation} comment reply ${item.id} --product ${item.product} --by <model id> ${quoted('…')}`,
|
|
74
|
+
` done: ${invocation} inbox done ${item.id} --note "…" --by <model id>`,
|
|
75
|
+
];
|
|
76
|
+
}
|
|
77
|
+
if (item.kind === 'rebase')
|
|
78
|
+
return [
|
|
79
|
+
`${when} ${item.product} needs rebase ${item.target}: ${item.changed.length > 0 ? `${item.changed.join(', ')} changed in the product` : 'it records no baseline'}`,
|
|
80
|
+
` bring each variant up to date, then run: ${invocation} sketch rebase ${item.target} --product ${item.product} --by <model id>`,
|
|
81
|
+
];
|
|
82
|
+
const said = item.comment ? [` ${item.comment}`] : [];
|
|
83
|
+
if (item.kind === 'pick')
|
|
84
|
+
return [
|
|
85
|
+
`${when} ${item.product} pick ${item.target} variant ${item.variant}`,
|
|
86
|
+
...said,
|
|
87
|
+
' the user merges it in Studio - do not run sketch merge',
|
|
88
|
+
];
|
|
89
|
+
return [`${when} ${item.product} discard ${item.target}`, ...said, ' the user discards it in Studio'];
|
|
90
|
+
};
|
|
91
|
+
/** The inbox as text, one block per item with the command that settles it, then what waits for the user. */
|
|
92
|
+
const inboxText = (inbox, invocation) => {
|
|
93
|
+
const work = inbox.items.length === 0 ? ['inbox empty'] : inbox.items.flatMap((item) => lineOf(item, invocation));
|
|
94
|
+
const waiting = inbox.waiting.length === 0
|
|
95
|
+
? []
|
|
96
|
+
: ['', 'waiting for the user:', ...inbox.waiting.flatMap((item) => lineOf(item, invocation))];
|
|
97
|
+
return [...work, ...waiting].join('\n');
|
|
98
|
+
};
|
|
99
|
+
exports.inboxText = inboxText;
|
|
100
|
+
//# sourceMappingURL=inbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/comments/inbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type CssBlocks = {
|
|
2
|
+
selectors: string[];
|
|
3
|
+
declarations: string[];
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Splits CSS into the text before each `{` (selectors) and the text before each `;` or `}`
|
|
7
|
+
* (declarations). At-rule preludes are dropped. Text after the last delimiter counts as a
|
|
8
|
+
* declaration, so an inline `style="…"` attribute reads as one.
|
|
9
|
+
*/
|
|
10
|
+
export declare const cssBlocksOf: (css: string) => CssBlocks;
|
|
11
|
+
export declare const declarationValueOf: (declaration: string) => string | null;
|
|
12
|
+
export declare const classesOf: (selector: string) => string[];
|