@ethlete/cli 3.0.0-next.17 → 3.0.0-next.19
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 +41 -0
- package/design/css-inline.d.ts +4 -0
- package/design/define-call.ts +228 -3
- package/design/web/env.d.ts +2 -1
- package/design/web/frame.ts +51 -6
- package/package.json +27 -3
- package/src/index.js +26 -4
- package/src/index.js.map +1 -1
- package/src/lib/api/api-context.d.ts +15 -0
- package/src/lib/api/api-context.js +23 -0
- package/src/lib/api/api-context.js.map +1 -0
- package/src/lib/api/api-state.d.ts +31 -0
- package/src/lib/api/api-state.js +80 -0
- package/src/lib/api/api-state.js.map +1 -0
- package/src/lib/api/clear.js +10 -2
- package/src/lib/api/clear.js.map +1 -1
- package/src/lib/api/definition.d.ts +37 -1
- package/src/lib/api/definition.js +6 -0
- package/src/lib/api/definition.js.map +1 -1
- package/src/lib/api/doctor.d.ts +16 -0
- package/src/lib/api/doctor.js +71 -0
- package/src/lib/api/doctor.js.map +1 -0
- package/src/lib/api/fingerprint.d.ts +18 -0
- package/src/lib/api/fingerprint.js +63 -0
- package/src/lib/api/fingerprint.js.map +1 -0
- package/src/lib/api/git.d.ts +2 -0
- package/src/lib/api/git.js +7 -1
- package/src/lib/api/git.js.map +1 -1
- package/src/lib/api/help.js +13 -0
- package/src/lib/api/help.js.map +1 -1
- package/src/lib/api/index.d.ts +3 -0
- package/src/lib/api/index.js +33 -17
- package/src/lib/api/index.js.map +1 -1
- package/src/lib/api/load-definitions.js +3 -0
- package/src/lib/api/load-definitions.js.map +1 -1
- package/src/lib/api/lock.d.ts +46 -0
- package/src/lib/api/lock.js +152 -0
- package/src/lib/api/lock.js.map +1 -0
- package/src/lib/api/parse-argv.d.ts +12 -0
- package/src/lib/api/parse-argv.js +31 -0
- package/src/lib/api/parse-argv.js.map +1 -0
- package/src/lib/api/ports.js +12 -4
- package/src/lib/api/ports.js.map +1 -1
- package/src/lib/api/run-locked.d.ts +14 -0
- package/src/lib/api/run-locked.js +70 -0
- package/src/lib/api/run-locked.js.map +1 -0
- package/src/lib/api/run-ready.d.ts +60 -0
- package/src/lib/api/run-ready.js +220 -0
- package/src/lib/api/run-ready.js.map +1 -0
- package/src/lib/api/run-snapshot.d.ts +33 -0
- package/src/lib/api/run-snapshot.js +132 -0
- package/src/lib/api/run-snapshot.js.map +1 -0
- package/src/lib/api/run-status.d.ts +9 -0
- package/src/lib/api/run-status.js +55 -0
- package/src/lib/api/run-status.js.map +1 -0
- package/src/lib/api/run.d.ts +1 -1
- package/src/lib/api/run.js +134 -12
- package/src/lib/api/run.js.map +1 -1
- package/src/lib/api/snapshot.d.ts +63 -0
- package/src/lib/api/snapshot.js +140 -0
- package/src/lib/api/snapshot.js.map +1 -0
- package/src/lib/api/validate-definition.d.ts +7 -0
- package/src/lib/api/validate-definition.js +79 -0
- package/src/lib/api/validate-definition.js.map +1 -0
- package/src/lib/auth/auth-command.js +10 -2
- package/src/lib/auth/auth-command.js.map +1 -1
- package/src/lib/auth/gitlab-token.js +12 -4
- package/src/lib/auth/gitlab-token.js.map +1 -1
- package/src/lib/auth/index.js +18 -5
- package/src/lib/auth/index.js.map +1 -1
- package/src/lib/config/index.js +16 -3
- package/src/lib/config/index.js.map +1 -1
- package/src/lib/design/browser.d.ts +9 -0
- package/src/lib/design/browser.js +37 -0
- package/src/lib/design/browser.js.map +1 -0
- package/src/lib/design/calls-tsconfig.js +6 -2
- package/src/lib/design/calls-tsconfig.js.map +1 -1
- package/src/lib/design/check.d.ts +2 -1
- package/src/lib/design/check.js +151 -69
- package/src/lib/design/check.js.map +1 -1
- package/src/lib/design/design-command.d.ts +1 -1
- package/src/lib/design/design-command.js +58 -3
- package/src/lib/design/design-command.js.map +1 -1
- package/src/lib/design/index.js +19 -6
- package/src/lib/design/index.js.map +1 -1
- package/src/lib/design/legacy.d.ts +9 -0
- package/src/lib/design/legacy.js +52 -0
- package/src/lib/design/legacy.js.map +1 -0
- package/src/lib/design/missing-package.d.ts +2 -0
- package/src/lib/design/missing-package.js +15 -0
- package/src/lib/design/missing-package.js.map +1 -0
- package/src/lib/design/new-call.d.ts +11 -0
- package/src/lib/design/new-call.js +124 -0
- package/src/lib/design/new-call.js.map +1 -0
- package/src/lib/design/paths.d.ts +23 -2
- package/src/lib/design/paths.js +1 -1
- package/src/lib/design/paths.js.map +1 -1
- package/src/lib/design/render-fields.d.ts +29 -0
- package/src/lib/design/render-fields.js +31 -0
- package/src/lib/design/render-fields.js.map +1 -0
- package/src/lib/design/render-packages.d.ts +69 -0
- package/src/lib/design/render-packages.js +168 -0
- package/src/lib/design/render-packages.js.map +1 -0
- package/src/lib/design/render-worker.d.ts +1 -0
- package/src/lib/design/render-worker.js +149 -0
- package/src/lib/design/render-worker.js.map +1 -0
- package/src/lib/design/render.d.ts +23 -0
- package/src/lib/design/render.js +119 -0
- package/src/lib/design/render.js.map +1 -0
- package/src/lib/design/serve.d.ts +1 -1
- package/src/lib/design/serve.js +49 -12
- package/src/lib/design/serve.js.map +1 -1
- package/src/lib/design/ssr-shims.d.ts +10 -0
- package/src/lib/design/ssr-shims.js +128 -0
- package/src/lib/design/ssr-shims.js.map +1 -0
- package/src/lib/design/stamp.d.ts +16 -0
- package/src/lib/design/stamp.js +77 -0
- package/src/lib/design/stamp.js.map +1 -0
- package/src/lib/design/status.d.ts +33 -0
- package/src/lib/design/status.js +58 -0
- package/src/lib/design/status.js.map +1 -0
- package/src/lib/design/system-use.d.ts +23 -0
- package/src/lib/design/system-use.js +61 -0
- package/src/lib/design/system-use.js.map +1 -0
- package/src/lib/doctor/index.js +15 -2
- package/src/lib/doctor/index.js.map +1 -1
- package/src/lib/index.js +22 -9
- package/src/lib/index.js.map +1 -1
- package/src/lib/release.js +10 -2
- package/src/lib/release.js.map +1 -1
- package/src/lib/update/agent-setup.js +11 -3
- package/src/lib/update/agent-setup.js.map +1 -1
- package/src/lib/update/ai.js +13 -5
- package/src/lib/update/ai.js.map +1 -1
- package/src/lib/update/index.js +32 -19
- package/src/lib/update/index.js.map +1 -1
- package/src/lib/update/registry.js +10 -2
- package/src/lib/update/registry.js.map +1 -1
- package/src/lib/update/update-command.js +16 -8
- package/src/lib/update/update-command.js.map +1 -1
- package/src/lib/utils.js +11 -3
- package/src/lib/utils.js.map +1 -1
- package/design/web/host.css +0 -494
- package/design/web/host.ts +0 -445
- package/design/web/index.html +0 -11
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.newCall = exports.CALL_STAGES = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const paths_1 = require("./paths");
|
|
7
|
+
const status_1 = require("./status");
|
|
8
|
+
const SEGMENT = /^[a-z0-9][a-z0-9-]*$/;
|
|
9
|
+
/** The values of `CallStage` in `design/define-call.ts`; a spec keeps the two lists equal. */
|
|
10
|
+
exports.CALL_STAGES = ['themes', 'ci', 'wireframe', 'component', 'element', 'page', 'prototype', 'sketch'];
|
|
11
|
+
const KEY = /^[a-z][a-z0-9-]*$/;
|
|
12
|
+
const titled = (word) => `${word.charAt(0).toUpperCase()}${word.slice(1).replace(/-/g, ' ')}`;
|
|
13
|
+
const callFile = (options) => {
|
|
14
|
+
var _a;
|
|
15
|
+
const { slug, keys, stage } = options;
|
|
16
|
+
const variants = keys
|
|
17
|
+
.map((key) => ` {\n key: '${key}',\n name: 'Variant ${key}',\n claim: 'What this variant argues.',\n` +
|
|
18
|
+
` cost: 'What it costs.',\n load: () => import('./variant-${key}'),\n },`)
|
|
19
|
+
.join('\n');
|
|
20
|
+
const eyebrow = `${titled((_a = slug.split('/')[0]) !== null && _a !== void 0 ? _a : '')} · ${titled(stage)}`;
|
|
21
|
+
return `import { defineCall } from '@design-explore';
|
|
22
|
+
|
|
23
|
+
export default defineCall({
|
|
24
|
+
stage: '${stage}',
|
|
25
|
+
eyebrow: '${eyebrow}',
|
|
26
|
+
headline: 'The open question, in one sentence',
|
|
27
|
+
intro: 'What the call is about, and what the variants share.',
|
|
28
|
+
frameWidth: 720,
|
|
29
|
+
variants: [
|
|
30
|
+
${variants}
|
|
31
|
+
],
|
|
32
|
+
});
|
|
33
|
+
`;
|
|
34
|
+
};
|
|
35
|
+
const FIXTURE_FILE = `export const FIXTURE = {
|
|
36
|
+
title: 'The data every variant shares',
|
|
37
|
+
};
|
|
38
|
+
`;
|
|
39
|
+
const PLACEHOLDER_STYLES = ` styles: css\`
|
|
40
|
+
.placeholder {
|
|
41
|
+
margin: 0;
|
|
42
|
+
padding: 24px;
|
|
43
|
+
font-family: system-ui, sans-serif;
|
|
44
|
+
}
|
|
45
|
+
\`,`;
|
|
46
|
+
const variantFile = (key) => `import { css, drawing, html } from '@design-explore';
|
|
47
|
+
import { FIXTURE } from './fixture';
|
|
48
|
+
|
|
49
|
+
export default drawing({
|
|
50
|
+
body: html\`<p class="placeholder">\${FIXTURE.title} · variant ${key}</p>\`,
|
|
51
|
+
${PLACEHOLDER_STYLES}
|
|
52
|
+
});
|
|
53
|
+
`;
|
|
54
|
+
const ngVariantFile = (key) => `import { css, drawing, html, ng } from '@design-explore';
|
|
55
|
+
import { FIXTURE } from './fixture';
|
|
56
|
+
|
|
57
|
+
const button = await ng(html\`<button et-button type="button">\${FIXTURE.title} · variant ${key}</button>\`, {
|
|
58
|
+
imports: ['BUTTON_IMPORTS'],
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
export default drawing({
|
|
62
|
+
body: html\`<div class="placeholder">\${button}</div>\`,
|
|
63
|
+
${PLACEHOLDER_STYLES}
|
|
64
|
+
});
|
|
65
|
+
`;
|
|
66
|
+
/**
|
|
67
|
+
* Writes a call that renders at once: `call.ts`, a shared `fixture.ts` and one drawing per variant
|
|
68
|
+
* key. Refuses a slug whose folder exists, so it never overwrites a drawing.
|
|
69
|
+
*/
|
|
70
|
+
const newCall = (options) => {
|
|
71
|
+
var _a, _b, _c, _d;
|
|
72
|
+
const { target, argv, invocation } = options;
|
|
73
|
+
const slug = argv.find((argument, index) => { var _a; return !argument.startsWith('--') && !['--variants', '--stage'].includes((_a = argv[index - 1]) !== null && _a !== void 0 ? _a : ''); });
|
|
74
|
+
const listed = argv[argv.indexOf('--variants') + 1];
|
|
75
|
+
const stage = argv.includes('--stage') ? ((_a = argv[argv.indexOf('--stage') + 1]) !== null && _a !== void 0 ? _a : '') : null;
|
|
76
|
+
const keys = argv.includes('--variants') ? (listed !== null && listed !== void 0 ? listed : '').split(',').filter(Boolean) : ['a', 'b'];
|
|
77
|
+
if (!slug || stage === null) {
|
|
78
|
+
console.error(`usage: ${invocation} new <project>/<group>/<name> --stage <stage> [--variants a,b]`);
|
|
79
|
+
return 2;
|
|
80
|
+
}
|
|
81
|
+
const segments = slug.split('/');
|
|
82
|
+
if (segments.length < 2 || !segments.every((segment) => SEGMENT.test(segment))) {
|
|
83
|
+
console.error(`BAD SLUG "${slug}" - use lowercase segments joined by "/", led by the project, e.g. app/checkout/01-summary.`);
|
|
84
|
+
return 2;
|
|
85
|
+
}
|
|
86
|
+
if (keys.length === 0 || !keys.every((key) => KEY.test(key)) || new Set(keys).size !== keys.length) {
|
|
87
|
+
console.error(`BAD VARIANTS "${listed !== null && listed !== void 0 ? listed : ''}" - give distinct lowercase keys, e.g. --variants a,b,c.`);
|
|
88
|
+
return 2;
|
|
89
|
+
}
|
|
90
|
+
if (!exports.CALL_STAGES.includes(stage)) {
|
|
91
|
+
console.error(`BAD STAGE "${stage}" - use one of ${exports.CALL_STAGES.join(', ')}.`);
|
|
92
|
+
return 2;
|
|
93
|
+
}
|
|
94
|
+
const folder = (0, path_1.join)((0, paths_1.callsRootOf)(target), ...segments);
|
|
95
|
+
const project = segments[0];
|
|
96
|
+
const projects = (_c = (_b = (0, paths_1.readConfig)(target)) === null || _b === void 0 ? void 0 : _b.projects) !== null && _c !== void 0 ? _c : {};
|
|
97
|
+
const rendersComponents = Boolean((_d = projects[project]) === null || _d === void 0 ? void 0 : _d.providers);
|
|
98
|
+
if ((0, fs_1.existsSync)(folder)) {
|
|
99
|
+
console.error(`CALL EXISTS - ${(0, path_1.relative)(target, folder)} is already there. Pick another slug.`);
|
|
100
|
+
return 1;
|
|
101
|
+
}
|
|
102
|
+
(0, fs_1.mkdirSync)(folder, { recursive: true });
|
|
103
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(folder, 'call.ts'), callFile({ slug, keys, stage }));
|
|
104
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(folder, 'fixture.ts'), FIXTURE_FILE);
|
|
105
|
+
for (const key of keys) {
|
|
106
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(folder, `variant-${key}.ts`), rendersComponents ? ngVariantFile(key) : variantFile(key));
|
|
107
|
+
}
|
|
108
|
+
(0, status_1.writeStatus)({ checkout: target, slug, state: 'scaffolded' });
|
|
109
|
+
if (!(project in projects)) {
|
|
110
|
+
console.warn(`note: config.json names no project "${project}", so its drawings get no styles and no \`providers\`, ` +
|
|
111
|
+
'and the variants draw plain html instead of real components through ng().');
|
|
112
|
+
}
|
|
113
|
+
else if (!rendersComponents) {
|
|
114
|
+
console.warn(`note: project "${project}" sets no \`providers\` in config.json, so the variants draw plain html. ` +
|
|
115
|
+
'Name a providers module to render real components through ng().');
|
|
116
|
+
}
|
|
117
|
+
console.log([
|
|
118
|
+
`wrote ${(0, path_1.relative)(target, folder)}: call.ts, fixture.ts, ${keys.map((key) => `variant-${key}.ts`).join(', ')}`,
|
|
119
|
+
`next: ${invocation} check --call ${slug}`,
|
|
120
|
+
].join('\n'));
|
|
121
|
+
return 0;
|
|
122
|
+
};
|
|
123
|
+
exports.newCall = newCall;
|
|
124
|
+
//# sourceMappingURL=new-call.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new-call.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/new-call.ts"],"names":[],"mappings":";;;AAAA,2BAA0D;AAC1D,+BAAsC;AACtC,mCAAkD;AAClD,qCAAuC;AAEvC,MAAM,OAAO,GAAG,sBAAsB,CAAC;AAEvC,8FAA8F;AACjF,QAAA,WAAW,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAChH,MAAM,GAAG,GAAG,mBAAmB,CAAC;AAEhC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;AAEtG,MAAM,QAAQ,GAAG,CAAC,OAAwD,EAAE,EAAE;;IAC5E,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI;SAClB,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CACN,sBAAsB,GAAG,4BAA4B,GAAG,iDAAiD;QACzG,sEAAsE,GAAG,aAAa,CACzF;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAEzE,OAAO;;;YAGG,KAAK;cACH,OAAO;;;;;EAKnB,QAAQ;;;CAGT,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG;;;CAGpB,CAAC;AAEF,MAAM,kBAAkB,GAAG;;;;;;MAMrB,CAAC;AAEP,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC;;;;mEAI8B,GAAG;EACpE,kBAAkB;;CAEnB,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC;;;4FAGqD,GAAG;;;;;;EAM7F,kBAAkB;;CAEnB,CAAC;AAEF;;;GAGG;AACI,MAAM,OAAO,GAAG,CAAC,OAA+D,EAAE,EAAE;;IACzF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CACpB,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,WAAC,OAAA,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,mCAAI,EAAE,CAAC,CAAA,EAAA,CAC9G,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,mCAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAElG,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,UAAU,UAAU,gEAAgE,CAAC,CAAC;QAEpG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC/E,OAAO,CAAC,KAAK,CACX,aAAa,IAAI,6FAA6F,CAC/G,CAAC;QAEF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACnG,OAAO,CAAC,KAAK,CAAC,iBAAiB,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,0DAA0D,CAAC,CAAC;QAEvG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,mBAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,cAAc,KAAK,kBAAkB,mBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE9E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,IAAA,mBAAW,EAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAW,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAA,MAAA,IAAA,kBAAU,EAAC,MAAM,CAAC,0CAAE,QAAQ,mCAAI,EAAE,CAAC;IACpD,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAA,QAAQ,CAAC,OAAO,CAAC,0CAAE,SAAS,CAAC,CAAC;IAEhE,IAAI,IAAA,eAAU,EAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAA,eAAQ,EAAC,MAAM,EAAE,MAAM,CAAC,uCAAuC,CAAC,CAAC;QAEhG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAA,cAAS,EAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,IAAA,kBAAa,EAAC,IAAA,WAAI,EAAC,MAAM,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACxE,IAAA,kBAAa,EAAC,IAAA,WAAI,EAAC,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;IAExD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAA,kBAAa,EAAC,IAAA,WAAI,EAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9G,CAAC;IAED,IAAA,oBAAW,EAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;IAE7D,IAAI,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CACV,uCAAuC,OAAO,yDAAyD;YACrG,2EAA2E,CAC9E,CAAC;IACJ,CAAC;SAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CACV,kBAAkB,OAAO,2EAA2E;YAClG,iEAAiE,CACpE,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CACT;QACE,SAAS,IAAA,eAAQ,EAAC,MAAM,EAAE,MAAM,CAAC,0BAA0B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC9G,SAAS,UAAU,iBAAiB,IAAI,EAAE;KAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IAEF,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AA9EW,QAAA,OAAO,WA8ElB"}
|
|
@@ -1,18 +1,39 @@
|
|
|
1
1
|
/** Where every repository keeps its design work. The layout is convention, not configuration. */
|
|
2
2
|
export declare const DESIGN_DIR = ".ethlete/design";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* One project's drawing environment: the stylesheets a frame loads, the markup it puts in `<head>`,
|
|
5
|
+
* the module whose default export is the Angular providers array `ng()` renders under, and the
|
|
6
|
+
* surface and colour theme names a call can be drawn under. The first name of each list is the default.
|
|
7
|
+
*/
|
|
4
8
|
export type DesignProject = {
|
|
5
9
|
styles?: string[];
|
|
6
10
|
head?: string;
|
|
11
|
+
providers?: string;
|
|
12
|
+
themes?: DesignThemes;
|
|
13
|
+
};
|
|
14
|
+
export type DesignThemes = {
|
|
15
|
+
surface?: string[];
|
|
16
|
+
color?: string[];
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Where `ng()` takes its code from. `packages` maps a package pattern to a checkout path, for
|
|
20
|
+
* example `{ "@ethlete/*": "dist/libs/*" }`; a drawing's subpath imports such as
|
|
21
|
+
* `@ethlete/core/design/theme-css` load from the mapped folder too. `modules` names the packages an
|
|
22
|
+
* import name is looked up in, `['@ethlete/components', '@ethlete/core']` when left out.
|
|
23
|
+
*/
|
|
24
|
+
export type DesignRenderConfig = {
|
|
25
|
+
packages?: Record<string, string>;
|
|
26
|
+
modules?: string[];
|
|
7
27
|
};
|
|
8
28
|
export type DesignConfig = {
|
|
9
29
|
port?: number;
|
|
10
30
|
defaultCall?: string;
|
|
31
|
+
render?: DesignRenderConfig;
|
|
11
32
|
projects?: Record<string, DesignProject>;
|
|
12
33
|
};
|
|
13
34
|
export declare const DEFAULT_PORT = 4402;
|
|
14
35
|
/**
|
|
15
|
-
* The package's own `design` folder, which carries the
|
|
36
|
+
* The package's own `design` folder, which carries the frame page and the authoring API. It sits
|
|
16
37
|
* three levels above this file both in the source tree and in the build output.
|
|
17
38
|
*/
|
|
18
39
|
export declare const assetRoot: () => string;
|
package/src/lib/design/paths.js
CHANGED
|
@@ -7,7 +7,7 @@ const path_1 = require("path");
|
|
|
7
7
|
exports.DESIGN_DIR = '.ethlete/design';
|
|
8
8
|
exports.DEFAULT_PORT = 4402;
|
|
9
9
|
/**
|
|
10
|
-
* The package's own `design` folder, which carries the
|
|
10
|
+
* The package's own `design` folder, which carries the frame page and the authoring API. It sits
|
|
11
11
|
* three levels above this file both in the source tree and in the build output.
|
|
12
12
|
*/
|
|
13
13
|
const assetRoot = () => (0, path_1.resolve)(__dirname, '../../../design');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/paths.ts"],"names":[],"mappings":";;;AAAA,2BAA8C;AAC9C,+BAA+B;AAE/B,iGAAiG;AACpF,QAAA,UAAU,GAAG,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/paths.ts"],"names":[],"mappings":";;;AAAA,2BAA8C;AAC9C,+BAA+B;AAE/B,iGAAiG;AACpF,QAAA,UAAU,GAAG,iBAAiB,CAAC;AAqC/B,QAAA,YAAY,GAAG,IAAI,CAAC;AAEjC;;;GAGG;AACI,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAA,cAAO,EAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAAxD,QAAA,SAAS,aAA+C;AAE9D,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAA,cAAO,EAAC,MAAM,EAAE,kBAAU,EAAE,aAAa,CAAC,CAAC;AAA9E,QAAA,YAAY,gBAAkE;AAEpF,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAA,cAAO,EAAC,MAAM,EAAE,kBAAU,EAAE,OAAO,CAAC,CAAC;AAAvE,QAAA,WAAW,eAA4D;AAEpF,8FAA8F;AACvF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAA,cAAO,EAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;AAAjF,QAAA,UAAU,cAAuE;AAEvF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAuB,EAAE;IAChE,MAAM,IAAI,GAAG,IAAA,oBAAY,EAAC,MAAM,CAAC,CAAC;IAElC,IAAI,CAAC,IAAA,eAAU,EAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAiB,CAAC;AAChE,CAAC,CAAC;AANW,QAAA,UAAU,cAMrB;AAEK,MAAM,MAAM,GAAG,CAAC,MAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,oBAAY,CAAC;AAAjG,QAAA,MAAM,UAA2F"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type FieldErrorSpec = string | {
|
|
2
|
+
kind: string;
|
|
3
|
+
message?: string;
|
|
4
|
+
};
|
|
5
|
+
export type FieldSpec = {
|
|
6
|
+
value: unknown;
|
|
7
|
+
errors?: FieldErrorSpec[];
|
|
8
|
+
touched?: boolean;
|
|
9
|
+
};
|
|
10
|
+
type SignalForms = {
|
|
11
|
+
form: (model: unknown, schema: (path: Record<string, unknown>) => void) => Record<string, () => FieldStateLike>;
|
|
12
|
+
validate: (path: unknown, logic: () => {
|
|
13
|
+
kind: string;
|
|
14
|
+
message?: string;
|
|
15
|
+
}[]) => void;
|
|
16
|
+
};
|
|
17
|
+
type FieldStateLike = {
|
|
18
|
+
markAsTouched: () => void;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* A signal form tree with one field per entry of `specs`, each holding its value, its fixed
|
|
22
|
+
* errors and its touched state. Must run in an injection context.
|
|
23
|
+
*/
|
|
24
|
+
export declare const buildFields: (options: {
|
|
25
|
+
specs: Record<string, FieldSpec>;
|
|
26
|
+
forms: SignalForms;
|
|
27
|
+
signal: <T>(value: T) => unknown;
|
|
28
|
+
}) => Record<string, () => FieldStateLike>;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildFields = void 0;
|
|
4
|
+
const toError = (error) => (typeof error === 'string' ? { kind: error } : error);
|
|
5
|
+
/**
|
|
6
|
+
* A signal form tree with one field per entry of `specs`, each holding its value, its fixed
|
|
7
|
+
* errors and its touched state. Must run in an injection context.
|
|
8
|
+
*/
|
|
9
|
+
const buildFields = (options) => {
|
|
10
|
+
const { specs, forms, signal } = options;
|
|
11
|
+
const entries = Object.entries(specs);
|
|
12
|
+
const model = signal(Object.fromEntries(entries.map(([name, spec]) => [name, spec.value])));
|
|
13
|
+
const tree = forms.form(model, (path) => {
|
|
14
|
+
var _a;
|
|
15
|
+
for (const [name, spec] of entries) {
|
|
16
|
+
const errors = ((_a = spec.errors) !== null && _a !== void 0 ? _a : []).map(toError);
|
|
17
|
+
if (errors.length > 0)
|
|
18
|
+
forms.validate(path[name], () => errors);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
// A field tree is a proxy whose every property is a child field, so `field?.()` breaks once it
|
|
22
|
+
// is compiled down to `field.call(...)`.
|
|
23
|
+
for (const [name, spec] of entries) {
|
|
24
|
+
const field = tree[name];
|
|
25
|
+
if (spec.touched && field)
|
|
26
|
+
field().markAsTouched();
|
|
27
|
+
}
|
|
28
|
+
return tree;
|
|
29
|
+
};
|
|
30
|
+
exports.buildFields = buildFields;
|
|
31
|
+
//# sourceMappingURL=render-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-fields.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/render-fields.ts"],"names":[],"mappings":";;;AAWA,MAAM,OAAO,GAAG,CAAC,KAAqB,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAEjG;;;GAGG;AACI,MAAM,WAAW,GAAG,CAAC,OAI3B,EAAE,EAAE;IACH,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;;QACtC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,CAAC,MAAA,IAAI,CAAC,MAAM,mCAAI,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEhD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,+FAA+F;IAC/F,yCAAyC;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK;YAAE,KAAK,EAAE,CAAC,aAAa,EAAE,CAAC;IACrD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAzBW,QAAA,WAAW,eAyBtB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { FieldSpec } from './render-fields';
|
|
2
|
+
export declare const DEFAULT_RENDER_MODULES: string[];
|
|
3
|
+
export type RenderWorkerData = {
|
|
4
|
+
target: string;
|
|
5
|
+
packages: Record<string, string>;
|
|
6
|
+
modules: string[];
|
|
7
|
+
};
|
|
8
|
+
export type RenderRequest = {
|
|
9
|
+
id: number;
|
|
10
|
+
template: string;
|
|
11
|
+
imports: string[];
|
|
12
|
+
fields: Record<string, FieldSpec> | null;
|
|
13
|
+
providers: string | null;
|
|
14
|
+
};
|
|
15
|
+
export type RenderResult = {
|
|
16
|
+
markup: string;
|
|
17
|
+
styles: string[];
|
|
18
|
+
} | {
|
|
19
|
+
error: string;
|
|
20
|
+
};
|
|
21
|
+
export type RenderResponse = RenderResult & {
|
|
22
|
+
id: number;
|
|
23
|
+
watched: Record<string, number>;
|
|
24
|
+
};
|
|
25
|
+
export type MappedPackage = {
|
|
26
|
+
dir: string;
|
|
27
|
+
subpath: string;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* The checkout folder a bare specifier is mapped to by `render.packages`, and the export subpath
|
|
31
|
+
* inside it. `@ethlete/*` → `dist/libs/*` maps `@ethlete/core/design` to `dist/libs/core` and `./design`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const mapPackage: (options: {
|
|
34
|
+
specifier: string;
|
|
35
|
+
packages: Record<string, string>;
|
|
36
|
+
target: string;
|
|
37
|
+
}) => MappedPackage | null;
|
|
38
|
+
/** The file a mapped package exports at its subpath, read from its own `package.json` exports. */
|
|
39
|
+
export declare const entryOf: (mapped: MappedPackage) => string;
|
|
40
|
+
/**
|
|
41
|
+
* The file a drawing's subpath import of a mapped package loads in the browser, or null to leave it
|
|
42
|
+
* to the checkout. The root stays with the checkout: the browser has its own `@angular/core`.
|
|
43
|
+
*/
|
|
44
|
+
export declare const mappedSubpathOf: (options: {
|
|
45
|
+
specifier: string;
|
|
46
|
+
packages: Record<string, string>;
|
|
47
|
+
target: string;
|
|
48
|
+
}) => string | null;
|
|
49
|
+
/** The values behind the names a call imports, each from the first module that exports it. */
|
|
50
|
+
export declare const lookupImports: (options: {
|
|
51
|
+
names: string[];
|
|
52
|
+
modules: Record<string, Record<string, unknown>>;
|
|
53
|
+
}) => unknown[];
|
|
54
|
+
/**
|
|
55
|
+
* The inner markup of the render host followed by what the app attached to `<body>` after it (an
|
|
56
|
+
* open overlay, shown: positioning never runs on the server), and the text of every `<style>` tag.
|
|
57
|
+
*/
|
|
58
|
+
export declare const extractRender: (document: string) => {
|
|
59
|
+
markup: string;
|
|
60
|
+
styles: string[];
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* The tsconfig `paths` that type a mapped package's imports from the folder `ng()` loads it from:
|
|
64
|
+
* the root and every subpath its `exports` types, so `@ethlete/core/design/theme-css` resolves too.
|
|
65
|
+
*/
|
|
66
|
+
export declare const typePathsOf: (options: {
|
|
67
|
+
packages: Record<string, string>;
|
|
68
|
+
target: string;
|
|
69
|
+
}) => Record<string, string[]>;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.typePathsOf = exports.extractRender = exports.lookupImports = exports.mappedSubpathOf = exports.entryOf = exports.mapPackage = exports.DEFAULT_RENDER_MODULES = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
exports.DEFAULT_RENDER_MODULES = ['@ethlete/components', '@ethlete/core'];
|
|
7
|
+
const packageNameLength = (specifier) => {
|
|
8
|
+
const segments = specifier.split('/');
|
|
9
|
+
return (specifier.startsWith('@') ? segments.slice(0, 2) : segments.slice(0, 1)).join('/').length;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* The checkout folder a bare specifier is mapped to by `render.packages`, and the export subpath
|
|
13
|
+
* inside it. `@ethlete/*` → `dist/libs/*` maps `@ethlete/core/design` to `dist/libs/core` and `./design`.
|
|
14
|
+
*/
|
|
15
|
+
const mapPackage = (options) => {
|
|
16
|
+
const { specifier, packages, target } = options;
|
|
17
|
+
const nameLength = packageNameLength(specifier);
|
|
18
|
+
const name = specifier.slice(0, nameLength);
|
|
19
|
+
const subpath = `.${specifier.slice(nameLength)}`;
|
|
20
|
+
for (const [pattern, path] of Object.entries(packages)) {
|
|
21
|
+
if (pattern === name)
|
|
22
|
+
return { dir: (0, path_1.resolve)(target, path), subpath };
|
|
23
|
+
if (pattern.endsWith('*') && name.startsWith(pattern.slice(0, -1))) {
|
|
24
|
+
const rest = name.slice(pattern.length - 1);
|
|
25
|
+
if (rest !== '' && !rest.includes('/'))
|
|
26
|
+
return { dir: (0, path_1.resolve)(target, path.replace('*', rest)), subpath };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
};
|
|
31
|
+
exports.mapPackage = mapPackage;
|
|
32
|
+
const CONDITIONS = ['node', 'import', 'default'];
|
|
33
|
+
const pick = (value) => {
|
|
34
|
+
var _a;
|
|
35
|
+
if (typeof value === 'string')
|
|
36
|
+
return value;
|
|
37
|
+
if (Array.isArray(value))
|
|
38
|
+
return (_a = value.map(pick).find((found) => found !== null)) !== null && _a !== void 0 ? _a : null;
|
|
39
|
+
if (!value)
|
|
40
|
+
return null;
|
|
41
|
+
for (const condition of CONDITIONS) {
|
|
42
|
+
const found = pick(value[condition]);
|
|
43
|
+
if (found)
|
|
44
|
+
return found;
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
};
|
|
48
|
+
const exportOf = (exports, subpath) => {
|
|
49
|
+
if (subpath in exports)
|
|
50
|
+
return pick(exports[subpath]);
|
|
51
|
+
for (const [key, value] of Object.entries(exports)) {
|
|
52
|
+
const [prefix, suffix, extra] = key.split('*');
|
|
53
|
+
if (prefix === undefined || suffix === undefined || extra !== undefined)
|
|
54
|
+
continue;
|
|
55
|
+
if (!subpath.startsWith(prefix) || !subpath.endsWith(suffix))
|
|
56
|
+
continue;
|
|
57
|
+
const found = pick(value);
|
|
58
|
+
const star = subpath.slice(prefix.length, subpath.length - suffix.length);
|
|
59
|
+
if (found)
|
|
60
|
+
return found.replace('*', star);
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
};
|
|
64
|
+
/** The file a mapped package exports at its subpath, read from its own `package.json` exports. */
|
|
65
|
+
const entryOf = (mapped) => {
|
|
66
|
+
var _a, _b;
|
|
67
|
+
const { dir, subpath } = mapped;
|
|
68
|
+
const manifestPath = (0, path_1.resolve)(dir, 'package.json');
|
|
69
|
+
if (!(0, fs_1.existsSync)(manifestPath)) {
|
|
70
|
+
throw new Error(`design-explore: ${dir} has no package.json - build the package first.`);
|
|
71
|
+
}
|
|
72
|
+
const manifest = JSON.parse((0, fs_1.readFileSync)(manifestPath, 'utf8'));
|
|
73
|
+
const exported = manifest.exports ? exportOf(manifest.exports, subpath) : null;
|
|
74
|
+
const fallback = subpath === '.' ? ((_b = (_a = manifest.module) !== null && _a !== void 0 ? _a : manifest.main) !== null && _b !== void 0 ? _b : null) : null;
|
|
75
|
+
const file = exported !== null && exported !== void 0 ? exported : fallback;
|
|
76
|
+
if (!file)
|
|
77
|
+
throw new Error(`design-explore: ${dir} exports no "${subpath}".`);
|
|
78
|
+
return (0, path_1.resolve)(dir, file);
|
|
79
|
+
};
|
|
80
|
+
exports.entryOf = entryOf;
|
|
81
|
+
/**
|
|
82
|
+
* The file a drawing's subpath import of a mapped package loads in the browser, or null to leave it
|
|
83
|
+
* to the checkout. The root stays with the checkout: the browser has its own `@angular/core`.
|
|
84
|
+
*/
|
|
85
|
+
const mappedSubpathOf = (options) => {
|
|
86
|
+
const mapped = (0, exports.mapPackage)(options);
|
|
87
|
+
if (!mapped || mapped.subpath === '.')
|
|
88
|
+
return null;
|
|
89
|
+
try {
|
|
90
|
+
return (0, exports.entryOf)(mapped);
|
|
91
|
+
}
|
|
92
|
+
catch (_a) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
exports.mappedSubpathOf = mappedSubpathOf;
|
|
97
|
+
/** The values behind the names a call imports, each from the first module that exports it. */
|
|
98
|
+
const lookupImports = (options) => {
|
|
99
|
+
const { names, modules } = options;
|
|
100
|
+
return names.map((name) => {
|
|
101
|
+
const found = Object.values(modules).find((exported) => name in exported);
|
|
102
|
+
if (!found) {
|
|
103
|
+
throw new Error(`design-explore: no import "${name}" in ${Object.keys(modules).join(', ')}.`);
|
|
104
|
+
}
|
|
105
|
+
return found[name];
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
exports.lookupImports = lookupImports;
|
|
109
|
+
/**
|
|
110
|
+
* The inner markup of the render host followed by what the app attached to `<body>` after it (an
|
|
111
|
+
* open overlay, shown: positioning never runs on the server), and the text of every `<style>` tag.
|
|
112
|
+
*/
|
|
113
|
+
const extractRender = (document) => {
|
|
114
|
+
var _a, _b;
|
|
115
|
+
const host = /<et-design-host[^>]*>([\s\S]*)<\/et-design-host>([\s\S]*?)<\/body>/.exec(document);
|
|
116
|
+
const attached = ((_a = host === null || host === void 0 ? void 0 : host[2]) !== null && _a !== void 0 ? _a : '')
|
|
117
|
+
.replace(/<script[\s\S]*?<\/script>/g, '')
|
|
118
|
+
.replace(/(class="[^"]*?)\s*\bet-force-invisible\b/g, '$1');
|
|
119
|
+
const markup = ((_b = host === null || host === void 0 ? void 0 : host[1]) !== null && _b !== void 0 ? _b : '') + attached.trim();
|
|
120
|
+
const styles = [...document.matchAll(/<style[^>]*>([\s\S]*?)<\/style>/g)].map((match) => { var _a; return (_a = match[1]) !== null && _a !== void 0 ? _a : ''; });
|
|
121
|
+
return { markup: markup.replace(/<!--container-->/g, ''), styles };
|
|
122
|
+
};
|
|
123
|
+
exports.extractRender = extractRender;
|
|
124
|
+
const typesOf = (value) => {
|
|
125
|
+
var _a;
|
|
126
|
+
if (typeof value === 'string')
|
|
127
|
+
return value;
|
|
128
|
+
return (_a = value === null || value === void 0 ? void 0 : value.types) !== null && _a !== void 0 ? _a : null;
|
|
129
|
+
};
|
|
130
|
+
/** Each export subpath of a built package that carries types, as a `[subpath, file]` pair. */
|
|
131
|
+
const typedExportsOf = (dir) => {
|
|
132
|
+
var _a, _b;
|
|
133
|
+
const manifestPath = (0, path_1.resolve)(dir, 'package.json');
|
|
134
|
+
if (!(0, fs_1.existsSync)(manifestPath))
|
|
135
|
+
return [];
|
|
136
|
+
const manifest = JSON.parse((0, fs_1.readFileSync)(manifestPath, 'utf8'));
|
|
137
|
+
const entries = Object.entries((_a = manifest.exports) !== null && _a !== void 0 ? _a : {}).flatMap(([subpath, value]) => {
|
|
138
|
+
const types = subpath === './package.json' ? null : typesOf(value);
|
|
139
|
+
return types ? [[subpath, types]] : [];
|
|
140
|
+
});
|
|
141
|
+
const root = (_b = manifest.types) !== null && _b !== void 0 ? _b : manifest.typings;
|
|
142
|
+
return entries.some(([subpath]) => subpath === '.') || !root ? entries : [...entries, ['.', root]];
|
|
143
|
+
};
|
|
144
|
+
const readdirSafe = (dir) => ((0, fs_1.existsSync)(dir) ? (0, fs_1.readdirSync)(dir) : []);
|
|
145
|
+
/**
|
|
146
|
+
* The tsconfig `paths` that type a mapped package's imports from the folder `ng()` loads it from:
|
|
147
|
+
* the root and every subpath its `exports` types, so `@ethlete/core/design/theme-css` resolves too.
|
|
148
|
+
*/
|
|
149
|
+
const typePathsOf = (options) => {
|
|
150
|
+
const { packages, target } = options;
|
|
151
|
+
const paths = {};
|
|
152
|
+
for (const [pattern, path] of Object.entries(packages)) {
|
|
153
|
+
const names = pattern.endsWith('*')
|
|
154
|
+
? readdirSafe((0, path_1.resolve)(target, path.slice(0, path.indexOf('*')))).map((name) => [
|
|
155
|
+
pattern.replace('*', name),
|
|
156
|
+
(0, path_1.resolve)(target, path.replace('*', name)),
|
|
157
|
+
])
|
|
158
|
+
: [[pattern, (0, path_1.resolve)(target, path)]];
|
|
159
|
+
for (const [name, dir] of names) {
|
|
160
|
+
for (const [subpath, types] of typedExportsOf(dir)) {
|
|
161
|
+
paths[`${name}${subpath.slice(1)}`] = [(0, path_1.resolve)(dir, types)];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return paths;
|
|
166
|
+
};
|
|
167
|
+
exports.typePathsOf = typePathsOf;
|
|
168
|
+
//# sourceMappingURL=render-packages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-packages.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/render-packages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|