@untestutils/sveltekit 0.5.3 → 0.6.0

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/index.d.mts CHANGED
@@ -1,14 +1,21 @@
1
1
  import { type Driver, type FrameworkBaseOptions, type Recipe } from "@untestutils/core";
2
2
  export type SvelteKitRun = "preview" | "server" | "dev";
3
3
  export type ViteConfigOverride = Record<string, unknown>;
4
+ /** JSON-serializable patches merged onto `svelte.config.*` (kit / preprocess plain fields). */
5
+ export type KitConfigOverride = Record<string, unknown>;
4
6
  export interface SvelteKitOptions extends FrameworkBaseOptions {
5
7
  run?: SvelteKitRun;
6
8
  /** adapter-node output entry relative to root (default `build/index.js`). */
7
9
  serverEntry?: string;
8
10
  /** Merged onto the app vite.config (SvelteKit is a Vite plugin). */
9
11
  viteConfig?: ViteConfigOverride;
12
+ /**
13
+ * Merged onto `svelte.config.*` via backup/restore (`withMergedConfigOverride`).
14
+ * Prefer plain `kit.*` fields (e.g. `appDir`) — adapters/functions are not serializable.
15
+ */
16
+ kitConfig?: KitConfigOverride;
10
17
  }
11
- export type SvelteKitMatrixVariant = Partial<Pick<SvelteKitOptions, "env" | "hashInputs" | "run" | "serverEntry" | "readyPath" | "readyTimeoutMs" | "workspaceDeps" | "viteConfig">>;
18
+ export type SvelteKitMatrixVariant = Partial<Pick<SvelteKitOptions, "env" | "hashInputs" | "run" | "serverEntry" | "readyPath" | "readyTimeoutMs" | "workspaceDeps" | "viteConfig" | "kitConfig">>;
12
19
  /**
13
20
  * SvelteKit Recipe factory.
14
21
  * `run: 'preview'` (default) — `vite build` + `vite preview`
package/dist/index.d.ts CHANGED
@@ -1,14 +1,21 @@
1
1
  import { type Driver, type FrameworkBaseOptions, type Recipe } from '@untestutils/core';
2
2
  export type SvelteKitRun = 'preview' | 'server' | 'dev';
3
3
  export type ViteConfigOverride = Record<string, unknown>;
4
+ /** JSON-serializable patches merged onto `svelte.config.*` (kit / preprocess plain fields). */
5
+ export type KitConfigOverride = Record<string, unknown>;
4
6
  export interface SvelteKitOptions extends FrameworkBaseOptions {
5
7
  run?: SvelteKitRun;
6
8
  /** adapter-node output entry relative to root (default `build/index.js`). */
7
9
  serverEntry?: string;
8
10
  /** Merged onto the app vite.config (SvelteKit is a Vite plugin). */
9
11
  viteConfig?: ViteConfigOverride;
12
+ /**
13
+ * Merged onto `svelte.config.*` via backup/restore (`withMergedConfigOverride`).
14
+ * Prefer plain `kit.*` fields (e.g. `appDir`) — adapters/functions are not serializable.
15
+ */
16
+ kitConfig?: KitConfigOverride;
10
17
  }
11
- export type SvelteKitMatrixVariant = Partial<Pick<SvelteKitOptions, 'env' | 'hashInputs' | 'run' | 'serverEntry' | 'readyPath' | 'readyTimeoutMs' | 'workspaceDeps' | 'viteConfig'>>;
18
+ export type SvelteKitMatrixVariant = Partial<Pick<SvelteKitOptions, 'env' | 'hashInputs' | 'run' | 'serverEntry' | 'readyPath' | 'readyTimeoutMs' | 'workspaceDeps' | 'viteConfig' | 'kitConfig'>>;
12
19
  /**
13
20
  * SvelteKit Recipe factory.
14
21
  * `run: 'preview'` (default) — `vite build` + `vite preview`
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAWL,KAAK,MAAM,EACX,KAAK,oBAAoB,EACzB,KAAK,MAAM,EACZ,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzD,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;IAC5D,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAC1C,IAAI,CACF,gBAAgB,EACd,KAAK,GACL,YAAY,GACZ,KAAK,GACL,aAAa,GACb,WAAW,GACX,gBAAgB,GAChB,eAAe,GACf,YAAY,CACf,CACF,CAAC;AAgCF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAqH9C,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,MAAM,CACpB,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,GAC/C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxB;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAcL,KAAK,MAAM,EACX,KAAK,oBAAoB,EACzB,KAAK,MAAM,EACZ,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzD,+FAA+F;AAC/F,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExD,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;IAC5D,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;OAGG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAC1C,IAAI,CACF,gBAAgB,EACd,KAAK,GACL,YAAY,GACZ,KAAK,GACL,aAAa,GACb,WAAW,GACX,gBAAgB,GAChB,eAAe,GACf,YAAY,GACZ,WAAW,CACd,CACF,CAAC;AA6CF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAyJ9C,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,MAAM,CACpB,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,GAC/C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyBxB;AAED,eAAe,SAAS,CAAC"}
package/dist/index.mjs CHANGED
@@ -1,6 +1,13 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import { join, resolve } from "pathe";
3
- import { cliFrameworkRecipe, configOverrideHashInput, deepMergePlain, defineDriver, frameworkRoots, loopbackUrl, matrixRecipe, resolveBin, serializeViteMergeConfigModule, writeEphemeralConfig } from "@untestutils/core";
3
+ import { cliFrameworkRecipe, configOverrideHashInput, deepMergePlain, defineDriver, findFirstExistingConfig, frameworkRoots, installMergedConfigOverride, loopbackUrl, matrixRecipe, resolveBin, runCommand, serializeViteMergeConfigModule, writeEphemeralConfig } from "@untestutils/core";
4
+ const SVELTE_CONFIG_NAMES = [
5
+ "svelte.config.js",
6
+ "svelte.config.ts",
7
+ "svelte.config.mjs",
8
+ "svelte.config.mts",
9
+ "svelte.config.cjs"
10
+ ];
4
11
  function resolveViteBin(root) {
5
12
  return resolveBin({
6
13
  label: "sveltekit",
@@ -13,8 +20,12 @@ function resolveViteBin(root) {
13
20
  function hashInputsFor(opts, root, extra) {
14
21
  const inputs = [...opts.hashInputs ?? [root], ...extra];
15
22
  if (opts.viteConfig) inputs.push(configOverrideHashInput("viteConfig", opts.viteConfig));
23
+ if (opts.kitConfig) inputs.push(configOverrideHashInput("kitConfig", opts.kitConfig));
16
24
  return inputs;
17
25
  }
26
+ function resolveSvelteConfigPath(root) {
27
+ return findFirstExistingConfig(root, SVELTE_CONFIG_NAMES) ?? join(root, "svelte.config.js");
28
+ }
18
29
  async function viteConfigArgs(root, outDir, viteConfig) {
19
30
  if (!viteConfig || !Object.keys(viteConfig).length) return [];
20
31
  const configPath = join(outDir, "vite.untestutils.mjs");
@@ -30,7 +41,9 @@ export const sveltekit = defineDriver((opts) => {
30
41
  const runMode = opts.run ?? "preview";
31
42
  const id = opts.id ?? `sveltekit-${runMode}-${root.split("/").pop()}`;
32
43
  const bin = () => resolveViteBin(root);
44
+ const hasKit = Boolean(opts.kitConfig && Object.keys(opts.kitConfig).length);
33
45
  if (runMode === "dev") {
46
+ let restore;
34
47
  return cliFrameworkRecipe({
35
48
  id,
36
49
  root,
@@ -42,6 +55,9 @@ export const sveltekit = defineDriver((opts) => {
42
55
  readyTimeoutMs: opts.readyTimeoutMs,
43
56
  workspaceDeps: opts.workspaceDeps,
44
57
  start: async ({ port, outDir }) => {
58
+ if (hasKit) {
59
+ restore = await installMergedConfigOverride(resolveSvelteConfigPath(root), opts.kitConfig);
60
+ }
45
61
  const configArgs = await viteConfigArgs(root, outDir, opts.viteConfig);
46
62
  return {
47
63
  command: process.execPath,
@@ -57,6 +73,10 @@ export const sveltekit = defineDriver((opts) => {
57
73
  ],
58
74
  cwd: root
59
75
  };
76
+ },
77
+ afterStop: async () => {
78
+ await restore?.();
79
+ restore = undefined;
60
80
  }
61
81
  });
62
82
  }
@@ -73,16 +93,28 @@ export const sveltekit = defineDriver((opts) => {
73
93
  readyTimeoutMs: opts.readyTimeoutMs,
74
94
  workspaceDeps: opts.workspaceDeps,
75
95
  prepare: async ({ outDir }) => {
76
- const configArgs = await viteConfigArgs(root, outDir, opts.viteConfig);
77
- return {
78
- command: process.execPath,
79
- args: [
96
+ const restore = hasKit ? await installMergedConfigOverride(resolveSvelteConfigPath(root), opts.kitConfig) : undefined;
97
+ try {
98
+ const configArgs = await viteConfigArgs(root, outDir, opts.viteConfig);
99
+ const result = await runCommand(process.execPath, [
80
100
  bin(),
81
101
  "build",
82
102
  ...configArgs
83
- ],
84
- cwd: root
85
- };
103
+ ], {
104
+ cwd: root,
105
+ env: {
106
+ ...process.env,
107
+ ...opts.env,
108
+ OUT_DIR: outDir
109
+ },
110
+ timeoutMs: opts.readyTimeoutMs ?? 3e5
111
+ });
112
+ if (result.exitCode !== 0) {
113
+ throw new Error(`[untestutils/sveltekit] prepare failed (${result.exitCode}):\n${result.stderr.slice(-2e3)}\n${result.stdout.slice(-1e3)}`);
114
+ }
115
+ } finally {
116
+ await restore?.();
117
+ }
86
118
  },
87
119
  verifyAfterPrepare: () => {
88
120
  const entry = join(root, entryRel);
@@ -114,16 +146,28 @@ export const sveltekit = defineDriver((opts) => {
114
146
  readyTimeoutMs: opts.readyTimeoutMs,
115
147
  workspaceDeps: opts.workspaceDeps,
116
148
  prepare: async ({ outDir }) => {
117
- const configArgs = await viteConfigArgs(root, outDir, opts.viteConfig);
118
- return {
119
- command: process.execPath,
120
- args: [
149
+ const restore = hasKit ? await installMergedConfigOverride(resolveSvelteConfigPath(root), opts.kitConfig) : undefined;
150
+ try {
151
+ const configArgs = await viteConfigArgs(root, outDir, opts.viteConfig);
152
+ const result = await runCommand(process.execPath, [
121
153
  bin(),
122
154
  "build",
123
155
  ...configArgs
124
- ],
125
- cwd: root
126
- };
156
+ ], {
157
+ cwd: root,
158
+ env: {
159
+ ...process.env,
160
+ ...opts.env,
161
+ OUT_DIR: outDir
162
+ },
163
+ timeoutMs: opts.readyTimeoutMs ?? 3e5
164
+ });
165
+ if (result.exitCode !== 0) {
166
+ throw new Error(`[untestutils/sveltekit] prepare failed (${result.exitCode}):\n${result.stderr.slice(-2e3)}\n${result.stdout.slice(-1e3)}`);
167
+ }
168
+ } finally {
169
+ await restore?.();
170
+ }
127
171
  },
128
172
  start: async ({ port, host, outDir }) => {
129
173
  const configArgs = await viteConfigArgs(root, outDir, opts.viteConfig);
@@ -157,6 +201,7 @@ export function matrix(base, variants) {
157
201
  ...patch.env ?? {}
158
202
  },
159
203
  viteConfig: b.viteConfig || patch.viteConfig ? deepMergePlain(b.viteConfig ?? {}, patch.viteConfig ?? {}) : undefined,
204
+ kitConfig: b.kitConfig || patch.kitConfig ? deepMergePlain(b.kitConfig ?? {}, patch.kitConfig ?? {}) : undefined,
160
205
  hashInputs: [
161
206
  ...b.hashInputs ?? [b.root],
162
207
  ...patch.hashInputs ?? [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@untestutils/sveltekit",
3
- "version": "0.5.3",
3
+ "version": "0.6.0",
4
4
  "homepage": "https://s00d.github.io/untestutils/",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "pathe": "^2.0.3",
31
- "@untestutils/core": "0.5.3"
31
+ "@untestutils/core": "0.6.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/node": "^26.6.1",