@ethlete/cli 3.0.0-next.18 → 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.
Files changed (107) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/design/css-inline.d.ts +4 -0
  3. package/design/define-call.ts +228 -3
  4. package/design/web/env.d.ts +2 -1
  5. package/design/web/frame.ts +51 -6
  6. package/package.json +27 -3
  7. package/src/index.js +26 -4
  8. package/src/index.js.map +1 -1
  9. package/src/lib/api/clear.js +10 -2
  10. package/src/lib/api/clear.js.map +1 -1
  11. package/src/lib/api/index.js +33 -20
  12. package/src/lib/api/index.js.map +1 -1
  13. package/src/lib/api/lock.js +11 -3
  14. package/src/lib/api/lock.js.map +1 -1
  15. package/src/lib/api/ports.js +12 -4
  16. package/src/lib/api/ports.js.map +1 -1
  17. package/src/lib/api/run-locked.js +10 -2
  18. package/src/lib/api/run-locked.js.map +1 -1
  19. package/src/lib/api/run-ready.js +12 -4
  20. package/src/lib/api/run-ready.js.map +1 -1
  21. package/src/lib/api/run-snapshot.js +10 -2
  22. package/src/lib/api/run-snapshot.js.map +1 -1
  23. package/src/lib/api/run.js +13 -5
  24. package/src/lib/api/run.js.map +1 -1
  25. package/src/lib/api/snapshot.js +13 -5
  26. package/src/lib/api/snapshot.js.map +1 -1
  27. package/src/lib/auth/auth-command.js +10 -2
  28. package/src/lib/auth/auth-command.js.map +1 -1
  29. package/src/lib/auth/gitlab-token.js +12 -4
  30. package/src/lib/auth/gitlab-token.js.map +1 -1
  31. package/src/lib/auth/index.js +18 -5
  32. package/src/lib/auth/index.js.map +1 -1
  33. package/src/lib/config/index.js +16 -3
  34. package/src/lib/config/index.js.map +1 -1
  35. package/src/lib/design/browser.d.ts +9 -0
  36. package/src/lib/design/browser.js +37 -0
  37. package/src/lib/design/browser.js.map +1 -0
  38. package/src/lib/design/calls-tsconfig.js +6 -2
  39. package/src/lib/design/calls-tsconfig.js.map +1 -1
  40. package/src/lib/design/check.d.ts +2 -1
  41. package/src/lib/design/check.js +151 -69
  42. package/src/lib/design/check.js.map +1 -1
  43. package/src/lib/design/design-command.d.ts +1 -1
  44. package/src/lib/design/design-command.js +58 -3
  45. package/src/lib/design/design-command.js.map +1 -1
  46. package/src/lib/design/index.js +19 -6
  47. package/src/lib/design/index.js.map +1 -1
  48. package/src/lib/design/legacy.d.ts +9 -0
  49. package/src/lib/design/legacy.js +52 -0
  50. package/src/lib/design/legacy.js.map +1 -0
  51. package/src/lib/design/missing-package.d.ts +2 -0
  52. package/src/lib/design/missing-package.js +15 -0
  53. package/src/lib/design/missing-package.js.map +1 -0
  54. package/src/lib/design/new-call.d.ts +11 -0
  55. package/src/lib/design/new-call.js +124 -0
  56. package/src/lib/design/new-call.js.map +1 -0
  57. package/src/lib/design/paths.d.ts +23 -2
  58. package/src/lib/design/paths.js +1 -1
  59. package/src/lib/design/paths.js.map +1 -1
  60. package/src/lib/design/render-fields.d.ts +29 -0
  61. package/src/lib/design/render-fields.js +31 -0
  62. package/src/lib/design/render-fields.js.map +1 -0
  63. package/src/lib/design/render-packages.d.ts +69 -0
  64. package/src/lib/design/render-packages.js +168 -0
  65. package/src/lib/design/render-packages.js.map +1 -0
  66. package/src/lib/design/render-worker.d.ts +1 -0
  67. package/src/lib/design/render-worker.js +149 -0
  68. package/src/lib/design/render-worker.js.map +1 -0
  69. package/src/lib/design/render.d.ts +23 -0
  70. package/src/lib/design/render.js +119 -0
  71. package/src/lib/design/render.js.map +1 -0
  72. package/src/lib/design/serve.d.ts +1 -1
  73. package/src/lib/design/serve.js +49 -12
  74. package/src/lib/design/serve.js.map +1 -1
  75. package/src/lib/design/ssr-shims.d.ts +10 -0
  76. package/src/lib/design/ssr-shims.js +128 -0
  77. package/src/lib/design/ssr-shims.js.map +1 -0
  78. package/src/lib/design/stamp.d.ts +16 -0
  79. package/src/lib/design/stamp.js +77 -0
  80. package/src/lib/design/stamp.js.map +1 -0
  81. package/src/lib/design/status.d.ts +33 -0
  82. package/src/lib/design/status.js +58 -0
  83. package/src/lib/design/status.js.map +1 -0
  84. package/src/lib/design/system-use.d.ts +23 -0
  85. package/src/lib/design/system-use.js +61 -0
  86. package/src/lib/design/system-use.js.map +1 -0
  87. package/src/lib/doctor/index.js +15 -2
  88. package/src/lib/doctor/index.js.map +1 -1
  89. package/src/lib/index.js +22 -9
  90. package/src/lib/index.js.map +1 -1
  91. package/src/lib/release.js +10 -2
  92. package/src/lib/release.js.map +1 -1
  93. package/src/lib/update/agent-setup.js +11 -3
  94. package/src/lib/update/agent-setup.js.map +1 -1
  95. package/src/lib/update/ai.js +13 -5
  96. package/src/lib/update/ai.js.map +1 -1
  97. package/src/lib/update/index.js +32 -19
  98. package/src/lib/update/index.js.map +1 -1
  99. package/src/lib/update/registry.js +10 -2
  100. package/src/lib/update/registry.js.map +1 -1
  101. package/src/lib/update/update-command.js +16 -8
  102. package/src/lib/update/update-command.js.map +1 -1
  103. package/src/lib/utils.js +11 -3
  104. package/src/lib/utils.js.map +1 -1
  105. package/design/web/host.css +0 -494
  106. package/design/web/host.ts +0 -445
  107. package/design/web/index.html +0 -11
@@ -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 {};
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const fs_1 = require("fs");
13
+ const module_1 = require("module");
14
+ const path_1 = require("path");
15
+ const url_1 = require("url");
16
+ const missing_package_1 = require("./missing-package");
17
+ const render_fields_1 = require("./render-fields");
18
+ const ssr_shims_1 = require("./ssr-shims");
19
+ const worker_threads_1 = require("worker_threads");
20
+ const render_packages_1 = require("./render-packages");
21
+ const HOST_DOCUMENT = '<html><head></head><body><et-design-host></et-design-host></body></html>';
22
+ const { target, packages, modules: moduleNames } = worker_threads_1.workerData;
23
+ const targetUrl = (0, url_1.pathToFileURL)((0, path_1.resolve)(target, 'package.json')).href;
24
+ const watched = {};
25
+ const watch = (url) => {
26
+ var _a;
27
+ if (!url.startsWith('file:'))
28
+ return;
29
+ const path = (0, url_1.fileURLToPath)(url);
30
+ (_a = watched[path]) !== null && _a !== void 0 ? _a : (watched[path] = (0, fs_1.statSync)(path).mtimeMs);
31
+ };
32
+ const ownsSpecifier = (specifier) => specifier.startsWith('@angular/') || specifier.startsWith('@ethlete/') || moduleNames.includes(specifier);
33
+ /** A call file imports its siblings without an extension, as a bundler resolves them. Node does not. */
34
+ const resolveRelativeTs = (options) => {
35
+ var _a;
36
+ const { specifier, context, nextResolve } = options;
37
+ try {
38
+ return nextResolve(specifier, context);
39
+ }
40
+ catch (error) {
41
+ if (!specifier.startsWith('.') || !((_a = context.parentURL) === null || _a === void 0 ? void 0 : _a.endsWith('.ts')))
42
+ throw error;
43
+ return nextResolve(`${specifier}.ts`, context);
44
+ }
45
+ };
46
+ // Every `@angular/*` and `@ethlete/*` import resolves from the target checkout, wherever it is
47
+ // written: a second copy of `@angular/core` breaks dependency injection.
48
+ (0, module_1.registerHooks)({
49
+ // eslint-disable-next-line max-params -- the arity of Node's resolve hook
50
+ resolve: (specifier, context, nextResolve) => {
51
+ const mapped = (0, render_packages_1.mapPackage)({ specifier, packages, target });
52
+ if (mapped) {
53
+ const url = (0, url_1.pathToFileURL)((0, render_packages_1.entryOf)(mapped)).href;
54
+ watch(url);
55
+ return { url, shortCircuit: true };
56
+ }
57
+ if (!ownsSpecifier(specifier)) {
58
+ const resolved = resolveRelativeTs({ specifier, context, nextResolve });
59
+ if (resolved.url.endsWith('.ts') && !resolved.url.includes('/node_modules/'))
60
+ watch(resolved.url);
61
+ return resolved;
62
+ }
63
+ const resolved = nextResolve(specifier, Object.assign(Object.assign({}, context), { parentURL: targetUrl }));
64
+ if (specifier.startsWith('@ethlete/'))
65
+ watch(resolved.url);
66
+ return resolved;
67
+ },
68
+ });
69
+ const explainMissing = (load) => __awaiter(void 0, void 0, void 0, function* () {
70
+ try {
71
+ return yield load();
72
+ }
73
+ catch (error) {
74
+ const message = (0, missing_package_1.missingPackageMessage)(error, target);
75
+ throw message ? Object.assign(new Error(message), { cause: error }) : error;
76
+ }
77
+ });
78
+ // Domino has no layout and no `window`; an open overlay measures its trigger, and @floating-ui/dom
79
+ // falls back to the global `window` when one is missing.
80
+ const shimLayout = (server) => {
81
+ var _a;
82
+ var _b;
83
+ server.ɵDominoAdapter.makeCurrent();
84
+ (_a = (_b = globalThis).window) !== null && _a !== void 0 ? _a : (_b.window = globalThis);
85
+ (0, ssr_shims_1.shimMutationObserver)(globalThis);
86
+ (0, ssr_shims_1.keepCustomPropertyCase)(globalThis.Element.prototype);
87
+ const element = globalThis.Element;
88
+ if (element && typeof element.prototype.getBoundingClientRect !== 'function') {
89
+ const rect = { x: 0, y: 0, top: 0, left: 0, right: 0, bottom: 0, width: 0, height: 0 };
90
+ element.prototype.getBoundingClientRect = () => (Object.assign(Object.assign({}, rect), { toJSON: () => rect }));
91
+ }
92
+ };
93
+ const importAngular = () => __awaiter(void 0, void 0, void 0, function* () {
94
+ // The JIT compiler has to be loaded before any partially compiled package is evaluated.
95
+ yield import('@angular/compiler');
96
+ const [core, browser, server, modules] = yield Promise.all([
97
+ import('@angular/core'),
98
+ import('@angular/platform-browser'),
99
+ import('@angular/platform-server'),
100
+ Promise.all(moduleNames.map((name) => __awaiter(void 0, void 0, void 0, function* () { return [name, (yield import(name))]; }))).then((entries) => Object.fromEntries(entries)),
101
+ ]);
102
+ shimLayout(server);
103
+ return { core, browser, server, modules };
104
+ });
105
+ let angular = null;
106
+ const loadSignalForms = () => explainMissing(() => import('@angular/forms/signals'));
107
+ const providersOf = (path) => __awaiter(void 0, void 0, void 0, function* () {
108
+ const loaded = (yield import((0, url_1.pathToFileURL)(path).href));
109
+ if (!Array.isArray(loaded.default)) {
110
+ throw new Error(`design-explore: ${path} has no default export of an Angular providers array.`);
111
+ }
112
+ return loaded.default;
113
+ });
114
+ const render = (request) => __awaiter(void 0, void 0, void 0, function* () {
115
+ angular !== null && angular !== void 0 ? angular : (angular = explainMissing(importAngular));
116
+ const { core, browser, server, modules } = yield angular;
117
+ const providers = request.providers ? yield providersOf(request.providers) : [];
118
+ const imports = (0, render_packages_1.lookupImports)({ names: request.imports, modules });
119
+ const specs = request.fields;
120
+ const forms = specs ? yield loadSignalForms() : null;
121
+ const Host = core.Component({
122
+ selector: 'et-design-host',
123
+ template: request.template,
124
+ imports: forms ? [...imports, forms.FormField] : imports,
125
+ })(class {
126
+ constructor() {
127
+ this.fields = specs && forms ? (0, render_fields_1.buildFields)({ specs, forms: forms, signal: core.signal }) : {};
128
+ }
129
+ });
130
+ const errors = [];
131
+ const document = yield server.renderApplication((context) => browser.bootstrapApplication(Host, {
132
+ providers: [
133
+ core.provideZonelessChangeDetection(),
134
+ server.provideServerRendering(),
135
+ ...providers,
136
+ { provide: core.ErrorHandler, useValue: { handleError: (error) => errors.push(error) } },
137
+ ],
138
+ }, context), { document: HOST_DOCUMENT, url: '/' });
139
+ if (errors.length > 0)
140
+ throw errors[0];
141
+ return (0, render_packages_1.extractRender)(document);
142
+ });
143
+ const messageOf = (error) => (error instanceof Error ? error.message : String(error));
144
+ worker_threads_1.parentPort === null || worker_threads_1.parentPort === void 0 ? void 0 : worker_threads_1.parentPort.on('message', (request) => {
145
+ void render(request)
146
+ .catch((error) => ({ error: messageOf(error) }))
147
+ .then((result) => worker_threads_1.parentPort === null || worker_threads_1.parentPort === void 0 ? void 0 : worker_threads_1.parentPort.postMessage(Object.assign(Object.assign({}, result), { id: request.id, watched })));
148
+ });
149
+ //# sourceMappingURL=render-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-worker.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/render-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { IncomingMessage, ServerResponse } from 'http';
2
+ import { DesignConfig } from './paths';
3
+ import { FieldSpec } from './render-fields';
4
+ import { RenderResult } from './render-packages';
5
+ export declare const RENDER_PATH = "/__design/render";
6
+ /** Whether a file the worker loaded changed since it loaded it, so the worker holds stale code. */
7
+ export declare const isStale: (watched: Record<string, number>, mtime?: (path: string) => number) => boolean;
8
+ export type RenderAsk = {
9
+ call: string;
10
+ template: string;
11
+ imports: string[];
12
+ fields?: Record<string, FieldSpec>;
13
+ };
14
+ /**
15
+ * Renders Angular templates in a worker that loads the target checkout's own packages. The worker
16
+ * is replaced on the first request after a package it loaded was rebuilt.
17
+ */
18
+ export declare const createRenderer: (options: {
19
+ target: string;
20
+ config: DesignConfig;
21
+ }) => (ask: RenderAsk) => Promise<RenderResult>;
22
+ /** Answers `POST /__design/render` with the rendered markup and styles, or a 500 with the error. */
23
+ export declare const renderMiddleware: (render: (ask: RenderAsk) => Promise<RenderResult>) => (request: IncomingMessage, response: ServerResponse) => void;
@@ -0,0 +1,119 @@
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.renderMiddleware = exports.createRenderer = exports.isStale = exports.RENDER_PATH = void 0;
15
+ const fs_1 = require("fs");
16
+ const path_1 = require("path");
17
+ const worker_threads_1 = require("worker_threads");
18
+ const render_packages_1 = require("./render-packages");
19
+ exports.RENDER_PATH = '/__design/render';
20
+ const mtimeOf = (path) => {
21
+ try {
22
+ return (0, fs_1.statSync)(path).mtimeMs;
23
+ }
24
+ catch (_a) {
25
+ return -1;
26
+ }
27
+ };
28
+ /** Whether a file the worker loaded changed since it loaded it, so the worker holds stale code. */
29
+ const isStale = (watched, mtime = mtimeOf) => Object.entries(watched).some(([path, loaded]) => mtime(path) !== loaded);
30
+ exports.isStale = isStale;
31
+ /**
32
+ * Renders Angular templates in a worker that loads the target checkout's own packages. The worker
33
+ * is replaced on the first request after a package it loaded was rebuilt.
34
+ */
35
+ const createRenderer = (options) => {
36
+ var _a, _b, _c, _d;
37
+ const { target, config } = options;
38
+ const workerData = {
39
+ target,
40
+ packages: (_b = (_a = config.render) === null || _a === void 0 ? void 0 : _a.packages) !== null && _b !== void 0 ? _b : {},
41
+ modules: (_d = (_c = config.render) === null || _c === void 0 ? void 0 : _c.modules) !== null && _d !== void 0 ? _d : render_packages_1.DEFAULT_RENDER_MODULES,
42
+ };
43
+ const pending = new Map();
44
+ let worker = null;
45
+ let watched = {};
46
+ let nextId = 0;
47
+ const settleAll = (error) => {
48
+ for (const settle of pending.values())
49
+ settle({ error });
50
+ pending.clear();
51
+ };
52
+ const start = () => {
53
+ const started = new worker_threads_1.Worker((0, path_1.resolve)(__dirname, 'render-worker.js'), { workerData });
54
+ started.on('message', (response) => {
55
+ var _a;
56
+ const { id, watched: loaded } = response, result = __rest(response, ["id", "watched"]);
57
+ if (started === worker)
58
+ watched = Object.assign({}, loaded);
59
+ (_a = pending.get(id)) === null || _a === void 0 ? void 0 : _a(result);
60
+ pending.delete(id);
61
+ });
62
+ started.on('error', (error) => settleAll(`design-explore: the render worker failed: ${error.message}`));
63
+ started.on('exit', () => {
64
+ if (started === worker)
65
+ worker = null;
66
+ });
67
+ watched = {};
68
+ return started;
69
+ };
70
+ return (ask) => {
71
+ var _a, _b, _c, _d;
72
+ if (worker && (0, exports.isStale)(watched)) {
73
+ void worker.terminate();
74
+ worker = null;
75
+ }
76
+ worker !== null && worker !== void 0 ? worker : (worker = start());
77
+ const providers = (_c = (_a = config.projects) === null || _a === void 0 ? void 0 : _a[(_b = ask.call.split('/')[0]) !== null && _b !== void 0 ? _b : '']) === null || _c === void 0 ? void 0 : _c.providers;
78
+ const request = {
79
+ id: nextId++,
80
+ template: ask.template,
81
+ imports: ask.imports,
82
+ fields: (_d = ask.fields) !== null && _d !== void 0 ? _d : null,
83
+ providers: providers ? (0, path_1.resolve)(target, providers) : null,
84
+ };
85
+ const result = new Promise((settle) => pending.set(request.id, settle));
86
+ worker.postMessage(request);
87
+ return result;
88
+ };
89
+ };
90
+ exports.createRenderer = createRenderer;
91
+ const readBody = (request) => new Promise((settle, reject) => {
92
+ const chunks = [];
93
+ request.on('data', (chunk) => chunks.push(chunk));
94
+ request.on('end', () => settle(Buffer.concat(chunks).toString('utf8')));
95
+ request.on('error', reject);
96
+ });
97
+ /** Answers `POST /__design/render` with the rendered markup and styles, or a 500 with the error. */
98
+ const renderMiddleware = (render) => (request, response) => {
99
+ if (request.method !== 'POST') {
100
+ response.statusCode = 405;
101
+ response.end();
102
+ return;
103
+ }
104
+ void readBody(request)
105
+ .then((body) => render(JSON.parse(body)))
106
+ .catch((error) => ({ error: error instanceof Error ? error.message : String(error) }))
107
+ .then((result) => {
108
+ if ('error' in result) {
109
+ response.statusCode = 500;
110
+ response.setHeader('content-type', 'text/plain; charset=utf-8');
111
+ response.end(result.error);
112
+ return;
113
+ }
114
+ response.setHeader('content-type', 'application/json');
115
+ response.end(JSON.stringify(result));
116
+ });
117
+ };
118
+ exports.renderMiddleware = renderMiddleware;
119
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/render.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Starts the design page for a checkout and keeps it running. The returned exit code is the
2
+ * Starts the design server for a checkout and keeps it running. The returned exit code is the
3
3
  * command's, not the server's: a listening server holds the process open on its own.
4
4
  */
5
5
  export declare const serveDesign: (options: {
@@ -1,24 +1,34 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.serveDesign = void 0;
4
- const tslib_1 = require("tslib");
5
13
  const fs_1 = require("fs");
6
14
  const path_1 = require("path");
7
15
  const calls_tsconfig_1 = require("./calls-tsconfig");
8
16
  const vite_paths_1 = require("./vite-paths");
17
+ const render_1 = require("./render");
18
+ const render_packages_1 = require("./render-packages");
19
+ const stamp_1 = require("./stamp");
9
20
  const paths_1 = require("./paths");
10
21
  const VIRTUAL = 'virtual:design-explore';
11
22
  /** What a slug says about which project drew it: its first segment. */
12
23
  const projectOf = (slug) => { var _a; return (_a = slug.split('/')[0]) !== null && _a !== void 0 ? _a : ''; };
13
- const registry = (target, config) => {
14
- var _a;
24
+ const registry = (target) => {
15
25
  const root = (0, paths_1.callsRootOf)(target);
16
26
  const entries = (0, fs_1.globSync)('**/call.ts', { cwd: root })
17
27
  .sort()
18
28
  .map((file) => [(0, vite_paths_1.callSlugOf)(file), (0, vite_paths_1.fsUrl)((0, path_1.resolve)(root, file))]);
19
29
  return `export const calls = {\n${entries
20
30
  .map(([slug, url]) => ` ${JSON.stringify(slug)}: () => import(${JSON.stringify(url)}),`)
21
- .join('\n')}\n};\nexport const defaultCall = ${JSON.stringify((_a = config.defaultCall) !== null && _a !== void 0 ? _a : null)};\n`;
31
+ .join('\n')}\n};\n`;
22
32
  };
23
33
  /**
24
34
  * Vite's own tsconfigPaths resolves against the tsconfig nearest the importing file, which is not
@@ -48,23 +58,41 @@ const workspaceAliases = (target) => {
48
58
  * draw under whichever stylesheet came last.
49
59
  */
50
60
  const env = (target, config) => {
51
- var _a;
61
+ var _a, _b;
52
62
  const loaders = Object.entries((_a = config.projects) !== null && _a !== void 0 ? _a : {}).map(([name, project]) => {
53
63
  var _a;
54
64
  return ` ${JSON.stringify(name)}: () => Promise.all([${((_a = project.styles) !== null && _a !== void 0 ? _a : [])
55
65
  .map((style) => `import(${JSON.stringify((0, vite_paths_1.fsUrl)((0, path_1.resolve)(target, style)))})`)
56
66
  .join(', ')}]),`;
57
67
  });
68
+ const themes = Object.fromEntries(Object.entries((_b = config.projects) !== null && _b !== void 0 ? _b : {}).map(([name, project]) => {
69
+ var _a, _b, _c, _d;
70
+ return [
71
+ name,
72
+ { surface: (_b = (_a = project.themes) === null || _a === void 0 ? void 0 : _a.surface) !== null && _b !== void 0 ? _b : [], color: (_d = (_c = project.themes) === null || _c === void 0 ? void 0 : _c.color) !== null && _d !== void 0 ? _d : [] },
73
+ ];
74
+ }));
58
75
  return (`const envs = {\n${loaders.join('\n')}\n};\n` +
59
- `export const loadEnv = (project) => (envs[project] ?? (() => Promise.resolve()))();\n`);
76
+ `export const loadEnv = (project) => (envs[project] ?? (() => Promise.resolve()))();\n` +
77
+ `const themes = ${JSON.stringify(themes)};\n` +
78
+ `export const themesOf = (project) => themes[project] ?? { surface: [], color: [] };\n`);
60
79
  };
61
- /** Serves the call registry and each project's global stylesheet to the web pages. */
80
+ /**
81
+ * Serves the call registry and each project's global stylesheet to the frame page, and renders the
82
+ * Angular templates a drawing asks for with `ng()`.
83
+ */
62
84
  const designExplore = (target, config) => ({
63
85
  name: 'design-explore',
64
- resolveId: (id) => (id === VIRTUAL || id === `${VIRTUAL}/env` ? `\0${id}` : null),
86
+ enforce: 'pre',
87
+ resolveId: (id) => {
88
+ var _a, _b;
89
+ if (id === VIRTUAL || id === `${VIRTUAL}/env`)
90
+ return `\0${id}`;
91
+ return (0, render_packages_1.mappedSubpathOf)({ specifier: id, packages: (_b = (_a = config.render) === null || _a === void 0 ? void 0 : _a.packages) !== null && _b !== void 0 ? _b : {}, target });
92
+ },
65
93
  load: (id) => {
66
94
  if (id === `\0${VIRTUAL}`)
67
- return registry(target, config);
95
+ return registry(target);
68
96
  if (id === `\0${VIRTUAL}/env`)
69
97
  return env(target, config);
70
98
  return null;
@@ -85,6 +113,7 @@ const designExplore = (target, config) => ({
85
113
  /** The registry is built once per load, so a new call folder is invisible until it is invalidated. */
86
114
  configureServer: (vite) => {
87
115
  const callsRoot = (0, paths_1.callsRootOf)(target);
116
+ const stamp = (0, stamp_1.buildStampOf)();
88
117
  const refresh = (file) => {
89
118
  if (!(0, vite_paths_1.isCallFile)({ callsRoot, file }))
90
119
  return;
@@ -93,16 +122,21 @@ const designExplore = (target, config) => ({
93
122
  vite.moduleGraph.invalidateModule(module);
94
123
  vite.ws.send({ type: 'full-reload' });
95
124
  };
125
+ vite.middlewares.use(stamp_1.STAMP_PATH, (_request, response) => {
126
+ response.setHeader('content-type', 'application/json');
127
+ response.end(JSON.stringify(stamp));
128
+ });
129
+ vite.middlewares.use(render_1.RENDER_PATH, (0, render_1.renderMiddleware)((0, render_1.createRenderer)({ target, config })));
96
130
  vite.watcher.add(callsRoot);
97
131
  vite.watcher.on('add', refresh);
98
132
  vite.watcher.on('unlink', refresh);
99
133
  },
100
134
  });
101
135
  /**
102
- * Starts the design page for a checkout and keeps it running. The returned exit code is the
136
+ * Starts the design server for a checkout and keeps it running. The returned exit code is the
103
137
  * command's, not the server's: a listening server holds the process open on its own.
104
138
  */
105
- const serveDesign = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
139
+ const serveDesign = (options) => __awaiter(void 0, void 0, void 0, function* () {
106
140
  const { target } = options;
107
141
  const config = (0, paths_1.readConfig)(target);
108
142
  if (!config) {
@@ -126,11 +160,14 @@ const serveDesign = (options) => tslib_1.__awaiter(void 0, void 0, void 0, funct
126
160
  resolve: {
127
161
  alias: [{ find: /^@design-explore$/, replacement: (0, path_1.resolve)(here, 'define-call.ts') }, ...workspaceAliases(target)],
128
162
  },
163
+ // A design mock ships as TS that imports CSS with `?inline`, which the dependency pre-bundler
164
+ // can not load.
165
+ optimizeDeps: { exclude: ['@ethlete/components', '@ethlete/core'] },
129
166
  plugins: [designExplore(target, config)],
130
167
  server: {
131
168
  port: (0, paths_1.portOf)(config),
132
169
  strictPort: true,
133
- // The web pages live inside this package, which is outside the checkout it draws. Vite
170
+ // The frame page lives inside this package, which is outside the checkout it draws. Vite
134
171
  // serves neither root unless both are allowed.
135
172
  fs: { allow: [target, here] },
136
173
  },