@nativescript/vite 8.0.0-alpha.2 → 8.0.0-alpha.21
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/configuration/angular.d.ts +34 -1
- package/configuration/angular.js +380 -34
- package/configuration/angular.js.map +1 -1
- package/configuration/base.js +171 -7
- package/configuration/base.js.map +1 -1
- package/configuration/solid.js +27 -1
- package/configuration/solid.js.map +1 -1
- package/configuration/typescript.js +1 -1
- package/configuration/typescript.js.map +1 -1
- package/helpers/angular/angular-linker.js +3 -12
- package/helpers/angular/angular-linker.js.map +1 -1
- package/helpers/angular/inject-component-hmr-registration.d.ts +112 -0
- package/helpers/angular/inject-component-hmr-registration.js +359 -0
- package/helpers/angular/inject-component-hmr-registration.js.map +1 -0
- package/helpers/angular/inject-hmr-vite-ignore.d.ts +75 -0
- package/helpers/angular/inject-hmr-vite-ignore.js +288 -0
- package/helpers/angular/inject-hmr-vite-ignore.js.map +1 -0
- package/helpers/angular/util.d.ts +1 -0
- package/helpers/angular/util.js +88 -0
- package/helpers/angular/util.js.map +1 -1
- package/helpers/commonjs-plugins.d.ts +5 -2
- package/helpers/commonjs-plugins.js +126 -0
- package/helpers/commonjs-plugins.js.map +1 -1
- package/helpers/config-as-json.js +10 -0
- package/helpers/config-as-json.js.map +1 -1
- package/helpers/dev-host.d.ts +274 -0
- package/helpers/dev-host.js +491 -0
- package/helpers/dev-host.js.map +1 -0
- package/helpers/global-defines.d.ts +51 -0
- package/helpers/global-defines.js +77 -0
- package/helpers/global-defines.js.map +1 -1
- package/helpers/logging.d.ts +1 -0
- package/helpers/logging.js +63 -3
- package/helpers/logging.js.map +1 -1
- package/helpers/main-entry.d.ts +3 -1
- package/helpers/main-entry.js +450 -125
- package/helpers/main-entry.js.map +1 -1
- package/helpers/nativeclass-transformer-plugin.d.ts +9 -2
- package/helpers/nativeclass-transformer-plugin.js +157 -14
- package/helpers/nativeclass-transformer-plugin.js.map +1 -1
- package/helpers/ns-core-url.d.ts +88 -0
- package/helpers/ns-core-url.js +191 -0
- package/helpers/ns-core-url.js.map +1 -0
- package/helpers/prelink-angular.js +1 -4
- package/helpers/prelink-angular.js.map +1 -1
- package/helpers/project.d.ts +35 -0
- package/helpers/project.js +120 -2
- package/helpers/project.js.map +1 -1
- package/helpers/resolver.js +9 -1
- package/helpers/resolver.js.map +1 -1
- package/helpers/solid-jsx-deps.d.ts +15 -0
- package/helpers/solid-jsx-deps.js +178 -0
- package/helpers/solid-jsx-deps.js.map +1 -0
- package/helpers/ts-config-paths.js +50 -2
- package/helpers/ts-config-paths.js.map +1 -1
- package/helpers/workers.d.ts +20 -19
- package/helpers/workers.js +620 -3
- package/helpers/workers.js.map +1 -1
- package/hmr/client/css-handler.d.ts +1 -0
- package/hmr/client/css-handler.js +34 -5
- package/hmr/client/css-handler.js.map +1 -1
- package/hmr/client/css-update-overlay.d.ts +18 -0
- package/hmr/client/css-update-overlay.js +27 -0
- package/hmr/client/css-update-overlay.js.map +1 -0
- package/hmr/client/hmr-pending-overlay.d.ts +27 -0
- package/hmr/client/hmr-pending-overlay.js +50 -0
- package/hmr/client/hmr-pending-overlay.js.map +1 -0
- package/hmr/client/index.js +491 -34
- package/hmr/client/index.js.map +1 -1
- package/hmr/client/utils.d.ts +5 -0
- package/hmr/client/utils.js +283 -12
- package/hmr/client/utils.js.map +1 -1
- package/hmr/client/vue-sfc-update-overlay.d.ts +82 -0
- package/hmr/client/vue-sfc-update-overlay.js +133 -0
- package/hmr/client/vue-sfc-update-overlay.js.map +1 -0
- package/hmr/entry-runtime.d.ts +2 -1
- package/hmr/entry-runtime.js +253 -66
- package/hmr/entry-runtime.js.map +1 -1
- package/hmr/frameworks/angular/client/index.d.ts +3 -1
- package/hmr/frameworks/angular/client/index.js +802 -10
- package/hmr/frameworks/angular/client/index.js.map +1 -1
- package/hmr/frameworks/angular/server/linker.js +1 -4
- package/hmr/frameworks/angular/server/linker.js.map +1 -1
- package/hmr/frameworks/angular/server/strategy.js +30 -6
- package/hmr/frameworks/angular/server/strategy.js.map +1 -1
- package/hmr/frameworks/typescript/server/strategy.js +8 -2
- package/hmr/frameworks/typescript/server/strategy.js.map +1 -1
- package/hmr/frameworks/vue/client/index.js +30 -45
- package/hmr/frameworks/vue/client/index.js.map +1 -1
- package/hmr/helpers/ast-normalizer.js +52 -5
- package/hmr/helpers/ast-normalizer.js.map +1 -1
- package/hmr/helpers/cjs-named-exports.d.ts +23 -0
- package/hmr/helpers/cjs-named-exports.js +152 -0
- package/hmr/helpers/cjs-named-exports.js.map +1 -0
- package/hmr/helpers/package-exports.d.ts +16 -0
- package/hmr/helpers/package-exports.js +396 -0
- package/hmr/helpers/package-exports.js.map +1 -0
- package/hmr/server/constants.js +13 -4
- package/hmr/server/constants.js.map +1 -1
- package/hmr/server/core-sanitize.d.ts +93 -8
- package/hmr/server/core-sanitize.js +222 -49
- package/hmr/server/core-sanitize.js.map +1 -1
- package/hmr/server/import-map.js +80 -22
- package/hmr/server/import-map.js.map +1 -1
- package/hmr/server/index.d.ts +2 -1
- package/hmr/server/index.js.map +1 -1
- package/hmr/server/ns-core-cjs-shape.d.ts +204 -0
- package/hmr/server/ns-core-cjs-shape.js +271 -0
- package/hmr/server/ns-core-cjs-shape.js.map +1 -0
- package/hmr/server/ns-rt-bridge.d.ts +51 -0
- package/hmr/server/ns-rt-bridge.js +131 -0
- package/hmr/server/ns-rt-bridge.js.map +1 -0
- package/hmr/server/perf-instrumentation.d.ts +114 -0
- package/hmr/server/perf-instrumentation.js +195 -0
- package/hmr/server/perf-instrumentation.js.map +1 -0
- package/hmr/server/runtime-graph-filter.d.ts +5 -0
- package/hmr/server/runtime-graph-filter.js +21 -0
- package/hmr/server/runtime-graph-filter.js.map +1 -0
- package/hmr/server/shared-transform-request.d.ts +12 -0
- package/hmr/server/shared-transform-request.js +144 -0
- package/hmr/server/shared-transform-request.js.map +1 -0
- package/hmr/server/vite-plugin.d.ts +21 -1
- package/hmr/server/vite-plugin.js +497 -58
- package/hmr/server/vite-plugin.js.map +1 -1
- package/hmr/server/websocket-angular-entry.d.ts +2 -0
- package/hmr/server/websocket-angular-entry.js +68 -0
- package/hmr/server/websocket-angular-entry.js.map +1 -0
- package/hmr/server/websocket-angular-hot-update.d.ts +78 -0
- package/hmr/server/websocket-angular-hot-update.js +413 -0
- package/hmr/server/websocket-angular-hot-update.js.map +1 -0
- package/hmr/server/websocket-core-bridge.d.ts +58 -0
- package/hmr/server/websocket-core-bridge.js +368 -0
- package/hmr/server/websocket-core-bridge.js.map +1 -0
- package/hmr/server/websocket-css-hot-update.d.ts +33 -0
- package/hmr/server/websocket-css-hot-update.js +65 -0
- package/hmr/server/websocket-css-hot-update.js.map +1 -0
- package/hmr/server/websocket-graph-upsert.d.ts +21 -0
- package/hmr/server/websocket-graph-upsert.js +33 -0
- package/hmr/server/websocket-graph-upsert.js.map +1 -0
- package/hmr/server/websocket-hmr-pending.d.ts +43 -0
- package/hmr/server/websocket-hmr-pending.js +55 -0
- package/hmr/server/websocket-hmr-pending.js.map +1 -0
- package/hmr/server/websocket-module-bindings.d.ts +6 -0
- package/hmr/server/websocket-module-bindings.js +471 -0
- package/hmr/server/websocket-module-bindings.js.map +1 -0
- package/hmr/server/websocket-module-specifiers.d.ts +101 -0
- package/hmr/server/websocket-module-specifiers.js +820 -0
- package/hmr/server/websocket-module-specifiers.js.map +1 -0
- package/hmr/server/websocket-ns-m-finalize.d.ts +22 -0
- package/hmr/server/websocket-ns-m-finalize.js +88 -0
- package/hmr/server/websocket-ns-m-finalize.js.map +1 -0
- package/hmr/server/websocket-ns-m-paths.d.ts +3 -0
- package/hmr/server/websocket-ns-m-paths.js +92 -0
- package/hmr/server/websocket-ns-m-paths.js.map +1 -0
- package/hmr/server/websocket-ns-m-request.d.ts +45 -0
- package/hmr/server/websocket-ns-m-request.js +196 -0
- package/hmr/server/websocket-ns-m-request.js.map +1 -0
- package/hmr/server/websocket-served-module-helpers.d.ts +36 -0
- package/hmr/server/websocket-served-module-helpers.js +644 -0
- package/hmr/server/websocket-served-module-helpers.js.map +1 -0
- package/hmr/server/websocket-txn.d.ts +6 -0
- package/hmr/server/websocket-txn.js +45 -0
- package/hmr/server/websocket-txn.js.map +1 -0
- package/hmr/server/websocket-vendor-unifier.d.ts +10 -0
- package/hmr/server/websocket-vendor-unifier.js +51 -0
- package/hmr/server/websocket-vendor-unifier.js.map +1 -0
- package/hmr/server/websocket-vue-sfc.d.ts +26 -0
- package/hmr/server/websocket-vue-sfc.js +1053 -0
- package/hmr/server/websocket-vue-sfc.js.map +1 -0
- package/hmr/server/websocket.d.ts +58 -75
- package/hmr/server/websocket.js +2232 -1802
- package/hmr/server/websocket.js.map +1 -1
- package/hmr/shared/package-classifier.d.ts +9 -0
- package/hmr/shared/package-classifier.js +58 -0
- package/hmr/shared/package-classifier.js.map +1 -0
- package/hmr/shared/runtime/boot-placeholder-ui.d.ts +69 -0
- package/hmr/shared/runtime/boot-placeholder-ui.js +101 -0
- package/hmr/shared/runtime/boot-placeholder-ui.js.map +1 -0
- package/hmr/shared/runtime/boot-progress.d.ts +40 -0
- package/hmr/shared/runtime/boot-progress.js +128 -0
- package/hmr/shared/runtime/boot-progress.js.map +1 -0
- package/hmr/shared/runtime/boot-timeline.d.ts +18 -0
- package/hmr/shared/runtime/boot-timeline.js +52 -0
- package/hmr/shared/runtime/boot-timeline.js.map +1 -0
- package/hmr/shared/runtime/browser-runtime-contract.d.ts +64 -0
- package/hmr/shared/runtime/browser-runtime-contract.js +54 -0
- package/hmr/shared/runtime/browser-runtime-contract.js.map +1 -0
- package/hmr/shared/runtime/dev-overlay.d.ts +78 -3
- package/hmr/shared/runtime/dev-overlay.js +1094 -26
- package/hmr/shared/runtime/dev-overlay.js.map +1 -1
- package/hmr/shared/runtime/module-provenance.js +1 -4
- package/hmr/shared/runtime/module-provenance.js.map +1 -1
- package/hmr/shared/runtime/root-placeholder.d.ts +1 -0
- package/hmr/shared/runtime/root-placeholder.js +1019 -151
- package/hmr/shared/runtime/root-placeholder.js.map +1 -1
- package/hmr/shared/runtime/session-bootstrap.d.ts +1 -0
- package/hmr/shared/runtime/session-bootstrap.js +309 -0
- package/hmr/shared/runtime/session-bootstrap.js.map +1 -0
- package/hmr/shared/runtime/vendor-bootstrap.js +1 -9
- package/hmr/shared/runtime/vendor-bootstrap.js.map +1 -1
- package/hmr/shared/vendor/manifest.d.ts +32 -0
- package/hmr/shared/vendor/manifest.js +411 -46
- package/hmr/shared/vendor/manifest.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +5 -0
- package/index.js.map +1 -1
- package/package.json +9 -1
- package/runtime/core-aliases-early.js +94 -67
- package/runtime/core-aliases-early.js.map +1 -1
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// Server-side perf instrumentation helpers.
|
|
2
|
+
//
|
|
3
|
+
// All exports are pure so they can be unit-tested without spinning up
|
|
4
|
+
// Vite. The websocket middleware wires them in with its own logger.
|
|
5
|
+
//
|
|
6
|
+
// The three primitives are:
|
|
7
|
+
// 1. `formatServerStartupBanner` — the always-on banner that prints
|
|
8
|
+
// on dev server startup so the user can confirm which build is
|
|
9
|
+
// live and which perf knobs are active.
|
|
10
|
+
// 2. `createColdBootRequestCounter` — a richer counter that tracks
|
|
11
|
+
// the first burst of NativeScript dev routes (`/ns/m/**`, `/ns/rt/**`,
|
|
12
|
+
// `/ns/core/**`, `/__ns_boot__/**`, `/ns/import-map.json`,
|
|
13
|
+
// `/@nativescript/vendor.mjs`). Emits a rolling + final summary so
|
|
14
|
+
// cold-boot traffic is visible without flipping verbose mode.
|
|
15
|
+
// 3. `formatPopulateInitialGraphSummary` — the single line we print
|
|
16
|
+
// when `populateInitialGraph` finishes. Includes module count and
|
|
17
|
+
// duration so it's trivial to spot regressions.
|
|
18
|
+
// Single-line, human-scannable banner. We avoid pretty-printing (no
|
|
19
|
+
// boxes/colors) so it plays well with piped logs and the Vite custom
|
|
20
|
+
// logger. Format:
|
|
21
|
+
// [hmr-ws] @nativescript/vite@<version> — transformConcurrency=8 transformCacheMs=60000ms lazyInitialGraph=on graphVersion=1
|
|
22
|
+
export function formatServerStartupBanner(input) {
|
|
23
|
+
const parts = [`transformConcurrency=${Math.max(1, Math.floor(input.transformConcurrency))}`, `transformCacheMs=${Math.max(0, Math.floor(input.transformCacheMs))}ms`, `lazyInitialGraph=${input.lazyInitialGraph ? 'on' : 'off'}`, `graphVersion=${Math.max(0, Math.floor(input.graphVersion))}`];
|
|
24
|
+
return `[hmr-ws] @nativescript/vite@${input.version} — ${parts.join(' ')}`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Classify a URL path into a coarse route category. Any pathname that
|
|
28
|
+
* doesn't match a known NativeScript dev route is reported as `other`;
|
|
29
|
+
* callers are expected to filter their own irrelevant routes before
|
|
30
|
+
* calling `record()`.
|
|
31
|
+
*/
|
|
32
|
+
export function classifyBootRoute(pathname) {
|
|
33
|
+
if (!pathname || typeof pathname !== 'string')
|
|
34
|
+
return 'other';
|
|
35
|
+
if (pathname === '/ns/import-map.json')
|
|
36
|
+
return 'ns/import-map';
|
|
37
|
+
if (pathname === '/@nativescript/vendor.mjs' || pathname.startsWith('/@nativescript/'))
|
|
38
|
+
return 'ns/vendor';
|
|
39
|
+
if (pathname.startsWith('/ns/m/'))
|
|
40
|
+
return 'ns/m';
|
|
41
|
+
if (pathname.startsWith('/ns/rt/'))
|
|
42
|
+
return 'ns/rt';
|
|
43
|
+
if (pathname.startsWith('/ns/core/'))
|
|
44
|
+
return 'ns/core';
|
|
45
|
+
if (pathname.startsWith('/__ns_boot__/'))
|
|
46
|
+
return 'ns/boot';
|
|
47
|
+
if (pathname.startsWith('/__ns_hmr__/'))
|
|
48
|
+
return 'ns/hmr';
|
|
49
|
+
if (pathname.startsWith('/ns/'))
|
|
50
|
+
return 'ns/other';
|
|
51
|
+
return 'other';
|
|
52
|
+
}
|
|
53
|
+
// Factory for the cold-boot counter. Encapsulates all state in a closure
|
|
54
|
+
// so the websocket module doesn't have to track timers itself, and so
|
|
55
|
+
// this is trivially testable with a fake clock.
|
|
56
|
+
export function createColdBootRequestCounter(options) {
|
|
57
|
+
const summaryEvery = Math.max(0, Math.floor(options.summaryEvery ?? 100));
|
|
58
|
+
const idleWindowMs = Math.max(100, Math.floor(options.idleWindowMs ?? 5000));
|
|
59
|
+
const now = options.now ?? (() => Date.now());
|
|
60
|
+
const setTimer = options.setTimer ?? ((handler, ms) => setTimeout(handler, ms));
|
|
61
|
+
const clearTimer = options.clearTimer ?? ((handle) => clearTimeout(handle));
|
|
62
|
+
let active = true;
|
|
63
|
+
let count = 0;
|
|
64
|
+
let inFlight = 0;
|
|
65
|
+
let maxConcurrent = 0;
|
|
66
|
+
let startedAt = null;
|
|
67
|
+
let firstRequestUrl = null;
|
|
68
|
+
let idleTimer = null;
|
|
69
|
+
const perRoute = {};
|
|
70
|
+
const formatPerRoute = () => {
|
|
71
|
+
const entries = Object.entries(perRoute);
|
|
72
|
+
if (entries.length === 0)
|
|
73
|
+
return '';
|
|
74
|
+
entries.sort((a, b) => b[1] - a[1]);
|
|
75
|
+
return entries.map(([k, v]) => `${k}=${v}`).join(',');
|
|
76
|
+
};
|
|
77
|
+
const fireFinal = () => {
|
|
78
|
+
if (!active)
|
|
79
|
+
return;
|
|
80
|
+
active = false;
|
|
81
|
+
// `startedAt` is set the first time `record()` fires. Use an explicit
|
|
82
|
+
// null check — `startedAt` can be 0 on deterministic test clocks and
|
|
83
|
+
// `startedAt ? ... : 0` would mis-treat that as "never started".
|
|
84
|
+
const ms = startedAt !== null ? now() - startedAt : 0;
|
|
85
|
+
const routes = formatPerRoute();
|
|
86
|
+
const routesPart = routes ? ` routes=${routes}` : '';
|
|
87
|
+
options.log(`[hmr-ws][cold-boot] window closed modules=${count} ms=${ms} maxConcurrent=${maxConcurrent}${routesPart}`);
|
|
88
|
+
};
|
|
89
|
+
const scheduleIdleClose = () => {
|
|
90
|
+
if (idleTimer !== null)
|
|
91
|
+
clearTimer(idleTimer);
|
|
92
|
+
idleTimer = setTimer(() => {
|
|
93
|
+
idleTimer = null;
|
|
94
|
+
fireFinal();
|
|
95
|
+
}, idleWindowMs);
|
|
96
|
+
};
|
|
97
|
+
return {
|
|
98
|
+
record(url) {
|
|
99
|
+
if (!active) {
|
|
100
|
+
return { finish: () => { } };
|
|
101
|
+
}
|
|
102
|
+
count += 1;
|
|
103
|
+
inFlight += 1;
|
|
104
|
+
if (inFlight > maxConcurrent)
|
|
105
|
+
maxConcurrent = inFlight;
|
|
106
|
+
if (startedAt === null) {
|
|
107
|
+
startedAt = now();
|
|
108
|
+
firstRequestUrl = url;
|
|
109
|
+
}
|
|
110
|
+
const route = classifyBootRoute(url);
|
|
111
|
+
perRoute[route] = (perRoute[route] ?? 0) + 1;
|
|
112
|
+
if (summaryEvery > 0 && count % summaryEvery === 0) {
|
|
113
|
+
// Same `startedAt === 0` consideration as in fireFinal().
|
|
114
|
+
const ms = startedAt !== null ? now() - startedAt : 0;
|
|
115
|
+
options.log(`[hmr-ws][cold-boot] progress modules=${count} ms=${ms} inFlight=${inFlight} maxConcurrent=${maxConcurrent}`);
|
|
116
|
+
}
|
|
117
|
+
scheduleIdleClose();
|
|
118
|
+
let finished = false;
|
|
119
|
+
return {
|
|
120
|
+
finish() {
|
|
121
|
+
if (finished)
|
|
122
|
+
return;
|
|
123
|
+
finished = true;
|
|
124
|
+
if (inFlight > 0)
|
|
125
|
+
inFlight -= 1;
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
},
|
|
129
|
+
finalize() {
|
|
130
|
+
if (idleTimer !== null) {
|
|
131
|
+
clearTimer(idleTimer);
|
|
132
|
+
idleTimer = null;
|
|
133
|
+
}
|
|
134
|
+
fireFinal();
|
|
135
|
+
},
|
|
136
|
+
getState() {
|
|
137
|
+
return { active, count, inFlight, maxConcurrent, startedAt, firstRequestUrl, perRoute: { ...perRoute } };
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// Summary line for `populateInitialGraph`. Stable shape so CI greps or
|
|
142
|
+
// external dashboards can pick it up without fragile regexes.
|
|
143
|
+
export function formatPopulateInitialGraphSummary(input) {
|
|
144
|
+
return `[hmr-ws][populate] modules=${Math.max(0, Math.floor(input.moduleCount))} ms=${Math.max(0, Math.floor(input.durationMs))} graphVersion=${Math.max(0, Math.floor(input.graphVersion))} bumpedVersion=${input.bumpedVersion ? 'yes' : 'no'}`;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Classify a file's HMR update kind by extension. Used by the server-side
|
|
148
|
+
* update summary so a quick log line tells us which pipeline ran. Returns
|
|
149
|
+
* `'unknown'` for anything that doesn't match a known dev-time extension —
|
|
150
|
+
* the caller decides whether to log it or skip it entirely.
|
|
151
|
+
*/
|
|
152
|
+
export function classifyHmrUpdateKind(file) {
|
|
153
|
+
if (!file || typeof file !== 'string')
|
|
154
|
+
return 'unknown';
|
|
155
|
+
const lower = file.toLowerCase();
|
|
156
|
+
if (lower.endsWith('.ts'))
|
|
157
|
+
return 'ts';
|
|
158
|
+
if (lower.endsWith('.tsx'))
|
|
159
|
+
return 'tsx';
|
|
160
|
+
if (lower.endsWith('.jsx'))
|
|
161
|
+
return 'jsx';
|
|
162
|
+
if (lower.endsWith('.html') || lower.endsWith('.htm'))
|
|
163
|
+
return 'html';
|
|
164
|
+
if (lower.endsWith('.css') || lower.endsWith('.scss') || lower.endsWith('.sass') || lower.endsWith('.less'))
|
|
165
|
+
return 'css';
|
|
166
|
+
if (lower.endsWith('.vue'))
|
|
167
|
+
return 'vue';
|
|
168
|
+
if (lower.endsWith('.mjs'))
|
|
169
|
+
return 'mjs';
|
|
170
|
+
if (lower.endsWith('.js'))
|
|
171
|
+
return 'js';
|
|
172
|
+
return 'unknown';
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Single-line summary for the server side of an HMR update. Always-on so
|
|
176
|
+
* a 6-second `.ts` save is immediately visible without flipping verbose.
|
|
177
|
+
* Format:
|
|
178
|
+
* [hmr-ws][update] kind=ts file=/src/foo.ts await=12ms framework=180ms broadcast=2ms total=194ms invalidated=23 recipients=1
|
|
179
|
+
*
|
|
180
|
+
* For Angular `.ts` updates, `narrowed=yes|no` is appended so the
|
|
181
|
+
* narrowing decision is immediately visible without flipping verbose:
|
|
182
|
+
* [hmr-ws][update] kind=ts file=/src/app/foo.constants.ts ... invalidated=1 recipients=1 narrowed=yes
|
|
183
|
+
* [hmr-ws][update] kind=ts file=/src/app/foo.component.ts ... invalidated=132 recipients=1 narrowed=no
|
|
184
|
+
*/
|
|
185
|
+
export function formatHmrUpdateSummary(input) {
|
|
186
|
+
const parts = [`kind=${input.kind || 'unknown'}`, `file=${input.file || '<unknown>'}`, `await=${Math.max(0, Math.floor(input.awaitMs))}ms`, `framework=${Math.max(0, Math.floor(input.frameworkMs))}ms`, `broadcast=${Math.max(0, Math.floor(input.broadcastMs))}ms`, `total=${Math.max(0, Math.floor(input.totalMs))}ms`, `invalidated=${Math.max(0, Math.floor(input.invalidated))}`, `recipients=${Math.max(0, Math.floor(input.recipients))}`];
|
|
187
|
+
if (input.narrowed === true) {
|
|
188
|
+
parts.push('narrowed=yes');
|
|
189
|
+
}
|
|
190
|
+
else if (input.narrowed === false) {
|
|
191
|
+
parts.push('narrowed=no');
|
|
192
|
+
}
|
|
193
|
+
return `[hmr-ws][update] ${parts.join(' ')}`;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=perf-instrumentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perf-instrumentation.js","sourceRoot":"","sources":["../../../../../packages/vite/hmr/server/perf-instrumentation.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,EAAE;AACF,4BAA4B;AAC5B,sEAAsE;AACtE,oEAAoE;AACpE,6CAA6C;AAC7C,qEAAqE;AACrE,4EAA4E;AAC5E,gEAAgE;AAChE,wEAAwE;AACxE,mEAAmE;AACnE,sEAAsE;AACtE,uEAAuE;AACvE,qDAAqD;AAUrD,oEAAoE;AACpE,qEAAqE;AACrE,kBAAkB;AAClB,+HAA+H;AAC/H,MAAM,UAAU,yBAAyB,CAAC,KAA+B;IACxE,MAAM,KAAK,GAAG,CAAC,wBAAwB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,EAAE,oBAAoB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,oBAAoB,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,gBAAgB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IACnS,OAAO,+BAA+B,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IACjD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC9D,IAAI,QAAQ,KAAK,qBAAqB;QAAE,OAAO,eAAe,CAAC;IAC/D,IAAI,QAAQ,KAAK,2BAA2B,IAAI,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAAE,OAAO,WAAW,CAAC;IAC3G,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IACjD,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,OAAO,CAAC;IACnD,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IACvD,IAAI,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3D,IAAI,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,QAAQ,CAAC;IACzD,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,UAAU,CAAC;IACnD,OAAO,OAAO,CAAC;AAChB,CAAC;AAiDD,yEAAyE;AACzE,sEAAsE;AACtE,gDAAgD;AAChD,MAAM,UAAU,4BAA4B,CAAC,OAA+B;IAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAChF,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAa,CAAC,CAAC,CAAC;IAEnF,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,SAAS,GAAY,IAAI,CAAC;IAC9B,MAAM,QAAQ,GAA+C,EAAE,CAAC;IAEhE,MAAM,cAAc,GAAG,GAAW,EAAE;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAuC,CAAC;QAC/E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,GAAG,EAAE;QACtB,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,GAAG,KAAK,CAAC;QACf,sEAAsE;QACtE,qEAAqE;QACrE,iEAAiE;QACjE,MAAM,EAAE,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,6CAA6C,KAAK,OAAO,EAAE,kBAAkB,aAAa,GAAG,UAAU,EAAE,CAAC,CAAC;IACxH,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC9B,IAAI,SAAS,KAAK,IAAI;YAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAC9C,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE;YACzB,SAAS,GAAG,IAAI,CAAC;YACjB,SAAS,EAAE,CAAC;QACb,CAAC,EAAE,YAAY,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO;QACN,MAAM,CAAC,GAAW;YACjB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;YAC7B,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;YACX,QAAQ,IAAI,CAAC,CAAC;YACd,IAAI,QAAQ,GAAG,aAAa;gBAAE,aAAa,GAAG,QAAQ,CAAC;YACvD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACxB,SAAS,GAAG,GAAG,EAAE,CAAC;gBAClB,eAAe,GAAG,GAAG,CAAC;YACvB,CAAC;YACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACrC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,YAAY,GAAG,CAAC,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,EAAE,CAAC;gBACpD,0DAA0D;gBAC1D,MAAM,EAAE,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,wCAAwC,KAAK,OAAO,EAAE,aAAa,QAAQ,kBAAkB,aAAa,EAAE,CAAC,CAAC;YAC3H,CAAC;YACD,iBAAiB,EAAE,CAAC;YACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,OAAO;gBACN,MAAM;oBACL,IAAI,QAAQ;wBAAE,OAAO;oBACrB,QAAQ,GAAG,IAAI,CAAC;oBAChB,IAAI,QAAQ,GAAG,CAAC;wBAAE,QAAQ,IAAI,CAAC,CAAC;gBACjC,CAAC;aACD,CAAC;QACH,CAAC;QACD,QAAQ;YACP,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACxB,UAAU,CAAC,SAAS,CAAC,CAAC;gBACtB,SAAS,GAAG,IAAI,CAAC;YAClB,CAAC;YACD,SAAS,EAAE,CAAC;QACb,CAAC;QACD,QAAQ;YACP,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,CAAC;QAC1G,CAAC;KACD,CAAC;AACH,CAAC;AASD,uEAAuE;AACvE,8DAA8D;AAC9D,MAAM,UAAU,iCAAiC,CAAC,KAAkC;IACnF,OAAO,8BAA8B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,iBAAiB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACnP,CAAC;AAID;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IACjD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACrE,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1H,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,SAAS,CAAC;AAClB,CAAC;AAgCD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAuB;IAC7D,MAAM,KAAK,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,EAAE,QAAQ,KAAK,CAAC,IAAI,IAAI,WAAW,EAAE,EAAE,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,aAAa,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,aAAa,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,eAAe,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,cAAc,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IACnb,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;SAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,oBAAoB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function normalizeRuntimeGraphPath(value: string): string;
|
|
2
|
+
export declare function isRuntimeGraphExcludedPath(value: string): boolean;
|
|
3
|
+
export declare function shouldSkipRuntimeGraphDirectoryName(name: string): boolean;
|
|
4
|
+
export declare function shouldIncludeRuntimeGraphFile(value: string, filePattern: RegExp): boolean;
|
|
5
|
+
export declare function matchesRuntimeGraphModuleId(value: string, appPrefix: string, filePattern: RegExp): boolean;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function normalizeRuntimeGraphPath(value) {
|
|
2
|
+
return String(value || '')
|
|
3
|
+
.replace(/\\/g, '/')
|
|
4
|
+
.replace(/[?#].*$/, '');
|
|
5
|
+
}
|
|
6
|
+
export function isRuntimeGraphExcludedPath(value) {
|
|
7
|
+
const normalized = normalizeRuntimeGraphPath(value);
|
|
8
|
+
return /(?:^|\/)(?:__tests__|__mocks__)(?:\/|$)|(?:^|\/)[^/]+\.(?:spec|test)\.[^/]+$/i.test(normalized);
|
|
9
|
+
}
|
|
10
|
+
export function shouldSkipRuntimeGraphDirectoryName(name) {
|
|
11
|
+
return name === '__tests__' || name === '__mocks__';
|
|
12
|
+
}
|
|
13
|
+
export function shouldIncludeRuntimeGraphFile(value, filePattern) {
|
|
14
|
+
const normalized = normalizeRuntimeGraphPath(value);
|
|
15
|
+
return filePattern.test(normalized) && !isRuntimeGraphExcludedPath(normalized);
|
|
16
|
+
}
|
|
17
|
+
export function matchesRuntimeGraphModuleId(value, appPrefix, filePattern) {
|
|
18
|
+
const normalized = normalizeRuntimeGraphPath(value);
|
|
19
|
+
return normalized.startsWith(appPrefix) && filePattern.test(normalized) && !isRuntimeGraphExcludedPath(normalized);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=runtime-graph-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-graph-filter.js","sourceRoot":"","sources":["../../../../../packages/vite/hmr/server/runtime-graph-filter.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACtD,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SACxB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAa;IACvD,MAAM,UAAU,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,+EAA+E,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzG,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,IAAY;IAC/D,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAa,EAAE,WAAmB;IAC/E,MAAM,UAAU,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa,EAAE,SAAiB,EAAE,WAAmB;IAChG,MAAM,UAAU,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;AACpH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TransformResult } from 'vite';
|
|
2
|
+
export type SharedTransformRequestRunnerOptions = {
|
|
3
|
+
maxConcurrent?: number;
|
|
4
|
+
resultCacheTtlMs?: number;
|
|
5
|
+
getResultCacheKey?: (url: string) => string;
|
|
6
|
+
};
|
|
7
|
+
export type SharedTransformRequestRunner = ((url: string, timeoutMs?: number) => Promise<TransformResult | null>) & {
|
|
8
|
+
invalidate: (url: string) => void;
|
|
9
|
+
invalidateMany: (urls: Iterable<string>) => void;
|
|
10
|
+
clear: () => void;
|
|
11
|
+
};
|
|
12
|
+
export declare function createSharedTransformRequestRunner(transformRequest: (url: string) => Promise<TransformResult | null>, onTimeout?: (url: string, timeoutMs: number) => void, options?: SharedTransformRequestRunnerOptions): SharedTransformRequestRunner;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
export function createSharedTransformRequestRunner(transformRequest, onTimeout, options = {}) {
|
|
2
|
+
const inFlight = new Map();
|
|
3
|
+
const recentResults = new Map();
|
|
4
|
+
const cacheGenerations = new Map();
|
|
5
|
+
const queue = [];
|
|
6
|
+
const maxConcurrent = Math.max(1, Math.floor(options.maxConcurrent ?? 1));
|
|
7
|
+
const resultCacheTtlMs = Math.max(0, Math.floor(options.resultCacheTtlMs ?? 0));
|
|
8
|
+
const getResultCacheKey = options.getResultCacheKey ?? ((url) => url);
|
|
9
|
+
let activeCount = 0;
|
|
10
|
+
const getCacheGeneration = (cacheKey) => cacheGenerations.get(cacheKey) ?? 0;
|
|
11
|
+
const invalidateCacheKey = (cacheKey) => {
|
|
12
|
+
cacheGenerations.set(cacheKey, getCacheGeneration(cacheKey) + 1);
|
|
13
|
+
recentResults.delete(cacheKey);
|
|
14
|
+
};
|
|
15
|
+
const pruneRecentResults = () => {
|
|
16
|
+
if (!recentResults.size) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const now = Date.now();
|
|
20
|
+
for (const [key, entry] of recentResults) {
|
|
21
|
+
if (entry.expiresAt <= now) {
|
|
22
|
+
recentResults.delete(key);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const rememberRecentResult = (url, result, generation) => {
|
|
27
|
+
if (!result || resultCacheTtlMs <= 0) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const cacheKey = getResultCacheKey(url);
|
|
31
|
+
if (getCacheGeneration(cacheKey) !== generation) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
recentResults.delete(cacheKey);
|
|
35
|
+
recentResults.set(cacheKey, {
|
|
36
|
+
expiresAt: Date.now() + resultCacheTtlMs,
|
|
37
|
+
result,
|
|
38
|
+
});
|
|
39
|
+
if (recentResults.size > 512) {
|
|
40
|
+
const oldestKey = recentResults.keys().next().value;
|
|
41
|
+
if (oldestKey) {
|
|
42
|
+
recentResults.delete(oldestKey);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const runNext = () => {
|
|
47
|
+
while (activeCount < maxConcurrent) {
|
|
48
|
+
const next = queue.shift();
|
|
49
|
+
if (!next) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
activeCount += 1;
|
|
53
|
+
next();
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const schedule = (task) => {
|
|
57
|
+
let resolveStarted = null;
|
|
58
|
+
const started = new Promise((resolve) => {
|
|
59
|
+
resolveStarted = resolve;
|
|
60
|
+
});
|
|
61
|
+
const execution = new Promise((resolve, reject) => {
|
|
62
|
+
queue.push(() => {
|
|
63
|
+
let started;
|
|
64
|
+
resolveStarted?.();
|
|
65
|
+
try {
|
|
66
|
+
started = Promise.resolve(task());
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
started = Promise.reject(error);
|
|
70
|
+
}
|
|
71
|
+
started.then(resolve, reject).finally(() => {
|
|
72
|
+
activeCount = Math.max(0, activeCount - 1);
|
|
73
|
+
runNext();
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
runNext();
|
|
77
|
+
});
|
|
78
|
+
return { execution, started };
|
|
79
|
+
};
|
|
80
|
+
const withTimeout = (entry, url, timeoutMs) => {
|
|
81
|
+
if (!(timeoutMs > 0)) {
|
|
82
|
+
return entry.execution;
|
|
83
|
+
}
|
|
84
|
+
return entry.started.then(() => new Promise((resolve, reject) => {
|
|
85
|
+
const timer = setTimeout(() => {
|
|
86
|
+
try {
|
|
87
|
+
onTimeout?.(url, timeoutMs);
|
|
88
|
+
}
|
|
89
|
+
catch { }
|
|
90
|
+
}, timeoutMs);
|
|
91
|
+
entry.execution.then(resolve, reject).finally(() => {
|
|
92
|
+
clearTimeout(timer);
|
|
93
|
+
});
|
|
94
|
+
}));
|
|
95
|
+
};
|
|
96
|
+
const runner = ((url, timeoutMs = 120000) => {
|
|
97
|
+
pruneRecentResults();
|
|
98
|
+
const cacheKey = getResultCacheKey(url);
|
|
99
|
+
const generation = getCacheGeneration(cacheKey);
|
|
100
|
+
const recent = recentResults.get(cacheKey);
|
|
101
|
+
if (recent && recent.expiresAt > Date.now()) {
|
|
102
|
+
return Promise.resolve(recent.result);
|
|
103
|
+
}
|
|
104
|
+
// Key the in-flight map on the canonical `cacheKey`, not the raw URL,
|
|
105
|
+
// so two concurrent calls for `/foo.ts?t=1` and `/foo.ts?t=2` share a
|
|
106
|
+
// single transform rather than doing the same work twice. The cache
|
|
107
|
+
// key already strips `?t=` and `?v=` cache-busters and sorts the
|
|
108
|
+
// remaining query — see `canonicalizeTransformRequestCacheKey`. This
|
|
109
|
+
// pairs with `rememberRecentResult`, which was always keyed by
|
|
110
|
+
// cacheKey.
|
|
111
|
+
const existingExecution = inFlight.get(cacheKey);
|
|
112
|
+
if (existingExecution && existingExecution.generation === generation) {
|
|
113
|
+
return withTimeout(existingExecution, url, timeoutMs);
|
|
114
|
+
}
|
|
115
|
+
const scheduled = schedule(async () => {
|
|
116
|
+
const result = await Promise.resolve(transformRequest(url));
|
|
117
|
+
rememberRecentResult(url, result, generation);
|
|
118
|
+
return result;
|
|
119
|
+
});
|
|
120
|
+
let execution;
|
|
121
|
+
execution = scheduled.execution.finally(() => {
|
|
122
|
+
if (inFlight.get(cacheKey)?.execution === execution) {
|
|
123
|
+
inFlight.delete(cacheKey);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
const entry = { execution, started: scheduled.started, cacheKey, generation };
|
|
127
|
+
inFlight.set(cacheKey, entry);
|
|
128
|
+
return withTimeout(entry, url, timeoutMs);
|
|
129
|
+
});
|
|
130
|
+
runner.invalidate = (url) => {
|
|
131
|
+
invalidateCacheKey(getResultCacheKey(url));
|
|
132
|
+
};
|
|
133
|
+
runner.invalidateMany = (urls) => {
|
|
134
|
+
for (const url of urls || []) {
|
|
135
|
+
runner.invalidate(url);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
runner.clear = () => {
|
|
139
|
+
recentResults.clear();
|
|
140
|
+
cacheGenerations.clear();
|
|
141
|
+
};
|
|
142
|
+
return runner;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=shared-transform-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-transform-request.js","sourceRoot":"","sources":["../../../../../packages/vite/hmr/server/shared-transform-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
import type { Plugin } from 'vite';
|
|
2
|
+
import { type NsDevPlatform, type NsDevSessionDescriptor } from '../shared/runtime/browser-runtime-contract.js';
|
|
3
|
+
export declare function computeClientImportSpecifier(options: {
|
|
4
|
+
projectRoot: string;
|
|
5
|
+
clientFsPath: string;
|
|
6
|
+
}): string;
|
|
7
|
+
export declare function resolveProjectMainEntryPath(projectRoot: string): string;
|
|
8
|
+
export declare function createNsDevSessionDescriptor(options: {
|
|
9
|
+
projectRoot: string;
|
|
10
|
+
requestHost: string;
|
|
11
|
+
platform: NsDevPlatform;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
secure?: boolean;
|
|
14
|
+
mainEntryPathname?: string;
|
|
15
|
+
}): NsDevSessionDescriptor;
|
|
16
|
+
export declare function createNsDevClientBootstrapCode(options: {
|
|
17
|
+
wsUrl: string;
|
|
18
|
+
origin: string;
|
|
19
|
+
clientImport: string;
|
|
20
|
+
verbose?: boolean;
|
|
21
|
+
}): string;
|
|
2
22
|
export declare function nsHmrClientVitePlugin(opts: {
|
|
3
|
-
platform:
|
|
23
|
+
platform: NsDevPlatform;
|
|
4
24
|
verbose?: boolean;
|
|
5
25
|
}): Plugin;
|