@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.
Files changed (145) hide show
  1. package/CHANGELOG.md +41 -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/api-context.d.ts +15 -0
  10. package/src/lib/api/api-context.js +23 -0
  11. package/src/lib/api/api-context.js.map +1 -0
  12. package/src/lib/api/api-state.d.ts +31 -0
  13. package/src/lib/api/api-state.js +80 -0
  14. package/src/lib/api/api-state.js.map +1 -0
  15. package/src/lib/api/clear.js +10 -2
  16. package/src/lib/api/clear.js.map +1 -1
  17. package/src/lib/api/definition.d.ts +37 -1
  18. package/src/lib/api/definition.js +6 -0
  19. package/src/lib/api/definition.js.map +1 -1
  20. package/src/lib/api/doctor.d.ts +16 -0
  21. package/src/lib/api/doctor.js +71 -0
  22. package/src/lib/api/doctor.js.map +1 -0
  23. package/src/lib/api/fingerprint.d.ts +18 -0
  24. package/src/lib/api/fingerprint.js +63 -0
  25. package/src/lib/api/fingerprint.js.map +1 -0
  26. package/src/lib/api/git.d.ts +2 -0
  27. package/src/lib/api/git.js +7 -1
  28. package/src/lib/api/git.js.map +1 -1
  29. package/src/lib/api/help.js +13 -0
  30. package/src/lib/api/help.js.map +1 -1
  31. package/src/lib/api/index.d.ts +3 -0
  32. package/src/lib/api/index.js +33 -17
  33. package/src/lib/api/index.js.map +1 -1
  34. package/src/lib/api/load-definitions.js +3 -0
  35. package/src/lib/api/load-definitions.js.map +1 -1
  36. package/src/lib/api/lock.d.ts +46 -0
  37. package/src/lib/api/lock.js +152 -0
  38. package/src/lib/api/lock.js.map +1 -0
  39. package/src/lib/api/parse-argv.d.ts +12 -0
  40. package/src/lib/api/parse-argv.js +31 -0
  41. package/src/lib/api/parse-argv.js.map +1 -0
  42. package/src/lib/api/ports.js +12 -4
  43. package/src/lib/api/ports.js.map +1 -1
  44. package/src/lib/api/run-locked.d.ts +14 -0
  45. package/src/lib/api/run-locked.js +70 -0
  46. package/src/lib/api/run-locked.js.map +1 -0
  47. package/src/lib/api/run-ready.d.ts +60 -0
  48. package/src/lib/api/run-ready.js +220 -0
  49. package/src/lib/api/run-ready.js.map +1 -0
  50. package/src/lib/api/run-snapshot.d.ts +33 -0
  51. package/src/lib/api/run-snapshot.js +132 -0
  52. package/src/lib/api/run-snapshot.js.map +1 -0
  53. package/src/lib/api/run-status.d.ts +9 -0
  54. package/src/lib/api/run-status.js +55 -0
  55. package/src/lib/api/run-status.js.map +1 -0
  56. package/src/lib/api/run.d.ts +1 -1
  57. package/src/lib/api/run.js +134 -12
  58. package/src/lib/api/run.js.map +1 -1
  59. package/src/lib/api/snapshot.d.ts +63 -0
  60. package/src/lib/api/snapshot.js +140 -0
  61. package/src/lib/api/snapshot.js.map +1 -0
  62. package/src/lib/api/validate-definition.d.ts +7 -0
  63. package/src/lib/api/validate-definition.js +79 -0
  64. package/src/lib/api/validate-definition.js.map +1 -0
  65. package/src/lib/auth/auth-command.js +10 -2
  66. package/src/lib/auth/auth-command.js.map +1 -1
  67. package/src/lib/auth/gitlab-token.js +12 -4
  68. package/src/lib/auth/gitlab-token.js.map +1 -1
  69. package/src/lib/auth/index.js +18 -5
  70. package/src/lib/auth/index.js.map +1 -1
  71. package/src/lib/config/index.js +16 -3
  72. package/src/lib/config/index.js.map +1 -1
  73. package/src/lib/design/browser.d.ts +9 -0
  74. package/src/lib/design/browser.js +37 -0
  75. package/src/lib/design/browser.js.map +1 -0
  76. package/src/lib/design/calls-tsconfig.js +6 -2
  77. package/src/lib/design/calls-tsconfig.js.map +1 -1
  78. package/src/lib/design/check.d.ts +2 -1
  79. package/src/lib/design/check.js +151 -69
  80. package/src/lib/design/check.js.map +1 -1
  81. package/src/lib/design/design-command.d.ts +1 -1
  82. package/src/lib/design/design-command.js +58 -3
  83. package/src/lib/design/design-command.js.map +1 -1
  84. package/src/lib/design/index.js +19 -6
  85. package/src/lib/design/index.js.map +1 -1
  86. package/src/lib/design/legacy.d.ts +9 -0
  87. package/src/lib/design/legacy.js +52 -0
  88. package/src/lib/design/legacy.js.map +1 -0
  89. package/src/lib/design/missing-package.d.ts +2 -0
  90. package/src/lib/design/missing-package.js +15 -0
  91. package/src/lib/design/missing-package.js.map +1 -0
  92. package/src/lib/design/new-call.d.ts +11 -0
  93. package/src/lib/design/new-call.js +124 -0
  94. package/src/lib/design/new-call.js.map +1 -0
  95. package/src/lib/design/paths.d.ts +23 -2
  96. package/src/lib/design/paths.js +1 -1
  97. package/src/lib/design/paths.js.map +1 -1
  98. package/src/lib/design/render-fields.d.ts +29 -0
  99. package/src/lib/design/render-fields.js +31 -0
  100. package/src/lib/design/render-fields.js.map +1 -0
  101. package/src/lib/design/render-packages.d.ts +69 -0
  102. package/src/lib/design/render-packages.js +168 -0
  103. package/src/lib/design/render-packages.js.map +1 -0
  104. package/src/lib/design/render-worker.d.ts +1 -0
  105. package/src/lib/design/render-worker.js +149 -0
  106. package/src/lib/design/render-worker.js.map +1 -0
  107. package/src/lib/design/render.d.ts +23 -0
  108. package/src/lib/design/render.js +119 -0
  109. package/src/lib/design/render.js.map +1 -0
  110. package/src/lib/design/serve.d.ts +1 -1
  111. package/src/lib/design/serve.js +49 -12
  112. package/src/lib/design/serve.js.map +1 -1
  113. package/src/lib/design/ssr-shims.d.ts +10 -0
  114. package/src/lib/design/ssr-shims.js +128 -0
  115. package/src/lib/design/ssr-shims.js.map +1 -0
  116. package/src/lib/design/stamp.d.ts +16 -0
  117. package/src/lib/design/stamp.js +77 -0
  118. package/src/lib/design/stamp.js.map +1 -0
  119. package/src/lib/design/status.d.ts +33 -0
  120. package/src/lib/design/status.js +58 -0
  121. package/src/lib/design/status.js.map +1 -0
  122. package/src/lib/design/system-use.d.ts +23 -0
  123. package/src/lib/design/system-use.js +61 -0
  124. package/src/lib/design/system-use.js.map +1 -0
  125. package/src/lib/doctor/index.js +15 -2
  126. package/src/lib/doctor/index.js.map +1 -1
  127. package/src/lib/index.js +22 -9
  128. package/src/lib/index.js.map +1 -1
  129. package/src/lib/release.js +10 -2
  130. package/src/lib/release.js.map +1 -1
  131. package/src/lib/update/agent-setup.js +11 -3
  132. package/src/lib/update/agent-setup.js.map +1 -1
  133. package/src/lib/update/ai.js +13 -5
  134. package/src/lib/update/ai.js.map +1 -1
  135. package/src/lib/update/index.js +32 -19
  136. package/src/lib/update/index.js.map +1 -1
  137. package/src/lib/update/registry.js +10 -2
  138. package/src/lib/update/registry.js.map +1 -1
  139. package/src/lib/update/update-command.js +16 -8
  140. package/src/lib/update/update-command.js.map +1 -1
  141. package/src/lib/utils.js +11 -3
  142. package/src/lib/utils.js.map +1 -1
  143. package/design/web/host.css +0 -494
  144. package/design/web/host.ts +0 -445
  145. package/design/web/index.html +0 -11
@@ -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":";;;;;;;;;;;AAAA,2BAA8B;AAC9B,mCAA4E;AAC5E,+BAA+B;AAC/B,6BAAmD;AACnD,uDAA0D;AAC1D,mDAA8C;AAC9C,2CAA2E;AAC3E,mDAAwD;AACxD,uDAS2B;AAE3B,MAAM,aAAa,GAAG,0EAA0E,CAAC;AAEjG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,2BAA8B,CAAC;AAClF,MAAM,SAAS,GAAG,IAAA,mBAAa,EAAC,IAAA,cAAO,EAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,MAAM,OAAO,GAA2B,EAAE,CAAC;AAE3C,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE;;IAC5B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO;IAErC,MAAM,IAAI,GAAG,IAAA,mBAAa,EAAC,GAAG,CAAC,CAAC;IAChC,MAAA,OAAO,CAAC,IAAI,qCAAZ,OAAO,CAAC,IAAI,IAAM,IAAA,aAAQ,EAAC,IAAI,CAAC,CAAC,OAAO,EAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAE,EAAE,CAC1C,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAI5G,wGAAwG;AACxG,MAAM,iBAAiB,GAAG,CAAC,OAAqF,EAAE,EAAE;;IAClH,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEpD,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA,MAAA,OAAO,CAAC,SAAS,0CAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;YAAE,MAAM,KAAK,CAAC;QAEnF,OAAO,WAAW,CAAC,GAAG,SAAS,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;AACH,CAAC,CAAC;AAEF,+FAA+F;AAC/F,yEAAyE;AACzE,IAAA,sBAAa,EAAC;IACZ,0EAA0E;IAC1E,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,IAAA,4BAAU,EAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAE3D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,IAAA,mBAAa,EAAC,IAAA,yBAAO,EAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAChD,KAAK,CAAC,GAAG,CAAC,CAAC;YAEX,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YACxE,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAElG,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,kCAAO,OAAO,KAAE,SAAS,EAAE,SAAS,IAAG,CAAC;QAC9E,IAAI,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE3D,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAU,IAAsB,EAAE,EAAE;IACzD,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,IAAA,uCAAqB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAErD,MAAM,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9E,CAAC;AACH,CAAC,CAAA,CAAC;AAEF,mGAAmG;AACnG,yDAAyD;AACzD,MAAM,UAAU,GAAG,CAAC,MAAuD,EAAE,EAAE;;;IAC7E,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;IACpC,YAAC,UAAmC,EAAC,MAAM,uCAAN,MAAM,GAAK,UAAU,EAAC;IAC3D,IAAA,gCAAoB,EAAC,UAAU,CAAC,CAAC;IACjC,IAAA,kCAAsB,EAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAErD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAqC,CAAC;IAEjE,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,SAAS,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;QAC7E,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEvF,OAAO,CAAC,SAAS,CAAC,qBAAqB,GAAG,GAAG,EAAE,CAAC,iCAAM,IAAI,KAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,IAAG,CAAC;IACpF,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,GAAS,EAAE;IAC/B,wFAAwF;IACxF,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAElC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzD,MAAM,CAAC,eAAe,CAAC;QACvB,MAAM,CAAC,2BAA2B,CAAC;QACnC,MAAM,CAAC,0BAA0B,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAO,IAAI,EAAE,EAAE,kDAAC,OAAA,CAAC,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAA4B,CAAU,CAAA,GAAA,CAAC,CAAC,CAAC,IAAI,CACjH,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CACzC;KACF,CAAC,CAAC;IAEH,UAAU,CAAC,MAAM,CAAC,CAAC;IAEnB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC,CAAA,CAAC;AAEF,IAAI,OAAO,GAA4C,IAAI,CAAC;AAE5D,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAErF,MAAM,WAAW,GAAG,CAAO,IAAY,EAAE,EAAE;IACzC,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,IAAA,mBAAa,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAA0B,CAAC;IAEjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,uDAAuD,CAAC,CAAC;IAClG,CAAC;IAED,OAAO,MAAM,CAAC,OAAoB,CAAC;AACrC,CAAC,CAAA,CAAC;AAEF,MAAM,MAAM,GAAG,CAAO,OAAsB,EAAyB,EAAE;IACrE,OAAO,aAAP,OAAO,cAAP,OAAO,IAAP,OAAO,GAAK,cAAc,CAAC,aAAa,CAAC,EAAC;IAE1C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,MAAM,OAAO,GAAG,IAAA,+BAAa,EAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,CAAY,CAAC;IAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,QAAQ,EAAE,gBAAgB;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,SAAkB,CAAC,CAAC,CAAC,CAAC,OAAO;KAClE,CAAC,CACA;QAAA;YACE,WAAM,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAA,2BAAW,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,CAAC;KAAA,CACF,CAAC;IACF,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAC7C,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,oBAAoB,CAC1B,IAAI,EACJ;QACE,SAAS,EAAE;YACT,IAAI,CAAC,8BAA8B,EAAE;YACrC,MAAM,CAAC,sBAAsB,EAAE;YAC/B,GAAI,SAAqB;YACzB,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;SAClG;KACF,EACD,OAAO,CACR,EACH,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,CACtC,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;IAEvC,OAAO,IAAA,+BAAa,EAAC,QAAQ,CAAC,CAAC;AACjC,CAAC,CAAA,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAE/F,2BAAU,aAAV,2BAAU,uBAAV,2BAAU,CAAE,EAAE,CAAC,SAAS,EAAE,CAAC,OAAsB,EAAE,EAAE;IACnD,KAAK,MAAM,CAAC,OAAO,CAAC;SACjB,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SACxD,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,2BAAU,aAAV,2BAAU,uBAAV,2BAAU,CAAE,WAAW,CAAC,gCAAK,MAAM,KAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,GAA2B,CAAC,CAAC,CAAC;AAChH,CAAC,CAAC,CAAC"}
@@ -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
  },
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/serve.ts"],"names":[],"mappings":";;;;AAAA,2BAAwD;AACxD,+BAA+B;AAC/B,qDAAsD;AACtD,6CAA2E;AAC3E,mCAA6G;AAI7G,MAAM,OAAO,GAAG,wBAAwB,CAAC;AAEzC,uEAAuE;AACvE,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAA,EAAA,CAAC;AAE7D,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,MAAoB,EAAE,EAAE;;IACxD,MAAM,IAAI,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,IAAA,aAAQ,EAAC,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;SAClD,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAA,uBAAU,EAAC,IAAI,CAAC,EAAE,IAAA,kBAAK,EAAC,IAAA,cAAO,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,OAAO,2BAA2B,OAAO;SACtC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;SACxF,IAAI,CAAC,IAAI,CAAC,oCAAoC,IAAI,CAAC,SAAS,CAAC,MAAA,MAAM,CAAC,WAAW,mCAAI,IAAI,CAAC,KAAK,CAAC;AACnG,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,EAAE;;IAC1C,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAEvD,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,CAA+D,CAAC;IACtH,MAAM,KAAK,GAAG,MAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,KAAK,mCAAI,EAAE,CAAC;IAEhD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE;QACvD,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEvB,OAAO;YACL;gBACE,IAAI,EAAE,IAAA,yBAAY,EAAC,GAAG,CAAC;gBACvB,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAA,cAAO,EAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,MAAM,EAAE,MAAM,CAAC;aACvG;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,MAAoB,EAAE,EAAE;;IACnD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAA,MAAM,CAAC,QAAQ,mCAAI,EAAE,CAAC,CAAC,GAAG,CACvD,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;;QAClB,OAAA,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,CAAC;aACpE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,IAAA,kBAAK,EAAC,IAAA,cAAO,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;aAC1E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;KAAA,CACrB,CAAC;IAEF,OAAO,CACL,mBAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;QAC7C,uFAAuF,CACxF,CAAC;AACJ,CAAC,CAAC;AAEF,sFAAsF;AACtF,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,MAAoB,EAAE,EAAE,CAAC,CAAC;IAC/D,IAAI,EAAE,gBAAgB;IACtB,SAAS,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzF,IAAI,EAAE,CAAC,EAAU,EAAE,EAAE;QACnB,IAAI,EAAE,KAAK,KAAK,OAAO,EAAE;YAAE,OAAO,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,EAAE,KAAK,KAAK,OAAO,MAAM;YAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,KAAc;QACrB,OAAO,EAAE,CAAC,IAAY,EAAE,GAA2C,EAAE,EAAE;;YACrE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;YAE7C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAA,GAAG,CAAC,WAAW,mCAAI,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;YACvE,MAAM,IAAI,GAAG,MAAA,MAAA,MAAM,CAAC,QAAQ,0CAAG,SAAS,CAAC,MAAA,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,mCAAI,EAAE,CAAC,CAAC,0CAAE,IAAI,CAAC;YAEtF,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEvB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAA,iBAAY,EAAC,IAAA,cAAO,EAAC,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAClF,CAAC;KACF;IACD,sGAAsG;IACtG,eAAe,EAAE,CAAC,IAAmB,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;YAC/B,IAAI,CAAC,IAAA,uBAAU,EAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBAAE,OAAO;YAE7C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;YAC9D,IAAI,MAAM;gBAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;CACF,CAAC,CAAC;AAEH;;;GAGG;AACI,MAAM,WAAW,GAAG,CAAO,OAA2B,EAAmB,EAAE;IAChF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC;IAElC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,gCAAgC,IAAA,oBAAY,EAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEtE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAA,mCAAkB,EAAC,MAAM,CAAC,CAAC;IAE3B,4FAA4F;IAC5F,8FAA8F;IAC9F,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEtB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAA,iBAAS,GAAE,CAAC;IAEzB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAChC,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,KAAK,CAAC;QAC1B,+FAA+F;QAC/F,kEAAkE;QAClE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;QAC3C,QAAQ,EAAE,IAAA,cAAO,EAAC,IAAA,kBAAU,EAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAC7C,OAAO,EAAE;YACP,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAA,cAAO,EAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;SAClH;QACD,OAAO,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,EAAE;YACN,IAAI,EAAE,IAAA,cAAM,EAAC,MAAM,CAAC;YACpB,UAAU,EAAE,IAAI;YAChB,uFAAuF;YACvF,+CAA+C;YAC/C,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;SAC9B;KACF,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,SAAS,EAAE,CAAC;IAEnB,OAAO,CAAC,CAAC;AACX,CAAC,CAAA,CAAC;AA7CW,QAAA,WAAW,eA6CtB"}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/serve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Domino lowercases and hyphenates every property name its `CSSStyleDeclaration` parses or sets,
3
+ * so `--accentDeep` serialises as `--accentdeep`. Custom properties are case-sensitive; this
4
+ * makes the `style` of every element created from `elementProto` keep their case.
5
+ */
6
+ export declare const keepCustomPropertyCase: (elementProto: object) => void;
7
+ /** Domino ships no `MutationObserver`; nothing mutates a server render after it is serialised, so one that never fires is exact. */
8
+ export declare const shimMutationObserver: (scope: {
9
+ MutationObserver?: unknown;
10
+ }) => void;
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shimMutationObserver = exports.keepCustomPropertyCase = void 0;
4
+ const CUSTOM_PROPERTY_NAME = /(?:^|;)\s*(--[^:;\s]+)\s*:/g;
5
+ const IMPORTANT = /\s*!\s*important$/i;
6
+ const isCustom = (property) => property.startsWith('--');
7
+ const foldedName = (name) => name.replace(/[a-z][A-Z]/g, (pair) => `${pair[0]}-${pair[1]}`).toLowerCase();
8
+ const renameKeys = (record, names) => Object.fromEntries(Object.entries(record).map(([key, value]) => { var _a; return [(_a = names.get(key)) !== null && _a !== void 0 ? _a : key, value]; }));
9
+ const removeCustom = (style, property) => {
10
+ const styles = style._parsed;
11
+ if (!(property in styles.property))
12
+ return;
13
+ delete styles.property[property];
14
+ delete styles.priority[property];
15
+ style._serialize();
16
+ };
17
+ // Domino defines every CSSStyleDeclaration member non-configurable on its prototype, so the
18
+ // case-keeping members go on each instance instead.
19
+ const keepCaseOn = (style) => {
20
+ var _a;
21
+ const proto = Object.getPrototypeOf(style);
22
+ const descriptors = Object.getOwnPropertyDescriptors(proto);
23
+ const parsed = (_a = descriptors['_parsed']) === null || _a === void 0 ? void 0 : _a.get;
24
+ const method = (name) => { var _a; return (_a = descriptors[name]) === null || _a === void 0 ? void 0 : _a.value; };
25
+ if (!parsed || Object.getOwnPropertyDescriptor(style, '_parsed'))
26
+ return style;
27
+ const getPropertyValue = method('getPropertyValue');
28
+ const getPropertyPriority = method('getPropertyPriority');
29
+ const setProperty = method('setProperty');
30
+ const removeProperty = method('removeProperty');
31
+ Object.defineProperties(style, {
32
+ _parsed: {
33
+ configurable: true,
34
+ get() {
35
+ var _a, _b;
36
+ const styles = parsed.call(this);
37
+ const names = new Map();
38
+ for (const match of ((_a = this.cssText) !== null && _a !== void 0 ? _a : '').matchAll(CUSTOM_PROPERTY_NAME)) {
39
+ const name = (_b = match[1]) !== null && _b !== void 0 ? _b : '';
40
+ if (foldedName(name) !== name)
41
+ names.set(foldedName(name), name);
42
+ }
43
+ if ([...names.keys()].some((key) => key in styles.property)) {
44
+ styles.property = renameKeys(styles.property, names);
45
+ styles.priority = renameKeys(styles.priority, names);
46
+ }
47
+ return styles;
48
+ },
49
+ },
50
+ getPropertyValue: {
51
+ value(property) {
52
+ var _a;
53
+ return isCustom(property) ? ((_a = this._parsed.property[property]) !== null && _a !== void 0 ? _a : '') : getPropertyValue.call(this, property);
54
+ },
55
+ },
56
+ getPropertyPriority: {
57
+ value(property) {
58
+ var _a;
59
+ return isCustom(property) ? ((_a = this._parsed.priority[property]) !== null && _a !== void 0 ? _a : '') : getPropertyPriority.call(this, property);
60
+ },
61
+ },
62
+ setProperty: {
63
+ // eslint-disable-next-line max-params -- the arity of CSSStyleDeclaration.setProperty
64
+ value(property, value, priority) {
65
+ if (!isCustom(property))
66
+ return setProperty.call(this, property, value, priority);
67
+ const text = String(value !== null && value !== void 0 ? value : '').trim();
68
+ if (text === '')
69
+ return removeCustom(this, property);
70
+ if (priority && !/^important$/i.test(priority))
71
+ return undefined;
72
+ const styles = this._parsed;
73
+ styles.property[property] = text.replace(IMPORTANT, '');
74
+ if (priority || IMPORTANT.test(text))
75
+ styles.priority[property] = 'important';
76
+ else
77
+ delete styles.priority[property];
78
+ this._serialize();
79
+ return undefined;
80
+ },
81
+ },
82
+ removeProperty: {
83
+ value(property) {
84
+ return isCustom(property) ? removeCustom(this, property) : removeProperty.call(this, property);
85
+ },
86
+ },
87
+ });
88
+ return style;
89
+ };
90
+ /**
91
+ * Domino lowercases and hyphenates every property name its `CSSStyleDeclaration` parses or sets,
92
+ * so `--accentDeep` serialises as `--accentdeep`. Custom properties are case-sensitive; this
93
+ * makes the `style` of every element created from `elementProto` keep their case.
94
+ */
95
+ const keepCustomPropertyCase = (elementProto) => {
96
+ if (Object.getOwnPropertyDescriptor(elementProto, '_style'))
97
+ return;
98
+ const styles = new WeakMap();
99
+ // Domino caches each element's declaration in `this._style`; an accessor here sees it created.
100
+ Object.defineProperty(elementProto, '_style', {
101
+ configurable: true,
102
+ get() {
103
+ return styles.get(this);
104
+ },
105
+ set(style) {
106
+ styles.set(this, keepCaseOn(style));
107
+ },
108
+ });
109
+ };
110
+ exports.keepCustomPropertyCase = keepCustomPropertyCase;
111
+ class NoopMutationObserver {
112
+ observe() {
113
+ return undefined;
114
+ }
115
+ disconnect() {
116
+ return undefined;
117
+ }
118
+ takeRecords() {
119
+ return [];
120
+ }
121
+ }
122
+ /** Domino ships no `MutationObserver`; nothing mutates a server render after it is serialised, so one that never fires is exact. */
123
+ const shimMutationObserver = (scope) => {
124
+ var _a;
125
+ (_a = scope.MutationObserver) !== null && _a !== void 0 ? _a : (scope.MutationObserver = NoopMutationObserver);
126
+ };
127
+ exports.shimMutationObserver = shimMutationObserver;
128
+ //# sourceMappingURL=ssr-shims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr-shims.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/ssr-shims.ts"],"names":[],"mappings":"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"}