@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.
- package/dist/manifest/deps.d.ts.map +1 -1
- package/dist/manifest/deps.js +6 -0
- package/dist/manifest/deps.js.map +1 -1
- package/dist/phases/wire/index.d.ts.map +1 -1
- package/dist/phases/wire/index.js +5 -0
- package/dist/phases/wire/index.js.map +1 -1
- package/dist/phases/wire/vite-config-merge.d.ts +61 -0
- package/dist/phases/wire/vite-config-merge.d.ts.map +1 -0
- package/dist/phases/wire/vite-config-merge.js +348 -0
- package/dist/phases/wire/vite-config-merge.js.map +1 -0
- package/dist/phases/wire/vite-config-merge.test.d.ts +2 -0
- package/dist/phases/wire/vite-config-merge.test.d.ts.map +1 -0
- package/dist/phases/wire/vite-config-merge.test.js +179 -0
- package/dist/phases/wire/vite-config-merge.test.js.map +1 -0
- package/dist/phases/wire/vite-config.d.ts.map +1 -1
- package/dist/phases/wire/vite-config.js +68 -10
- package/dist/phases/wire/vite-config.js.map +1 -1
- package/dist/phases/wire/vite-config.test.js +81 -12
- package/dist/phases/wire/vite-config.test.js.map +1 -1
- package/dist/templates/byline/seed-admin.ts +17 -0
- package/dist/templates/byline/seeds/admin.ts +6 -9
- package/dist/templates/byline-examples/scripts/import-docs.ts +9 -5
- package/dist/templates/byline-examples/seed-docs.ts +9 -0
- package/dist/templates/host/vite.config.ts +13 -0
- package/package.json +1 -1
|
@@ -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,
|
|
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"}
|
package/dist/manifest/deps.js
CHANGED
|
@@ -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,
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-config.d.ts","sourceRoot":"","sources":["../../../src/phases/wire/vite-config.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
50
|
-
|
|
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: '
|
|
62
|
-
message: `${REL}:
|
|
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
|
-
|
|
69
|
-
|
|
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:
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
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 {
|
|
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(
|
|
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(
|
|
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(
|
|
107
|
+
expect(readBackup(ctx)).toBe(predecessor);
|
|
101
108
|
expect(readFileSync(ctx.resolve('vite.config.ts'), 'utf8')).toBe(canonical);
|
|
102
109
|
});
|
|
103
|
-
it('
|
|
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
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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":"AAAA,OAAO,EAAE,
|
|
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
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
process.exit(
|
|
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',
|