@ethlete/cli 3.0.0-next.24 → 3.0.0-next.26
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 +126 -0
- package/design/define-call.ts +69 -0
- package/design/define-part.ts +43 -9
- package/design/embed-page.ts +37 -4
- package/design/icon-sheet.ts +151 -0
- package/design/logo-sheet.ts +52 -0
- package/design/mark-part.ts +79 -2
- package/design/motion-drive.ts +215 -0
- package/design/motion-runtime.ts +224 -5
- package/design/motion-tokens.ts +177 -0
- package/design/spring.ts +53 -0
- package/design/token-sheet.ts +87 -0
- package/design/web/frame-fill.ts +4 -0
- package/design/web/frame-scheme.ts +44 -0
- package/design/web/frame.ts +239 -31
- package/package.json +1 -1
- package/src/lib/design/calls-tsconfig.d.ts +2 -0
- package/src/lib/design/calls-tsconfig.js +11 -5
- package/src/lib/design/calls-tsconfig.js.map +1 -1
- package/src/lib/design/check.d.ts +1 -0
- package/src/lib/design/check.js +62 -6
- package/src/lib/design/check.js.map +1 -1
- package/src/lib/design/contact-sheet.d.ts +9 -0
- package/src/lib/design/contact-sheet.js +38 -4
- package/src/lib/design/contact-sheet.js.map +1 -1
- package/src/lib/design/design-command.js +56 -7
- package/src/lib/design/design-command.js.map +1 -1
- package/src/lib/design/draw-ledger.d.ts +36 -0
- package/src/lib/design/draw-ledger.js +52 -0
- package/src/lib/design/draw-ledger.js.map +1 -0
- package/src/lib/design/force-interactions.d.ts +2 -1
- package/src/lib/design/force-interactions.js +7 -4
- package/src/lib/design/force-interactions.js.map +1 -1
- package/src/lib/design/mcp-command.d.ts +81 -0
- package/src/lib/design/mcp-command.js +422 -0
- package/src/lib/design/mcp-command.js.map +1 -0
- package/src/lib/design/motion-command.d.ts +71 -0
- package/src/lib/design/motion-command.js +308 -0
- package/src/lib/design/motion-command.js.map +1 -0
- package/src/lib/design/motion-endpoint.d.ts +61 -0
- package/src/lib/design/motion-endpoint.js +133 -0
- package/src/lib/design/motion-endpoint.js.map +1 -0
- package/src/lib/design/motion-flow.d.ts +5 -0
- package/src/lib/design/motion-flow.js +29 -0
- package/src/lib/design/motion-flow.js.map +1 -0
- package/src/lib/design/motion-shot.d.ts +43 -0
- package/src/lib/design/motion-shot.js +97 -0
- package/src/lib/design/motion-shot.js.map +1 -0
- package/src/lib/design/paths.d.ts +14 -0
- package/src/lib/design/paths.js +50 -1
- package/src/lib/design/paths.js.map +1 -1
- package/src/lib/design/ready-shots.d.ts +7 -0
- package/src/lib/design/ready-shots.js +22 -1
- package/src/lib/design/ready-shots.js.map +1 -1
- package/src/lib/design/render-packages.d.ts +14 -0
- package/src/lib/design/render-packages.js +18 -3
- package/src/lib/design/render-packages.js.map +1 -1
- package/src/lib/design/render-worker.js +1 -0
- package/src/lib/design/render-worker.js.map +1 -1
- package/src/lib/design/render.js +3 -3
- package/src/lib/design/render.js.map +1 -1
- package/src/lib/design/serve.d.ts +2 -2
- package/src/lib/design/serve.js +191 -21
- package/src/lib/design/serve.js.map +1 -1
- package/src/lib/design/shot-command.d.ts +13 -4
- package/src/lib/design/shot-command.js +30 -24
- package/src/lib/design/shot-command.js.map +1 -1
- package/src/lib/design/shot-store.d.ts +24 -0
- package/src/lib/design/shot-store.js +120 -0
- package/src/lib/design/shot-store.js.map +1 -0
- package/src/lib/design/shot.d.ts +37 -1
- package/src/lib/design/shot.js +185 -34
- package/src/lib/design/shot.js.map +1 -1
- package/src/lib/design/sketch-command.js +197 -51
- package/src/lib/design/sketch-command.js.map +1 -1
- package/src/lib/design/ssr-shims.d.ts +2 -0
- package/src/lib/design/ssr-shims.js +12 -1
- package/src/lib/design/ssr-shims.js.map +1 -1
- package/src/lib/design/studio-api.d.ts +31 -0
- package/src/lib/design/studio-api.js +118 -1
- package/src/lib/design/studio-api.js.map +1 -1
- package/src/lib/design/system/check-system.d.ts +6 -2
- package/src/lib/design/system/check-system.js +102 -20
- package/src/lib/design/system/check-system.js.map +1 -1
- package/src/lib/design/system/colour.d.ts +4 -1
- package/src/lib/design/system/colour.js +54 -2
- package/src/lib/design/system/colour.js.map +1 -1
- package/src/lib/design/system/complete-command.d.ts +1 -1
- package/src/lib/design/system/complete-command.js +80 -6
- package/src/lib/design/system/complete-command.js.map +1 -1
- package/src/lib/design/system/complete.d.ts +172 -9
- package/src/lib/design/system/complete.js +792 -167
- package/src/lib/design/system/complete.js.map +1 -1
- package/src/lib/design/system/contrast-check.d.ts +6 -1
- package/src/lib/design/system/contrast-check.js +167 -12
- package/src/lib/design/system/contrast-check.js.map +1 -1
- package/src/lib/design/system/drawn-open-points.d.ts +16 -0
- package/src/lib/design/system/drawn-open-points.js +43 -0
- package/src/lib/design/system/drawn-open-points.js.map +1 -0
- package/src/lib/design/system/exceptions.d.ts +59 -0
- package/src/lib/design/system/exceptions.js +132 -0
- package/src/lib/design/system/exceptions.js.map +1 -0
- package/src/lib/design/system/flows/flow.d.ts +3 -0
- package/src/lib/design/system/flows/flow.js +5 -3
- package/src/lib/design/system/flows/flow.js.map +1 -1
- package/src/lib/design/system/handoff.d.ts +11 -0
- package/src/lib/design/system/handoff.js +30 -0
- package/src/lib/design/system/handoff.js.map +1 -0
- package/src/lib/design/system/inventory-approval.d.ts +41 -0
- package/src/lib/design/system/inventory-approval.js +71 -0
- package/src/lib/design/system/inventory-approval.js.map +1 -0
- package/src/lib/design/system/inventory.d.ts +65 -0
- package/src/lib/design/system/inventory.js +168 -0
- package/src/lib/design/system/inventory.js.map +1 -0
- package/src/lib/design/system/list-system.d.ts +4 -1
- package/src/lib/design/system/list-system.js +11 -3
- package/src/lib/design/system/list-system.js.map +1 -1
- package/src/lib/design/system/open-points.d.ts +101 -0
- package/src/lib/design/system/open-points.js +156 -0
- package/src/lib/design/system/open-points.js.map +1 -0
- package/src/lib/design/system/part-ready.d.ts +52 -0
- package/src/lib/design/system/part-ready.js +101 -0
- package/src/lib/design/system/part-ready.js.map +1 -0
- package/src/lib/design/system/read-open-points.d.ts +27 -0
- package/src/lib/design/system/read-open-points.js +81 -0
- package/src/lib/design/system/read-open-points.js.map +1 -0
- package/src/lib/design/system/ready-command.d.ts +7 -0
- package/src/lib/design/system/ready-command.js +65 -0
- package/src/lib/design/system/ready-command.js.map +1 -0
- package/src/lib/design/system/render-check.d.ts +2 -0
- package/src/lib/design/system/render-check.js +216 -32
- package/src/lib/design/system/render-check.js.map +1 -1
- package/src/lib/design/system/resolve-product.d.ts +4 -4
- package/src/lib/design/system/resolve-product.js +22 -7
- package/src/lib/design/system/resolve-product.js.map +1 -1
- package/src/lib/design/system/rules/implements.d.ts +7 -0
- package/src/lib/design/system/rules/implements.js +43 -0
- package/src/lib/design/system/rules/implements.js.map +1 -0
- package/src/lib/design/system/rules/motion.d.ts +2 -0
- package/src/lib/design/system/rules/motion.js +26 -1
- package/src/lib/design/system/rules/motion.js.map +1 -1
- package/src/lib/design/system/rules/option-values.d.ts +15 -0
- package/src/lib/design/system/rules/option-values.js +145 -0
- package/src/lib/design/system/rules/option-values.js.map +1 -0
- package/src/lib/design/system/rules/stale-replace.js +80 -3
- package/src/lib/design/system/rules/stale-replace.js.map +1 -1
- package/src/lib/design/system/rules/token-selectors.js +1 -1
- package/src/lib/design/system/rules/token-selectors.js.map +1 -1
- package/src/lib/design/system/sketch/baseline.d.ts +11 -2
- package/src/lib/design/system/sketch/baseline.js +4 -2
- package/src/lib/design/system/sketch/baseline.js.map +1 -1
- package/src/lib/design/system/sketch/check-sketches.d.ts +1 -0
- package/src/lib/design/system/sketch/check-sketches.js +4 -2
- package/src/lib/design/system/sketch/check-sketches.js.map +1 -1
- package/src/lib/design/system/sketch/host-edit.d.ts +4 -0
- package/src/lib/design/system/sketch/host-edit.js +68 -0
- package/src/lib/design/system/sketch/host-edit.js.map +1 -0
- package/src/lib/design/system/sketch/merge.d.ts +3 -2
- package/src/lib/design/system/sketch/merge.js +79 -12
- package/src/lib/design/system/sketch/merge.js.map +1 -1
- package/src/lib/design/system/sketch/merged-parts.d.ts +11 -1
- package/src/lib/design/system/sketch/merged-parts.js +24 -3
- package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
- package/src/lib/design/system/sketch/no-visible-change.d.ts +6 -0
- package/src/lib/design/system/sketch/no-visible-change.js +25 -1
- package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
- package/src/lib/design/system/sketch/overlay.js +11 -3
- package/src/lib/design/system/sketch/overlay.js.map +1 -1
- package/src/lib/design/system/sketch/part-definition.d.ts +36 -0
- package/src/lib/design/system/sketch/part-definition.js +56 -2
- package/src/lib/design/system/sketch/part-definition.js.map +1 -1
- package/src/lib/design/system/sketch/sketch.d.ts +47 -0
- package/src/lib/design/system/sketch/sketch.js +137 -44
- package/src/lib/design/system/sketch/sketch.js.map +1 -1
- package/src/lib/design/system/sketch/unchanged-states.d.ts +4 -1
- package/src/lib/design/system/sketch/unchanged-states.js +9 -5
- package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
- package/src/lib/design/system/sketch/unused-closure.d.ts +12 -0
- package/src/lib/design/system/sketch/unused-closure.js +195 -0
- package/src/lib/design/system/sketch/unused-closure.js.map +1 -0
- package/src/lib/design/system/sketch/unused-files.d.ts +1 -1
- package/src/lib/design/system/sketch/unused-files.js +6 -3
- package/src/lib/design/system/sketch/unused-files.js.map +1 -1
- package/src/lib/design/system/system-modules.js +6 -9
- package/src/lib/design/system/system-modules.js.map +1 -1
- package/src/lib/design/system/system-tsconfig.d.ts +2 -1
- package/src/lib/design/system/system-tsconfig.js +10 -6
- package/src/lib/design/system/system-tsconfig.js.map +1 -1
- package/src/lib/design/system/ts-source.d.ts +3 -0
- package/src/lib/design/system/ts-source.js +21 -4
- package/src/lib/design/system/ts-source.js.map +1 -1
- package/src/lib/design/thumb.d.ts +31 -4
- package/src/lib/design/thumb.js +105 -40
- package/src/lib/design/thumb.js.map +1 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ResolvedProduct } from './resolve-product';
|
|
2
|
+
export declare const EXCEPTIONS_FILE = "exceptions.json";
|
|
3
|
+
export type ExceptionApproval = {
|
|
4
|
+
by: string;
|
|
5
|
+
at: string;
|
|
6
|
+
hash: string;
|
|
7
|
+
};
|
|
8
|
+
/** An exception to one requirement of a part, keyed `<layer>/<name>.<control>.<requirement>`; only Studio sets `approval`. */
|
|
9
|
+
export type DesignException = {
|
|
10
|
+
reason: string;
|
|
11
|
+
requested: string;
|
|
12
|
+
approval?: ExceptionApproval;
|
|
13
|
+
};
|
|
14
|
+
export type ExceptionState = 'approved' | 'pending' | 'reopened';
|
|
15
|
+
export type ListedException = {
|
|
16
|
+
key: string;
|
|
17
|
+
state: ExceptionState;
|
|
18
|
+
reason: string;
|
|
19
|
+
approval?: ExceptionApproval;
|
|
20
|
+
};
|
|
21
|
+
/** The part key of an exception key, or why the key is not `<layer>/<name>.<control>.<requirement>`. */
|
|
22
|
+
export declare const exceptionPartOf: (key: string) => string;
|
|
23
|
+
export declare const readExceptions: (productDir: string) => Record<string, DesignException>;
|
|
24
|
+
/** Writes a pending exception, which still fails `design complete` until Studio approves it, or answers why not. */
|
|
25
|
+
export declare const requestException: (options: {
|
|
26
|
+
product: ResolvedProduct;
|
|
27
|
+
key: string;
|
|
28
|
+
reason: string;
|
|
29
|
+
at?: string;
|
|
30
|
+
}) => string | DesignException;
|
|
31
|
+
/** Records the user's approval of a requested exception at the part's current hash, or answers why it is refused. */
|
|
32
|
+
export declare const approveException: (options: {
|
|
33
|
+
product: ResolvedProduct;
|
|
34
|
+
key: unknown;
|
|
35
|
+
by: unknown;
|
|
36
|
+
at?: string;
|
|
37
|
+
}) => {
|
|
38
|
+
status: number;
|
|
39
|
+
error: string;
|
|
40
|
+
} | DesignException;
|
|
41
|
+
/** Every exception of a product's own and base parts with its state at each part's current hash, for Studio. */
|
|
42
|
+
export declare const listExceptions: (product: ResolvedProduct) => ListedException[];
|
|
43
|
+
/**
|
|
44
|
+
* Drops each gap an approved exception at `hash` covers, and marks the gaps of a pending or reopened one, which
|
|
45
|
+
* still fail. `listed` holds every exception of the part, for the report.
|
|
46
|
+
*/
|
|
47
|
+
export declare const withExceptions: <T extends {
|
|
48
|
+
target: string;
|
|
49
|
+
detail: string;
|
|
50
|
+
}>(options: {
|
|
51
|
+
part: string;
|
|
52
|
+
gaps: T[];
|
|
53
|
+
exceptions: Record<string, DesignException>;
|
|
54
|
+
hash: string;
|
|
55
|
+
}) => {
|
|
56
|
+
gaps: T[];
|
|
57
|
+
listed: ListedException[];
|
|
58
|
+
};
|
|
59
|
+
export declare const exceptionLineOf: ({ key, state, reason, approval }: ListedException) => string;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.exceptionLineOf = exports.withExceptions = exports.listExceptions = exports.approveException = exports.requestException = exports.readExceptions = exports.exceptionPartOf = exports.EXCEPTIONS_FILE = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const inventory_approval_1 = require("./inventory-approval");
|
|
7
|
+
const resolve_product_1 = require("./resolve-product");
|
|
8
|
+
const baseline_1 = require("./sketch/baseline");
|
|
9
|
+
exports.EXCEPTIONS_FILE = 'exceptions.json';
|
|
10
|
+
const KEY = /^([a-z0-9-]+\/[a-z0-9-]+)\.([^.\s]+)\.([^.\s]+)$/;
|
|
11
|
+
const exceptionsFileOf = (productDir) => (0, path_1.resolve)(productDir, exports.EXCEPTIONS_FILE);
|
|
12
|
+
const isApproval = (value) => {
|
|
13
|
+
if (!value || typeof value !== 'object')
|
|
14
|
+
return false;
|
|
15
|
+
const { by, at, hash } = value;
|
|
16
|
+
return typeof by === 'string' && typeof at === 'string' && typeof hash === 'string';
|
|
17
|
+
};
|
|
18
|
+
const isException = (value) => {
|
|
19
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
20
|
+
return false;
|
|
21
|
+
const { reason, requested, approval } = value;
|
|
22
|
+
return (typeof reason === 'string' && typeof requested === 'string' && (approval === undefined || isApproval(approval)));
|
|
23
|
+
};
|
|
24
|
+
/** The part key of an exception key, or why the key is not `<layer>/<name>.<control>.<requirement>`. */
|
|
25
|
+
const exceptionPartOf = (key) => { var _a, _b; return (_b = (_a = KEY.exec(key)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : `"${key}" is not <layer>/<name>.<control>.<requirement>`; };
|
|
26
|
+
exports.exceptionPartOf = exceptionPartOf;
|
|
27
|
+
const readExceptions = (productDir) => {
|
|
28
|
+
const file = exceptionsFileOf(productDir);
|
|
29
|
+
if (!(0, fs_1.existsSync)(file))
|
|
30
|
+
return {};
|
|
31
|
+
try {
|
|
32
|
+
const parsed = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
|
|
33
|
+
return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
|
|
34
|
+
? Object.fromEntries(Object.entries(parsed).filter((entry) => isException(entry[1])))
|
|
35
|
+
: {};
|
|
36
|
+
}
|
|
37
|
+
catch (_a) {
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
exports.readExceptions = readExceptions;
|
|
42
|
+
const writeExceptions = (productDir, exceptions) => {
|
|
43
|
+
const sorted = Object.fromEntries(Object.entries(exceptions).sort(([a], [b]) => a.localeCompare(b)));
|
|
44
|
+
(0, fs_1.writeFileSync)(exceptionsFileOf(productDir), `${JSON.stringify(sorted, null, 2)}\n`);
|
|
45
|
+
};
|
|
46
|
+
const ownedPartOf = (options) => {
|
|
47
|
+
const part = (0, exports.exceptionPartOf)(options.key);
|
|
48
|
+
if (part.startsWith('"'))
|
|
49
|
+
return part;
|
|
50
|
+
const resolved = options.product.parts.find((candidate) => (0, resolve_product_1.partKeyOf)(candidate) === part);
|
|
51
|
+
if (!resolved)
|
|
52
|
+
return `product "${options.product.name}" has no part "${part}"`;
|
|
53
|
+
const owner = (0, inventory_approval_1.partOwnerOf)({ product: options.product, part: resolved });
|
|
54
|
+
return { owner, hash: () => (0, baseline_1.partHashOf)({ product: owner, dir: (0, path_1.dirname)(resolved.file) }) };
|
|
55
|
+
};
|
|
56
|
+
/** Writes a pending exception, which still fails `design complete` until Studio approves it, or answers why not. */
|
|
57
|
+
const requestException = (options) => {
|
|
58
|
+
var _a;
|
|
59
|
+
const { product, key } = options;
|
|
60
|
+
const reason = options.reason.trim();
|
|
61
|
+
if (reason === '')
|
|
62
|
+
return 'an exception needs a --reason';
|
|
63
|
+
const owned = ownedPartOf({ product, key });
|
|
64
|
+
if (typeof owned === 'string')
|
|
65
|
+
return owned;
|
|
66
|
+
const exception = { reason, requested: (_a = options.at) !== null && _a !== void 0 ? _a : new Date().toISOString() };
|
|
67
|
+
writeExceptions(owned.owner.dir, Object.assign(Object.assign({}, (0, exports.readExceptions)(owned.owner.dir)), { [key]: exception }));
|
|
68
|
+
return exception;
|
|
69
|
+
};
|
|
70
|
+
exports.requestException = requestException;
|
|
71
|
+
/** Records the user's approval of a requested exception at the part's current hash, or answers why it is refused. */
|
|
72
|
+
const approveException = (options) => {
|
|
73
|
+
var _a;
|
|
74
|
+
const { product, key, by } = options;
|
|
75
|
+
if (typeof by !== 'string' || by.trim() === '')
|
|
76
|
+
return { status: 400, error: 'by is required' };
|
|
77
|
+
if (typeof key !== 'string' || key === '')
|
|
78
|
+
return { status: 400, error: 'key is required' };
|
|
79
|
+
const owned = ownedPartOf({ product, key });
|
|
80
|
+
if (typeof owned === 'string')
|
|
81
|
+
return { status: 422, error: owned };
|
|
82
|
+
const exceptions = (0, exports.readExceptions)(owned.owner.dir);
|
|
83
|
+
const requested = exceptions[key];
|
|
84
|
+
if (!requested)
|
|
85
|
+
return { status: 404, error: `no exception "${key}" was requested` };
|
|
86
|
+
const approved = Object.assign(Object.assign({}, requested), { approval: { by: by.trim(), at: (_a = options.at) !== null && _a !== void 0 ? _a : new Date().toISOString(), hash: owned.hash() } });
|
|
87
|
+
writeExceptions(owned.owner.dir, Object.assign(Object.assign({}, exceptions), { [key]: approved }));
|
|
88
|
+
return approved;
|
|
89
|
+
};
|
|
90
|
+
exports.approveException = approveException;
|
|
91
|
+
const stateOf = (exception, hash) => !exception.approval ? 'pending' : exception.approval.hash === hash ? 'approved' : 'reopened';
|
|
92
|
+
/** Every exception of a product's own and base parts with its state at each part's current hash, for Studio. */
|
|
93
|
+
const listExceptions = (product) => [product.dir, ...(product.base ? [product.base.dir] : [])].flatMap((dir) => Object.entries((0, exports.readExceptions)(dir)).flatMap(([key, exception]) => {
|
|
94
|
+
const owned = ownedPartOf({ product, key });
|
|
95
|
+
return typeof owned === 'string' || owned.owner.dir !== dir
|
|
96
|
+
? []
|
|
97
|
+
: [{ key, state: stateOf(exception, owned.hash()), reason: exception.reason, approval: exception.approval }];
|
|
98
|
+
}));
|
|
99
|
+
exports.listExceptions = listExceptions;
|
|
100
|
+
const NOTES = {
|
|
101
|
+
pending: 'its exception is pending - approve it in Studio',
|
|
102
|
+
reopened: 'its approved exception reopened: the part changed - approve it again in Studio',
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Drops each gap an approved exception at `hash` covers, and marks the gaps of a pending or reopened one, which
|
|
106
|
+
* still fail. `listed` holds every exception of the part, for the report.
|
|
107
|
+
*/
|
|
108
|
+
const withExceptions = (options) => {
|
|
109
|
+
const { part, exceptions, hash } = options;
|
|
110
|
+
const listed = Object.entries(exceptions)
|
|
111
|
+
.filter(([key]) => (0, exports.exceptionPartOf)(key) === part)
|
|
112
|
+
.map(([key, exception]) => ({
|
|
113
|
+
key,
|
|
114
|
+
state: stateOf(exception, hash),
|
|
115
|
+
reason: exception.reason,
|
|
116
|
+
approval: exception.approval,
|
|
117
|
+
}));
|
|
118
|
+
const byKey = new Map(listed.map((exception) => [exception.key, exception]));
|
|
119
|
+
const gaps = options.gaps.flatMap((gap) => {
|
|
120
|
+
const exception = byKey.get(gap.target);
|
|
121
|
+
if (!exception)
|
|
122
|
+
return [gap];
|
|
123
|
+
if (exception.state === 'approved')
|
|
124
|
+
return [];
|
|
125
|
+
return [Object.assign(Object.assign({}, gap), { detail: `${gap.detail} - ${NOTES[exception.state]} ("${exception.reason}")` })];
|
|
126
|
+
});
|
|
127
|
+
return { gaps, listed };
|
|
128
|
+
};
|
|
129
|
+
exports.withExceptions = withExceptions;
|
|
130
|
+
const exceptionLineOf = ({ key, state, reason, approval }) => `EXCEPTION ${key} ${state}${approval ? ` (approved by ${approval.by} at ${approval.at})` : ''} - ${reason}`;
|
|
131
|
+
exports.exceptionLineOf = exceptionLineOf;
|
|
132
|
+
//# sourceMappingURL=exceptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/exceptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,13 @@ export type FlowState = {
|
|
|
7
7
|
export type FlowFrame = FlowState & {
|
|
8
8
|
position?: CommentPoint;
|
|
9
9
|
};
|
|
10
|
+
/** `transition: 'view'` makes `et design motion flow` animate the line as a same-document View Transition; `id` names it there. */
|
|
10
11
|
export type FlowLine = {
|
|
11
12
|
from: FlowState;
|
|
12
13
|
to: FlowState;
|
|
13
14
|
label?: string;
|
|
15
|
+
id?: string;
|
|
16
|
+
transition?: 'view';
|
|
14
17
|
};
|
|
15
18
|
/** A note of the flow itself, such as a heading over a group of frames; `at` is its top-left corner on the flow canvas, and may be negative. */
|
|
16
19
|
export type FlowNote = {
|
|
@@ -36,9 +36,11 @@ const frameProblemOf = (frame, index) => {
|
|
|
36
36
|
const lineProblemOf = (line, index) => isRecord(line) &&
|
|
37
37
|
isState(line['from']) &&
|
|
38
38
|
isState(line['to']) &&
|
|
39
|
-
(line['label'] === undefined || isText(line['label']))
|
|
39
|
+
(line['label'] === undefined || isText(line['label'])) &&
|
|
40
|
+
(line['id'] === undefined || isText(line['id'])) &&
|
|
41
|
+
(line['transition'] === undefined || line['transition'] === 'view')
|
|
40
42
|
? null
|
|
41
|
-
: `lines[${index}] must be { from: { part, state }, to: { part, state }, label
|
|
43
|
+
: `lines[${index}] must be { from: { part, state }, to: { part, state }, label?, id?, transition?: "view" }`;
|
|
42
44
|
const noteProblemOf = (note, index) => isRecord(note) &&
|
|
43
45
|
isText(note['id']) &&
|
|
44
46
|
isText(note['text']) &&
|
|
@@ -64,7 +66,7 @@ const flowOf = ({ parsed, name, file }) => {
|
|
|
64
66
|
name,
|
|
65
67
|
file,
|
|
66
68
|
frames: parsed.frames.map(({ part, state, position }) => (Object.assign({ part, state }, (position ? { position } : {})))),
|
|
67
|
-
lines: ((_a = parsed.lines) !== null && _a !== void 0 ? _a : []).map(({ from, to, label }) => (Object.assign({ from: { part: from.part, state: from.state }, to: { part: to.part, state: to.state } }, (label ? { label } : {})))),
|
|
69
|
+
lines: ((_a = parsed.lines) !== null && _a !== void 0 ? _a : []).map(({ from, to, label, id, transition }) => (Object.assign(Object.assign(Object.assign({ from: { part: from.part, state: from.state }, to: { part: to.part, state: to.state } }, (label ? { label } : {})), (id ? { id } : {})), (transition ? { transition } : {})))),
|
|
68
70
|
notes: ((_b = parsed.notes) !== null && _b !== void 0 ? _b : []).map(({ id, text, at }) => (Object.assign({ id, text }, (at ? { at } : {})))),
|
|
69
71
|
});
|
|
70
72
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/flows/flow.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,2BAA0E;AAC1E,+BAA+B;AAC/B,iDAA4D;AAC5D,wCAA0C;
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/flows/flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const HANDOFF_FILE = "handoff.json";
|
|
2
|
+
/** A part that passed `design complete --handoff`, so app work may build it; CI re-checks it on every run. */
|
|
3
|
+
export type HandoffEntry = {
|
|
4
|
+
at: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const readHandoff: (productDir: string) => Record<string, HandoffEntry>;
|
|
7
|
+
export declare const recordHandoff: (options: {
|
|
8
|
+
productDir: string;
|
|
9
|
+
part: string;
|
|
10
|
+
at?: string;
|
|
11
|
+
}) => void;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordHandoff = exports.readHandoff = exports.HANDOFF_FILE = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
exports.HANDOFF_FILE = 'handoff.json';
|
|
7
|
+
const handoffFileOf = (productDir) => (0, path_1.resolve)(productDir, exports.HANDOFF_FILE);
|
|
8
|
+
const readHandoff = (productDir) => {
|
|
9
|
+
const file = handoffFileOf(productDir);
|
|
10
|
+
if (!(0, fs_1.existsSync)(file))
|
|
11
|
+
return {};
|
|
12
|
+
try {
|
|
13
|
+
const parsed = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
|
|
14
|
+
return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
|
|
15
|
+
? Object.fromEntries(Object.entries(parsed).filter((entry) => !!entry[1] && typeof entry[1] === 'object' && typeof entry[1].at === 'string'))
|
|
16
|
+
: {};
|
|
17
|
+
}
|
|
18
|
+
catch (_a) {
|
|
19
|
+
return {};
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.readHandoff = readHandoff;
|
|
23
|
+
const recordHandoff = (options) => {
|
|
24
|
+
var _a;
|
|
25
|
+
const entries = Object.assign(Object.assign({}, (0, exports.readHandoff)(options.productDir)), { [options.part]: { at: (_a = options.at) !== null && _a !== void 0 ? _a : new Date().toISOString() } });
|
|
26
|
+
const sorted = Object.fromEntries(Object.entries(entries).sort(([a], [b]) => a.localeCompare(b)));
|
|
27
|
+
(0, fs_1.writeFileSync)(handoffFileOf(options.productDir), `${JSON.stringify(sorted, null, 2)}\n`);
|
|
28
|
+
};
|
|
29
|
+
exports.recordHandoff = recordHandoff;
|
|
30
|
+
//# sourceMappingURL=handoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/handoff.ts"],"names":[],"mappings":";;;AAAA,2BAA6D;AAC7D,+BAA+B;AAElB,QAAA,YAAY,GAAG,cAAc,CAAC;AAK3C,MAAM,aAAa,GAAG,CAAC,UAAkB,EAAE,EAAE,CAAC,IAAA,cAAO,EAAC,UAAU,EAAE,oBAAY,CAAC,CAAC;AAEzE,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAgC,EAAE;IAC9E,MAAM,IAAI,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAEvC,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAE/D,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACnE,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAC3B,CAAC,KAAK,EAAmC,EAAE,CACzC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAQ,KAAK,CAAC,CAAC,CAAkB,CAAC,EAAE,KAAK,QAAQ,CAClG,CACF;YACH,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAnBW,QAAA,WAAW,eAmBtB;AAEK,MAAM,aAAa,GAAG,CAAC,OAA0D,EAAE,EAAE;;IAC1F,MAAM,OAAO,mCACR,IAAA,mBAAW,EAAC,OAAO,CAAC,UAAU,CAAC,KAClC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,MAAA,OAAO,CAAC,EAAE,mCAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAC/D,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAElG,IAAA,kBAAa,EAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3F,CAAC,CAAC;AARW,QAAA,aAAa,iBAQxB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ResolvedPart, ResolvedProduct } from './resolve-product';
|
|
2
|
+
export declare const INVENTORY_FILE = "inventory.json";
|
|
3
|
+
/** The control ids of a page and its part hash, as the user approved them in Studio. */
|
|
4
|
+
export type InventoryApproval = {
|
|
5
|
+
ids: string[];
|
|
6
|
+
hash: string;
|
|
7
|
+
by: string;
|
|
8
|
+
at: string;
|
|
9
|
+
};
|
|
10
|
+
/** Whether the approved inventory of a page still holds: its ids and hash match, it reopened, or it never was approved. */
|
|
11
|
+
export type InventoryState = {
|
|
12
|
+
state: 'approved';
|
|
13
|
+
} | {
|
|
14
|
+
state: 'reopened';
|
|
15
|
+
added: string[];
|
|
16
|
+
removed: string[];
|
|
17
|
+
changed: boolean;
|
|
18
|
+
} | {
|
|
19
|
+
state: 'none';
|
|
20
|
+
};
|
|
21
|
+
/** The directory whose merged.json and inventory.json hold a part: its base's for a part the product takes from its base. */
|
|
22
|
+
export declare const partOwnerOf: (options: {
|
|
23
|
+
product: ResolvedProduct;
|
|
24
|
+
part: ResolvedPart;
|
|
25
|
+
}) => ResolvedProduct | {
|
|
26
|
+
dir: string;
|
|
27
|
+
base: null;
|
|
28
|
+
};
|
|
29
|
+
export declare const readInventory: (productDir: string) => Record<string, InventoryApproval>;
|
|
30
|
+
export declare const writeInventoryApproval: (options: {
|
|
31
|
+
productDir: string;
|
|
32
|
+
part: string;
|
|
33
|
+
approval: InventoryApproval;
|
|
34
|
+
}) => void;
|
|
35
|
+
export declare const inventoryStateOf: (options: {
|
|
36
|
+
approval: InventoryApproval | undefined;
|
|
37
|
+
ids: string[];
|
|
38
|
+
hash: string;
|
|
39
|
+
}) => InventoryState;
|
|
40
|
+
/** Why a page's inventory is not approved, for a gap line or Studio, or `null` when it is. */
|
|
41
|
+
export declare const inventoryReasonOf: (state: InventoryState) => string | null;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inventoryReasonOf = exports.inventoryStateOf = exports.writeInventoryApproval = exports.readInventory = exports.partOwnerOf = exports.INVENTORY_FILE = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
exports.INVENTORY_FILE = 'inventory.json';
|
|
7
|
+
const inventoryFileOf = (productDir) => (0, path_1.resolve)(productDir, exports.INVENTORY_FILE);
|
|
8
|
+
const isApproval = (value) => {
|
|
9
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
10
|
+
return false;
|
|
11
|
+
const { ids, hash, by, at } = value;
|
|
12
|
+
return (Array.isArray(ids) &&
|
|
13
|
+
ids.every((id) => typeof id === 'string') &&
|
|
14
|
+
typeof hash === 'string' &&
|
|
15
|
+
typeof by === 'string' &&
|
|
16
|
+
typeof at === 'string');
|
|
17
|
+
};
|
|
18
|
+
/** The directory whose merged.json and inventory.json hold a part: its base's for a part the product takes from its base. */
|
|
19
|
+
const partOwnerOf = (options) => options.part.origin === 'base' && options.product.base
|
|
20
|
+
? { dir: options.product.base.dir, base: null }
|
|
21
|
+
: options.product;
|
|
22
|
+
exports.partOwnerOf = partOwnerOf;
|
|
23
|
+
const readInventory = (productDir) => {
|
|
24
|
+
const file = inventoryFileOf(productDir);
|
|
25
|
+
if (!(0, fs_1.existsSync)(file))
|
|
26
|
+
return {};
|
|
27
|
+
try {
|
|
28
|
+
const parsed = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
|
|
29
|
+
return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
|
|
30
|
+
? Object.fromEntries(Object.entries(parsed).filter((entry) => isApproval(entry[1])))
|
|
31
|
+
: {};
|
|
32
|
+
}
|
|
33
|
+
catch (_a) {
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
exports.readInventory = readInventory;
|
|
38
|
+
const writeInventoryApproval = (options) => {
|
|
39
|
+
const { productDir, part, approval } = options;
|
|
40
|
+
const approvals = Object.assign(Object.assign({}, (0, exports.readInventory)(productDir)), { [part]: Object.assign(Object.assign({}, approval), { ids: [...approval.ids].sort() }) });
|
|
41
|
+
const sorted = Object.fromEntries(Object.entries(approvals).sort(([a], [b]) => a.localeCompare(b)));
|
|
42
|
+
(0, fs_1.writeFileSync)(inventoryFileOf(productDir), `${JSON.stringify(sorted, null, 2)}\n`);
|
|
43
|
+
};
|
|
44
|
+
exports.writeInventoryApproval = writeInventoryApproval;
|
|
45
|
+
const inventoryStateOf = (options) => {
|
|
46
|
+
const { approval, ids, hash } = options;
|
|
47
|
+
if (!approval)
|
|
48
|
+
return { state: 'none' };
|
|
49
|
+
const added = ids.filter((id) => !approval.ids.includes(id)).sort();
|
|
50
|
+
const removed = approval.ids.filter((id) => !ids.includes(id)).sort();
|
|
51
|
+
const changed = approval.hash !== hash;
|
|
52
|
+
return added.length > 0 || removed.length > 0 || changed
|
|
53
|
+
? { state: 'reopened', added, removed, changed }
|
|
54
|
+
: { state: 'approved' };
|
|
55
|
+
};
|
|
56
|
+
exports.inventoryStateOf = inventoryStateOf;
|
|
57
|
+
/** Why a page's inventory is not approved, for a gap line or Studio, or `null` when it is. */
|
|
58
|
+
const inventoryReasonOf = (state) => {
|
|
59
|
+
if (state.state === 'approved')
|
|
60
|
+
return null;
|
|
61
|
+
if (state.state === 'none')
|
|
62
|
+
return 'its control inventory is not approved';
|
|
63
|
+
const reasons = [
|
|
64
|
+
...(state.added.length > 0 ? [`added ${state.added.join(', ')}`] : []),
|
|
65
|
+
...(state.removed.length > 0 ? [`removed ${state.removed.join(', ')}`] : []),
|
|
66
|
+
...(state.changed ? ['the part changed'] : []),
|
|
67
|
+
];
|
|
68
|
+
return `its approved control inventory reopened: ${reasons.join('; ')}`;
|
|
69
|
+
};
|
|
70
|
+
exports.inventoryReasonOf = inventoryReasonOf;
|
|
71
|
+
//# sourceMappingURL=inventory-approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inventory-approval.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/inventory-approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Browser } from '../thumb';
|
|
2
|
+
import { FrameAddress, FrameBox, SeenFrame } from './complete';
|
|
3
|
+
import { InventoryApproval, InventoryState } from './inventory-approval';
|
|
4
|
+
import { ResolvedProduct } from './resolve-product';
|
|
5
|
+
import { SystemModules } from './system-modules';
|
|
6
|
+
/** `declared` is marked and declared; `undeclared` (red) is a control without a declaration; `unclassified` (amber) only looks interactive. */
|
|
7
|
+
export type InventoryStatus = 'declared' | 'undeclared' | 'unclassified';
|
|
8
|
+
/** One numbered control in a rest frame. A control keeps its number in every frame that draws it. */
|
|
9
|
+
export type InventoryControl = {
|
|
10
|
+
number: number;
|
|
11
|
+
id: string;
|
|
12
|
+
status: InventoryStatus;
|
|
13
|
+
kind: string;
|
|
14
|
+
inputs: string[];
|
|
15
|
+
surfaces: string[];
|
|
16
|
+
states: number;
|
|
17
|
+
box: FrameBox | null;
|
|
18
|
+
};
|
|
19
|
+
/** A rest frame of a page, the URL of its picture and the controls it draws, in its pixels. */
|
|
20
|
+
export type InventoryFrame = FrameAddress & {
|
|
21
|
+
shot: string;
|
|
22
|
+
controls: InventoryControl[];
|
|
23
|
+
};
|
|
24
|
+
/** The control inventory of a page, its part hash, and whether its approval holds. `dir` holds its inventory.json. */
|
|
25
|
+
export type Inventory = {
|
|
26
|
+
part: string;
|
|
27
|
+
dir: string;
|
|
28
|
+
hash: string;
|
|
29
|
+
ids: string[];
|
|
30
|
+
findings: number;
|
|
31
|
+
approval: InventoryApproval | null;
|
|
32
|
+
state: InventoryState;
|
|
33
|
+
reason: string | null;
|
|
34
|
+
frames: InventoryFrame[];
|
|
35
|
+
};
|
|
36
|
+
/** Numbers the declared, undeclared and unclassified controls each rest frame draws, top to bottom. */
|
|
37
|
+
export declare const inventoryFramesOf: (options: {
|
|
38
|
+
product: string;
|
|
39
|
+
part: string;
|
|
40
|
+
controls: unknown;
|
|
41
|
+
frames: SeenFrame[];
|
|
42
|
+
addresses: FrameAddress[];
|
|
43
|
+
}) => InventoryFrame[];
|
|
44
|
+
/** Draws the rest frames of a page and answers its control inventory and approval state, or why it cannot. */
|
|
45
|
+
export declare const inventoryOf: (options: {
|
|
46
|
+
product: ResolvedProduct;
|
|
47
|
+
part: string;
|
|
48
|
+
system: SystemModules;
|
|
49
|
+
base: string;
|
|
50
|
+
load: (id: string) => Promise<unknown>;
|
|
51
|
+
draw: <T>(job: (browser: Browser) => Promise<T>) => Promise<T>;
|
|
52
|
+
}) => Promise<Inventory | string>;
|
|
53
|
+
/**
|
|
54
|
+
* Records the user's approval of the inventory Studio showed, or answers why it is refused: `hash` is the part hash
|
|
55
|
+
* that inventory had, and a page with an undeclared or unclassified control cannot be approved.
|
|
56
|
+
*/
|
|
57
|
+
export declare const approveInventory: (options: {
|
|
58
|
+
inventory: Inventory;
|
|
59
|
+
hash: unknown;
|
|
60
|
+
by: unknown;
|
|
61
|
+
at?: string;
|
|
62
|
+
}) => {
|
|
63
|
+
status: number;
|
|
64
|
+
error: string;
|
|
65
|
+
} | InventoryApproval;
|