@ethlete/cli 3.0.0-next.22 → 3.0.0-next.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +66 -0
- package/design/contrast.ts +49 -0
- package/design/define-call.ts +5 -8
- package/design/define-part.ts +63 -1
- package/design/morph.ts +67 -0
- package/design/motion-runtime.ts +200 -0
- package/design/web/env.d.ts +6 -2
- package/design/web/frame.ts +39 -1
- package/package.json +2 -1
- package/playwright/failure-reporter.d.ts +2 -0
- package/playwright/failure-reporter.js +1 -0
- package/src/lib/design/changed-parts.d.ts +4 -4
- package/src/lib/design/changed-parts.js +10 -6
- package/src/lib/design/changed-parts.js.map +1 -1
- package/src/lib/design/check.js +1 -1
- package/src/lib/design/check.js.map +1 -1
- package/src/lib/design/contact-sheet.d.ts +39 -8
- package/src/lib/design/contact-sheet.js +131 -21
- package/src/lib/design/contact-sheet.js.map +1 -1
- package/src/lib/design/design-command.js +22 -2
- package/src/lib/design/design-command.js.map +1 -1
- package/src/lib/design/generated-stylesheets.d.ts +15 -0
- package/src/lib/design/generated-stylesheets.js +52 -0
- package/src/lib/design/generated-stylesheets.js.map +1 -0
- package/src/lib/design/inbox-command.d.ts +1 -0
- package/src/lib/design/inbox-command.js +15 -0
- package/src/lib/design/inbox-command.js.map +1 -1
- package/src/lib/design/merge-compare.d.ts +10 -0
- package/src/lib/design/merge-compare.js +17 -4
- package/src/lib/design/merge-compare.js.map +1 -1
- package/src/lib/design/paths.d.ts +11 -0
- package/src/lib/design/paths.js.map +1 -1
- package/src/lib/design/render.d.ts +3 -1
- package/src/lib/design/render.js +17 -1
- package/src/lib/design/render.js.map +1 -1
- package/src/lib/design/serve.js +317 -254
- package/src/lib/design/serve.js.map +1 -1
- package/src/lib/design/shot-command.d.ts +25 -0
- package/src/lib/design/shot-command.js +162 -62
- package/src/lib/design/shot-command.js.map +1 -1
- package/src/lib/design/shot.d.ts +14 -4
- package/src/lib/design/shot.js +71 -50
- package/src/lib/design/shot.js.map +1 -1
- package/src/lib/design/sketch-command.d.ts +7 -1
- package/src/lib/design/sketch-command.js +108 -31
- package/src/lib/design/sketch-command.js.map +1 -1
- package/src/lib/design/sketch-stylesheets.d.ts +7 -0
- package/src/lib/design/sketch-stylesheets.js +63 -0
- package/src/lib/design/sketch-stylesheets.js.map +1 -0
- package/src/lib/design/studio-api.d.ts +20 -7
- package/src/lib/design/studio-api.js +99 -28
- package/src/lib/design/studio-api.js.map +1 -1
- package/src/lib/design/system/check-system.js +8 -0
- package/src/lib/design/system/check-system.js.map +1 -1
- package/src/lib/design/system/comments/comment.d.ts +18 -1
- package/src/lib/design/system/comments/comment.js +35 -1
- package/src/lib/design/system/comments/comment.js.map +1 -1
- package/src/lib/design/system/comments/complete.js +4 -2
- package/src/lib/design/system/comments/complete.js.map +1 -1
- package/src/lib/design/system/complete-command.d.ts +9 -0
- package/src/lib/design/system/complete-command.js +64 -0
- package/src/lib/design/system/complete-command.js.map +1 -0
- package/src/lib/design/system/complete.d.ts +73 -0
- package/src/lib/design/system/complete.js +655 -0
- package/src/lib/design/system/complete.js.map +1 -0
- package/src/lib/design/system/contrast-check.d.ts +26 -0
- package/src/lib/design/system/contrast-check.js +153 -0
- package/src/lib/design/system/contrast-check.js.map +1 -0
- package/src/lib/design/system/imports.d.ts +28 -3
- package/src/lib/design/system/imports.js +84 -7
- package/src/lib/design/system/imports.js.map +1 -1
- package/src/lib/design/system/list-system.d.ts +11 -0
- package/src/lib/design/system/list-system.js +17 -1
- package/src/lib/design/system/list-system.js.map +1 -1
- package/src/lib/design/system/product-stylesheets.d.ts +3 -0
- package/src/lib/design/system/product-stylesheets.js +40 -0
- package/src/lib/design/system/product-stylesheets.js.map +1 -0
- package/src/lib/design/system/render-check.js +11 -3
- package/src/lib/design/system/render-check.js.map +1 -1
- package/src/lib/design/system/rules/canonical-class.d.ts +9 -0
- package/src/lib/design/system/rules/canonical-class.js +132 -0
- package/src/lib/design/system/rules/canonical-class.js.map +1 -0
- package/src/lib/design/system/rules/inline-svg.d.ts +7 -0
- package/src/lib/design/system/rules/inline-svg.js +28 -0
- package/src/lib/design/system/rules/inline-svg.js.map +1 -0
- package/src/lib/design/system/rules/motion.d.ts +4 -0
- package/src/lib/design/system/rules/motion.js +46 -2
- package/src/lib/design/system/rules/motion.js.map +1 -1
- package/src/lib/design/system/rules/utility-css.d.ts +11 -0
- package/src/lib/design/system/rules/utility-css.js +290 -0
- package/src/lib/design/system/rules/utility-css.js.map +1 -0
- package/src/lib/design/system/sketch/baseline.d.ts +3 -2
- package/src/lib/design/system/sketch/baseline.js +10 -4
- package/src/lib/design/system/sketch/baseline.js.map +1 -1
- package/src/lib/design/system/sketch/merge-preview.d.ts +4 -2
- package/src/lib/design/system/sketch/merge-preview.js +20 -3
- package/src/lib/design/system/sketch/merge-preview.js.map +1 -1
- package/src/lib/design/system/sketch/merge-shared.d.ts +42 -6
- package/src/lib/design/system/sketch/merge-shared.js +122 -24
- package/src/lib/design/system/sketch/merge-shared.js.map +1 -1
- package/src/lib/design/system/sketch/merge.d.ts +3 -3
- package/src/lib/design/system/sketch/merge.js +57 -29
- package/src/lib/design/system/sketch/merge.js.map +1 -1
- package/src/lib/design/system/sketch/merged-parts.d.ts +7 -0
- package/src/lib/design/system/sketch/merged-parts.js +13 -1
- package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
- package/src/lib/design/system/sketch/no-visible-change.d.ts +4 -3
- package/src/lib/design/system/sketch/no-visible-change.js +50 -19
- package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
- package/src/lib/design/system/sketch/overlay.js +7 -2
- package/src/lib/design/system/sketch/overlay.js.map +1 -1
- package/src/lib/design/system/sketch/part-definition.d.ts +12 -0
- package/src/lib/design/system/sketch/part-definition.js +40 -1
- package/src/lib/design/system/sketch/part-definition.js.map +1 -1
- package/src/lib/design/system/sketch/sketch.d.ts +63 -12
- package/src/lib/design/system/sketch/sketch.js +165 -36
- package/src/lib/design/system/sketch/sketch.js.map +1 -1
- package/src/lib/design/system/sketch/unchanged-states.d.ts +11 -5
- package/src/lib/design/system/sketch/unchanged-states.js +39 -25
- package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
- package/src/lib/design/system/system-modules.d.ts +5 -1
- package/src/lib/design/system/system-modules.js +26 -8
- package/src/lib/design/system/system-modules.js.map +1 -1
- package/src/lib/design/system/system-tsconfig.js +2 -1
- package/src/lib/design/system/system-tsconfig.js.map +1 -1
- package/src/lib/design/thumb.d.ts +6 -2
- package/src/lib/design/thumb.js +36 -15
- package/src/lib/design/thumb.js.map +1 -1
- package/src/lib/design/typecheck.d.ts +2 -0
- package/src/lib/design/typecheck.js +19 -2
- package/src/lib/design/typecheck.js.map +1 -1
- package/src/lib/design/variant-diff.d.ts +24 -6
- package/src/lib/design/variant-diff.js +26 -10
- package/src/lib/design/variant-diff.js.map +1 -1
- package/src/lib/design/warm-pages.d.ts +20 -0
- package/src/lib/design/warm-pages.js +78 -0
- package/src/lib/design/warm-pages.js.map +1 -0
- package/src/lib/playwright/failure-reporter.d.ts +35 -0
- package/src/lib/playwright/failure-reporter.js +66 -0
- package/src/lib/playwright/failure-reporter.js.map +1 -0
- package/src/lib/update/commits.d.ts +9 -0
- package/src/lib/update/commits.js +15 -1
- package/src/lib/update/commits.js.map +1 -1
- package/src/lib/update/migration-manifest.d.ts +6 -0
- package/src/lib/update/migration-manifest.js +7 -0
- package/src/lib/update/migration-manifest.js.map +1 -1
- package/src/lib/update/migrations-command.js +1 -0
- package/src/lib/update/migrations-command.js.map +1 -1
- package/src/lib/update/run-migrations.d.ts +22 -0
- package/src/lib/update/run-migrations.js +60 -1
- package/src/lib/update/run-migrations.js.map +1 -1
- package/src/lib/update/update-command.d.ts +10 -0
- package/src/lib/update/update-command.js +28 -2
- package/src/lib/update/update-command.js.map +1 -1
package/src/lib/design/serve.js
CHANGED
|
@@ -23,6 +23,8 @@ const product_command_1 = require("./product-command");
|
|
|
23
23
|
const render_1 = require("./render");
|
|
24
24
|
const render_packages_1 = require("./render-packages");
|
|
25
25
|
const part_marks_1 = require("./part-marks");
|
|
26
|
+
const generated_stylesheets_1 = require("./generated-stylesheets");
|
|
27
|
+
const sketch_stylesheets_1 = require("./sketch-stylesheets");
|
|
26
28
|
const shot_1 = require("./shot");
|
|
27
29
|
const changed_parts_1 = require("./changed-parts");
|
|
28
30
|
const stamp_1 = require("./stamp");
|
|
@@ -32,6 +34,7 @@ const system_modules_1 = require("./system/system-modules");
|
|
|
32
34
|
const kit_1 = require("./system/kit");
|
|
33
35
|
const system_tsconfig_1 = require("./system/system-tsconfig");
|
|
34
36
|
const sketch_1 = require("./system/sketch/sketch");
|
|
37
|
+
const unchanged_states_1 = require("./system/sketch/unchanged-states");
|
|
35
38
|
const thumb_1 = require("./thumb");
|
|
36
39
|
const paths_1 = require("./paths");
|
|
37
40
|
const VIRTUAL = 'virtual:design-explore';
|
|
@@ -68,16 +71,31 @@ const workspaceAliases = (target) => {
|
|
|
68
71
|
};
|
|
69
72
|
// Sequential on purpose: Vite appends a sheet's <style> when its import settles, so parallel
|
|
70
73
|
// imports let the head order, and with it the winning rule, change from load to load.
|
|
71
|
-
const
|
|
72
|
-
.map(([name, entry]) => {
|
|
74
|
+
const stylesLoaderOf = (options) => {
|
|
73
75
|
var _a;
|
|
74
|
-
return `
|
|
76
|
+
return `() => Promise.resolve()${((_a = options.entry.styles) !== null && _a !== void 0 ? _a : [])
|
|
75
77
|
.map((style) => (0, path_1.resolve)(options.target, style))
|
|
76
|
-
.map((file) =>
|
|
78
|
+
.map((file) => options.product ? (0, system_modules_1.productModuleIdOf)({ file, product: options.product, sketch: options.sketch }) : file)
|
|
77
79
|
.map((file) => `.then(() => import(${JSON.stringify((0, vite_paths_1.fsUrl)(file))}))`)
|
|
78
80
|
.join('')},`;
|
|
79
|
-
}
|
|
81
|
+
};
|
|
82
|
+
const settingsLoaders = (options) => `{\n${Object.entries(options.settings)
|
|
83
|
+
.map(([name, entry]) => ` ${JSON.stringify(name)}: ${stylesLoaderOf({ target: options.target, entry, product: options.products ? name : undefined })}`)
|
|
80
84
|
.join('\n')}\n}`;
|
|
85
|
+
/** The stylesheets of each product as one sketch variant draws them, for each variant that draws a part stylesheet from a file of its own. */
|
|
86
|
+
const sketchStylesLoaders = (options) => {
|
|
87
|
+
var _a;
|
|
88
|
+
const { target, config, system } = options;
|
|
89
|
+
return `{\n${Object.entries((_a = config.products) !== null && _a !== void 0 ? _a : {})
|
|
90
|
+
.map(([product, entry]) => ` ${JSON.stringify(product)}: {\n${system
|
|
91
|
+
.sketchesOf(product)
|
|
92
|
+
.map(({ target: part, variants }) => ` ${JSON.stringify(part)}: {\n${variants
|
|
93
|
+
.filter((variant) => system.replacedStylesheetsOf({ product, sketch: { target: part, variant } }).size > 0)
|
|
94
|
+
.map((variant) => ` ${JSON.stringify(variant)}: ${stylesLoaderOf({ target, entry, product, sketch: { target: part, variant } })}`)
|
|
95
|
+
.join('\n')}\n },`)
|
|
96
|
+
.join('\n')}\n },`)
|
|
97
|
+
.join('\n')}\n}`;
|
|
98
|
+
};
|
|
81
99
|
const themesOfSettings = (settings) => JSON.stringify(Object.fromEntries(Object.entries(settings).map(([name, entry]) => {
|
|
82
100
|
var _a, _b, _c, _d;
|
|
83
101
|
return [
|
|
@@ -90,8 +108,9 @@ const themesOfSettings = (settings) => JSON.stringify(Object.fromEntries(Object.
|
|
|
90
108
|
* one it draws for: two projects define the same theme variables, so a frame that loaded both would
|
|
91
109
|
* draw under whichever stylesheet came last.
|
|
92
110
|
*/
|
|
93
|
-
const env = (
|
|
111
|
+
const env = (options) => {
|
|
94
112
|
var _a, _b;
|
|
113
|
+
const { target, config, system } = options;
|
|
95
114
|
const projects = (_a = config.projects) !== null && _a !== void 0 ? _a : {};
|
|
96
115
|
const products = (_b = config.products) !== null && _b !== void 0 ? _b : {};
|
|
97
116
|
return (`const envs = ${settingsLoaders({ target, settings: projects })};\n` +
|
|
@@ -99,7 +118,8 @@ const env = (target, config) => {
|
|
|
99
118
|
`const themes = ${themesOfSettings(projects)};\n` +
|
|
100
119
|
`export const themesOf = (project) => themes[project] ?? { surface: [], color: [] };\n` +
|
|
101
120
|
`const productEnvs = ${settingsLoaders({ target, settings: products, products: true })};\n` +
|
|
102
|
-
`
|
|
121
|
+
`const sketchProductEnvs = ${sketchStylesLoaders({ target, config, system })};\n` +
|
|
122
|
+
`export const loadProductEnv = ({ product, sketch, variant }) => (sketchProductEnvs[product]?.[sketch]?.[variant] ?? productEnvs[product] ?? (() => Promise.resolve()))();\n`);
|
|
103
123
|
};
|
|
104
124
|
/** Each product's parts, keyed `<layer>/<name>`, each loaded as the product resolves it. */
|
|
105
125
|
const partsRegistry = (options) => options.parts
|
|
@@ -164,9 +184,14 @@ const isCommentFile = (file) => file.endsWith('.json') && (0, path_1.basename)((
|
|
|
164
184
|
const isNoteFile = (file) => file.endsWith('.json') && (0, path_1.basename)((0, path_1.dirname)(file)) === 'notes';
|
|
165
185
|
const isFlowFile = (file) => file.endsWith('.json') && (0, path_1.basename)((0, path_1.dirname)(file)) === 'flows';
|
|
166
186
|
const isDecisionFile = (file) => (0, path_1.basename)(file) === sketch_1.SKETCH_FILE || isCommentFile(file) || isNoteFile(file);
|
|
187
|
+
const isSketchFile = (designRoot, file) => {
|
|
188
|
+
const [product, folder, ...inside] = (0, path_1.relative)(designRoot, (0, path_1.resolve)(file)).split(path_1.sep);
|
|
189
|
+
return !!product && product !== '..' && folder === 'sketches' && inside.length > 0;
|
|
190
|
+
};
|
|
167
191
|
/**
|
|
168
|
-
* A server-sent event stream for Studio: `comments`
|
|
169
|
-
*
|
|
192
|
+
* A server-sent event stream for Studio: `comments`, `notes`, `flows`, `calls` and `sketches` when a file of that
|
|
193
|
+
* kind changed, and `parts` with the parts a design system change redraws and the revision it gave them. A `parts`
|
|
194
|
+
* event with no parts still tells Studio the system changed.
|
|
170
195
|
*/
|
|
171
196
|
const createDesignEvents = () => {
|
|
172
197
|
const listeners = new Set();
|
|
@@ -203,256 +228,279 @@ const withAssetUrls = (system) => {
|
|
|
203
228
|
const marks = (0, part_marks_1.partMarksTransform)(system);
|
|
204
229
|
return (code, id) => { var _a; return (_a = system.withAssetUrls(code, id)) !== null && _a !== void 0 ? _a : marks(code, id); };
|
|
205
230
|
};
|
|
206
|
-
const designExplore = ({ target, config, system, }) =>
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
if (id === `\0${VIRTUAL}`)
|
|
217
|
-
return registry(target);
|
|
218
|
-
if (id === `\0${VIRTUAL}/env`)
|
|
219
|
-
return env(target, config);
|
|
220
|
-
if (id === `\0${VIRTUAL}/system`)
|
|
221
|
-
return systemRegistry(system);
|
|
222
|
-
return null;
|
|
223
|
-
},
|
|
224
|
-
transform: withAssetUrls(system),
|
|
225
|
-
transformIndexHtml: {
|
|
226
|
-
order: 'pre',
|
|
227
|
-
handler: (html, ctx) => {
|
|
228
|
-
var _a, _b, _c, _d, _e, _f;
|
|
229
|
-
if (!ctx.path.includes('frame'))
|
|
230
|
-
return html;
|
|
231
|
-
const asked = new URL((_a = ctx.originalUrl) !== null && _a !== void 0 ? _a : ctx.path, 'http://localhost');
|
|
232
|
-
const product = asked.searchParams.get('product');
|
|
233
|
-
const head = product
|
|
234
|
-
? (_c = (_b = config.products) === null || _b === void 0 ? void 0 : _b[product]) === null || _c === void 0 ? void 0 : _c.head
|
|
235
|
-
: (_f = (_d = config.projects) === null || _d === void 0 ? void 0 : _d[projectOf((_e = asked.searchParams.get('call')) !== null && _e !== void 0 ? _e : '')]) === null || _f === void 0 ? void 0 : _f.head;
|
|
236
|
-
if (!head)
|
|
237
|
-
return html;
|
|
238
|
-
return html.replace('<!--head-->', (0, fs_1.readFileSync)((0, path_1.resolve)(target, head), 'utf8'));
|
|
231
|
+
const designExplore = ({ target, config, system, stylesheetImports, }) => {
|
|
232
|
+
const renderer = (0, render_1.createRenderer)({ target, config });
|
|
233
|
+
return {
|
|
234
|
+
name: 'design-explore',
|
|
235
|
+
enforce: 'pre',
|
|
236
|
+
resolveId: (id, importer) => {
|
|
237
|
+
var _a, _b, _c;
|
|
238
|
+
if (id === VIRTUAL || id === `${VIRTUAL}/env` || id === `${VIRTUAL}/system`)
|
|
239
|
+
return `\0${id}`;
|
|
240
|
+
return ((_a = system.resolveId(id, importer)) !== null && _a !== void 0 ? _a : (0, render_packages_1.mappedSubpathOf)({ specifier: id, packages: (_c = (_b = config.render) === null || _b === void 0 ? void 0 : _b.packages) !== null && _c !== void 0 ? _c : {}, target }));
|
|
239
241
|
},
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
const
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
vite.moduleGraph.invalidateModule(module);
|
|
277
|
-
}
|
|
278
|
-
};
|
|
279
|
-
const forgetCalls = (file) => {
|
|
280
|
-
thumbs.forget((0, path_1.relative)(callsRoot, file));
|
|
281
|
-
shots.forgetCalls((0, path_1.relative)(callsRoot, file));
|
|
282
|
-
};
|
|
283
|
-
const events = createDesignEvents();
|
|
284
|
-
let revision = 0;
|
|
285
|
-
const redraw = (change) => {
|
|
286
|
-
if (!change.all && change.parts.length === 0 && !change.errored)
|
|
287
|
-
return;
|
|
288
|
-
revision += 1;
|
|
289
|
-
if (change.all)
|
|
290
|
-
shots.clear();
|
|
291
|
-
else
|
|
292
|
-
shots.forget(change);
|
|
293
|
-
events.signal('parts', Object.assign({ revision }, change));
|
|
294
|
-
};
|
|
295
|
-
const hot = (_b = (_a = vite.environments) === null || _a === void 0 ? void 0 : _a['client']) === null || _b === void 0 ? void 0 : _b.hot;
|
|
296
|
-
if (hot) {
|
|
297
|
-
const send = hot.send.bind(hot);
|
|
298
|
-
hot.send = (payload, data) => {
|
|
299
|
-
// HMR is disabled: Studio must replace frames when Vite invalidates optimized dependency URLs.
|
|
300
|
-
if (typeof payload === 'object' && payload.type === 'full-reload') {
|
|
301
|
-
thumbs.clear();
|
|
302
|
-
redraw(changed_parts_1.ALL_PARTS);
|
|
303
|
-
}
|
|
304
|
-
return typeof payload === 'string' ? send(payload, data) : send(payload);
|
|
242
|
+
load: (id) => {
|
|
243
|
+
if (id === `\0${VIRTUAL}`)
|
|
244
|
+
return registry(target);
|
|
245
|
+
if (id === `\0${VIRTUAL}/env`)
|
|
246
|
+
return env({ target, config, system });
|
|
247
|
+
if (id === `\0${VIRTUAL}/system`)
|
|
248
|
+
return systemRegistry(system);
|
|
249
|
+
return null;
|
|
250
|
+
},
|
|
251
|
+
transform: withAssetUrls(system),
|
|
252
|
+
transformIndexHtml: {
|
|
253
|
+
order: 'pre',
|
|
254
|
+
handler: (html, ctx) => {
|
|
255
|
+
var _a, _b, _c, _d, _e, _f;
|
|
256
|
+
if (!ctx.path.includes('frame'))
|
|
257
|
+
return html;
|
|
258
|
+
const asked = new URL((_a = ctx.originalUrl) !== null && _a !== void 0 ? _a : ctx.path, 'http://localhost');
|
|
259
|
+
const product = asked.searchParams.get('product');
|
|
260
|
+
const head = product
|
|
261
|
+
? (_c = (_b = config.products) === null || _b === void 0 ? void 0 : _b[product]) === null || _c === void 0 ? void 0 : _c.head
|
|
262
|
+
: (_f = (_d = config.projects) === null || _d === void 0 ? void 0 : _d[projectOf((_e = asked.searchParams.get('call')) !== null && _e !== void 0 ? _e : '')]) === null || _f === void 0 ? void 0 : _f.head;
|
|
263
|
+
if (!head)
|
|
264
|
+
return html;
|
|
265
|
+
return html.replace('<!--head-->', (0, fs_1.readFileSync)((0, path_1.resolve)(target, head), 'utf8'));
|
|
266
|
+
},
|
|
267
|
+
},
|
|
268
|
+
/** The registries are built once per load, so a new call or part folder is invisible until it is invalidated. */
|
|
269
|
+
configureServer: (vite) => {
|
|
270
|
+
var _a, _b, _c;
|
|
271
|
+
const callsRoot = (0, paths_1.callsRootOf)(target);
|
|
272
|
+
const designRoot = (0, path_1.resolve)(target, paths_1.DESIGN_DIR);
|
|
273
|
+
const stamp = (0, stamp_1.buildStampOf)();
|
|
274
|
+
const base = () => {
|
|
275
|
+
var _a;
|
|
276
|
+
const address = (_a = vite.httpServer) === null || _a === void 0 ? void 0 : _a.address();
|
|
277
|
+
return `http://localhost:${address && typeof address === 'object' ? address.port : (0, paths_1.portOf)(config)}`;
|
|
305
278
|
};
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
const reloadConfig = () => {
|
|
309
|
-
let next;
|
|
310
|
-
try {
|
|
311
|
-
next = (0, paths_1.readConfig)(target);
|
|
312
|
-
}
|
|
313
|
-
catch (error) {
|
|
314
|
-
console.error(`design-explore: ${configPath} is invalid, keeping the last good config (${error instanceof Error ? error.message : String(error)})`);
|
|
315
|
-
return;
|
|
316
|
-
}
|
|
317
|
-
if (!next)
|
|
318
|
-
return;
|
|
319
|
-
for (const key of Object.keys(config))
|
|
320
|
-
delete config[key];
|
|
321
|
-
Object.assign(config, next);
|
|
322
|
-
system.forget();
|
|
323
|
-
reload(`${VIRTUAL}/env`);
|
|
324
|
-
reload(`${VIRTUAL}/system`);
|
|
325
|
-
redraw(changed_parts_1.ALL_PARTS);
|
|
326
|
-
};
|
|
327
|
-
const reloadFlows = () => {
|
|
328
|
-
thumbs.clear();
|
|
329
|
-
shots.clear();
|
|
330
|
-
events.signal('flows');
|
|
331
|
-
};
|
|
332
|
-
const refresh = (file) => {
|
|
333
|
-
if ((0, path_1.resolve)(file) === configPath)
|
|
334
|
-
return reloadConfig();
|
|
335
|
-
if (isCommentFile(file))
|
|
336
|
-
return events.signal('comments');
|
|
337
|
-
if (isNoteFile(file))
|
|
338
|
-
return events.signal('notes');
|
|
339
|
-
if (isFlowFile(file))
|
|
340
|
-
return reloadFlows();
|
|
341
|
-
forgetCalls(file);
|
|
342
|
-
if ((0, vite_paths_1.isCallFile)({ callsRoot, file }))
|
|
343
|
-
return reload(VIRTUAL);
|
|
344
|
-
if (isDecisionFile(file))
|
|
345
|
-
return;
|
|
346
|
-
if (isInside(callsRoot, file) || ![designRoot, ...baseDirs].some((dir) => isInside(dir, file)))
|
|
347
|
-
return;
|
|
348
|
-
system.forget();
|
|
349
|
-
unresolveParts();
|
|
350
|
-
reload(`${VIRTUAL}/system`);
|
|
351
|
-
redraw((0, changed_parts_1.addedPartsOf)({ designRoot, baseDirs, system, file: (0, path_1.resolve)(file) }));
|
|
352
|
-
};
|
|
353
|
-
const change = (file) => {
|
|
354
|
-
var _a;
|
|
355
|
-
if ((0, path_1.resolve)(file) === configPath)
|
|
356
|
-
return reloadConfig();
|
|
357
|
-
if (isCommentFile(file))
|
|
358
|
-
return events.signal('comments');
|
|
359
|
-
if (isNoteFile(file))
|
|
360
|
-
return events.signal('notes');
|
|
361
|
-
if (isFlowFile(file))
|
|
362
|
-
return reloadFlows();
|
|
363
|
-
forgetCalls(file);
|
|
364
|
-
const dependents = (0, shot_1.dependentIdsOf)((_a = vite.moduleGraph.getModulesByFile(file)) !== null && _a !== void 0 ? _a : []);
|
|
365
|
-
redraw((0, changed_parts_1.changedPartsOf)({ target, config, system, file, dependents }));
|
|
366
|
-
};
|
|
367
|
-
const answer = (handle) => (request, response) => {
|
|
368
|
-
var _a;
|
|
369
|
-
return void handle(new URL((_a = request.url) !== null && _a !== void 0 ? _a : '', 'http://localhost'), request).then((answered) => sendJson(response, answered), (error) => sendJson(response, {
|
|
370
|
-
status: 500,
|
|
371
|
-
body: { error: error instanceof Error ? error.message : String(error) },
|
|
372
|
-
}));
|
|
373
|
-
};
|
|
374
|
-
vite.middlewares.use(stamp_1.STAMP_PATH, (_request, response) => {
|
|
375
|
-
response.setHeader('content-type', 'application/json');
|
|
376
|
-
response.end(JSON.stringify(stamp));
|
|
377
|
-
});
|
|
378
|
-
vite.middlewares.use(render_1.RENDER_PATH, (0, render_1.renderMiddleware)((0, render_1.createRenderer)({ target, config })));
|
|
379
|
-
vite.middlewares.use(render_1.FORCE_PATH, render_1.forceMiddleware);
|
|
380
|
-
vite.middlewares.use(thumb_1.THUMB_PATH, thumbs.middleware);
|
|
381
|
-
vite.middlewares.use(shot_1.SHOT_PATH, shots.middleware);
|
|
382
|
-
vite.middlewares.use(list_system_1.SYSTEM_PATH, answer((url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
383
|
-
var _a;
|
|
384
|
-
const asked = url.searchParams.get('product');
|
|
385
|
-
if (asked && !((_a = config.products) === null || _a === void 0 ? void 0 : _a[asked]))
|
|
386
|
-
return { status: 404, body: { error: `no product "${asked}"` } };
|
|
387
|
-
const products = yield (0, list_system_1.listSystem)({
|
|
279
|
+
const thumbs = (0, thumb_1.createThumbnailer)({ target, base });
|
|
280
|
+
const shots = (0, shot_1.createPartShooter)({
|
|
388
281
|
target,
|
|
282
|
+
base,
|
|
389
283
|
system,
|
|
390
|
-
|
|
391
|
-
|
|
284
|
+
statesOf: (_a) => __awaiter(void 0, [_a], void 0, function* ({ product, part, sketch }) {
|
|
285
|
+
var _b, _c;
|
|
286
|
+
const file = (_b = system.partOf({ product, part, sketch })) === null || _b === void 0 ? void 0 : _b.file;
|
|
287
|
+
if (!file)
|
|
288
|
+
return null;
|
|
289
|
+
const module = (yield vite.ssrLoadModule((0, system_modules_1.productModuleIdOf)({ file, product, sketch })));
|
|
290
|
+
const states = (_c = module.default) === null || _c === void 0 ? void 0 : _c.states;
|
|
291
|
+
return states && typeof states === 'object' ? Object.keys(states) : [];
|
|
292
|
+
}),
|
|
392
293
|
});
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
const
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
294
|
+
const baseDirs = [
|
|
295
|
+
...new Set(system.products().flatMap((name) => { var _a, _b, _c; return (_c = (_b = (_a = system.productOf(name)) === null || _a === void 0 ? void 0 : _a.base) === null || _b === void 0 ? void 0 : _b.dir) !== null && _c !== void 0 ? _c : []; })),
|
|
296
|
+
].filter((dir) => !isInside(designRoot, dir));
|
|
297
|
+
const reload = (id) => {
|
|
298
|
+
const module = vite.moduleGraph.getModuleById(`\0${id}`);
|
|
299
|
+
if (module)
|
|
300
|
+
vite.moduleGraph.invalidateModule(module);
|
|
301
|
+
};
|
|
302
|
+
const unresolveParts = () => {
|
|
303
|
+
for (const module of vite.moduleGraph.idToModuleMap.values()) {
|
|
304
|
+
if ((0, system_modules_1.productOfModuleId)(module.id))
|
|
305
|
+
vite.moduleGraph.invalidateModule(module);
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
const forgetCalls = (file) => {
|
|
309
|
+
thumbs.forget((0, path_1.relative)(callsRoot, file));
|
|
310
|
+
shots.forgetCalls((0, path_1.relative)(callsRoot, file));
|
|
311
|
+
};
|
|
312
|
+
const events = createDesignEvents();
|
|
313
|
+
let revision = 0;
|
|
314
|
+
const redraw = (change, listed = false) => {
|
|
315
|
+
if (!change.all && change.parts.length === 0 && !change.errored) {
|
|
316
|
+
if (listed)
|
|
317
|
+
events.signal('parts', Object.assign({ revision }, change));
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
revision += 1;
|
|
321
|
+
(0, unchanged_states_1.forgetUnchangedStates)();
|
|
322
|
+
if (change.all)
|
|
323
|
+
shots.clear();
|
|
324
|
+
else
|
|
325
|
+
shots.forget(change);
|
|
326
|
+
events.signal('parts', Object.assign({ revision }, change));
|
|
327
|
+
};
|
|
328
|
+
const hot = (_b = (_a = vite.environments) === null || _a === void 0 ? void 0 : _a['client']) === null || _b === void 0 ? void 0 : _b.hot;
|
|
329
|
+
if (hot) {
|
|
330
|
+
const send = hot.send.bind(hot);
|
|
331
|
+
hot.send = (payload, data) => {
|
|
332
|
+
// HMR is disabled: Studio must replace frames when Vite invalidates optimized dependency URLs.
|
|
333
|
+
if (typeof payload === 'object' && payload.type === 'full-reload') {
|
|
334
|
+
thumbs.clear();
|
|
335
|
+
redraw(changed_parts_1.ALL_PARTS);
|
|
336
|
+
}
|
|
337
|
+
return typeof payload === 'string' ? send(payload, data) : send(payload);
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
const configPath = (0, paths_1.configPathOf)(target);
|
|
341
|
+
const reloadConfig = () => {
|
|
342
|
+
let next;
|
|
343
|
+
try {
|
|
344
|
+
next = (0, paths_1.readConfig)(target);
|
|
345
|
+
}
|
|
346
|
+
catch (error) {
|
|
347
|
+
console.error(`design-explore: ${configPath} is invalid, keeping the last good config (${error instanceof Error ? error.message : String(error)})`);
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
if (!next)
|
|
351
|
+
return;
|
|
352
|
+
for (const key of Object.keys(config))
|
|
353
|
+
delete config[key];
|
|
354
|
+
Object.assign(config, next);
|
|
355
|
+
system.forget();
|
|
356
|
+
reload(`${VIRTUAL}/env`);
|
|
357
|
+
reload(`${VIRTUAL}/system`);
|
|
358
|
+
redraw(changed_parts_1.ALL_PARTS);
|
|
359
|
+
};
|
|
360
|
+
const reloadFlows = () => {
|
|
361
|
+
thumbs.clear();
|
|
362
|
+
shots.clear();
|
|
363
|
+
events.signal('flows');
|
|
364
|
+
};
|
|
365
|
+
const signalLists = (file) => {
|
|
366
|
+
if (isInside(callsRoot, file))
|
|
367
|
+
events.signal('calls');
|
|
368
|
+
else if (isSketchFile(designRoot, file))
|
|
369
|
+
events.signal('sketches');
|
|
370
|
+
};
|
|
371
|
+
const isSystemFile = (file) => !isInside(callsRoot, file) &&
|
|
372
|
+
!isSketchFile(designRoot, file) &&
|
|
373
|
+
[designRoot, ...baseDirs].some((dir) => isInside(dir, file));
|
|
374
|
+
const refresh = (file) => {
|
|
375
|
+
if ((0, path_1.resolve)(file) === configPath)
|
|
376
|
+
return reloadConfig();
|
|
377
|
+
if (isCommentFile(file))
|
|
378
|
+
return events.signal('comments');
|
|
379
|
+
if (isNoteFile(file))
|
|
380
|
+
return events.signal('notes');
|
|
381
|
+
if (isFlowFile(file))
|
|
382
|
+
return reloadFlows();
|
|
383
|
+
forgetCalls(file);
|
|
384
|
+
signalLists(file);
|
|
385
|
+
if ((0, vite_paths_1.isCallFile)({ callsRoot, file }))
|
|
386
|
+
return reload(VIRTUAL);
|
|
387
|
+
if (isDecisionFile(file))
|
|
388
|
+
return;
|
|
389
|
+
if (isInside(callsRoot, file) || ![designRoot, ...baseDirs].some((dir) => isInside(dir, file)))
|
|
390
|
+
return;
|
|
391
|
+
system.forget();
|
|
392
|
+
unresolveParts();
|
|
393
|
+
reload(`${VIRTUAL}/env`);
|
|
394
|
+
reload(`${VIRTUAL}/system`);
|
|
395
|
+
redraw((0, changed_parts_1.addedPartsOf)({ designRoot, baseDirs, system, file: (0, path_1.resolve)(file) }));
|
|
396
|
+
};
|
|
397
|
+
const change = (file) => {
|
|
398
|
+
var _a;
|
|
399
|
+
if ((0, path_1.resolve)(file) === configPath)
|
|
400
|
+
return reloadConfig();
|
|
401
|
+
if (isCommentFile(file))
|
|
402
|
+
return events.signal('comments');
|
|
403
|
+
if (isNoteFile(file))
|
|
404
|
+
return events.signal('notes');
|
|
405
|
+
if (isFlowFile(file))
|
|
406
|
+
return reloadFlows();
|
|
407
|
+
forgetCalls(file);
|
|
408
|
+
signalLists(file);
|
|
409
|
+
const dependents = (0, shot_1.dependentIdsOf)((_a = vite.moduleGraph.getModulesByFile(file)) !== null && _a !== void 0 ? _a : [], stylesheetImports);
|
|
410
|
+
redraw((0, changed_parts_1.changedPartsOf)({ target, config, system, file, dependents }), isSystemFile(file));
|
|
411
|
+
};
|
|
412
|
+
const answer = (handle) => (request, response) => {
|
|
413
|
+
var _a;
|
|
414
|
+
return void handle(new URL((_a = request.url) !== null && _a !== void 0 ? _a : '', 'http://localhost'), request).then((answered) => sendJson(response, answered), (error) => sendJson(response, {
|
|
415
|
+
status: 500,
|
|
416
|
+
body: { error: error instanceof Error ? error.message : String(error) },
|
|
417
|
+
}));
|
|
418
|
+
};
|
|
419
|
+
vite.middlewares.use(stamp_1.STAMP_PATH, (_request, response) => {
|
|
420
|
+
response.setHeader('content-type', 'application/json');
|
|
421
|
+
response.end(JSON.stringify(stamp));
|
|
405
422
|
});
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
+
vite.middlewares.use(render_1.RENDER_PATH, (0, render_1.renderMiddleware)(renderer));
|
|
424
|
+
vite.middlewares.use(render_1.FORCE_PATH, render_1.forceMiddleware);
|
|
425
|
+
vite.middlewares.use(thumb_1.THUMB_PATH, thumbs.middleware);
|
|
426
|
+
vite.middlewares.use(shot_1.SHOT_PATH, shots.middleware);
|
|
427
|
+
vite.middlewares.use(list_system_1.SYSTEM_PATH, answer((url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
428
|
+
var _a;
|
|
429
|
+
const asked = url.searchParams.get('product');
|
|
430
|
+
if (asked && !((_a = config.products) === null || _a === void 0 ? void 0 : _a[asked]))
|
|
431
|
+
return { status: 404, body: { error: `no product "${asked}"` } };
|
|
432
|
+
const products = yield (0, list_system_1.listSystem)({
|
|
433
|
+
target,
|
|
434
|
+
system,
|
|
435
|
+
products: asked ? [asked] : system.products(),
|
|
436
|
+
load: ({ file, product }) => vite.ssrLoadModule((0, system_modules_1.productModuleIdOf)({ file, product })),
|
|
437
|
+
});
|
|
438
|
+
return { status: 200, body: products };
|
|
439
|
+
})));
|
|
440
|
+
vite.middlewares.use(product_command_1.PRODUCT_PATH, answer((_url, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
441
|
+
const created = yield (0, product_command_1.newProductAnswer)({ target, request });
|
|
442
|
+
if (created.status === 201)
|
|
443
|
+
reloadConfig();
|
|
444
|
+
return created;
|
|
445
|
+
})));
|
|
446
|
+
vite.middlewares.use(calls_1.CALLS_PATH, answer(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
447
|
+
return ({
|
|
448
|
+
status: 200,
|
|
449
|
+
body: yield (0, calls_1.listCalls)({ target, load: (file) => vite.ssrLoadModule(file) }),
|
|
450
|
+
});
|
|
451
|
+
})));
|
|
452
|
+
vite.middlewares.use(legacy_1.TRANSFER_PATH, answer((url, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
453
|
+
var _a;
|
|
454
|
+
if (request.method !== 'POST')
|
|
455
|
+
return { status: 405, body: { error: 'POST only' } };
|
|
456
|
+
const result = (0, legacy_1.markTransferred)({ target, slug: (_a = url.searchParams.get('call')) !== null && _a !== void 0 ? _a : '' });
|
|
457
|
+
const status = result === 'missing' ? 404 : result === 'unreadable' ? 422 : 200;
|
|
458
|
+
return { status, body: { result } };
|
|
459
|
+
})));
|
|
460
|
+
const studio = (path, handle) => vite.middlewares.use(path, answer((url, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
461
|
+
return handle({
|
|
462
|
+
target,
|
|
463
|
+
url,
|
|
464
|
+
request,
|
|
465
|
+
load: ({ file, product, sketch }) => vite.ssrLoadModule((0, system_modules_1.productModuleIdOf)({ file, product, sketch })),
|
|
466
|
+
pictureOf: shots.pictureOf,
|
|
467
|
+
boxOf: shots.changedBoxesOf,
|
|
468
|
+
});
|
|
469
|
+
})));
|
|
470
|
+
studio(studio_api_1.SKETCHES_PATH, studio_api_1.sketchesAnswer);
|
|
471
|
+
studio(studio_api_1.SKETCH_PREVIEW_PATH, studio_api_1.sketchPreviewAnswer);
|
|
472
|
+
studio(studio_api_1.SKETCH_COMPARE_PATH, studio_api_1.sketchCompareAnswer);
|
|
473
|
+
studio(studio_api_1.SKETCH_DIFF_PATH, studio_api_1.sketchDiffAnswer);
|
|
474
|
+
studio(studio_api_1.SKETCH_CROP_PATH, studio_api_1.sketchCropAnswer);
|
|
475
|
+
studio(studio_api_1.SKETCH_DECISION_PATH, studio_api_1.sketchDecisionAnswer);
|
|
476
|
+
studio(studio_api_1.SKETCH_MERGE_PATH, studio_api_1.sketchMergeAnswer);
|
|
477
|
+
studio(studio_api_1.SKETCH_DISCARD_PATH, studio_api_1.sketchDiscardAnswer);
|
|
478
|
+
studio(studio_api_1.COMMENTS_PATH, studio_api_1.commentsAnswer);
|
|
479
|
+
studio(studio_api_1.COMMENT_PATH, studio_api_1.commentAnswer);
|
|
480
|
+
studio(studio_api_1.COMMENT_DONE_PATH, studio_api_1.commentDoneAnswer);
|
|
481
|
+
studio(studio_api_1.COMMENT_WITHDRAW_PATH, studio_api_1.commentWithdrawAnswer);
|
|
482
|
+
studio(studio_api_1.COMMENT_REPLY_PATH, studio_api_1.commentReplyAnswer);
|
|
483
|
+
studio(studio_api_1.FLOWS_PATH, studio_api_1.flowsAnswer);
|
|
484
|
+
studio(studio_api_1.NOTES_PATH, studio_api_1.notesAnswer);
|
|
485
|
+
studio(studio_api_1.NOTE_PATH, studio_api_1.noteAnswer);
|
|
486
|
+
studio(studio_api_1.NOTE_CHANGE_PATH, studio_api_1.noteChangeAnswer);
|
|
487
|
+
studio(studio_api_1.NOTE_DELETE_PATH, studio_api_1.noteDeleteAnswer);
|
|
488
|
+
studio(studio_api_1.FLOW_NOTE_PATH, studio_api_1.flowNoteAnswer);
|
|
489
|
+
studio(studio_api_1.FLOW_NOTE_CHANGE_PATH, studio_api_1.flowNoteChangeAnswer);
|
|
490
|
+
studio(studio_api_1.FLOW_NOTE_DELETE_PATH, studio_api_1.flowNoteDeleteAnswer);
|
|
491
|
+
vite.middlewares.use(studio_api_1.COMMENT_EVENTS_PATH, events.middleware);
|
|
492
|
+
(_c = vite.httpServer) === null || _c === void 0 ? void 0 : _c.on('close', () => {
|
|
493
|
+
events.close();
|
|
494
|
+
void Promise.all([thumbs.close(), shots.close()]);
|
|
423
495
|
});
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
studio(studio_api_1.COMMENTS_PATH, studio_api_1.commentsAnswer);
|
|
433
|
-
studio(studio_api_1.COMMENT_PATH, studio_api_1.commentAnswer);
|
|
434
|
-
studio(studio_api_1.COMMENT_DONE_PATH, studio_api_1.commentDoneAnswer);
|
|
435
|
-
studio(studio_api_1.COMMENT_WITHDRAW_PATH, studio_api_1.commentWithdrawAnswer);
|
|
436
|
-
studio(studio_api_1.COMMENT_REPLY_PATH, studio_api_1.commentReplyAnswer);
|
|
437
|
-
studio(studio_api_1.FLOWS_PATH, studio_api_1.flowsAnswer);
|
|
438
|
-
studio(studio_api_1.NOTES_PATH, studio_api_1.notesAnswer);
|
|
439
|
-
studio(studio_api_1.NOTE_PATH, studio_api_1.noteAnswer);
|
|
440
|
-
studio(studio_api_1.NOTE_CHANGE_PATH, studio_api_1.noteChangeAnswer);
|
|
441
|
-
studio(studio_api_1.NOTE_DELETE_PATH, studio_api_1.noteDeleteAnswer);
|
|
442
|
-
studio(studio_api_1.FLOW_NOTE_PATH, studio_api_1.flowNoteAnswer);
|
|
443
|
-
studio(studio_api_1.FLOW_NOTE_CHANGE_PATH, studio_api_1.flowNoteChangeAnswer);
|
|
444
|
-
studio(studio_api_1.FLOW_NOTE_DELETE_PATH, studio_api_1.flowNoteDeleteAnswer);
|
|
445
|
-
vite.middlewares.use(studio_api_1.COMMENT_EVENTS_PATH, events.middleware);
|
|
446
|
-
(_c = vite.httpServer) === null || _c === void 0 ? void 0 : _c.on('close', () => {
|
|
447
|
-
events.close();
|
|
448
|
-
void Promise.all([thumbs.close(), shots.close()]);
|
|
449
|
-
});
|
|
450
|
-
vite.watcher.add([designRoot, ...baseDirs]);
|
|
451
|
-
vite.watcher.on('add', refresh);
|
|
452
|
-
vite.watcher.on('unlink', refresh);
|
|
453
|
-
vite.watcher.on('change', change);
|
|
454
|
-
},
|
|
455
|
-
});
|
|
496
|
+
vite.watcher.add([designRoot, ...baseDirs]);
|
|
497
|
+
vite.watcher.on('add', refresh);
|
|
498
|
+
vite.watcher.on('unlink', refresh);
|
|
499
|
+
vite.watcher.on('change', change);
|
|
500
|
+
},
|
|
501
|
+
closeBundle: () => renderer.close(),
|
|
502
|
+
};
|
|
503
|
+
};
|
|
456
504
|
const freePortOf = () => new Promise((resolvePort, reject) => {
|
|
457
505
|
const probe = (0, net_1.createServer)();
|
|
458
506
|
probe.once('error', reject);
|
|
@@ -480,6 +528,7 @@ const createDesignServer = (options) => __awaiter(void 0, void 0, void 0, functi
|
|
|
480
528
|
const { default: tailwind } = yield import('@tailwindcss/postcss');
|
|
481
529
|
const here = (0, paths_1.assetRoot)();
|
|
482
530
|
const system = (0, system_modules_1.createSystemModules)({ target, config, sketchesRoot });
|
|
531
|
+
const generatedStylesheetsOf = (0, generated_stylesheets_1.createGeneratedStylesheets)({ target, config, system });
|
|
483
532
|
if (listen) {
|
|
484
533
|
for (const name of system.products()) {
|
|
485
534
|
const product = system.productOf(name);
|
|
@@ -488,10 +537,24 @@ const createDesignServer = (options) => __awaiter(void 0, void 0, void 0, functi
|
|
|
488
537
|
}
|
|
489
538
|
}
|
|
490
539
|
const baseDirs = system.products().flatMap((name) => { var _a, _b, _c; return (_c = (_b = (_a = system.productOf(name)) === null || _a === void 0 ? void 0 : _a.base) === null || _b === void 0 ? void 0 : _b.dir) !== null && _c !== void 0 ? _c : []; });
|
|
540
|
+
const stylesheetImports = new Map();
|
|
491
541
|
const server = yield createServer(Object.assign(Object.assign(Object.assign({ configFile: false, root: (0, path_1.resolve)(here, 'web'),
|
|
492
542
|
// Every drawing is ruled under Tailwind 4, whatever the checkout installs. The tool brings its
|
|
493
543
|
// own pipeline so no checkout's postcss config reaches a drawing.
|
|
494
|
-
css: {
|
|
544
|
+
css: {
|
|
545
|
+
postcss: {
|
|
546
|
+
plugins: [
|
|
547
|
+
(0, sketch_stylesheets_1.sketchStylesheetsPlugin)((id) => {
|
|
548
|
+
var _a;
|
|
549
|
+
const drawn = { product: (_a = (0, system_modules_1.productOfModuleId)(id)) !== null && _a !== void 0 ? _a : '', sketch: (0, system_modules_1.sketchOfModuleId)(id) };
|
|
550
|
+
return generatedStylesheetsOf(drawn).then((generated) => new Map([...system.replacedStylesheetsOf(drawn), ...generated]));
|
|
551
|
+
}),
|
|
552
|
+
tailwind(),
|
|
553
|
+
(0, force_interactions_1.forceInteractionsPlugin)(),
|
|
554
|
+
(0, shot_1.stylesheetImportsPlugin)(stylesheetImports),
|
|
555
|
+
],
|
|
556
|
+
},
|
|
557
|
+
}, cacheDir: (0, paths_1.viteCacheOf)(target, own ? 'vite-check' : 'vite'), resolve: {
|
|
495
558
|
alias: [
|
|
496
559
|
{ find: /^@design-explore$/, replacement: (0, path_1.resolve)(here, 'define-call.ts') },
|
|
497
560
|
{ find: new RegExp(`^${system_tsconfig_1.DESIGN_SYSTEM_SPECIFIER}$`), replacement: (0, path_1.resolve)(here, 'define-part.ts') },
|
|
@@ -501,7 +564,7 @@ const createDesignServer = (options) => __awaiter(void 0, void 0, void 0, functi
|
|
|
501
564
|
},
|
|
502
565
|
// A design mock ships as TS that imports CSS with `?inline`, which the dependency pre-bundler
|
|
503
566
|
// can not load.
|
|
504
|
-
optimizeDeps: { exclude: ['@ethlete/components', '@ethlete/core'] }, plugins: [designExplore({ target, config, system })] }, (listen ? {} : { appType: 'custom' })), (listen && !own ? {} : { logLevel: 'error' })), { server: Object.assign(Object.assign({
|
|
567
|
+
optimizeDeps: { exclude: ['@ethlete/components', '@ethlete/core'] }, plugins: [designExplore({ target, config, system, stylesheetImports })] }, (listen ? {} : { appType: 'custom' })), (listen && !own ? {} : { logLevel: 'error' })), { server: Object.assign(Object.assign({
|
|
505
568
|
// Studio swaps a frame for a fresh one once it has painted; a Vite reload would blank every frame at once.
|
|
506
569
|
hmr: false }, (listen
|
|
507
570
|
? Object.assign(Object.assign(Object.assign({ port: port !== null && port !== void 0 ? port : (0, paths_1.portOf)(config) }, (host ? { host } : {})), { strictPort: true }), (own ? { watch: null } : {})) : { middlewareMode: true, ws: false, watch: null })), {
|