@byline/cli 4.10.0 → 4.10.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/manifest/deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE7D,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAA;AAEnD;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,YAAY,CAAA;AAEvD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,QAAQ,CAAA;IACf,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;IACvC,0EAA0E;IAC1E,aAAa,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAA;CAC5C;AAKD,eAAO,MAAM,cAAc,QAAwC,CAAA;AACnE,eAAO,MAAM,sBAAsB,QAAsB,CAAA;AA2BzD,eAAO,MAAM,SAAS,EAAE,SAAS,OAAO,EAgL9B,CAAA;AAEV,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAQvE"}
1
+ {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/manifest/deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE7D,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAA;AAEnD;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,YAAY,CAAA;AAEvD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,QAAQ,CAAA;IACf,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;IACvC,0EAA0E;IAC1E,aAAa,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAA;CAC5C;AAKD,eAAO,MAAM,cAAc,QAAwC,CAAA;AACnE,eAAO,MAAM,sBAAsB,QAAsB,CAAA;AA2BzD,eAAO,MAAM,SAAS,EAAE,SAAS,OAAO,EAsL9B,CAAA;AAEV,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,OAAO,EAAE,CAQvE"}
@@ -151,6 +151,12 @@ export const DEP_SPECS = [
151
151
  group: 'runtime',
152
152
  note: 'native libvips binding imported by @byline/core/image; externalised at the SSR boundary so pnpm must symlink it into the host app',
153
153
  },
154
+ {
155
+ name: 'use-sync-external-store',
156
+ version: '^1.6.0',
157
+ group: 'runtime',
158
+ note: "named in vite.config.ts's environments.client.optimizeDeps.include; it is otherwise only ever a transitive dependency (of @base-ui/react and @tanstack/react-store), and pnpm's strict layout leaves a transitive package unresolvable from the host app root — Vite then fails to pre-bundle it and the admin route never hydrates",
159
+ },
154
160
  {
155
161
  name: 'nitro',
156
162
  version: 'npm:nitro-nightly@latest',
@@ -1 +1 @@
1
- {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/manifest/deps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/manifest/deps.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/phases/wire/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAa,KAAK,EAA2B,MAAM,gBAAgB,CAAA;AAgB/E,eAAO,MAAM,SAAS,EAAE,KAkDvB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/phases/wire/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAa,KAAK,EAA2B,MAAM,gBAAgB,CAAA;AAgB/E,eAAO,MAAM,SAAS,EAAE,KAuDvB,CAAA"}
@@ -57,6 +57,11 @@ export const wirePhase = {
57
57
  break;
58
58
  case 'blocked':
59
59
  ctx.logger.error(` ${sub.key}: ${r.message}`);
60
+ // A blocked sub-edit halts the run, so this note is the user's only
61
+ // instruction for how to unblock it — always show it when present.
62
+ if (r.snippet) {
63
+ ctx.prompter.note(r.snippet, `${sub.key}: required configuration`);
64
+ }
60
65
  break;
61
66
  }
62
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/phases/wire/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/phases/wire/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Merge Byline's required Vite settings into a host application's own
3
+ * `vite.config.ts`.
4
+ *
5
+ * The settings themselves are never written out by hand here. They are
6
+ * extracted from the canonical template (`templates/host/vite.config.ts`) at
7
+ * runtime, so that file stays the single source of truth and this module
8
+ * cannot drift from it. `extractCanonicalPieces` is pinned by a contract test.
9
+ *
10
+ * Merging is deliberately conservative: every insertion must land in a key the
11
+ * host config does not already define. If the config declares any of the keys
12
+ * Byline owns, or is shaped in a way this module does not recognise, the caller
13
+ * is told which pieces could not be placed and falls back to asking the user to
14
+ * merge them by hand. A wrong merge is worse than no merge — it moves the
15
+ * failure from install time, where the CLI can explain it, to a confusing
16
+ * runtime or production-build failure.
17
+ */
18
+ export interface CanonicalPieces {
19
+ /** Source text of each module-level statement, keyed by declaration name. */
20
+ statements: Map<string, string>;
21
+ /** Source text of each `defineConfig` property, keyed by property name. */
22
+ configProps: Map<string, string>;
23
+ /** Source text of each `nitro()` option, keyed by property name. */
24
+ nitroProps: Map<string, string>;
25
+ }
26
+ export interface MergePlan {
27
+ /** Human-readable description of each edit, for the phase preview. */
28
+ changes: string[];
29
+ /** Pieces that could not be placed; the caller surfaces these for hand-merge. */
30
+ unplaced: string[];
31
+ /** Applies the plan and returns the edited source text. */
32
+ apply(): string;
33
+ }
34
+ export type MergeAnalysis = {
35
+ kind: 'canonical';
36
+ } | {
37
+ kind: 'mergeable';
38
+ plan: MergePlan;
39
+ } | {
40
+ kind: 'unrecognized';
41
+ reason: string;
42
+ };
43
+ /**
44
+ * Pull the Byline-owned pieces out of the canonical template. Throws if the
45
+ * template no longer contains an expected piece — that is a build-time bug in
46
+ * Byline, not a problem with the user's config, and it must fail loudly.
47
+ */
48
+ export declare function extractCanonicalPieces(canonicalSource: string): CanonicalPieces;
49
+ /**
50
+ * Decide whether the host's config can take Byline's settings, and if so return
51
+ * a plan that applies them.
52
+ *
53
+ * The async-hooks alias references `byline/async-hooks.browser.ts`, which the
54
+ * scaffold phase writes. Wire runs *before* scaffold, so that file does not
55
+ * exist yet at this point — we still emit the reference, exactly as the
56
+ * canonical full-replace path does, because scaffold always follows wire in a
57
+ * normal `init`. Gating on the file's presence would silently drop the alias
58
+ * from every fresh install.
59
+ */
60
+ export declare function analyzeUserConfig(userSource: string, canonical: CanonicalPieces): MergeAnalysis;
61
+ //# sourceMappingURL=vite-config-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-config-merge.d.ts","sourceRoot":"","sources":["../../../src/phases/wire/vite-config-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA2DH,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,2EAA2E;IAC3E,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,oEAAoE;IACpE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,iFAAiF;IACjF,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,2DAA2D;IAC3D,KAAK,IAAI,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAM5C;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,eAAe,EAAE,MAAM,GAAG,eAAe,CAwC/E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,aAAa,CA2I/F"}
@@ -0,0 +1,348 @@
1
+ /**
2
+ * Merge Byline's required Vite settings into a host application's own
3
+ * `vite.config.ts`.
4
+ *
5
+ * The settings themselves are never written out by hand here. They are
6
+ * extracted from the canonical template (`templates/host/vite.config.ts`) at
7
+ * runtime, so that file stays the single source of truth and this module
8
+ * cannot drift from it. `extractCanonicalPieces` is pinned by a contract test.
9
+ *
10
+ * Merging is deliberately conservative: every insertion must land in a key the
11
+ * host config does not already define. If the config declares any of the keys
12
+ * Byline owns, or is shaped in a way this module does not recognise, the caller
13
+ * is told which pieces could not be placed and falls back to asking the user to
14
+ * merge them by hand. A wrong merge is worse than no merge — it moves the
15
+ * failure from install time, where the CLI can explain it, to a confusing
16
+ * runtime or production-build failure.
17
+ */
18
+ import { Node, Project, SyntaxKind, } from 'ts-morph';
19
+ /** Statements Byline adds above `defineConfig`, in declaration order. */
20
+ const CANONICAL_STATEMENTS = [
21
+ 'browserAsyncHooksShim',
22
+ 'browserAsyncHooksAlias',
23
+ 'bylineSsrNoExternal',
24
+ 'ssrExternal',
25
+ ];
26
+ /** Top-level `defineConfig({...})` keys Byline owns. */
27
+ const CANONICAL_CONFIG_KEYS = ['environments', 'ssr', 'optimizeDeps'];
28
+ /** Keys Byline adds to the `nitro({...})` plugin call. */
29
+ const CANONICAL_NITRO_KEYS = ['noExternals', 'rolldownConfig'];
30
+ /** The plugin Byline prepends to the `plugins` array. */
31
+ const BYLINE_PLUGIN_CALL = 'browserAsyncHooksAlias()';
32
+ /**
33
+ * A substring that only appears in Byline's own value for a given key.
34
+ *
35
+ * A key being present is not the same as a key being *ours*. Re-running `init`,
36
+ * or inspecting the canonical config itself, must recognise Byline's settings as
37
+ * already applied rather than reporting them as host-owned conflicts. Byline's
38
+ * values always reference a Byline identifier or scope, so that is the tell.
39
+ */
40
+ const KEY_MARKERS = {
41
+ environments: 'bylineSsrNoExternal',
42
+ ssr: 'bylineSsrNoExternal',
43
+ optimizeDeps: 'ssrExternal',
44
+ noExternals: '@byline/',
45
+ rolldownConfig: '@byline/',
46
+ };
47
+ function isBylineOwnedValue(key, text) {
48
+ const marker = KEY_MARKERS[key];
49
+ return marker != null && text.includes(marker);
50
+ }
51
+ /**
52
+ * Whitespace-insensitive comparison. A value written by an earlier release and
53
+ * then reformatted — by `formatText` here, or by the host's own formatter — is
54
+ * still the same value, and must not be rewritten on every run.
55
+ */
56
+ function sameCode(a, b) {
57
+ return a.replace(/\s+/g, ' ').trim() === b.replace(/\s+/g, ' ').trim();
58
+ }
59
+ function newProject() {
60
+ return new Project({ useInMemoryFileSystem: true, skipAddingFilesFromTsConfig: true });
61
+ }
62
+ /**
63
+ * Pull the Byline-owned pieces out of the canonical template. Throws if the
64
+ * template no longer contains an expected piece — that is a build-time bug in
65
+ * Byline, not a problem with the user's config, and it must fail loudly.
66
+ */
67
+ export function extractCanonicalPieces(canonicalSource) {
68
+ const source = newProject().createSourceFile('canonical.ts', canonicalSource);
69
+ const statements = new Map();
70
+ for (const name of CANONICAL_STATEMENTS) {
71
+ const declaration = source.getVariableStatement((statement) => statement.getDeclarations().some((d) => d.getName() === name));
72
+ if (!declaration) {
73
+ throw new Error(`canonical vite.config.ts no longer declares \`${name}\``);
74
+ }
75
+ statements.set(name, declaration.getText());
76
+ }
77
+ const configObject = findDefineConfigObject(source);
78
+ if (!configObject) {
79
+ throw new Error('canonical vite.config.ts has no recognisable defineConfig({...}) call');
80
+ }
81
+ const configProps = new Map();
82
+ for (const key of CANONICAL_CONFIG_KEYS) {
83
+ const property = configObject.getProperty(key);
84
+ if (!property)
85
+ throw new Error(`canonical vite.config.ts no longer sets \`${key}\``);
86
+ configProps.set(key, property.getText());
87
+ }
88
+ const nitroCall = findNitroCall(configObject);
89
+ const nitroObject = nitroCall ? firstObjectArgument(nitroCall) : undefined;
90
+ if (!nitroObject) {
91
+ throw new Error('canonical vite.config.ts has no recognisable nitro({...}) call');
92
+ }
93
+ const nitroProps = new Map();
94
+ for (const key of CANONICAL_NITRO_KEYS) {
95
+ const property = nitroObject.getProperty(key);
96
+ if (!property)
97
+ throw new Error(`canonical vite.config.ts no longer sets nitro \`${key}\``);
98
+ nitroProps.set(key, property.getText());
99
+ }
100
+ return { statements, configProps, nitroProps };
101
+ }
102
+ /**
103
+ * Decide whether the host's config can take Byline's settings, and if so return
104
+ * a plan that applies them.
105
+ *
106
+ * The async-hooks alias references `byline/async-hooks.browser.ts`, which the
107
+ * scaffold phase writes. Wire runs *before* scaffold, so that file does not
108
+ * exist yet at this point — we still emit the reference, exactly as the
109
+ * canonical full-replace path does, because scaffold always follows wire in a
110
+ * normal `init`. Gating on the file's presence would silently drop the alias
111
+ * from every fresh install.
112
+ */
113
+ export function analyzeUserConfig(userSource, canonical) {
114
+ const project = newProject();
115
+ let source;
116
+ try {
117
+ source = project.createSourceFile('vite.config.ts', userSource);
118
+ }
119
+ catch {
120
+ return { kind: 'unrecognized', reason: 'could not be parsed as TypeScript' };
121
+ }
122
+ // Only syntactic problems disqualify a config. This project loads no lib or
123
+ // type information, so semantic diagnostics (codes >= 2000) are dominated by
124
+ // "cannot find module 'vite'" and say nothing about whether the file parses.
125
+ // TypeScript reserves codes below 2000 for the parser.
126
+ if (source.getPreEmitDiagnostics().some((d) => d.getCode() < 2000)) {
127
+ return { kind: 'unrecognized', reason: 'contains syntax errors' };
128
+ }
129
+ const configObject = findDefineConfigObject(source);
130
+ if (!configObject) {
131
+ return {
132
+ kind: 'unrecognized',
133
+ reason: 'no `defineConfig({ ... })` call with an inline object literal was found',
134
+ };
135
+ }
136
+ const changes = [];
137
+ const unplaced = [];
138
+ const missingStatements = CANONICAL_STATEMENTS.filter((name) => !declaresName(source, name));
139
+ // Byline only claims keys the host has not already set. A key holding a
140
+ // host-authored value is reported rather than merged into — we cannot know
141
+ // whether that value was deliberate. A key already holding Byline's own value
142
+ // is simply done.
143
+ const configKeysToAdd = [];
144
+ const configKeysToReplace = [];
145
+ for (const key of CANONICAL_CONFIG_KEYS) {
146
+ const property = configObject.getProperty(key);
147
+ const canonicalText = canonical.configProps.get(key);
148
+ if (!property) {
149
+ configKeysToAdd.push(key);
150
+ }
151
+ else if (!isBylineOwnedValue(key, property.getText())) {
152
+ unplaced.push(`\`${key}\` is already set`);
153
+ }
154
+ else if (canonicalText && !sameCode(property.getText(), canonicalText)) {
155
+ // The key holds Byline's own value from an earlier release. We own it, so
156
+ // bring it up to date — otherwise a config merged by a previous version
157
+ // silently never receives later fixes to these settings.
158
+ configKeysToReplace.push(key);
159
+ }
160
+ }
161
+ const pluginsArray = getPluginsArray(configObject);
162
+ const nitroCall = pluginsArray ? findNitroCallInArray(pluginsArray) : undefined;
163
+ const nitroObject = nitroCall ? firstObjectArgument(nitroCall) : undefined;
164
+ const nitroKeysToAdd = [];
165
+ const nitroKeysToReplace = [];
166
+ if (!pluginsArray) {
167
+ unplaced.push('no inline `plugins: [ ... ]` array to register Byline plugins in');
168
+ }
169
+ else if (!nitroCall) {
170
+ unplaced.push('no `nitro( ... )` plugin call found');
171
+ }
172
+ else if (!nitroObject) {
173
+ unplaced.push('`nitro( ... )` is not called with an inline object literal');
174
+ }
175
+ else {
176
+ for (const key of CANONICAL_NITRO_KEYS) {
177
+ const property = nitroObject.getProperty(key);
178
+ const canonicalText = canonical.nitroProps.get(key);
179
+ if (!property) {
180
+ nitroKeysToAdd.push(key);
181
+ }
182
+ else if (!isBylineOwnedValue(key, property.getText())) {
183
+ unplaced.push(`nitro \`${key}\` is already set`);
184
+ }
185
+ else if (canonicalText && !sameCode(property.getText(), canonicalText)) {
186
+ nitroKeysToReplace.push(key);
187
+ }
188
+ }
189
+ }
190
+ const addsPlugin = pluginsArray != null && !pluginsArrayHasByline(pluginsArray);
191
+ if (missingStatements.length > 0)
192
+ changes.push(`add ${missingStatements.join(', ')}`);
193
+ if (configKeysToAdd.length > 0)
194
+ changes.push(`set ${configKeysToAdd.join(', ')}`);
195
+ if (configKeysToReplace.length > 0)
196
+ changes.push(`update ${configKeysToReplace.join(', ')}`);
197
+ if (nitroKeysToAdd.length > 0)
198
+ changes.push(`set nitro ${nitroKeysToAdd.join(', ')}`);
199
+ if (nitroKeysToReplace.length > 0)
200
+ changes.push(`update nitro ${nitroKeysToReplace.join(', ')}`);
201
+ if (addsPlugin)
202
+ changes.push('register browserAsyncHooksAlias()');
203
+ if (changes.length === 0 && unplaced.length === 0) {
204
+ return { kind: 'canonical' };
205
+ }
206
+ if (changes.length === 0) {
207
+ return {
208
+ kind: 'unrecognized',
209
+ reason: `nothing could be applied automatically (${unplaced.join('; ')})`,
210
+ };
211
+ }
212
+ return {
213
+ kind: 'mergeable',
214
+ plan: {
215
+ changes,
216
+ unplaced,
217
+ apply() {
218
+ // Re-parse so the plan owns a clean tree; analysis must not mutate.
219
+ const applyProject = newProject();
220
+ const applySource = applyProject.createSourceFile('vite.config.ts', userSource);
221
+ const applyConfig = findDefineConfigObject(applySource);
222
+ if (!applyConfig)
223
+ return userSource;
224
+ ensureNamedImport(applySource, 'node:url', 'fileURLToPath');
225
+ ensureTypeOnlyNamedImport(applySource, 'vite', 'Plugin');
226
+ insertStatementsBeforeConfig(applySource, canonical, missingStatements);
227
+ for (const key of [...configKeysToReplace, ...configKeysToAdd]) {
228
+ const text = canonical.configProps.get(key);
229
+ if (!text)
230
+ continue;
231
+ applyConfig.getProperty(key)?.remove();
232
+ applyConfig.addProperty(text);
233
+ }
234
+ const applyPlugins = getPluginsArray(applyConfig);
235
+ if (applyPlugins) {
236
+ if (addsPlugin)
237
+ applyPlugins.insertElement(0, BYLINE_PLUGIN_CALL);
238
+ const applyNitro = findNitroCallInArray(applyPlugins);
239
+ const applyNitroObject = applyNitro ? firstObjectArgument(applyNitro) : undefined;
240
+ if (applyNitroObject) {
241
+ for (const key of [...nitroKeysToReplace, ...nitroKeysToAdd]) {
242
+ const text = canonical.nitroProps.get(key);
243
+ if (!text)
244
+ continue;
245
+ applyNitroObject.getProperty(key)?.remove();
246
+ applyNitroObject.addProperty(text);
247
+ }
248
+ }
249
+ }
250
+ applySource.formatText({ indentSize: 2 });
251
+ return applySource.getFullText();
252
+ },
253
+ },
254
+ };
255
+ }
256
+ function declaresName(source, name) {
257
+ return source
258
+ .getVariableStatements()
259
+ .some((statement) => statement.getDeclarations().some((d) => d.getName() === name));
260
+ }
261
+ function insertStatementsBeforeConfig(source, canonical, names) {
262
+ if (names.length === 0)
263
+ return;
264
+ const anchor = source
265
+ .getStatements()
266
+ .find((statement) => statement.getDescendantsOfKind(SyntaxKind.CallExpression).some(isDefineConfigCall));
267
+ const index = anchor ? anchor.getChildIndex() : source.getStatements().length;
268
+ const texts = names
269
+ .map((name) => canonical.statements.get(name))
270
+ .filter((text) => text != null);
271
+ source.insertStatements(index, texts);
272
+ }
273
+ function isDefineConfigCall(call) {
274
+ return call.getExpression().getText() === 'defineConfig';
275
+ }
276
+ function findDefineConfigObject(source) {
277
+ for (const call of source.getDescendantsOfKind(SyntaxKind.CallExpression)) {
278
+ if (!isDefineConfigCall(call))
279
+ continue;
280
+ const object = firstObjectArgument(call);
281
+ if (object)
282
+ return object;
283
+ }
284
+ return undefined;
285
+ }
286
+ function firstObjectArgument(call) {
287
+ const [first] = call.getArguments();
288
+ if (first && Node.isObjectLiteralExpression(first))
289
+ return first;
290
+ return undefined;
291
+ }
292
+ function getPluginsArray(config) {
293
+ const property = config.getProperty('plugins');
294
+ if (!property || !Node.isPropertyAssignment(property))
295
+ return undefined;
296
+ const initializer = property.getInitializer();
297
+ if (initializer && Node.isArrayLiteralExpression(initializer))
298
+ return initializer;
299
+ return undefined;
300
+ }
301
+ function findNitroCall(config) {
302
+ const plugins = getPluginsArray(config);
303
+ return plugins ? findNitroCallInArray(plugins) : undefined;
304
+ }
305
+ function findNitroCallInArray(plugins) {
306
+ for (const element of plugins.getElements()) {
307
+ if (Node.isCallExpression(element) && element.getExpression().getText() === 'nitro') {
308
+ return element;
309
+ }
310
+ }
311
+ return undefined;
312
+ }
313
+ function pluginsArrayHasByline(plugins) {
314
+ return plugins
315
+ .getElements()
316
+ .some((element) => element.getText().includes('browserAsyncHooksAlias'));
317
+ }
318
+ function ensureNamedImport(source, moduleSpecifier, name) {
319
+ const existing = source
320
+ .getImportDeclarations()
321
+ .find((d) => d.getModuleSpecifierValue() === moduleSpecifier);
322
+ if (existing) {
323
+ if (!existing.getNamedImports().some((n) => n.getName() === name)) {
324
+ existing.addNamedImport(name);
325
+ }
326
+ return;
327
+ }
328
+ source.insertImportDeclaration(source.getImportDeclarations().length, {
329
+ moduleSpecifier,
330
+ namedImports: [name],
331
+ });
332
+ }
333
+ function ensureTypeOnlyNamedImport(source, moduleSpecifier, name) {
334
+ const existing = source
335
+ .getImportDeclarations()
336
+ .find((d) => d.getModuleSpecifierValue() === moduleSpecifier);
337
+ if (existing) {
338
+ if (!existing.getNamedImports().some((n) => n.getName() === name)) {
339
+ existing.addNamedImport({ name, isTypeOnly: true });
340
+ }
341
+ return;
342
+ }
343
+ source.insertImportDeclaration(source.getImportDeclarations().length, {
344
+ moduleSpecifier,
345
+ namedImports: [{ name, isTypeOnly: true }],
346
+ });
347
+ }
348
+ //# sourceMappingURL=vite-config-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-config-merge.js","sourceRoot":"","sources":["../../../src/phases/wire/vite-config-merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vite-config-merge.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-config-merge.test.d.ts","sourceRoot":"","sources":["../../../src/phases/wire/vite-config-merge.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,179 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { DEP_SPECS } from '../../manifest/deps.js';
6
+ import { analyzeUserConfig, extractCanonicalPieces } from './vite-config-merge.js';
7
+ const CANONICAL = readFileSync(join(dirname(fileURLToPath(import.meta.url)), '../../templates/host/vite.config.ts'), 'utf8');
8
+ /**
9
+ * The shape the TanStack Start CLI emits. The Sentry external is deliberate:
10
+ * it lives under `rollupConfig`, a different key from the `rolldownConfig`
11
+ * Byline writes, and must survive the merge untouched.
12
+ */
13
+ const STOCK_STARTER = `import { defineConfig } from 'vite'
14
+ import { devtools } from '@tanstack/devtools-vite'
15
+
16
+ import { tanstackStart } from '@tanstack/react-start/plugin/vite'
17
+
18
+ import viteReact from '@vitejs/plugin-react'
19
+ import tailwindcss from '@tailwindcss/vite'
20
+ import { nitro } from 'nitro/vite'
21
+
22
+ const config = defineConfig({
23
+ resolve: { tsconfigPaths: true },
24
+ plugins: [
25
+ devtools(),
26
+ nitro({ rollupConfig: { external: [/^@sentry\\//] } }),
27
+ tailwindcss(),
28
+ tanstackStart(),
29
+ viteReact(),
30
+ ],
31
+ })
32
+
33
+ export default config
34
+ `;
35
+ describe('canonical extraction', () => {
36
+ // A contract test against the real template: if someone renames or removes a
37
+ // Byline-owned piece there, the merge silently stops applying it. Extraction
38
+ // must fail loudly instead.
39
+ it('finds every Byline-owned piece in the shipped canonical config', () => {
40
+ const pieces = extractCanonicalPieces(CANONICAL);
41
+ expect([...pieces.statements.keys()]).toEqual([
42
+ 'browserAsyncHooksShim',
43
+ 'browserAsyncHooksAlias',
44
+ 'bylineSsrNoExternal',
45
+ 'ssrExternal',
46
+ ]);
47
+ expect([...pieces.configProps.keys()]).toEqual(['environments', 'ssr', 'optimizeDeps']);
48
+ expect([...pieces.nitroProps.keys()]).toEqual(['noExternals', 'rolldownConfig']);
49
+ });
50
+ it('throws rather than silently omitting a renamed piece', () => {
51
+ const renamed = CANONICAL.replace('const ssrExternal =', 'const somethingElse =');
52
+ expect(() => extractCanonicalPieces(renamed)).toThrow(/ssrExternal/);
53
+ });
54
+ // `optimizeDeps.include` takes bare specifiers that Vite resolves from the
55
+ // host app root. A package that is only ever a transitive dependency is not
56
+ // resolvable there under pnpm's strict layout, so Vite fails to pre-bundle it
57
+ // and the admin route never hydrates. The scaffold smoke test only covers
58
+ // bare imports in scaffolded source, so nothing else catches this.
59
+ it('declares every package named in optimizeDeps.include as a host dependency', () => {
60
+ const environments = extractCanonicalPieces(CANONICAL).configProps.get('environments') ?? '';
61
+ const include = environments.match(/include:\s*\[([^\]]*)\]/)?.[1];
62
+ expect(include, 'canonical config no longer has an optimizeDeps.include array').toBeTruthy();
63
+ const specifiers = [...(include ?? '').matchAll(/['"]([^'"]+)['"]/g)].map((m) => m[1]);
64
+ expect(specifiers.length).toBeGreaterThan(0);
65
+ const declared = new Set(DEP_SPECS.map((spec) => spec.name));
66
+ for (const specifier of specifiers) {
67
+ const segments = specifier.split('/');
68
+ const packageName = specifier.startsWith('@')
69
+ ? `${segments[0]}/${segments[1]}`
70
+ : segments[0];
71
+ expect(declared, `${specifier} is not installed by the CLI`).toContain(packageName);
72
+ }
73
+ });
74
+ });
75
+ describe('merging into a host config', () => {
76
+ const canonical = extractCanonicalPieces(CANONICAL);
77
+ it('plans every insertion for a stock TanStack Start config', () => {
78
+ const analysis = analyzeUserConfig(STOCK_STARTER, canonical);
79
+ expect(analysis.kind).toBe('mergeable');
80
+ if (analysis.kind !== 'mergeable')
81
+ return;
82
+ expect(analysis.plan.unplaced).toEqual([]);
83
+ expect(analysis.plan.changes.join('\n')).toContain('browserAsyncHooksShim');
84
+ expect(analysis.plan.changes.join('\n')).toContain('environments, ssr, optimizeDeps');
85
+ expect(analysis.plan.changes.join('\n')).toContain('nitro noExternals, rolldownConfig');
86
+ });
87
+ it('produces a config carrying every required setting', () => {
88
+ const analysis = analyzeUserConfig(STOCK_STARTER, canonical);
89
+ if (analysis.kind !== 'mergeable')
90
+ throw new Error('expected mergeable');
91
+ const merged = analysis.plan.apply();
92
+ // Boot-critical.
93
+ expect(merged).toContain('noExternal: bylineSsrNoExternal');
94
+ // Hydration-critical.
95
+ expect(merged).toContain('use-sync-external-store/shim');
96
+ // Production-critical.
97
+ expect(merged).toContain("noExternals: ['@byline/ui'");
98
+ expect(merged).toContain('rolldownConfig');
99
+ // Imports the inserted code depends on.
100
+ expect(merged).toContain('fileURLToPath');
101
+ expect(merged).toContain('Plugin');
102
+ // Registered ahead of the host's own plugins.
103
+ expect(merged.indexOf('browserAsyncHooksAlias()')).toBeLessThan(merged.indexOf('devtools()'));
104
+ });
105
+ it("leaves the host's own settings intact", () => {
106
+ const analysis = analyzeUserConfig(STOCK_STARTER, canonical);
107
+ if (analysis.kind !== 'mergeable')
108
+ throw new Error('expected mergeable');
109
+ const merged = analysis.plan.apply();
110
+ // The Sentry external sits under `rollupConfig` — a different key from the
111
+ // `rolldownConfig` Byline adds. Losing it would be a silent regression in
112
+ // the host's own build.
113
+ expect(merged).toContain('rollupConfig');
114
+ expect(merged).toContain('@sentry');
115
+ expect(merged).toContain('tanstackStart()');
116
+ expect(merged).toContain('viteReact()');
117
+ expect(merged).toContain('tsconfigPaths: true');
118
+ });
119
+ it('is idempotent — a merged config needs no further changes', () => {
120
+ const first = analyzeUserConfig(STOCK_STARTER, canonical);
121
+ if (first.kind !== 'mergeable')
122
+ throw new Error('expected mergeable');
123
+ expect(analyzeUserConfig(first.plan.apply(), canonical).kind).toBe('canonical');
124
+ });
125
+ it('recognises the canonical config itself as already complete', () => {
126
+ expect(analyzeUserConfig(CANONICAL, canonical).kind).toBe('canonical');
127
+ });
128
+ it('updates a Byline-owned value left stale by an earlier release', () => {
129
+ // Without this, a config merged by an earlier CLI is reported as "already
130
+ // provides Byline's required settings" and silently never receives later
131
+ // fixes to those settings — which is exactly how a missing
132
+ // optimizeDeps.include entry survived an upgrade.
133
+ const merged = (() => {
134
+ const first = analyzeUserConfig(STOCK_STARTER, canonical);
135
+ if (first.kind !== 'mergeable')
136
+ throw new Error('expected mergeable');
137
+ return first.plan.apply();
138
+ })();
139
+ const stale = merged.replace("'@byline/i18n/react',\n", '');
140
+ expect(stale).not.toBe(merged);
141
+ const analysis = analyzeUserConfig(stale, canonical);
142
+ expect(analysis.kind).toBe('mergeable');
143
+ if (analysis.kind !== 'mergeable')
144
+ return;
145
+ expect(analysis.plan.changes.join(' ')).toContain('update');
146
+ expect(analysis.plan.unplaced).toEqual([]);
147
+ const upgraded = analysis.plan.apply();
148
+ expect(upgraded).toContain("'@byline/i18n/react'");
149
+ // The host's own settings must survive an upgrade just as they do an install.
150
+ expect(upgraded).toContain('@sentry');
151
+ });
152
+ it('reports a key it cannot claim rather than overwriting it', () => {
153
+ // A host that already sets `ssr` may have done so deliberately; merging into
154
+ // it could silently change their externalization.
155
+ const withSsr = STOCK_STARTER.replace('resolve: { tsconfigPaths: true },', "resolve: { tsconfigPaths: true },\n ssr: { external: ['left-alone'] },");
156
+ const analysis = analyzeUserConfig(withSsr, canonical);
157
+ expect(analysis.kind).toBe('mergeable');
158
+ if (analysis.kind !== 'mergeable')
159
+ return;
160
+ expect(analysis.plan.unplaced.join(' ')).toContain('`ssr` is already set');
161
+ expect(analysis.plan.apply()).toContain('left-alone');
162
+ });
163
+ it('declines a config with no inline defineConfig object', () => {
164
+ const indirect = `import { defineConfig } from 'vite'
165
+ const options = { plugins: [] }
166
+ export default defineConfig(options)
167
+ `;
168
+ const analysis = analyzeUserConfig(indirect, canonical);
169
+ expect(analysis.kind).toBe('unrecognized');
170
+ if (analysis.kind !== 'unrecognized')
171
+ return;
172
+ expect(analysis.reason).toContain('defineConfig');
173
+ });
174
+ it('declines a config that does not parse', () => {
175
+ const analysis = analyzeUserConfig('export default defineConfig({ plugins: [ }\n', canonical);
176
+ expect(analysis.kind).toBe('unrecognized');
177
+ });
178
+ });
179
+ //# sourceMappingURL=vite-config-merge.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-config-merge.test.js","sourceRoot":"","sources":["../../../src/phases/wire/vite-config-merge.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAElF,MAAM,SAAS,GAAG,YAAY,CAC5B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,qCAAqC,CAAC,EACpF,MAAM,CACP,CAAA;AAED;;;;GAIG;AACH,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBrB,CAAA;AAED,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,6EAA6E;IAC7E,6EAA6E;IAC7E,4BAA4B;IAC5B,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAA;QAEhD,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5C,uBAAuB;YACvB,wBAAwB;YACxB,qBAAqB;YACrB,aAAa;SACd,CAAC,CAAA;QACF,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAA;QACvF,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAClF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAA;QACjF,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IACtE,CAAC,CAAC,CAAA;IAEF,2EAA2E;IAC3E,4EAA4E;IAC5E,8EAA8E;IAC9E,0EAA0E;IAC1E,mEAAmE;IACnE,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,YAAY,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;QAC5F,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAClE,MAAM,CAAC,OAAO,EAAE,8DAA8D,CAAC,CAAC,UAAU,EAAE,CAAA;QAE5F,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,CAAA;QAChG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAE5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACrC,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC3C,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;gBACjC,CAAC,CAAE,QAAQ,CAAC,CAAC,CAAY,CAAA;YAC3B,MAAM,CAAC,QAAQ,EAAE,GAAG,SAAS,8BAA8B,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QACrF,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,MAAM,SAAS,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAA;IAEnD,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;QAC5D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACvC,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;YAAE,OAAM;QAEzC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;QAC3E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAA;QACrF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAA;IACzF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;QAC5D,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;QAEpC,iBAAiB;QACjB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAA;QAC3D,sBAAsB;QACtB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAA;QACxD,uBAAuB;QACvB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;QACtD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;QAC1C,wCAAwC;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAClC,8CAA8C;QAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAA;IAC/F,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;QAC5D,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;QAEpC,2EAA2E;QAC3E,0EAA0E;QAC1E,wBAAwB;QACxB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,KAAK,GAAG,iBAAiB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;QACzD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAErE,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,0EAA0E;QAC1E,yEAAyE;QACzE,2DAA2D;QAC3D,kDAAkD;QAClD,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;YACnB,MAAM,KAAK,GAAG,iBAAiB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;YACzD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;YACrE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;QAC3B,CAAC,CAAC,EAAE,CAAA;QACJ,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAA;QAC3D,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAE9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACpD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACvC,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;YAAE,OAAM;QAEzC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC3D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;QACtC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAA;QAClD,8EAA8E;QAC9E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,6EAA6E;QAC7E,kDAAkD;QAClD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CACnC,mCAAmC,EACnC,yEAAyE,CAC1E,CAAA;QACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QACtD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACvC,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;YAAE,OAAM;QAEzC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAA;QAC1E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,QAAQ,GAAG;;;CAGpB,CAAA;QACG,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QACvD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC1C,IAAI,QAAQ,CAAC,IAAI,KAAK,cAAc;YAAE,OAAM;QAC5C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,8CAA8C,EAAE,SAAS,CAAC,CAAA;QAC7F,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../../../src/phases/wire/vite-config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAA;AAgBzD,eAAO,MAAM,cAAc,EAAE,OAS5B,CAAA"}
1
+ {"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../../../src/phases/wire/vite-config.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAA;AA2BzD,eAAO,MAAM,cAAc,EAAE,OAS5B,CAAA"}
@@ -1,10 +1,21 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { existsSync, readFileSync } from 'node:fs';
3
- import { join } from 'node:path';
3
+ import { basename, join } from 'node:path';
4
4
  import { applyPlannedWrites } from '../../lib/planned-writes.js';
5
+ import { analyzeUserConfig, extractCanonicalPieces, } from './vite-config-merge.js';
5
6
  const REL = 'vite.config.ts';
6
7
  const TEMPLATE_REL = 'host/vite.config.ts';
8
+ const BACKUP_PREFIX = 'vite.config.ts.bak-';
9
+ /** `20260729T014500` — sortable, filesystem-safe, no collisions across runs. */
10
+ function backupStamp() {
11
+ return new Date()
12
+ .toISOString()
13
+ .replace(/[-:]/g, '')
14
+ .replace(/\.\d+Z$/, '');
15
+ }
7
16
  const PREDECESSOR_HASHES = new Set([
17
+ // Canonical config immediately before @byline/i18n/react was pre-bundled.
18
+ 'f4ae4e2238571af4de1b620baea9c2834f26fe022084960ad58e0d2e4d6d9f6b',
8
19
  // Canonical config immediately before MySQL became a scaffold option.
9
20
  'b6ca128489e49f5efd40dd49b30a0adf33c7d9285453087d673e2b6c2a2b3696',
10
21
  // Canonical config with the app-owned client-hook build boundary.
@@ -46,8 +57,11 @@ function inspect(ctx) {
46
57
  if (normalize(userText) === normalize(canonical)) {
47
58
  return { status: 'skipped', message: `${REL}: already matches the canonical Byline config` };
48
59
  }
49
- const backupPath = ctx.resolve('vite.config.bak');
50
- if (PREDECESSOR_HASHES.has(hashConfig(userText)) && !existsSync(backupPath)) {
60
+ // Timestamped so a second run never collides with an earlier backup. The
61
+ // previous fixed `vite.config.bak` name meant a re-run found the file already
62
+ // present and silently degraded to a manual instruction.
63
+ const backupPath = ctx.resolve(`${BACKUP_PREFIX}${backupStamp()}`);
64
+ if (PREDECESSOR_HASHES.has(hashConfig(userText))) {
51
65
  return {
52
66
  status: 'done',
53
67
  message: `${REL}: recognized canonical predecessor; will back up and replace it`,
@@ -57,16 +71,58 @@ function inspect(ctx) {
57
71
  ],
58
72
  };
59
73
  }
74
+ // Not canonical and not a predecessor — the ordinary first-install case, where
75
+ // the host app brought its own config. Merge Byline's settings into it rather
76
+ // than replacing it, but only where every insertion lands in a key the host
77
+ // has not already claimed.
78
+ let analysis;
79
+ try {
80
+ analysis = analyzeUserConfig(userText, extractCanonicalPieces(canonical));
81
+ }
82
+ catch (error) {
83
+ return {
84
+ status: 'blocked',
85
+ message: `${REL}: could not read Byline's canonical settings (${error.message})`,
86
+ snippet: canonical,
87
+ };
88
+ }
89
+ if (analysis.kind === 'canonical') {
90
+ return { status: 'skipped', message: `${REL}: already provides Byline's required settings` };
91
+ }
92
+ if (analysis.kind === 'mergeable') {
93
+ const merged = analysis.plan.apply();
94
+ const leftover = analysis.plan.unplaced.length > 0
95
+ ? ` Left for you to merge by hand: ${analysis.plan.unplaced.join('; ')}.`
96
+ : '';
97
+ return {
98
+ status: 'done',
99
+ message: `${REL}: will back up and ${analysis.plan.changes.join(', ')}.${leftover}`,
100
+ writes: [
101
+ { path: backupPath, contents: userText, mode: 'create' },
102
+ { path, contents: merged, mode: 'patch', before: userText },
103
+ ],
104
+ ...(analysis.plan.unplaced.length > 0 ? { snippet: canonical } : {}),
105
+ };
106
+ }
107
+ // Nothing could be placed safely. Block rather than warn: without these
108
+ // settings Vite resolves `@byline/ui`'s CSS-module imports through Node's ESM
109
+ // loader and the app fails to boot with `ERR_UNKNOWN_FILE_EXTENSION ".css"`.
110
+ // Reporting "installation complete" over that is worse than stopping here.
60
111
  return {
61
- status: 'manual',
62
- message: `${REL}: divergent user config was left untouched; merge the canonical requirements manually`,
112
+ status: 'blocked',
113
+ message: `${REL}: left untouched — ${analysis.reason}. Byline's SSR settings are required; without ` +
114
+ `them the app fails to boot with ERR_UNKNOWN_FILE_EXTENSION ".css". Merge the settings ` +
115
+ `below, then re-run: byline init --from wire`,
63
116
  snippet: canonical,
64
117
  };
65
118
  }
66
119
  function apply(ctx, plannedWrites) {
67
120
  const path = ctx.resolve(REL);
68
- const backupPath = ctx.resolve('vite.config.bak');
69
- const writes = plannedWrites.filter((write) => write.path === path || write.path === backupPath);
121
+ // Backups are timestamped, so match by prefix — the exact name was decided
122
+ // during preview and must not be recomputed here.
123
+ const backupPrefix = ctx.resolve(BACKUP_PREFIX);
124
+ const isBackup = (write) => write.path.startsWith(backupPrefix);
125
+ const writes = plannedWrites.filter((write) => write.path === path || isBackup(write));
70
126
  if (writes.length === 0) {
71
127
  const current = inspect(ctx);
72
128
  if (!current.writes?.length)
@@ -85,11 +141,13 @@ function apply(ctx, plannedWrites) {
85
141
  snippet: readCanonical(ctx),
86
142
  };
87
143
  }
144
+ const backup = writes.find(isBackup);
145
+ if (!backup) {
146
+ return { status: 'done', message: `${REL}: created canonical Byline config` };
147
+ }
88
148
  return {
89
149
  status: 'done',
90
- message: writes.some((write) => write.path === backupPath)
91
- ? `${REL}: canonical predecessor backed up and replaced`
92
- : `${REL}: created canonical Byline config`,
150
+ message: `${REL}: updated with Byline's required settings (backup: ${basename(backup.path)})`,
93
151
  };
94
152
  }
95
153
  function readCanonical(ctx) {
@@ -1 +1 @@
1
- {"version":3,"file":"vite-config.js","sourceRoot":"","sources":["../../../src/phases/wire/vite-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite-config.js","sourceRoot":"","sources":["../../../src/phases/wire/vite-config.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
1
+ import { mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
2
2
  import { afterEach, describe, expect, it } from 'vitest';
3
3
  import { DATABASE_ADAPTER_IDS, databaseAdapterDefinition } from '../../lib/database/adapters.js';
4
4
  import { createTestContext } from '../../test-helpers.js';
@@ -14,6 +14,13 @@ function fixture() {
14
14
  contexts.push(ctx);
15
15
  return ctx;
16
16
  }
17
+ /** Backups are timestamped, so tests resolve them by prefix rather than name. */
18
+ function readBackup(ctx) {
19
+ const backups = readdirSync(ctx.cwd).filter((name) => name.startsWith('vite.config.ts.bak-'));
20
+ if (backups.length !== 1)
21
+ throw new Error(`expected one backup, found ${backups.length}`);
22
+ return readFileSync(ctx.resolve(backups[0]), 'utf8');
23
+ }
17
24
  describe('Vite config safety', () => {
18
25
  it('surfaces a missing Vite config in the parent wire plan', async () => {
19
26
  const ctx = fixture();
@@ -71,7 +78,7 @@ describe('Vite config safety', () => {
71
78
  expect(preview.writes).toHaveLength(2);
72
79
  expect(preview.writes?.find((write) => write.path.endsWith('vite.config.ts'))?.before).toBe(predecessor);
73
80
  expect(await wireViteConfig.apply(ctx, preview.writes)).toMatchObject({ status: 'done' });
74
- expect(readFileSync(ctx.resolve('vite.config.bak'), 'utf8')).toBe(predecessor);
81
+ expect(readBackup(ctx)).toBe(predecessor);
75
82
  expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toBe(canonical);
76
83
  });
77
84
  it('replaces the exact canonical predecessor from before MySQL externalization', async () => {
@@ -83,7 +90,7 @@ describe('Vite config safety', () => {
83
90
  expect(preview).toMatchObject({ status: 'done' });
84
91
  expect(preview.writes).toHaveLength(2);
85
92
  expect(await wireViteConfig.apply(ctx, preview.writes)).toMatchObject({ status: 'done' });
86
- expect(readFileSync(ctx.resolve('vite.config.bak'), 'utf8')).toBe(predecessor);
93
+ expect(readBackup(ctx)).toBe(predecessor);
87
94
  expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toBe(canonical);
88
95
  });
89
96
  it('replaces the canonical config that carried an app-owned build guard', async () => {
@@ -97,21 +104,83 @@ describe('Vite config safety', () => {
97
104
  const preview = await wireViteConfig.preview(ctx);
98
105
  expect(preview).toMatchObject({ status: 'done' });
99
106
  expect(await wireViteConfig.apply(ctx, preview.writes)).toMatchObject({ status: 'done' });
100
- expect(readFileSync(ctx.resolve('vite.config.bak'), 'utf8')).toBe(predecessor);
107
+ expect(readBackup(ctx)).toBe(predecessor);
101
108
  expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toBe(canonical);
102
109
  });
103
- it('keeps a divergent user config manual in both preview and apply', async () => {
110
+ it('merges Byline settings into a host config and backs up the original', async () => {
111
+ // The ordinary first-install case: a stock TanStack Start app brings its own
112
+ // vite.config.ts, matching neither the canonical config nor any predecessor
113
+ // hash. Byline's settings are merged in rather than replacing the file.
114
+ const ctx = fixture();
115
+ const host = `import { defineConfig } from 'vite'
116
+ import { nitro } from 'nitro/vite'
117
+
118
+ const config = defineConfig({
119
+ plugins: [nitro({ rollupConfig: { external: [/^@sentry\\//] } })],
120
+ })
121
+
122
+ export default config
123
+ `;
124
+ writeFileSync(ctx.resolve('vite.config.ts'), host);
125
+ const preview = await wireViteConfig.preview(ctx);
126
+ expect(preview).toMatchObject({ status: 'done' });
127
+ expect(await wireViteConfig.apply(ctx, preview.writes)).toMatchObject({ status: 'done' });
128
+ const merged = readFileSync(ctx.resolve('vite.config.ts'), 'utf8');
129
+ expect(merged).toContain('noExternal: bylineSsrNoExternal');
130
+ expect(merged).toContain('browserAsyncHooksAlias()');
131
+ // The host's own nitro option must survive — it lives under `rollupConfig`,
132
+ // a different key from the `rolldownConfig` Byline writes.
133
+ expect(merged).toContain('@sentry');
134
+ // The original is preserved under a timestamped name, so a later run cannot
135
+ // collide with it the way the old fixed `vite.config.bak` did.
136
+ const backups = readdirSync(ctx.cwd).filter((name) => name.startsWith('vite.config.ts.bak-'));
137
+ expect(backups).toHaveLength(1);
138
+ expect(readFileSync(ctx.resolve(backups[0]), 'utf8')).toBe(host);
139
+ });
140
+ it('blocks, without editing, on a config it cannot place settings into', async () => {
141
+ // No inline `defineConfig({ ... })` to work with. This must block rather
142
+ // than warn: `init` treats anything short of `blocked` as a soft warning and
143
+ // would go on to report "installation complete" over an app that cannot boot.
104
144
  const ctx = fixture();
105
- const custom = "import { defineConfig } from 'vite'\nexport default defineConfig({ custom: true })\n";
106
- writeFileSync(ctx.resolve('vite.config.ts'), custom);
107
- expect(await wireViteConfig.preview(ctx)).toMatchObject({ status: 'manual' });
108
- expect(await wireViteConfig.apply(ctx)).toMatchObject({ status: 'manual' });
109
- expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toBe(custom);
110
- expect(existsSync(ctx.resolve('vite.config.bak'))).toBe(false);
145
+ const opaque = `import { defineConfig } from 'vite'
146
+ const options = { plugins: [] }
147
+ export default defineConfig(options)
148
+ `;
149
+ writeFileSync(ctx.resolve('vite.config.ts'), opaque);
150
+ for (const result of [await wireViteConfig.preview(ctx), await wireViteConfig.apply(ctx)]) {
151
+ expect(result).toMatchObject({ status: 'blocked' });
152
+ // Blocking halts the run, so the snippet is the user's only instruction.
153
+ expect(result.snippet).toBeTruthy();
154
+ expect(result.message).toContain('byline init --from wire');
155
+ }
156
+ expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toBe(opaque);
157
+ expect(readdirSync(ctx.cwd).some((name) => name.startsWith('vite.config.ts.bak-'))).toBe(false);
111
158
  });
112
159
  });
160
+ /**
161
+ * Reconstructs the canonical config immediately before `@byline/i18n/react`
162
+ * was pre-bundled — the newest entry in PREDECESSOR_HASHES.
163
+ */
164
+ function withoutI18nPreBundling(canonical) {
165
+ return canonical.replace(` // \`@byline/i18n/react\` is pinned for a different reason from the rest:
166
+ // module identity, not interop. The admin layout mounts
167
+ // \`<I18nProvider>\` from \`@byline/host-tanstack-start\`, which is
168
+ // deliberately NOT pre-bundled (see the note below), while collection
169
+ // views reach \`useTranslation\` through \`@byline/admin\` and
170
+ // \`@byline/richtext-lexical\`, which are. Left undeclared, the optimizer
171
+ // inlines a copy of the module into the chunk that reaches it first and
172
+ // the host adapter loads a second copy through the regular pipeline —
173
+ // two React Contexts, so the provider is invisible to the consumer and
174
+ // every collection route throws "useTranslation must be used inside
175
+ // <I18nProvider>". Naming it as an entry makes every importer, pipeline
176
+ // or pre-bundled, resolve to one module instance.
177
+ include: [
178
+ '@byline/ui/react',
179
+ '@byline/i18n/react',
180
+ `, " include: [\n '@byline/ui/react',\n");
181
+ }
113
182
  function withoutMysqlExternalization(canonical) {
114
- return canonical
183
+ return withoutI18nPreBundling(canonical)
115
184
  .replace('// database / storage adapters through composition at runtime, not', '// db-postgres / storage adapters through composition at runtime, not')
116
185
  .replace('// - @byline/db-postgres + @byline/db-mysql — database drivers', '// - @byline/db-postgres — depends on `pg` native bindings')
117
186
  .replace(" '@byline/db-mysql',\n", '')
@@ -1 +1 @@
1
- {"version":3,"file":"vite-config.test.js","sourceRoot":"","sources":["../../../src/phases/wire/vite-config.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite-config.test.js","sourceRoot":"","sources":["../../../src/phases/wire/vite-config.test.ts"],"names":[],"mappings":"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"}
@@ -16,4 +16,21 @@ async function run() {
16
16
  await seedAdmin()
17
17
  }
18
18
 
19
+ // Exit explicitly rather than waiting for the event loop to drain. The
20
+ // configured adapter's connection pool holds a live timer, so the process
21
+ // stays alive long after the seed has committed:
22
+ //
23
+ // • `pgAdapter` defaults `idleTimeoutMillis: 2000`, so on Postgres the pool
24
+ // goes quiet after ~2s and the script appeared to exit on its own.
25
+ // • `mysqlAdapter` leaves mysql2's defaults in place — `idleTimeout` 60s with
26
+ // `maxIdle` equal to `connectionLimit` — and mysql2's idle-sweep timer is
27
+ // not unref'd, so the script looks frozen even though the work is done.
28
+ //
29
+ // The `.catch` also matters: `run()` called bare surfaces a rejected seed as an
30
+ // unhandled rejection rather than a non-zero exit.
19
31
  run()
32
+ .then(() => process.exit(0))
33
+ .catch((err) => {
34
+ console.error(err)
35
+ process.exit(1)
36
+ })
@@ -48,15 +48,12 @@ export async function seedAdmin() {
48
48
  )
49
49
  }
50
50
 
51
+ console.log('Seeding super-admin')
52
+
51
53
  const result = await seedSuperAdmin(bylineCore.adminStore, { email, password })
52
54
 
53
- const parts: string[] = []
54
- if (result.created.role) parts.push('role')
55
- if (result.created.user) parts.push('user')
56
- if (result.created.assignment) parts.push('assignment')
57
- if (parts.length === 0) {
58
- console.log(`Super-admin already present (${email}) — no changes.`)
59
- } else {
60
- console.log(`Super-admin seed: created ${parts.join(', ')} for ${email}.`)
61
- }
55
+ const created = result.created.role || result.created.user || result.created.assignment
56
+ console.log(
57
+ created ? ` - seeded super-admin (${email})` : ` - super-admin already present (${email})`
58
+ )
62
59
  }
@@ -459,8 +459,12 @@ async function run(): Promise<void> {
459
459
  if (failed > 0) process.exit(1)
460
460
  }
461
461
 
462
- run().catch((err) => {
463
- console.error('import-docs: fatal error')
464
- console.error(err)
465
- process.exit(1)
466
- })
462
+ // Exit explicitly on success too — the adapter's pool holds a live timer, so
463
+ // the process does not terminate on its own. See the note in `seed-admin.ts`.
464
+ run()
465
+ .then(() => process.exit(0))
466
+ .catch((err) => {
467
+ console.error('import-docs: fatal error')
468
+ console.error(err)
469
+ process.exit(1)
470
+ })
@@ -18,4 +18,13 @@ async function run() {
18
18
  await seedDocs()
19
19
  }
20
20
 
21
+ // Exit explicitly — the adapter's pool holds a live timer, so the process does
22
+ // not terminate on its own once the seed commits. See the fuller note in
23
+ // `seed-admin.ts`; the short version is that `pgAdapter`'s 2-second idle
24
+ // timeout masked this and mysql2's 60-second, non-unref'd idle sweep does not.
21
25
  run()
26
+ .then(() => process.exit(0))
27
+ .catch((err) => {
28
+ console.error(err)
29
+ process.exit(1)
30
+ })
@@ -122,8 +122,21 @@ const config = defineConfig({
122
122
  // @base-ui/utils' store) then throws "does not provide an export named …"
123
123
  // and the route never hydrates. Listing them as entries makes Vite walk
124
124
  // the re-export and emit a proper named-export facade.
125
+ // `@byline/i18n/react` is pinned for a different reason from the rest:
126
+ // module identity, not interop. The admin layout mounts
127
+ // `<I18nProvider>` from `@byline/host-tanstack-start`, which is
128
+ // deliberately NOT pre-bundled (see the note below), while collection
129
+ // views reach `useTranslation` through `@byline/admin` and
130
+ // `@byline/richtext-lexical`, which are. Left undeclared, the optimizer
131
+ // inlines a copy of the module into the chunk that reaches it first and
132
+ // the host adapter loads a second copy through the regular pipeline —
133
+ // two React Contexts, so the provider is invisible to the consumer and
134
+ // every collection route throws "useTranslation must be used inside
135
+ // <I18nProvider>". Naming it as an entry makes every importer, pipeline
136
+ // or pre-bundled, resolve to one module instance.
125
137
  include: [
126
138
  '@byline/ui/react',
139
+ '@byline/i18n/react',
127
140
  '@byline/ai',
128
141
  '@byline/ai/plugins/text',
129
142
  '@byline/ai/plugins/lexical',
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@byline/cli",
3
3
  "private": false,
4
4
  "license": "MPL-2.0",
5
- "version": "4.10.0",
5
+ "version": "4.10.2",
6
6
  "engines": {
7
7
  "node": ">=20.9.0"
8
8
  },