@nativescript/vite 8.0.0-alpha.69 → 8.0.0-alpha.70

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 (86) hide show
  1. package/configuration/base.js.map +1 -1
  2. package/helpers/global-defines.d.ts +1 -38
  3. package/helpers/global-defines.js +1 -61
  4. package/helpers/global-defines.js.map +1 -1
  5. package/helpers/main-entry.js +1 -1
  6. package/helpers/main-entry.js.map +1 -1
  7. package/helpers/workers.js +2 -2
  8. package/hmr/client/hot-context.js +8 -2
  9. package/hmr/client/hot-context.js.map +1 -1
  10. package/hmr/client/utils.js +5 -5
  11. package/hmr/client/utils.js.map +1 -1
  12. package/hmr/client/ws-transport.js +1 -22
  13. package/hmr/client/ws-transport.js.map +1 -1
  14. package/hmr/entry-runtime.js +7 -4
  15. package/hmr/entry-runtime.js.map +1 -1
  16. package/hmr/frameworks/angular/client/index.d.ts +0 -1
  17. package/hmr/frameworks/angular/client/index.js +16 -141
  18. package/hmr/frameworks/angular/client/index.js.map +1 -1
  19. package/hmr/frameworks/angular/server/strategy.js +17 -3
  20. package/hmr/frameworks/angular/server/strategy.js.map +1 -1
  21. package/hmr/frameworks/angular/server/websocket-angular-hot-update.js +2 -2
  22. package/hmr/frameworks/solid/client/app-runtime.js +9 -3
  23. package/hmr/frameworks/solid/client/app-runtime.js.map +1 -1
  24. package/hmr/frameworks/vue/client/index.js +2 -2
  25. package/hmr/frameworks/vue/client/index.js.map +1 -1
  26. package/hmr/frameworks/vue/server/sfc-route-shared.d.ts +1 -1
  27. package/hmr/frameworks/vue/server/sfc-route-shared.js +1 -1
  28. package/hmr/frameworks/vue/server/strategy.js +9 -7
  29. package/hmr/frameworks/vue/server/strategy.js.map +1 -1
  30. package/hmr/server/boot-recording.d.ts +4 -11
  31. package/hmr/server/boot-recording.js +21 -35
  32. package/hmr/server/boot-recording.js.map +1 -1
  33. package/hmr/server/core-sanitize.js +2 -2
  34. package/hmr/server/core-sanitize.js.map +1 -1
  35. package/hmr/server/deps-bundle.d.ts +32 -17
  36. package/hmr/server/deps-bundle.js +31 -18
  37. package/hmr/server/deps-bundle.js.map +1 -1
  38. package/hmr/server/framework-strategy.d.ts +14 -2
  39. package/hmr/server/import-map.d.ts +40 -17
  40. package/hmr/server/import-map.js +74 -52
  41. package/hmr/server/import-map.js.map +1 -1
  42. package/hmr/server/node-builtins-route.d.ts +12 -0
  43. package/hmr/server/node-builtins-route.js +86 -0
  44. package/hmr/server/node-builtins-route.js.map +1 -0
  45. package/hmr/server/ns-m-response-memo.js.map +1 -1
  46. package/hmr/server/rewrite-imports.js +8 -15
  47. package/hmr/server/rewrite-imports.js.map +1 -1
  48. package/hmr/server/websocket-import-map-route.d.ts +1 -1
  49. package/hmr/server/websocket-import-map-route.js +2 -1
  50. package/hmr/server/websocket-import-map-route.js.map +1 -1
  51. package/hmr/server/websocket-ns-m-paths.js +1 -1
  52. package/hmr/server/websocket-ns-m.js +2 -2
  53. package/hmr/server/websocket-ns-m.js.map +1 -1
  54. package/hmr/server/websocket-served-module-helpers.js +1 -1
  55. package/hmr/server/websocket.js +9 -24
  56. package/hmr/server/websocket.js.map +1 -1
  57. package/hmr/shared/ns-globals.d.ts +3 -4
  58. package/hmr/shared/ns-globals.js +3 -2
  59. package/hmr/shared/ns-globals.js.map +1 -1
  60. package/hmr/shared/runtime/boot-complete.d.ts +2 -2
  61. package/hmr/shared/runtime/boot-complete.js +2 -2
  62. package/hmr/shared/runtime/boot-timeline.d.ts +0 -1
  63. package/hmr/shared/runtime/boot-timeline.js +0 -1
  64. package/hmr/shared/runtime/boot-timeline.js.map +1 -1
  65. package/hmr/shared/runtime/browser-runtime-contract.d.ts +34 -46
  66. package/hmr/shared/runtime/browser-runtime-contract.js +19 -4
  67. package/hmr/shared/runtime/browser-runtime-contract.js.map +1 -1
  68. package/hmr/shared/runtime/ns-runtime-test-double.d.ts +21 -0
  69. package/hmr/shared/runtime/ns-runtime-test-double.js +20 -0
  70. package/hmr/shared/runtime/ns-runtime-test-double.js.map +1 -0
  71. package/hmr/shared/runtime/root-placeholder.js +1 -1
  72. package/hmr/shared/runtime/session-bootstrap.js +15 -114
  73. package/hmr/shared/runtime/session-bootstrap.js.map +1 -1
  74. package/hmr/shared/vendor/manifest.d.ts +11 -0
  75. package/hmr/shared/vendor/manifest.js +41 -2
  76. package/hmr/shared/vendor/manifest.js.map +1 -1
  77. package/package.json +1 -1
  78. package/hmr/server/boot-archive-route.d.ts +0 -40
  79. package/hmr/server/boot-archive-route.js +0 -154
  80. package/hmr/server/boot-archive-route.js.map +0 -1
  81. package/hmr/server/boot-closure-route.d.ts +0 -49
  82. package/hmr/server/boot-closure-route.js +0 -144
  83. package/hmr/server/boot-closure-route.js.map +0 -1
  84. package/hmr/shared/runtime/boot-archive-format.d.ts +0 -16
  85. package/hmr/shared/runtime/boot-archive-format.js +0 -31
  86. package/hmr/shared/runtime/boot-archive-format.js.map +0 -1
@@ -1,154 +0,0 @@
1
- import * as http from 'node:http';
2
- import * as https from 'node:https';
3
- import { resolveBootClosureUrls } from './boot-closure-route.js';
4
- import { BOOT_ARCHIVE_PATH, serializeBootArchiveLine } from '../shared/runtime/boot-archive-format.js';
5
- // `/__ns_dev__/boot-archive` — the batch cold-boot payload.
6
- //
7
- // Streams every boot-closure body as ONE NDJSON payload: each body is
8
- // fetched server-side through the exact same middleware pipeline the device
9
- // would hit (self-loopback requests, so `/ns/m` post-processing, shims, and
10
- // headers are byte-identical), one `{"kind":"mod","url":...,"body":...}`
11
- // line per module. The device bootstrap hands the parsed entries to
12
- // `__NS_DEV__.seedModuleBodies(entries)`, which fills the prewarm cache
13
- // consumed by V8's synchronous module walk.
14
- //
15
- // Failure model mirrors the kickstart: any body that fails to self-fetch is
16
- // simply omitted (the device falls back to a per-URL network fetch for it),
17
- // and a runtime without `seedModuleBodies` never calls this route.
18
- export { BOOT_ARCHIVE_PATH };
19
- /**
20
- * Marks loopback self-fetches so the boot-recording middleware can exclude
21
- * them — archive-delivered bodies reach the recorder solely through
22
- * `onArchiveServed`, keeping one writer per data source.
23
- */
24
- export const NS_INTERNAL_HEADER = 'x-ns-internal';
25
- function createSelfLoopbackFetcher(server, timeoutMs) {
26
- const address = server.httpServer?.address();
27
- if (!address || typeof address === 'string')
28
- return null;
29
- const port = address.port;
30
- const secure = !!server.config?.server?.https;
31
- const mod = secure ? https : http;
32
- // Keep-alive agent so the archive build reuses a handful of sockets
33
- // instead of opening one connection per module body.
34
- const agent = secure ? new https.Agent({ keepAlive: true, maxSockets: 8, rejectUnauthorized: false }) : new http.Agent({ keepAlive: true, maxSockets: 8 });
35
- return (pathWithSearch) => new Promise((resolve) => {
36
- try {
37
- const req = mod.request({
38
- host: '127.0.0.1',
39
- port,
40
- path: pathWithSearch,
41
- method: 'GET',
42
- agent,
43
- headers: { [NS_INTERNAL_HEADER]: 'boot-archive' },
44
- // Dev-only loopback against our own (possibly self-signed) server.
45
- ...(secure ? { rejectUnauthorized: false } : {}),
46
- }, (res) => {
47
- const chunks = [];
48
- res.on('data', (chunk) => chunks.push(chunk));
49
- res.on('end', () => resolve({ status: res.statusCode || 0, body: Buffer.concat(chunks).toString('utf8') }));
50
- res.on('error', () => resolve({ status: 0, body: '' }));
51
- });
52
- req.setTimeout(timeoutMs, () => {
53
- req.destroy();
54
- resolve({ status: 0, body: '' });
55
- });
56
- req.on('error', () => resolve({ status: 0, body: '' }));
57
- req.end();
58
- }
59
- catch {
60
- resolve({ status: 0, body: '' });
61
- }
62
- });
63
- }
64
- /**
65
- * Fetch every closure URL through the fetcher with bounded concurrency,
66
- * invoking `onEntry` in completion order for each 2xx non-empty body.
67
- * Returns the device-URL list of successfully archived entries.
68
- */
69
- export async function buildBootArchive(urls, fetchLocal, onEntry, maxConcurrent = 8) {
70
- const served = [];
71
- let next = 0;
72
- const worker = async () => {
73
- while (next < urls.length) {
74
- const index = next++;
75
- const url = urls[index];
76
- let pathWithSearch;
77
- try {
78
- const parsed = new URL(url);
79
- pathWithSearch = `${parsed.pathname}${parsed.search || ''}`;
80
- }
81
- catch {
82
- continue;
83
- }
84
- const result = await fetchLocal(pathWithSearch);
85
- if (result.status >= 200 && result.status < 300 && result.body) {
86
- onEntry({ kind: 'mod', url, body: result.body });
87
- served.push(url);
88
- }
89
- }
90
- };
91
- const workers = [];
92
- for (let i = 0; i < Math.max(1, Math.min(maxConcurrent, urls.length)); i++) {
93
- workers.push(worker());
94
- }
95
- await Promise.all(workers);
96
- return served;
97
- }
98
- export function registerBootArchiveRoute(server, source, options) {
99
- const maxWaitMs = options?.maxWaitMs ?? 3000;
100
- const fetchTimeoutMs = options?.fetchTimeoutMs ?? 120000;
101
- const maxConcurrent = options?.maxConcurrent ?? 8;
102
- server.middlewares.use(async (req, res, next) => {
103
- try {
104
- const url = new URL(req.url || '', 'http://localhost');
105
- if (url.pathname !== BOOT_ARCHIVE_PATH)
106
- return next();
107
- res.setHeader('Access-Control-Allow-Origin', '*');
108
- res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');
109
- if (req.method === 'OPTIONS') {
110
- res.statusCode = 204;
111
- res.end();
112
- return;
113
- }
114
- const fetchLocal = createSelfLoopbackFetcher(server, fetchTimeoutMs);
115
- if (!fetchLocal) {
116
- res.statusCode = 503;
117
- res.setHeader('Content-Type', 'application/json');
118
- res.end(JSON.stringify({ error: 'boot archive unavailable (no bound http server address)' }));
119
- return;
120
- }
121
- const t0 = Date.now();
122
- const resolved = await resolveBootClosureUrls(server, source, maxWaitMs);
123
- res.statusCode = 200;
124
- res.setHeader('Content-Type', 'application/x-ndjson');
125
- res.write(serializeBootArchiveLine({ kind: 'meta', version: 1, source: resolved.source, urls: resolved.urls.length }));
126
- let bytes = 0;
127
- const servedUrls = await buildBootArchive(resolved.urls, fetchLocal, (entry) => {
128
- bytes += entry.body.length;
129
- res.write(serializeBootArchiveLine(entry));
130
- }, maxConcurrent);
131
- res.end();
132
- // Every URL in servedUrls already round-tripped through `new URL`
133
- // inside buildBootArchive, so re-parsing cannot throw.
134
- options?.onArchiveServed?.(servedUrls.map((u) => {
135
- const parsed = new URL(u);
136
- return `${parsed.pathname}${parsed.search || ''}`;
137
- }));
138
- if (options?.verbose) {
139
- console.info(`[hmr-ws][boot-archive] served ${servedUrls.length}/${resolved.urls.length} bodies (${(bytes / 1024).toFixed(0)}kb) from ${resolved.source} closure in ${Date.now() - t0}ms`);
140
- }
141
- }
142
- catch (error) {
143
- if (!res.headersSent) {
144
- res.statusCode = 500;
145
- res.setHeader('Content-Type', 'application/json');
146
- res.end(JSON.stringify({ error: error?.message || 'Failed to build NativeScript boot archive' }));
147
- }
148
- else {
149
- res.end();
150
- }
151
- }
152
- });
153
- }
154
- //# sourceMappingURL=boot-archive-route.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boot-archive-route.js","sourceRoot":"","sources":["../../../../../packages/vite/hmr/server/boot-archive-route.ts"],"names":[],"mappings":"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"}
@@ -1,49 +0,0 @@
1
- import type { ViteDevServer } from 'vite';
2
- export interface BootClosureGraphSource {
3
- /** Normalized project-relative graph module ids (e.g. `/src/app.ts`). */
4
- getGraphModuleIds(): string[];
5
- /** Kick off (or join) the background initial graph population. */
6
- ensureInitialGraphPopulationStarted(server: ViteDevServer): Promise<void>;
7
- /**
8
- * Prefetchable request paths recorded from the most recent completed boot
9
- * (or a persisted recording from a prior session). When present the
10
- * closure is built from this list instead of the src-tree graph walk —
11
- * the recording covers `/ns/m/node_modules/...` bodies the graph walk
12
- * cannot see, which are otherwise fetched serially inside V8's
13
- * synchronous module walk. See boot-recording.ts.
14
- */
15
- getRecordedBootPaths?(): string[] | null;
16
- }
17
- /**
18
- * Where the closure body list comes from: a prior boot's recording (the exact
19
- * request set of a real boot, in V8 walk order — covers node_modules bodies
20
- * the graph walk cannot see and avoids over-fetching lazily-routed src
21
- * modules), or the walked graph module ids.
22
- */
23
- export type BootClosureSource = {
24
- kind: 'recorded';
25
- paths: readonly string[];
26
- } | {
27
- kind: 'graph';
28
- moduleIds: readonly string[];
29
- };
30
- export declare function buildBootClosureUrls(options: {
31
- origin: string;
32
- entryPathname: string;
33
- source: BootClosureSource;
34
- includeCoreBundle?: boolean;
35
- includeDepsBundle?: boolean;
36
- }): string[];
37
- /**
38
- * Shared closure resolution for the boot-closure and boot-archive routes:
39
- * prefer a recorded boot; otherwise wait (bounded) for the background graph
40
- * walk and expand graph ids. Returns the absolute URL list plus which source
41
- * produced it (surfaced in the JSON payload for diagnostics).
42
- */
43
- export declare function resolveBootClosureUrls(server: ViteDevServer, source: BootClosureGraphSource, maxWaitMs: number): Promise<{
44
- urls: string[];
45
- source: BootClosureSource['kind'];
46
- }>;
47
- export declare function registerBootClosureRoute(server: ViteDevServer, source: BootClosureGraphSource, options?: {
48
- maxWaitMs?: number;
49
- }): void;
@@ -1,144 +0,0 @@
1
- import { resolveProjectMainEntryPath } from './vite-plugin.js';
2
- import { CORE_BUNDLE_PATH, isCorePerModuleServingEnabled } from './core-bundle.js';
3
- import { DEPS_BUNDLE_PATH, getSharedDepsBundleService } from './deps-bundle.js';
4
- import { getServerOrigin } from './server-origin.js';
5
- // `/__ns_dev__/boot-closure` — the server-computed cold-boot module closure.
6
- //
7
- // The device bootstrap (`session-bootstrap.ts`) fetches this list and hands
8
- // it to `__NS_DEV__.kickstartPrefetch(urls)` so the runtime can pre-fill its HTTP
9
- // body cache in ONE parallel wave before V8's synchronous
10
- // `ResolveModuleCallback` walks the entry graph. The server owns the module
11
- // graph, so closure computation lives here — the runtime performs no import
12
- // scanning of its own; it fetches exactly this list.
13
- //
14
- // Watchdog note: the response must come back fast even on a cold Vite
15
- // process. `populateInitialGraph` starts at `configureServer` time (see
16
- // websocket.ts) and we only wait for it up to `maxWaitMs`; a PARTIAL list is
17
- // fine — the kickstart tolerates partial pre-fill and V8 falls back to
18
- // per-module fetches for anything missing.
19
- const SCRIPT_EXT_RE = /\.(ts|tsx|js|jsx|mjs|mts|cts)$/i;
20
- // Pure helper (unit-testable): closure source → ordered, deduped absolute URL
21
- // list. The entry goes first so the deepest chain starts fetching immediately;
22
- // the /ns/rt and /ns/core bridges ride along since every app module imports
23
- // them. In core-bundle mode the single-eval `/ns/core-bundle.mjs` payload is
24
- // the biggest body in the boot closure, so it goes right after the entry —
25
- // the kickstart prewarm then downloads it in parallel with everything else
26
- // instead of V8 discovering it mid-walk through the /ns/core shim.
27
- export function buildBootClosureUrls(options) {
28
- const origin = options.origin.replace(/\/$/, '');
29
- const urls = [];
30
- const seen = new Set();
31
- const add = (url) => {
32
- if (!seen.has(url)) {
33
- seen.add(url);
34
- urls.push(url);
35
- }
36
- };
37
- const entryPath = options.entryPathname.startsWith('/') ? options.entryPathname : `/${options.entryPathname}`;
38
- add(`${origin}/ns/m${entryPath.replace(SCRIPT_EXT_RE, '')}`);
39
- if (options.includeCoreBundle) {
40
- add(`${origin}${CORE_BUNDLE_PATH}`);
41
- }
42
- if (options.includeDepsBundle) {
43
- add(`${origin}${DEPS_BUNDLE_PATH}`);
44
- }
45
- add(`${origin}/ns/rt`);
46
- add(`${origin}/ns/core`);
47
- const source = options.source;
48
- switch (source.kind) {
49
- case 'recorded':
50
- for (const p of source.paths) {
51
- if (typeof p !== 'string' || !p.startsWith('/'))
52
- continue;
53
- add(`${origin}${p}`);
54
- }
55
- break;
56
- case 'graph':
57
- for (const id of source.moduleIds) {
58
- if (typeof id !== 'string' || !id.startsWith('/'))
59
- continue;
60
- // Vue SFCs and other non-script assets are served through their
61
- // own routes with their own identity; the /ns/m closure is
62
- // script-only.
63
- if (!SCRIPT_EXT_RE.test(id))
64
- continue;
65
- add(`${origin}/ns/m${id.replace(SCRIPT_EXT_RE, '')}`);
66
- }
67
- break;
68
- default: {
69
- const exhaustive = source;
70
- throw new Error(`Unhandled boot closure source: ${JSON.stringify(exhaustive)}`);
71
- }
72
- }
73
- return urls;
74
- }
75
- /**
76
- * Shared closure resolution for the boot-closure and boot-archive routes:
77
- * prefer a recorded boot; otherwise wait (bounded) for the background graph
78
- * walk and expand graph ids. Returns the absolute URL list plus which source
79
- * produced it (surfaced in the JSON payload for diagnostics).
80
- */
81
- export async function resolveBootClosureUrls(server, source, maxWaitMs) {
82
- const recordedPaths = source.getRecordedBootPaths?.() ?? null;
83
- let closureSource;
84
- if (recordedPaths?.length) {
85
- // A recorded closure needs no graph, so it skips the wait entirely
86
- // (fast restarts).
87
- closureSource = { kind: 'recorded', paths: recordedPaths };
88
- }
89
- else {
90
- // Wait for the background graph walk, but never past the budget —
91
- // partial closures are acceptable by contract.
92
- await Promise.race([source.ensureInitialGraphPopulationStarted(server), new Promise((resolve) => setTimeout(resolve, maxWaitMs))]);
93
- closureSource = { kind: 'graph', moduleIds: source.getGraphModuleIds() };
94
- }
95
- const origin = getServerOrigin(server);
96
- const projectRoot = server.config?.root || process.cwd();
97
- const urls = buildBootClosureUrls({
98
- origin,
99
- entryPathname: resolveProjectMainEntryPath(projectRoot),
100
- source: closureSource,
101
- // If the bundle build later fails, the kickstart prefetch of this
102
- // URL just gets a 503 body — prewarm tolerates failures, and the
103
- // /ns/core shims never reference the bundle in that case.
104
- includeCoreBundle: !isCorePerModuleServingEnabled(),
105
- // The deps bundle is only listed once BUILT (the build is awaited at
106
- // server start), so every boot is all-shims or all-per-module — a
107
- // mid-boot flip would evaluate bundled modules twice.
108
- includeDepsBundle: !!getSharedDepsBundleService(server)?.getState(),
109
- });
110
- return { urls, source: closureSource.kind };
111
- }
112
- export function registerBootClosureRoute(server, source, options) {
113
- const maxWaitMs = options?.maxWaitMs ?? 3000;
114
- server.middlewares.use(async (req, res, next) => {
115
- try {
116
- const url = new URL(req.url || '', 'http://localhost');
117
- if (url.pathname !== '/__ns_dev__/boot-closure')
118
- return next();
119
- res.setHeader('Access-Control-Allow-Origin', '*');
120
- res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');
121
- if (req.method === 'OPTIONS') {
122
- res.statusCode = 204;
123
- res.end();
124
- return;
125
- }
126
- // Origin comes from the single trusted resolver inside
127
- // `resolveBootClosureUrls` — never the client-supplied `Host` header
128
- // (see the import-map route and CLAUDE.md invariant 6: every
129
- // device-reachable URL must be byte-identical to the origin baked
130
- // into bundle.mjs).
131
- const resolved = await resolveBootClosureUrls(server, source, maxWaitMs);
132
- const payload = { urls: resolved.urls, source: resolved.source };
133
- res.setHeader('Content-Type', 'application/json');
134
- res.statusCode = 200;
135
- res.end(JSON.stringify(payload));
136
- }
137
- catch (error) {
138
- res.statusCode = 500;
139
- res.setHeader('Content-Type', 'application/json');
140
- res.end(JSON.stringify({ error: error?.message || 'Failed to compute NativeScript boot closure', urls: [] }));
141
- }
142
- });
143
- }
144
- //# sourceMappingURL=boot-closure-route.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boot-closure-route.js","sourceRoot":"","sources":["../../../../../packages/vite/hmr/server/boot-closure-route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,6EAA6E;AAC7E,EAAE;AACF,4EAA4E;AAC5E,kFAAkF;AAClF,0DAA0D;AAC1D,4EAA4E;AAC5E,4EAA4E;AAC5E,qDAAqD;AACrD,EAAE;AACF,sEAAsE;AACtE,wEAAwE;AACxE,6EAA6E;AAC7E,uEAAuE;AACvE,2CAA2C;AAE3C,MAAM,aAAa,GAAG,iCAAiC,CAAC;AA0BxD,8EAA8E;AAC9E,+EAA+E;AAC/E,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,2EAA2E;AAC3E,mEAAmE;AACnE,MAAM,UAAU,oBAAoB,CAAC,OAAuI;IAC3K,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACF,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAC9G,GAAG,CAAC,GAAG,MAAM,QAAQ,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC/B,GAAG,CAAC,GAAG,MAAM,GAAG,gBAAgB,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC/B,GAAG,CAAC,GAAG,MAAM,GAAG,gBAAgB,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,GAAG,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC;IACvB,GAAG,CAAC,GAAG,MAAM,UAAU,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,UAAU;YACd,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAC1D,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;YACD,MAAM;QACP,KAAK,OAAO;YACX,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAC5D,gEAAgE;gBAChE,2DAA2D;gBAC3D,eAAe;gBACf,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACtC,GAAG,CAAC,GAAG,MAAM,QAAQ,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,MAAM;QACP,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,UAAU,GAAU,MAAM,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAqB,EAAE,MAA8B,EAAE,SAAiB;IACpH,MAAM,aAAa,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAE,IAAI,IAAI,CAAC;IAC9D,IAAI,aAAgC,CAAC;IACrC,IAAI,aAAa,EAAE,MAAM,EAAE,CAAC;QAC3B,mEAAmE;QACnE,mBAAmB;QACnB,aAAa,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAC5D,CAAC;SAAM,CAAC;QACP,kEAAkE;QAClE,+CAA+C;QAC/C,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,mCAAmC,CAAC,MAAM,CAAC,EAAE,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACzI,aAAa,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,iBAAiB,EAAE,EAAE,CAAC;IAC1E,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzD,MAAM,IAAI,GAAG,oBAAoB,CAAC;QACjC,MAAM;QACN,aAAa,EAAE,2BAA2B,CAAC,WAAW,CAAC;QACvD,MAAM,EAAE,aAAa;QACrB,kEAAkE;QAClE,iEAAiE;QACjE,0DAA0D;QAC1D,iBAAiB,EAAE,CAAC,6BAA6B,EAAE;QACnD,qEAAqE;QACrE,kEAAkE;QAClE,sDAAsD;QACtD,iBAAiB,EAAE,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE;KACnE,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAqB,EAAE,MAA8B,EAAE,OAAgC;IAC/H,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;IAC7C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC/C,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACvD,IAAI,GAAG,CAAC,QAAQ,KAAK,0BAA0B;gBAAE,OAAO,IAAI,EAAE,CAAC;YAE/D,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;YAClD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;YAC9D,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO;YACR,CAAC;YAED,uDAAuD;YACvD,qEAAqE;YACrE,6DAA6D;YAC7D,kEAAkE;YAClE,oBAAoB;YACpB,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YACzE,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;YAEjE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAClD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;YACrB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;YACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAClD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,6CAA6C,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/G,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -1,16 +0,0 @@
1
- export declare const BOOT_ARCHIVE_PATH = "/__ns_dev__/boot-archive";
2
- export type BootArchiveModuleEntry = {
3
- url: string;
4
- body: string;
5
- };
6
- export type BootArchiveLine = {
7
- kind: 'meta';
8
- version: number;
9
- source: string;
10
- urls: number;
11
- } | ({
12
- kind: 'mod';
13
- } & BootArchiveModuleEntry);
14
- export declare function serializeBootArchiveLine(line: BootArchiveLine): string;
15
- /** Parse NDJSON archive text into `{url, body}` entries for `seedModuleBodies`. */
16
- export declare function parseBootArchiveText(text: string): BootArchiveModuleEntry[];
@@ -1,31 +0,0 @@
1
- // Wire format for `/__ns_dev__/boot-archive` — owned here in the shared
2
- // runtime layer because both sides speak it: the server route serializes
3
- // lines, the device bootstrap parses them.
4
- //
5
- // NDJSON: one JSON object per line. The first line is a `meta` header;
6
- // every following line is a `mod` body. The parser tolerates junk lines, so
7
- // a truncated stream still yields every complete entry.
8
- export const BOOT_ARCHIVE_PATH = '/__ns_dev__/boot-archive';
9
- export function serializeBootArchiveLine(line) {
10
- return `${JSON.stringify(line)}\n`;
11
- }
12
- /** Parse NDJSON archive text into `{url, body}` entries for `seedModuleBodies`. */
13
- export function parseBootArchiveText(text) {
14
- const entries = [];
15
- if (typeof text !== 'string' || !text)
16
- return entries;
17
- for (const line of text.split('\n')) {
18
- const trimmed = line.trim();
19
- if (!trimmed)
20
- continue;
21
- try {
22
- const parsed = JSON.parse(trimmed);
23
- if (parsed && parsed.kind === 'mod' && typeof parsed.url === 'string' && parsed.url && typeof parsed.body === 'string' && parsed.body) {
24
- entries.push({ url: parsed.url, body: parsed.body });
25
- }
26
- }
27
- catch { }
28
- }
29
- return entries;
30
- }
31
- //# sourceMappingURL=boot-archive-format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boot-archive-format.js","sourceRoot":"","sources":["../../../../../../packages/vite/hmr/shared/runtime/boot-archive-format.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,yEAAyE;AACzE,2CAA2C;AAC3C,EAAE;AACF,uEAAuE;AACvE,4EAA4E;AAC5E,wDAAwD;AAExD,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAM5D,MAAM,UAAU,wBAAwB,CAAC,IAAqB;IAC7D,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACpC,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAChD,MAAM,OAAO,GAA6B,EAAE,CAAC;IAC7C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACvI,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;QACF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC"}