@superblocksteam/sdk 2.0.141-next.0 → 2.0.141-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/cli-replacement/dependency-install-classifier.d.mts +2 -6
  3. package/dist/cli-replacement/dependency-install-classifier.d.mts.map +1 -1
  4. package/dist/cli-replacement/dependency-install-classifier.mjs +1 -1
  5. package/dist/cli-replacement/dependency-install-classifier.mjs.map +1 -1
  6. package/dist/cli-replacement/dev.d.mts.map +1 -1
  7. package/dist/cli-replacement/dev.mjs +74 -27
  8. package/dist/cli-replacement/dev.mjs.map +1 -1
  9. package/dist/cli-replacement/disk-space.d.mts +7 -19
  10. package/dist/cli-replacement/disk-space.d.mts.map +1 -1
  11. package/dist/cli-replacement/disk-space.mjs +2 -2
  12. package/dist/cli-replacement/disk-space.mjs.map +1 -1
  13. package/dist/cli-replacement/home-npmrc.d.mts +4 -3
  14. package/dist/cli-replacement/home-npmrc.d.mts.map +1 -1
  15. package/dist/cli-replacement/normalize-workspace-protocol.d.ts +1 -1
  16. package/dist/cli-replacement/normalize-workspace-protocol.d.ts.map +1 -1
  17. package/dist/cli-replacement/package-json-snapshot.d.mts +0 -1
  18. package/dist/cli-replacement/package-json-snapshot.d.mts.map +1 -1
  19. package/dist/cli-replacement/package-json-snapshot.mjs +1 -1
  20. package/dist/cli-replacement/package-json-snapshot.mjs.map +1 -1
  21. package/dist/cli-replacement/post-upgrade-lockfile-strip.d.mts +3 -2
  22. package/dist/cli-replacement/post-upgrade-lockfile-strip.d.mts.map +1 -1
  23. package/dist/cli-replacement/version-detection.d.ts +2 -1
  24. package/dist/cli-replacement/version-detection.d.ts.map +1 -1
  25. package/dist/client.d.ts +6 -6
  26. package/dist/client.d.ts.map +1 -1
  27. package/dist/collect-sdk-apis.d.mts +4 -3
  28. package/dist/collect-sdk-apis.d.mts.map +1 -1
  29. package/dist/dev-utils/dedupe-async.d.ts +2 -1
  30. package/dist/dev-utils/dedupe-async.d.ts.map +1 -1
  31. package/dist/dev-utils/dev-server-metrics.d.mts +4 -3
  32. package/dist/dev-utils/dev-server-metrics.d.mts.map +1 -1
  33. package/dist/dev-utils/dev-server-metrics.mjs +3 -2
  34. package/dist/dev-utils/dev-server-metrics.mjs.map +1 -1
  35. package/dist/dev-utils/dev-server.d.mts +5 -1
  36. package/dist/dev-utils/dev-server.d.mts.map +1 -1
  37. package/dist/dev-utils/dev-server.mjs +12 -18
  38. package/dist/dev-utils/dev-server.mjs.map +1 -1
  39. package/dist/dev-utils/dev-server.optimize-deps.test.d.mts +2 -0
  40. package/dist/dev-utils/dev-server.optimize-deps.test.d.mts.map +1 -0
  41. package/dist/dev-utils/dev-server.optimize-deps.test.mjs +490 -0
  42. package/dist/dev-utils/dev-server.optimize-deps.test.mjs.map +1 -0
  43. package/dist/dev-utils/fatal-exit.d.mts +3 -2
  44. package/dist/dev-utils/fatal-exit.d.mts.map +1 -1
  45. package/dist/dev-utils/optimize-deps-config.d.mts +16 -0
  46. package/dist/dev-utils/optimize-deps-config.d.mts.map +1 -0
  47. package/dist/dev-utils/optimize-deps-config.mjs +95 -0
  48. package/dist/dev-utils/optimize-deps-config.mjs.map +1 -0
  49. package/dist/dev-utils/prepare-in-place-restart.d.mts +4 -3
  50. package/dist/dev-utils/prepare-in-place-restart.d.mts.map +1 -1
  51. package/dist/dev-utils/vite-dev-server-diagnostics.d.mts +1 -1
  52. package/dist/dev-utils/vite-dev-server-diagnostics.d.mts.map +1 -1
  53. package/dist/index.d.ts +0 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +0 -3
  56. package/dist/index.js.map +1 -1
  57. package/dist/parse-sdk-registry.d.mts +2 -2
  58. package/dist/parse-sdk-registry.d.mts.map +1 -1
  59. package/dist/parse-sdk-registry.mjs.map +1 -1
  60. package/dist/sdk.d.ts +0 -1
  61. package/dist/sdk.d.ts.map +1 -1
  62. package/dist/sdk.js +0 -1
  63. package/dist/sdk.js.map +1 -1
  64. package/dist/telemetry/attributes.d.ts +0 -1
  65. package/dist/telemetry/attributes.d.ts.map +1 -1
  66. package/dist/telemetry/attributes.js +0 -2
  67. package/dist/telemetry/attributes.js.map +1 -1
  68. package/dist/telemetry/local-obs.d.ts +0 -30
  69. package/dist/telemetry/local-obs.d.ts.map +1 -1
  70. package/dist/telemetry/local-obs.js +1 -1
  71. package/dist/telemetry/local-obs.js.map +1 -1
  72. package/dist/telemetry/logging.d.ts +2 -1
  73. package/dist/telemetry/logging.d.ts.map +1 -1
  74. package/package.json +6 -6
  75. package/src/cli-replacement/dependency-install-classifier.mts +2 -2
  76. package/src/cli-replacement/dev.mts +118 -34
  77. package/src/cli-replacement/disk-space.mts +8 -9
  78. package/src/cli-replacement/home-npmrc.mts +3 -3
  79. package/src/cli-replacement/normalize-workspace-protocol.ts +1 -1
  80. package/src/cli-replacement/package-json-snapshot.mts +1 -1
  81. package/src/cli-replacement/post-upgrade-lockfile-strip.mts +2 -2
  82. package/src/cli-replacement/version-detection.ts +1 -1
  83. package/src/client.ts +6 -6
  84. package/src/collect-sdk-apis.mts +3 -3
  85. package/src/dev-utils/dedupe-async.ts +1 -1
  86. package/src/dev-utils/dev-server-metrics.mts +4 -2
  87. package/src/dev-utils/dev-server.mts +23 -17
  88. package/src/dev-utils/dev-server.optimize-deps.test.mts +671 -0
  89. package/src/dev-utils/fatal-exit.mts +2 -2
  90. package/src/dev-utils/optimize-deps-config.mts +96 -0
  91. package/src/dev-utils/prepare-in-place-restart.mts +3 -3
  92. package/src/dev-utils/vite-dev-server-diagnostics.mts +1 -1
  93. package/src/index.ts +0 -7
  94. package/src/parse-sdk-registry.mts +1 -2
  95. package/src/sdk.ts +0 -5
  96. package/src/telemetry/attributes.ts +0 -2
  97. package/src/telemetry/local-obs.ts +2 -2
  98. package/src/telemetry/logging.ts +1 -1
  99. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,490 @@
1
+ import { mkdtemp, mkdir, rm, writeFile } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { optimizeDeps, resolveConfig } from "vite";
5
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
6
+ // Import the *real* dev-server optimizeDeps config (the same constant the
7
+ // pre-warm and activation servers use) so this test reflects production and not
8
+ // a duplicated copy. It lives in its own module so importing it here does not
9
+ // drag in the heavy `dev-server.mjs` graph (vite + express + file-sync), which
10
+ // would make a transitive load failure surface as an opaque import error rather
11
+ // than a meaningful assertion.
12
+ import { OPTIMIZE_DEPS_CONFIG } from "./optimize-deps-config.mjs";
13
+ /**
14
+ * Behavioral regression repro for APPS-4576.
15
+ *
16
+ * Production symptom: on a freshly-provisioned warm-pool dev box, Clark sits on
17
+ * "Thinking..." and the editor canvas shows "reconnecting" mid-generation. The
18
+ * Datadog trail across Connor's repro sessions was always the same sequence:
19
+ * peer connect -> Vite `✨ optimized dependencies changed. reloading` -> the
20
+ * editor websocket closes with code 1001 ("going away" / page navigated away)
21
+ * -> the in-flight prompt is orphaned.
22
+ *
23
+ * Mechanism: Vite's cold-start dependency scan only crawls what is statically
24
+ * reachable from the HTML entry. A generated app reaches its heavy deps
25
+ * (`@radix-ui/*`, `lucide-react/*` icons) only through app component files that
26
+ * the scanner cannot statically follow (router/code-split with non-literal
27
+ * specifiers). Those deps are therefore missed at startup and discovered at
28
+ * runtime, which forces a full-page reload — the reload is what drops the
29
+ * websocket.
30
+ *
31
+ * This test reproduces that mechanism with Vite's real optimizer (the same scan
32
+ * + optimize that `vite optimize` runs) against a tiny fixture app whose only
33
+ * dependency is reachable solely through a component file the scanner cannot
34
+ * follow. It asserts the *behavior we need* — the dep is pre-bundled at startup
35
+ * so no runtime re-optimization (and no reload) ever happens. It is fix-agnostic:
36
+ * any production-config change that makes the cold-start scan reach app source
37
+ * (an `entries` glob, an `include` list, etc.) turns it green.
38
+ *
39
+ * RED until the dev-server `OPTIMIZE_DEPS_CONFIG` is fixed.
40
+ */
41
+ describe("dev server optimizeDeps cold-start pre-bundling (APPS-4576)", () => {
42
+ let fixtureRoot;
43
+ const LAZY_DEP = "fake-lazy-dep";
44
+ // A second dep reachable only from a pure `.ts` module (no JSX). Guards the
45
+ // entries glob covering `.ts`, not just `.tsx`/`.jsx` (APPS-4576 F-01).
46
+ const LAZY_DEP_TS = "fake-lazy-dep-ts";
47
+ // A dep imported only from a source file planted *inside* node_modules. Guards
48
+ // that the broad source glob never crawls node_modules (the scan stays bounded
49
+ // even though `**/*.{js,ts,jsx,tsx}` would match the planted file by extension).
50
+ const NODE_MODULES_ONLY_DEP = "fake-nm-only-dep";
51
+ beforeAll(async () => {
52
+ fixtureRoot = await mkdtemp(join(tmpdir(), "apps-4576-optimize-deps-"));
53
+ // index.html -> /src/main.tsx is the only statically reachable graph.
54
+ await writeFile(join(fixtureRoot, "package.json"), JSON.stringify({
55
+ name: "apps-4576-fixture",
56
+ private: true,
57
+ version: "0.0.0",
58
+ type: "module",
59
+ }));
60
+ await writeFile(join(fixtureRoot, "index.html"), `<!doctype html><html><head></head><body><div id="root"></div>` +
61
+ `<script type="module" src="/src/main.tsx"></script></body></html>`);
62
+ const srcDir = join(fixtureRoot, "src");
63
+ await mkdir(join(srcDir, "pages"), { recursive: true });
64
+ // main.tsx reaches the page only through a computed (non-literal) dynamic
65
+ // import, so Vite's scanner cannot follow it -- exactly how generated apps
66
+ // code-split their routes. The scanner therefore never sees Heavy.tsx.
67
+ await writeFile(join(srcDir, "main.tsx"), `const lazyPath = "./pages/Heavy.tsx";\n` +
68
+ `const lazyUtilPath = "./lib/heavy-util.ts";\n` +
69
+ `export const load = () => import(/* @vite-ignore */ lazyPath);\n` +
70
+ `export const loadUtil = () => import(/* @vite-ignore */ lazyUtilPath);\n`);
71
+ // Heavy.tsx is the only importer of the heavy dependency (stand-in for
72
+ // @radix-ui/* / lucide-react). Reachable on disk, not via the import graph.
73
+ await writeFile(join(srcDir, "pages", "Heavy.tsx"), `import value from "${LAZY_DEP}";\n` +
74
+ `export default function Heavy() {\n return value;\n}\n`);
75
+ // heavy-util.ts is a pure `.ts` module (no JSX) importing a TS-only heavy
76
+ // dep. It is reached only through main.tsx's non-literal dynamic import, so
77
+ // the scanner cannot follow it from the graph -- it is discoverable solely
78
+ // as a scan *entry*. A `.tsx`/`.jsx`-only entries glob never makes it an
79
+ // entry, so the dep is missed; the widened `.ts` glob (F-01) makes it an
80
+ // entry and pre-bundles the dep. This is the exact case the narrow glob
81
+ // regressed on.
82
+ await mkdir(join(srcDir, "lib"), { recursive: true });
83
+ await writeFile(join(srcDir, "lib", "heavy-util.ts"), `import value from "${LAZY_DEP_TS}";\n` + `export default value;\n`);
84
+ // Minimal installed bare dependency so Vite has something to pre-bundle.
85
+ const depDir = join(fixtureRoot, "node_modules", LAZY_DEP);
86
+ await mkdir(depDir, { recursive: true });
87
+ await writeFile(join(depDir, "package.json"), JSON.stringify({
88
+ name: LAZY_DEP,
89
+ version: "1.0.0",
90
+ type: "module",
91
+ main: "index.js",
92
+ module: "index.js",
93
+ exports: "./index.js",
94
+ }));
95
+ await writeFile(join(depDir, "index.js"), `const value = 42;\nexport default value;\n`);
96
+ // Second installed bare dep, imported only from the pure `.ts` module above.
97
+ const depTsDir = join(fixtureRoot, "node_modules", LAZY_DEP_TS);
98
+ await mkdir(depTsDir, { recursive: true });
99
+ await writeFile(join(depTsDir, "package.json"), JSON.stringify({
100
+ name: LAZY_DEP_TS,
101
+ version: "1.0.0",
102
+ type: "module",
103
+ main: "index.js",
104
+ module: "index.js",
105
+ exports: "./index.js",
106
+ }));
107
+ await writeFile(join(depTsDir, "index.js"), `const value = 7;\nexport default value;\n`);
108
+ // Plant a source file *inside* node_modules whose extension matches the
109
+ // broad entries glob and which imports its own dep. If Vite's scanner ever
110
+ // stopped excluding node_modules, this file would become a scan entry and
111
+ // pull NODE_MODULES_ONLY_DEP into the optimized set -- the regression the
112
+ // node_modules-exclusion guard below catches.
113
+ const plantedDir = join(fixtureRoot, "node_modules", "planted-app-src");
114
+ await mkdir(plantedDir, { recursive: true });
115
+ await writeFile(join(plantedDir, "index.tsx"), `import value from "${NODE_MODULES_ONLY_DEP}";\n` +
116
+ `export default function Planted() {\n return value;\n}\n`);
117
+ const depNmDir = join(fixtureRoot, "node_modules", NODE_MODULES_ONLY_DEP);
118
+ await mkdir(depNmDir, { recursive: true });
119
+ await writeFile(join(depNmDir, "package.json"), JSON.stringify({
120
+ name: NODE_MODULES_ONLY_DEP,
121
+ version: "1.0.0",
122
+ type: "module",
123
+ main: "index.js",
124
+ module: "index.js",
125
+ exports: "./index.js",
126
+ }));
127
+ await writeFile(join(depNmDir, "index.js"), `const value = 99;\nexport default value;\n`);
128
+ });
129
+ afterAll(async () => {
130
+ if (fixtureRoot) {
131
+ await rm(fixtureRoot, { recursive: true, force: true });
132
+ }
133
+ });
134
+ // Runs Vite's real cold-start dep optimizer against the fixture with the given
135
+ // optimizeDeps config and returns the resulting metadata.
136
+ //
137
+ // optimizeDeps(config, force, asCommand):
138
+ // force=true — ignore any prior cache and run a clean cold-start scan
139
+ // + optimize, mirroring a freshly-provisioned warm-pool box.
140
+ // asCommand=false — not invoked via the `vite optimize` CLI (suppresses the
141
+ // CLI-only logging/exit behavior; we just want the metadata).
142
+ async function optimizeFixture(optimizeDepsConfig) {
143
+ const config = await resolveConfig({
144
+ root: fixtureRoot,
145
+ configFile: false,
146
+ logLevel: "silent",
147
+ optimizeDeps: optimizeDepsConfig,
148
+ }, "serve");
149
+ return optimizeDeps(config, true, false);
150
+ }
151
+ it("pre-bundles deps reachable only through app source so no runtime reload is forced", async () => {
152
+ const metadata = await optimizeFixture(OPTIMIZE_DEPS_CONFIG);
153
+ const optimized = Object.keys(metadata.optimized);
154
+ expect(optimized, `Vite's cold-start scan missed "${LAZY_DEP}" (optimized: ` +
155
+ `[${optimized.join(", ")}]). It is reachable only through app source, ` +
156
+ `so it will be discovered at runtime and force an "optimized dependencies ` +
157
+ `changed. reloading" full-page reload that drops the editor websocket ` +
158
+ `(close 1001) mid Clark generation. The dev-server OPTIMIZE_DEPS_CONFIG ` +
159
+ `must make the cold-start scan reach app source (e.g. optimizeDeps.entries).`).toContain(LAZY_DEP);
160
+ }, 30_000);
161
+ it("pre-bundles deps reachable only through a pure .ts module (entries glob covers .ts)", async () => {
162
+ const metadata = await optimizeFixture(OPTIMIZE_DEPS_CONFIG);
163
+ const optimized = Object.keys(metadata.optimized);
164
+ // Regression guard for APPS-4576 F-01: the entries glob was originally
165
+ // `**/*.{jsx,tsx}`, which never makes a pure `.ts` module a scan entry. Since
166
+ // heavy-util.ts is reachable only via a non-literal dynamic import (the
167
+ // scanner cannot follow it), the narrow glob misses "${LAZY_DEP_TS}" and it
168
+ // is discovered at runtime -- the same reload-then-drop-websocket failure as
169
+ // the `.tsx` case. The widened `**/*.{js,ts,jsx,tsx}` glob makes the `.ts`
170
+ // module an entry and pre-bundles the dep.
171
+ expect(optimized, `Vite's cold-start scan missed the .ts-only dep "${LAZY_DEP_TS}" ` +
172
+ `(optimized: [${optimized.join(", ")}]). The optimizeDeps.entries glob ` +
173
+ `must cover .ts source, not just .tsx/.jsx, or pure .ts modules behind ` +
174
+ `code-splits force a runtime re-optimization reload mid Clark generation.`).toContain(LAZY_DEP_TS);
175
+ }, 30_000);
176
+ it("entries is not part of Vite's dep-cache config hash (pre-warm/activation cannot desync)", async () => {
177
+ // The whole fix relies on pre-warm and activation sharing one dep cache.
178
+ // Vite invalidates that cache when `getConfigHash` changes, so if `entries`
179
+ // ever entered the config hash, the two servers (which scan the same source
180
+ // here but could differ in production) would discard the pre-warmed cache on
181
+ // activation and re-run optimization -- the exact "optimized dependencies
182
+ // changed. reloading" reload this fix removes.
183
+ //
184
+ // This pins that invariant programmatically rather than by source comment:
185
+ // two configs identical except for `entries` must produce the same
186
+ // `configHash`. Verified against Vite 6.4.2, where `getConfigHash` hashes
187
+ // only optimizeDeps.{include,exclude,esbuildOptions}. If a Vite upgrade ever
188
+ // moves `entries` into the hash, this goes RED -- the signal to re-evaluate
189
+ // the pre-warm/activation cache-sharing contract before shipping the bump.
190
+ const wide = await optimizeFixture(OPTIMIZE_DEPS_CONFIG);
191
+ const narrowed = await optimizeFixture({
192
+ ...OPTIMIZE_DEPS_CONFIG,
193
+ entries: ["**/*.html", "**/*.{jsx,tsx}"],
194
+ });
195
+ // Sanity check that `entries` actually changed the scan result, so equal
196
+ // config hashes below are meaningful and not an artifact of identical input.
197
+ expect(Object.keys(wide.optimized)).toContain(LAZY_DEP_TS);
198
+ expect(Object.keys(narrowed.optimized)).not.toContain(LAZY_DEP_TS);
199
+ expect(narrowed.configHash, `Vite's optimizeDeps configHash changed when only \`entries\` differed ` +
200
+ `(${narrowed.configHash} vs ${wide.configHash}). \`entries\` has entered ` +
201
+ `the dep-cache config hash, so the pre-warm and activation servers will ` +
202
+ `discard the pre-warmed cache and re-optimize on activation, forcing the ` +
203
+ `reload that drops the editor websocket (APPS-4576). Re-evaluate the ` +
204
+ `cache-sharing contract before upgrading Vite.`).toBe(wide.configHash);
205
+ }, 30_000);
206
+ it("keeps the broad source glob bounded: node_modules is never scanned", async () => {
207
+ // The widened `**/*.{js,ts,jsx,tsx}` glob would match source files anywhere,
208
+ // including under node_modules. Vite's scanner always excludes
209
+ // `**/node_modules/**` (and the build outDir) from glob entries, so the scan
210
+ // stays bounded to app source and cannot blow up cold-start on a huge
211
+ // node_modules tree. Verified against Vite 6.4.2 `globEntries`; this guard
212
+ // goes RED if a future Vite upgrade stops excluding node_modules.
213
+ const metadata = await optimizeFixture(OPTIMIZE_DEPS_CONFIG);
214
+ const optimized = Object.keys(metadata.optimized);
215
+ expect(optimized, `Vite optimized "${NODE_MODULES_ONLY_DEP}", which is imported only from a ` +
216
+ `source file planted inside node_modules (optimized: ` +
217
+ `[${optimized.join(", ")}]). The cold-start scan is crawling node_modules, ` +
218
+ `so the broad entries glob is no longer bounded -- a real app's ` +
219
+ `node_modules could make the scan slow to a crawl or fail. Vite's ` +
220
+ `node_modules exclusion has regressed; pin/patch it before shipping.`).not.toContain(NODE_MODULES_ONLY_DEP);
221
+ }, 30_000);
222
+ });
223
+ /**
224
+ * Regression repro for the APPS-4576 cold-start crash.
225
+ *
226
+ * The widened `entries` glob makes the cold-start dep scan crawl *all* app
227
+ * source, including Node-side files at the app root (`vite.config.ts`,
228
+ * `server/**`). A generated fullstack app's `vite.config.ts` imports
229
+ * `@tailwindcss/vite`, which depends on the native `@tailwindcss/oxide`
230
+ * (`tailwindcss-oxide.<platform>.node`). esbuild's dep optimizer has no loader
231
+ * for `.node`, so bundling that dep fails the whole optimize:
232
+ *
233
+ * Error from vite-plugin-file-sync ... Build failed with 1 error:
234
+ * .../tailwindcss-oxide.linux-x64-gnu.node
235
+ *
236
+ * When optimize fails, Vite never serves and the editor websocket never
237
+ * (re)connects -- the `queue-survives-disconnect` mock e2e saw the socket stay
238
+ * "released" after a dev-server respawn (PR #19858 CI). A native `.node` addon
239
+ * reached during the *browser* dep scan is always build-time-only and never
240
+ * executed in the browser, so the optimizer must tolerate it rather than crash.
241
+ *
242
+ * This fixture is isolated from the suite above: a dep containing a `.node`
243
+ * addon would crash *every* `optimizeFixture` call under the buggy config, so it
244
+ * gets its own fixture root and optimizer rather than polluting the shared one.
245
+ */
246
+ describe("dev server optimizeDeps tolerates native .node addons (APPS-4576)", () => {
247
+ let fixtureRoot;
248
+ // Stand-in for `@tailwindcss/oxide`: a dep whose entry pulls in a native
249
+ // `.node` binary, reached only from a Node-side config file at the app root.
250
+ const NATIVE_DEP = "fake-native-dep";
251
+ beforeAll(async () => {
252
+ fixtureRoot = await mkdtemp(join(tmpdir(), "apps-4576-native-node-"));
253
+ await writeFile(join(fixtureRoot, "package.json"), JSON.stringify({
254
+ name: "apps-4576-native-fixture",
255
+ private: true,
256
+ version: "0.0.0",
257
+ type: "module",
258
+ }));
259
+ await writeFile(join(fixtureRoot, "index.html"), `<!doctype html><html><head></head><body><div id="root"></div>` +
260
+ `<script type="module" src="/src/main.tsx"></script></body></html>`);
261
+ const srcDir = join(fixtureRoot, "src");
262
+ await mkdir(srcDir, { recursive: true });
263
+ await writeFile(join(srcDir, "main.tsx"), `export const root = "app";\n`);
264
+ // A Node-side config file at the app root (stand-in for `vite.config.ts`)
265
+ // that imports the native-addon dep. The widened entries glob makes the
266
+ // browser dep scan treat this file as an entry and follow the import into
267
+ // the native dep -- exactly the production path through `@tailwindcss/vite`.
268
+ await writeFile(join(fixtureRoot, "build.config.ts"), `import native from "${NATIVE_DEP}";\n` + `export default native;\n`);
269
+ // The native-addon dep: its entry imports a `.node` binary, which esbuild
270
+ // cannot bundle (no `.node` loader) -- the crash this test guards against.
271
+ const depDir = join(fixtureRoot, "node_modules", NATIVE_DEP);
272
+ await mkdir(depDir, { recursive: true });
273
+ await writeFile(join(depDir, "package.json"), JSON.stringify({
274
+ name: NATIVE_DEP,
275
+ version: "1.0.0",
276
+ type: "module",
277
+ main: "index.js",
278
+ module: "index.js",
279
+ exports: "./index.js",
280
+ }));
281
+ await writeFile(join(depDir, "index.js"), `import "./prebuilt.linux-x64-gnu.node";\n` + `export default 1;\n`);
282
+ // Minimal stand-in for the platform-specific native binary.
283
+ await writeFile(join(depDir, "prebuilt.linux-x64-gnu.node"), Buffer.from([0x7f, 0x45, 0x4c, 0x46]));
284
+ });
285
+ afterAll(async () => {
286
+ if (fixtureRoot) {
287
+ await rm(fixtureRoot, { recursive: true, force: true });
288
+ }
289
+ });
290
+ it("completes cold-start optimize when app source pulls in a native .node addon", async () => {
291
+ const config = await resolveConfig({
292
+ root: fixtureRoot,
293
+ configFile: false,
294
+ logLevel: "silent",
295
+ optimizeDeps: OPTIMIZE_DEPS_CONFIG,
296
+ }, "serve");
297
+ // Under the buggy config this rejects with esbuild "Build failed with 1
298
+ // error: ...node" -- which in production aborts the dev server's vite start
299
+ // so the editor websocket never reconnects (APPS-4576). The optimizer must
300
+ // tolerate the unbundlable native addon and finish the cold-start scan.
301
+ await expect(optimizeDeps(config, true, false)).resolves.toBeDefined();
302
+ }, 30_000);
303
+ });
304
+ /**
305
+ * Regression repro for the APPS-4576 cold-start crash on real tailwind-v4 apps.
306
+ *
307
+ * The widened `entries` glob (`**\/*.{js,ts,jsx,tsx}`) matches Node-side files
308
+ * at the app root -- most importantly `vite.config.ts`, which a generated app
309
+ * uses to load `@tailwindcss/vite`. When `vite.config.ts` is a browser dep-scan
310
+ * entry, Vite treats its bare imports as deps to pre-bundle, so esbuild bundles
311
+ * `@tailwindcss/vite` and follows it into `lightningcss/node/index.js`, whose
312
+ *
313
+ * module.exports = require(`../pkg`);
314
+ *
315
+ * esbuild cannot statically resolve -> "Could not resolve \"../pkg\"" -> the
316
+ * whole cold-start optimize aborts. That is distinct from the native `.node`
317
+ * case above (the `.node: empty` loader does NOT help a bare directory require),
318
+ * and it crashes `preWarmViteCache` on *every* tailwind-v4 app -- verified
319
+ * against the real `packages/demo-apps/shadcn-demo-app` and `app-fullstack`.
320
+ *
321
+ * The config must therefore keep Node-side config files (and the `server/**`
322
+ * tree of fullstack apps) out of the browser dep-scan entries. This fixture
323
+ * reproduces the crash shape with a fake config-only dep that mirrors
324
+ * lightningcss's `require("../pkg")`, and pins that the shipped config no longer
325
+ * scans it -- while a RED control (config-file negations removed) still crashes,
326
+ * so the assertion is meaningful and not an artifact of a resolvable fixture.
327
+ */
328
+ describe("dev server optimizeDeps keeps Node-side config files out of the browser scan (APPS-4576)", () => {
329
+ let fixtureRoot;
330
+ // Stand-in for `@tailwindcss/vite`/`lightningcss`: a dep reached only from a
331
+ // root `vite.config.ts`, whose entry does an unresolvable `require("../pkg")`.
332
+ const CONFIG_ONLY_DEP = "fake-config-only-dep";
333
+ beforeAll(async () => {
334
+ fixtureRoot = await mkdtemp(join(tmpdir(), "apps-4576-config-scan-"));
335
+ await writeFile(join(fixtureRoot, "package.json"), JSON.stringify({
336
+ name: "apps-4576-config-fixture",
337
+ private: true,
338
+ version: "0.0.0",
339
+ type: "module",
340
+ }));
341
+ await writeFile(join(fixtureRoot, "index.html"), `<!doctype html><html><head></head><body><div id="root"></div>` +
342
+ `<script type="module" src="/src/main.tsx"></script></body></html>`);
343
+ const srcDir = join(fixtureRoot, "src");
344
+ await mkdir(srcDir, { recursive: true });
345
+ await writeFile(join(srcDir, "main.tsx"), `export const root = "app";\n`);
346
+ // Root `vite.config.ts` (Node-side) importing the crash-inducing dep --
347
+ // exactly how a generated app's vite.config.ts pulls in @tailwindcss/vite.
348
+ await writeFile(join(fixtureRoot, "vite.config.ts"), `import cfg from "${CONFIG_ONLY_DEP}";\n` + `export default cfg;\n`);
349
+ // The dep esbuild cannot bundle: its entry requires a bare `../pkg` path
350
+ // that does not exist (mirrors lightningcss/node/index.js). Bundling it
351
+ // fails the whole optimize with "Could not resolve \"../pkg\"".
352
+ const depDir = join(fixtureRoot, "node_modules", CONFIG_ONLY_DEP);
353
+ await mkdir(depDir, { recursive: true });
354
+ await writeFile(join(depDir, "package.json"), JSON.stringify({
355
+ name: CONFIG_ONLY_DEP,
356
+ version: "1.0.0",
357
+ type: "commonjs",
358
+ main: "index.js",
359
+ }));
360
+ await writeFile(join(depDir, "index.js"), `module.exports = require("../pkg");\n`);
361
+ });
362
+ afterAll(async () => {
363
+ if (fixtureRoot) {
364
+ await rm(fixtureRoot, { recursive: true, force: true });
365
+ }
366
+ });
367
+ async function optimizeWith(optimizeDepsConfig) {
368
+ const config = await resolveConfig({
369
+ root: fixtureRoot,
370
+ configFile: false,
371
+ logLevel: "silent",
372
+ optimizeDeps: optimizeDepsConfig,
373
+ }, "serve");
374
+ return optimizeDeps(config, true, false);
375
+ }
376
+ it("does not crash cold-start optimize when a root config file imports an unbundlable dep", async () => {
377
+ // RED control: the pre-fix glob (no config-file negations) treats
378
+ // vite.config.ts as a scan entry, follows its import into the unresolvable
379
+ // dep, and aborts -- the exact production crash. If this ever stops
380
+ // rejecting, the fixture no longer reproduces the bug and the GREEN
381
+ // assertion below would be meaningless.
382
+ await expect(optimizeWith({
383
+ ...OPTIMIZE_DEPS_CONFIG,
384
+ entries: [
385
+ "**/*.html",
386
+ "**/*.{js,ts,jsx,tsx}",
387
+ "!custom/**",
388
+ "!.superblocks/**",
389
+ ],
390
+ })).rejects.toThrow();
391
+ // GREEN: the shipped config excludes Node-side config files from the scan,
392
+ // so vite.config.ts is never an entry, the crash-inducing import is never
393
+ // followed, and cold-start optimize completes.
394
+ await expect(optimizeWith(OPTIMIZE_DEPS_CONFIG)).resolves.toBeDefined();
395
+ }, 30_000);
396
+ });
397
+ /**
398
+ * Regression repro for the APPS-4576 residual reloads found on an EE warm-pool
399
+ * box: even with the widened `entries` scan, a freshly-generated app still
400
+ * reloaded once for `@superblocksteam/library/jsx-dev-runtime` (first render)
401
+ * and once for `@superblocksteam/sdk-api` (after generated code imported it).
402
+ * Neither is reachable by the source scan:
403
+ *
404
+ * - The scan's esbuild uses the default (react) JSX runtime, so it emits
405
+ * `react/jsx-runtime` and never `@superblocksteam/library/jsx-dev-runtime`,
406
+ * even though every generated app sets that `jsxImportSource`. `include`
407
+ * force-bundles it.
408
+ * - `@superblocksteam/sdk-api` is a virtual module served by a plugin, not a
409
+ * real package; it can't be pre-bundled, so it must be `exclude`d or the
410
+ * optimizer re-optimizes (and reloads) when it first appears at runtime.
411
+ *
412
+ * This pins both: the shipped config force-includes the JSX runtime even when
413
+ * no source imports it, and keeps sdk-api out of the optimized set even when a
414
+ * source file DOES import it.
415
+ */
416
+ describe("dev server optimizeDeps includes the JSX runtime and excludes the virtual sdk-api (APPS-4576)", () => {
417
+ let fixtureRoot;
418
+ const JSX_RUNTIME = "@superblocksteam/library/jsx-dev-runtime";
419
+ const SDK_API = "@superblocksteam/sdk-api";
420
+ beforeAll(async () => {
421
+ fixtureRoot = await mkdtemp(join(tmpdir(), "apps-4576-include-exclude-"));
422
+ await writeFile(join(fixtureRoot, "package.json"), JSON.stringify({
423
+ name: "apps-4576-inc-exc-fixture",
424
+ private: true,
425
+ version: "0.0.0",
426
+ type: "module",
427
+ }));
428
+ await writeFile(join(fixtureRoot, "index.html"), `<!doctype html><html><head></head><body><div id="root"></div>` +
429
+ `<script type="module" src="/src/main.tsx"></script></body></html>`);
430
+ const srcDir = join(fixtureRoot, "src");
431
+ await mkdir(srcDir, { recursive: true });
432
+ // main.tsx imports sdk-api (so the scan DOES discover it) but never imports
433
+ // the JSX runtime (so only `include` can pull that in).
434
+ await writeFile(join(srcDir, "main.tsx"), `import { thing } from "${SDK_API}";\nexport const root = thing;\n`);
435
+ // `@superblocksteam/library` with a `./jsx-dev-runtime` subpath export, so
436
+ // `include: ["@superblocksteam/library/jsx-dev-runtime"]` resolves like the
437
+ // real package (which exposes the JSX runtime via that subpath).
438
+ const libDir = join(fixtureRoot, "node_modules", "@superblocksteam", "library");
439
+ await mkdir(libDir, { recursive: true });
440
+ await writeFile(join(libDir, "package.json"), JSON.stringify({
441
+ name: "@superblocksteam/library",
442
+ version: "1.0.0",
443
+ type: "module",
444
+ exports: {
445
+ ".": "./index.js",
446
+ "./jsx-dev-runtime": "./jsx-dev-runtime.js",
447
+ },
448
+ }));
449
+ await writeFile(join(libDir, "index.js"), `export default 1;\n`);
450
+ await writeFile(join(libDir, "jsx-dev-runtime.js"), `export const jsxDEV = () => null;\nexport const Fragment = "fragment";\n`);
451
+ // Real `@superblocksteam/sdk-api` package so main.tsx's import resolves at
452
+ // scan time — the exclude is what must keep it out of the optimized set.
453
+ const sdkApiDir = join(fixtureRoot, "node_modules", "@superblocksteam", "sdk-api");
454
+ await mkdir(sdkApiDir, { recursive: true });
455
+ await writeFile(join(sdkApiDir, "package.json"), JSON.stringify({
456
+ name: SDK_API,
457
+ version: "1.0.0",
458
+ type: "module",
459
+ main: "index.js",
460
+ module: "index.js",
461
+ exports: "./index.js",
462
+ }));
463
+ await writeFile(join(sdkApiDir, "index.js"), `export const thing = 2;\nexport default 2;\n`);
464
+ });
465
+ afterAll(async () => {
466
+ if (fixtureRoot) {
467
+ await rm(fixtureRoot, { recursive: true, force: true });
468
+ }
469
+ });
470
+ it("force-includes the JSX runtime and excludes the virtual sdk-api module", async () => {
471
+ const config = await resolveConfig({
472
+ root: fixtureRoot,
473
+ configFile: false,
474
+ logLevel: "silent",
475
+ optimizeDeps: OPTIMIZE_DEPS_CONFIG,
476
+ }, "serve");
477
+ const metadata = await optimizeDeps(config, true, false);
478
+ const optimized = Object.keys(metadata.optimized);
479
+ // include: pre-bundled even though nothing in source imports it.
480
+ expect(optimized, `"${JSX_RUNTIME}" must be force-included so a generated app does not ` +
481
+ `reload on first render to optimize the JSX runtime (optimized: ` +
482
+ `[${optimized.join(", ")}]).`).toContain(JSX_RUNTIME);
483
+ // exclude: kept out even though main.tsx imports it, so its first runtime
484
+ // appearance never triggers a re-optimize/reload.
485
+ expect(optimized, `"${SDK_API}" is a virtual plugin-served module and must be excluded from ` +
486
+ `optimization; optimizing it forces a runtime reload (optimized: ` +
487
+ `[${optimized.join(", ")}]).`).not.toContain(SDK_API);
488
+ }, 30_000);
489
+ });
490
+ //# sourceMappingURL=dev-server.optimize-deps.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-server.optimize-deps.test.mjs","sourceRoot":"","sources":["../../src/dev-utils/dev-server.optimize-deps.test.mts"],"names":[],"mappings":"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"}
@@ -49,10 +49,10 @@
49
49
  * value. They cannot import this module,
50
50
  * so they repeat the same string.
51
51
  */
52
- export type FatalExitHandler = "uncaughtException" | "unhandledRejection" | "containerExit";
52
+ type FatalExitHandler = "uncaughtException" | "unhandledRejection" | "containerExit";
53
53
  /** Fixed token so a log-based metric or a log search can pick out these lines. */
54
54
  export declare const FATAL_EXIT_EVENT = "dev_server_fatal_exit";
55
- export interface FatalExitFields {
55
+ interface FatalExitFields {
56
56
  /** Where the fatal exit came from. */
57
57
  handler: FatalExitHandler;
58
58
  /**
@@ -85,4 +85,5 @@ export declare function parseIsWarm(value: string | undefined): boolean;
85
85
  */
86
86
  export declare function buildFatalExitLog(fields: FatalExitFields): string;
87
87
  export declare function isRecoverableShutdownError(reason: unknown): boolean;
88
+ export {};
88
89
  //# sourceMappingURL=fatal-exit.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fatal-exit.d.mts","sourceRoot":"","sources":["../../src/dev-utils/fatal-exit.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,GACxB,mBAAmB,GACnB,oBAAoB,GACpB,eAAe,CAAC;AAEpB,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gFAAgF;IAChF,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAU9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CASjE;AA0CD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CASnE"}
1
+ {"version":3,"file":"fatal-exit.d.mts","sourceRoot":"","sources":["../../src/dev-utils/fatal-exit.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH;;;;;;;;;;;;GAYG;AACH,KAAK,gBAAgB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,eAAe,CAAC;AAEpB,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AAExD,UAAU,eAAe;IACvB,sCAAsC;IACtC,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gFAAgF;IAChF,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAU9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CASjE;AA0CD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CASnE"}
@@ -0,0 +1,16 @@
1
+ import type { UserConfig } from "vite";
2
+ /**
3
+ * Shared `optimizeDeps` config for both the pre-warm and activation Vite
4
+ * servers (see `dev-server.mts`).
5
+ *
6
+ * Vite includes the stringified `optimizeDeps` config in its dep cache hash, so
7
+ * both servers must use identical config or activation will discard the
8
+ * pre-warmed cache and re-run full dependency optimization.
9
+ *
10
+ * Lives in its own module (rather than inline in `dev-server.mts`) so the
11
+ * dep-pre-bundling contract can be asserted in tests without importing the
12
+ * entire dev-server module graph (vite + express + file-sync + telemetry).
13
+ * See `dev-server.optimize-deps.test.mts`.
14
+ */
15
+ export declare const OPTIMIZE_DEPS_CONFIG: UserConfig["optimizeDeps"];
16
+ //# sourceMappingURL=optimize-deps-config.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimize-deps-config.d.mts","sourceRoot":"","sources":["../../src/dev-utils/optimize-deps-config.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAAU,CAAC,cAAc,CAgF3D,CAAC"}