@ethlete/cli 3.0.0-next.18 → 3.0.0-next.20

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 +46 -0
  2. package/design/css-inline.d.ts +4 -0
  3. package/design/define-call.ts +232 -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 +60 -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 +11 -0
  49. package/src/lib/design/legacy.js +66 -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 +129 -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 +87 -0
  64. package/src/lib/design/render-packages.js +232 -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,87 @@
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
+ export declare const BUILD_WAIT_TIMEOUT_MS = 60000;
41
+ export declare const BUILD_WAIT_INTERVAL_MS = 500;
42
+ export type BuildWaitOptions = {
43
+ timeoutMs?: number;
44
+ intervalMs?: number;
45
+ now?: () => number;
46
+ onWait?: (dir: string) => void;
47
+ };
48
+ /**
49
+ * Like `entryOf`, but while the package is mid-build (no `package.json`, or an entry file that is
50
+ * not written yet) it blocks the calling thread and polls, then gives up and returns `entryOf`'s
51
+ * outcome. Only for a worker thread: it must not run on the dev server's event loop.
52
+ */
53
+ export declare const entryOfBuilt: (mapped: MappedPackage, options?: BuildWaitOptions & {
54
+ sleep?: (ms: number) => void;
55
+ }) => string;
56
+ /** `entryOfBuilt` for the dev server's event loop: it polls with timers instead of blocking. */
57
+ export declare const entryOfBuiltAsync: (mapped: MappedPackage, options?: BuildWaitOptions) => Promise<string>;
58
+ /**
59
+ * The file a drawing's subpath import of a mapped package loads in the browser, or null to leave it
60
+ * to the checkout. The root stays with the checkout: the browser has its own `@angular/core`.
61
+ */
62
+ export declare const mappedSubpathOf: (options: {
63
+ specifier: string;
64
+ packages: Record<string, string>;
65
+ target: string;
66
+ }) => Promise<string | null>;
67
+ /** The values behind the names a call imports, each from the first module that exports it. */
68
+ export declare const lookupImports: (options: {
69
+ names: string[];
70
+ modules: Record<string, Record<string, unknown>>;
71
+ }) => unknown[];
72
+ /**
73
+ * The inner markup of the render host followed by what the app attached to `<body>` after it (an
74
+ * open overlay, shown: positioning never runs on the server), and the text of every `<style>` tag.
75
+ */
76
+ export declare const extractRender: (document: string) => {
77
+ markup: string;
78
+ styles: string[];
79
+ };
80
+ /**
81
+ * The tsconfig `paths` that type a mapped package's imports from the folder `ng()` loads it from:
82
+ * the root and every subpath its `exports` types, so `@ethlete/core/design/theme-css` resolves too.
83
+ */
84
+ export declare const typePathsOf: (options: {
85
+ packages: Record<string, string>;
86
+ target: string;
87
+ }) => Record<string, string[]>;
@@ -0,0 +1,232 @@
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
+ exports.typePathsOf = exports.extractRender = exports.lookupImports = exports.mappedSubpathOf = exports.entryOfBuiltAsync = exports.entryOfBuilt = exports.BUILD_WAIT_INTERVAL_MS = exports.BUILD_WAIT_TIMEOUT_MS = exports.entryOf = exports.mapPackage = exports.DEFAULT_RENDER_MODULES = void 0;
13
+ const promises_1 = require("timers/promises");
14
+ const fs_1 = require("fs");
15
+ const path_1 = require("path");
16
+ exports.DEFAULT_RENDER_MODULES = ['@ethlete/components', '@ethlete/core'];
17
+ const packageNameLength = (specifier) => {
18
+ const segments = specifier.split('/');
19
+ return (specifier.startsWith('@') ? segments.slice(0, 2) : segments.slice(0, 1)).join('/').length;
20
+ };
21
+ /**
22
+ * The checkout folder a bare specifier is mapped to by `render.packages`, and the export subpath
23
+ * inside it. `@ethlete/*` → `dist/libs/*` maps `@ethlete/core/design` to `dist/libs/core` and `./design`.
24
+ */
25
+ const mapPackage = (options) => {
26
+ const { specifier, packages, target } = options;
27
+ const nameLength = packageNameLength(specifier);
28
+ const name = specifier.slice(0, nameLength);
29
+ const subpath = `.${specifier.slice(nameLength)}`;
30
+ for (const [pattern, path] of Object.entries(packages)) {
31
+ if (pattern === name)
32
+ return { dir: (0, path_1.resolve)(target, path), subpath };
33
+ if (pattern.endsWith('*') && name.startsWith(pattern.slice(0, -1))) {
34
+ const rest = name.slice(pattern.length - 1);
35
+ if (rest !== '' && !rest.includes('/'))
36
+ return { dir: (0, path_1.resolve)(target, path.replace('*', rest)), subpath };
37
+ }
38
+ }
39
+ return null;
40
+ };
41
+ exports.mapPackage = mapPackage;
42
+ const CONDITIONS = ['node', 'import', 'default'];
43
+ const pick = (value) => {
44
+ var _a;
45
+ if (typeof value === 'string')
46
+ return value;
47
+ if (Array.isArray(value))
48
+ return (_a = value.map(pick).find((found) => found !== null)) !== null && _a !== void 0 ? _a : null;
49
+ if (!value)
50
+ return null;
51
+ for (const condition of CONDITIONS) {
52
+ const found = pick(value[condition]);
53
+ if (found)
54
+ return found;
55
+ }
56
+ return null;
57
+ };
58
+ const exportOf = (exports, subpath) => {
59
+ if (subpath in exports)
60
+ return pick(exports[subpath]);
61
+ for (const [key, value] of Object.entries(exports)) {
62
+ const [prefix, suffix, extra] = key.split('*');
63
+ if (prefix === undefined || suffix === undefined || extra !== undefined)
64
+ continue;
65
+ if (!subpath.startsWith(prefix) || !subpath.endsWith(suffix))
66
+ continue;
67
+ const found = pick(value);
68
+ const star = subpath.slice(prefix.length, subpath.length - suffix.length);
69
+ if (found)
70
+ return found.replace('*', star);
71
+ }
72
+ return null;
73
+ };
74
+ /** The file a mapped package exports at its subpath, read from its own `package.json` exports. */
75
+ const entryOf = (mapped) => {
76
+ var _a, _b;
77
+ const { dir, subpath } = mapped;
78
+ const manifestPath = (0, path_1.resolve)(dir, 'package.json');
79
+ if (!(0, fs_1.existsSync)(manifestPath)) {
80
+ throw new Error(`design-explore: ${dir} has no package.json - build the package first.`);
81
+ }
82
+ const manifest = JSON.parse((0, fs_1.readFileSync)(manifestPath, 'utf8'));
83
+ const exported = manifest.exports ? exportOf(manifest.exports, subpath) : null;
84
+ const fallback = subpath === '.' ? ((_b = (_a = manifest.module) !== null && _a !== void 0 ? _a : manifest.main) !== null && _b !== void 0 ? _b : null) : null;
85
+ const file = exported !== null && exported !== void 0 ? exported : fallback;
86
+ if (!file)
87
+ throw new Error(`design-explore: ${dir} exports no "${subpath}".`);
88
+ return (0, path_1.resolve)(dir, file);
89
+ };
90
+ exports.entryOf = entryOf;
91
+ exports.BUILD_WAIT_TIMEOUT_MS = 60000;
92
+ exports.BUILD_WAIT_INTERVAL_MS = 500;
93
+ const builtEntryOf = (mapped) => {
94
+ if (!(0, fs_1.existsSync)((0, path_1.resolve)(mapped.dir, 'package.json')))
95
+ return null;
96
+ try {
97
+ const file = (0, exports.entryOf)(mapped);
98
+ return (0, fs_1.existsSync)(file) ? file : null;
99
+ }
100
+ catch (error) {
101
+ if (error instanceof SyntaxError)
102
+ return null;
103
+ throw error;
104
+ }
105
+ };
106
+ const announceWait = (mapped, onWait) => (onWait !== null && onWait !== void 0 ? onWait : ((dir) => console.warn(`design-explore: waiting for the build of ${dir}`)))(mapped.dir);
107
+ /**
108
+ * Like `entryOf`, but while the package is mid-build (no `package.json`, or an entry file that is
109
+ * not written yet) it blocks the calling thread and polls, then gives up and returns `entryOf`'s
110
+ * outcome. Only for a worker thread: it must not run on the dev server's event loop.
111
+ */
112
+ const entryOfBuilt = (mapped, options = {}) => {
113
+ var _a;
114
+ const { timeoutMs = exports.BUILD_WAIT_TIMEOUT_MS, intervalMs = exports.BUILD_WAIT_INTERVAL_MS, now = Date.now, onWait } = options;
115
+ const sleep = (_a = options.sleep) !== null && _a !== void 0 ? _a : ((ms) => Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms));
116
+ const deadline = now() + timeoutMs;
117
+ let announced = false;
118
+ for (let found = builtEntryOf(mapped); !found; found = builtEntryOf(mapped)) {
119
+ if (now() >= deadline)
120
+ return (0, exports.entryOf)(mapped);
121
+ if (!announced)
122
+ announceWait(mapped, onWait);
123
+ announced = true;
124
+ sleep(intervalMs);
125
+ }
126
+ return builtEntryOf(mapped);
127
+ };
128
+ exports.entryOfBuilt = entryOfBuilt;
129
+ /** `entryOfBuilt` for the dev server's event loop: it polls with timers instead of blocking. */
130
+ const entryOfBuiltAsync = (mapped_1, ...args_1) => __awaiter(void 0, [mapped_1, ...args_1], void 0, function* (mapped, options = {}) {
131
+ const { timeoutMs = exports.BUILD_WAIT_TIMEOUT_MS, intervalMs = exports.BUILD_WAIT_INTERVAL_MS, now = Date.now, onWait } = options;
132
+ const deadline = now() + timeoutMs;
133
+ let announced = false;
134
+ for (let found = builtEntryOf(mapped); !found; found = builtEntryOf(mapped)) {
135
+ if (now() >= deadline)
136
+ return (0, exports.entryOf)(mapped);
137
+ if (!announced)
138
+ announceWait(mapped, onWait);
139
+ announced = true;
140
+ yield (0, promises_1.setTimeout)(intervalMs);
141
+ }
142
+ return builtEntryOf(mapped);
143
+ });
144
+ exports.entryOfBuiltAsync = entryOfBuiltAsync;
145
+ /**
146
+ * The file a drawing's subpath import of a mapped package loads in the browser, or null to leave it
147
+ * to the checkout. The root stays with the checkout: the browser has its own `@angular/core`.
148
+ */
149
+ const mappedSubpathOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
150
+ const mapped = (0, exports.mapPackage)(options);
151
+ if (!mapped || mapped.subpath === '.')
152
+ return null;
153
+ try {
154
+ return yield (0, exports.entryOfBuiltAsync)(mapped);
155
+ }
156
+ catch (_a) {
157
+ return null;
158
+ }
159
+ });
160
+ exports.mappedSubpathOf = mappedSubpathOf;
161
+ /** The values behind the names a call imports, each from the first module that exports it. */
162
+ const lookupImports = (options) => {
163
+ const { names, modules } = options;
164
+ return names.map((name) => {
165
+ const found = Object.values(modules).find((exported) => name in exported);
166
+ if (!found) {
167
+ throw new Error(`design-explore: no import "${name}" in ${Object.keys(modules).join(', ')}.`);
168
+ }
169
+ return found[name];
170
+ });
171
+ };
172
+ exports.lookupImports = lookupImports;
173
+ /**
174
+ * The inner markup of the render host followed by what the app attached to `<body>` after it (an
175
+ * open overlay, shown: positioning never runs on the server), and the text of every `<style>` tag.
176
+ */
177
+ const extractRender = (document) => {
178
+ var _a, _b;
179
+ const host = /<et-design-host[^>]*>([\s\S]*)<\/et-design-host>([\s\S]*?)<\/body>/.exec(document);
180
+ const attached = ((_a = host === null || host === void 0 ? void 0 : host[2]) !== null && _a !== void 0 ? _a : '')
181
+ .replace(/<script[\s\S]*?<\/script>/g, '')
182
+ .replace(/(class="[^"]*?)\s*\bet-force-invisible\b/g, '$1');
183
+ const markup = ((_b = host === null || host === void 0 ? void 0 : host[1]) !== null && _b !== void 0 ? _b : '') + attached.trim();
184
+ const styles = [...document.matchAll(/<style[^>]*>([\s\S]*?)<\/style>/g)].map((match) => { var _a; return (_a = match[1]) !== null && _a !== void 0 ? _a : ''; });
185
+ return { markup: markup.replace(/<!--container-->/g, ''), styles };
186
+ };
187
+ exports.extractRender = extractRender;
188
+ const typesOf = (value) => {
189
+ var _a;
190
+ if (typeof value === 'string')
191
+ return value;
192
+ return (_a = value === null || value === void 0 ? void 0 : value.types) !== null && _a !== void 0 ? _a : null;
193
+ };
194
+ /** Each export subpath of a built package that carries types, as a `[subpath, file]` pair. */
195
+ const typedExportsOf = (dir) => {
196
+ var _a, _b;
197
+ const manifestPath = (0, path_1.resolve)(dir, 'package.json');
198
+ if (!(0, fs_1.existsSync)(manifestPath))
199
+ return [];
200
+ const manifest = JSON.parse((0, fs_1.readFileSync)(manifestPath, 'utf8'));
201
+ const entries = Object.entries((_a = manifest.exports) !== null && _a !== void 0 ? _a : {}).flatMap(([subpath, value]) => {
202
+ const types = subpath === './package.json' ? null : typesOf(value);
203
+ return types ? [[subpath, types]] : [];
204
+ });
205
+ const root = (_b = manifest.types) !== null && _b !== void 0 ? _b : manifest.typings;
206
+ return entries.some(([subpath]) => subpath === '.') || !root ? entries : [...entries, ['.', root]];
207
+ };
208
+ const readdirSafe = (dir) => ((0, fs_1.existsSync)(dir) ? (0, fs_1.readdirSync)(dir) : []);
209
+ /**
210
+ * The tsconfig `paths` that type a mapped package's imports from the folder `ng()` loads it from:
211
+ * the root and every subpath its `exports` types, so `@ethlete/core/design/theme-css` resolves too.
212
+ */
213
+ const typePathsOf = (options) => {
214
+ const { packages, target } = options;
215
+ const paths = {};
216
+ for (const [pattern, path] of Object.entries(packages)) {
217
+ const names = pattern.endsWith('*')
218
+ ? readdirSafe((0, path_1.resolve)(target, path.slice(0, path.indexOf('*')))).map((name) => [
219
+ pattern.replace('*', name),
220
+ (0, path_1.resolve)(target, path.replace('*', name)),
221
+ ])
222
+ : [[pattern, (0, path_1.resolve)(target, path)]];
223
+ for (const [name, dir] of names) {
224
+ for (const [subpath, types] of typedExportsOf(dir)) {
225
+ paths[`${name}${subpath.slice(1)}`] = [(0, path_1.resolve)(dir, types)];
226
+ }
227
+ }
228
+ }
229
+ return paths;
230
+ };
231
+ exports.typePathsOf = typePathsOf;
232
+ //# 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.entryOfBuilt)(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