@nativescript/vite 8.0.0-alpha.4 → 8.0.0-alpha.6
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/base.js +57 -0
- package/configuration/base.js.map +1 -1
- package/helpers/config-as-json.js +10 -0
- package/helpers/config-as-json.js.map +1 -1
- package/helpers/global-defines.d.ts +55 -0
- package/helpers/global-defines.js +81 -0
- package/helpers/global-defines.js.map +1 -1
- package/helpers/logging.d.ts +1 -0
- package/helpers/logging.js +36 -3
- package/helpers/logging.js.map +1 -1
- package/helpers/main-entry.js +167 -13
- package/helpers/main-entry.js.map +1 -1
- package/helpers/ns-core-url.d.ts +84 -0
- package/helpers/ns-core-url.js +168 -0
- package/helpers/ns-core-url.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 +72 -1
- package/hmr/client/index.js.map +1 -1
- package/hmr/client/utils.d.ts +5 -0
- package/hmr/client/utils.js +153 -15
- package/hmr/client/utils.js.map +1 -1
- package/hmr/entry-runtime.js +95 -31
- package/hmr/entry-runtime.js.map +1 -1
- package/hmr/frameworks/angular/client/index.d.ts +1 -0
- package/hmr/frameworks/angular/client/index.js +424 -11
- package/hmr/frameworks/angular/client/index.js.map +1 -1
- package/hmr/server/core-sanitize.d.ts +8 -4
- package/hmr/server/core-sanitize.js +71 -41
- package/hmr/server/core-sanitize.js.map +1 -1
- package/hmr/server/import-map.js +7 -3
- package/hmr/server/import-map.js.map +1 -1
- package/hmr/server/ns-core-cjs-shape.d.ts +206 -0
- package/hmr/server/ns-core-cjs-shape.js +273 -0
- package/hmr/server/ns-core-cjs-shape.js.map +1 -0
- package/hmr/server/perf-instrumentation.d.ts +118 -0
- package/hmr/server/perf-instrumentation.js +198 -0
- package/hmr/server/perf-instrumentation.js.map +1 -0
- package/hmr/server/shared-transform-request.js +12 -5
- package/hmr/server/shared-transform-request.js.map +1 -1
- package/hmr/server/websocket-angular-hot-update.d.ts +16 -0
- package/hmr/server/websocket-angular-hot-update.js +163 -1
- package/hmr/server/websocket-angular-hot-update.js.map +1 -1
- package/hmr/server/websocket-core-bridge.d.ts +0 -2
- package/hmr/server/websocket-core-bridge.js +60 -58
- package/hmr/server/websocket-core-bridge.js.map +1 -1
- package/hmr/server/websocket-graph-upsert.d.ts +15 -0
- package/hmr/server/websocket-graph-upsert.js +20 -0
- package/hmr/server/websocket-graph-upsert.js.map +1 -1
- 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-specifiers.js +12 -0
- package/hmr/server/websocket-module-specifiers.js.map +1 -1
- package/hmr/server/websocket-ns-m-finalize.d.ts +0 -10
- package/hmr/server/websocket-ns-m-finalize.js +26 -11
- package/hmr/server/websocket-ns-m-finalize.js.map +1 -1
- package/hmr/server/websocket-ns-m-paths.d.ts +1 -1
- package/hmr/server/websocket-ns-m-paths.js +59 -13
- package/hmr/server/websocket-ns-m-paths.js.map +1 -1
- package/hmr/server/websocket-ns-m-request.js +1 -16
- package/hmr/server/websocket-ns-m-request.js.map +1 -1
- package/hmr/server/websocket-runtime-compat.js.map +1 -1
- package/hmr/server/websocket-served-module-helpers.d.ts +36 -0
- package/hmr/server/websocket-served-module-helpers.js +613 -0
- package/hmr/server/websocket-served-module-helpers.js.map +1 -0
- package/hmr/server/websocket-vue-sfc.d.ts +0 -8
- package/hmr/server/websocket-vue-sfc.js +17 -19
- package/hmr/server/websocket-vue-sfc.js.map +1 -1
- package/hmr/server/websocket.d.ts +5 -5
- package/hmr/server/websocket.js +2867 -252
- package/hmr/server/websocket.js.map +1 -1
- package/hmr/shared/runtime/boot-timeline.d.ts +17 -0
- package/hmr/shared/runtime/boot-timeline.js +54 -0
- package/hmr/shared/runtime/boot-timeline.js.map +1 -0
- package/hmr/shared/runtime/dev-overlay.d.ts +49 -2
- package/hmr/shared/runtime/dev-overlay.js +587 -12
- package/hmr/shared/runtime/dev-overlay.js.map +1 -1
- package/hmr/shared/runtime/session-bootstrap.js +49 -0
- package/hmr/shared/runtime/session-bootstrap.js.map +1 -1
- package/hmr/shared/vendor/manifest.js +114 -12
- package/hmr/shared/vendor/manifest.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,73 @@
|
|
|
1
|
+
// alpha.62 follow-up — opt-out flag (default: enabled). Driven by
|
|
2
|
+
// `NS_VITE_PROGRESS_OVERLAY=0` (or `false`/`off`/`no`) on the dev
|
|
3
|
+
// server; baked into the bundle via `__NS_HMR_PROGRESS_OVERLAY_ENABLED__`
|
|
4
|
+
// at build time. We collapse the build-time constant into a runtime
|
|
5
|
+
// boolean once so each call-site is a single property check rather
|
|
6
|
+
// than a try/typeof. Tests that re-run the angular client (via vitest)
|
|
7
|
+
// see `undefined` and default to enabled — matching the production
|
|
8
|
+
// dev-server experience.
|
|
9
|
+
const overlayEnabled = (() => {
|
|
10
|
+
try {
|
|
11
|
+
return typeof __NS_HMR_PROGRESS_OVERLAY_ENABLED__ === 'boolean' ? __NS_HMR_PROGRESS_OVERLAY_ENABLED__ : true;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
})();
|
|
17
|
+
function getHmrOverlayApi() {
|
|
18
|
+
if (!overlayEnabled)
|
|
19
|
+
return null;
|
|
20
|
+
try {
|
|
21
|
+
return globalThis.__NS_HMR_DEV_OVERLAY__ || null;
|
|
22
|
+
}
|
|
23
|
+
catch { }
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
function setUpdateOverlayStage(stage, info) {
|
|
27
|
+
if (!overlayEnabled)
|
|
28
|
+
return;
|
|
29
|
+
try {
|
|
30
|
+
const api = getHmrOverlayApi();
|
|
31
|
+
if (api && typeof api.setUpdateStage === 'function') {
|
|
32
|
+
api.setUpdateStage(stage, info);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch { }
|
|
36
|
+
}
|
|
37
|
+
function hideUpdateOverlay() {
|
|
38
|
+
if (!overlayEnabled)
|
|
39
|
+
return;
|
|
40
|
+
try {
|
|
41
|
+
const api = getHmrOverlayApi();
|
|
42
|
+
if (api && typeof api.hide === 'function') {
|
|
43
|
+
api.hide('hmr-applied');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch { }
|
|
47
|
+
}
|
|
48
|
+
// alpha.59 — Safe accessor for the build-time `__NS_ENV_VERBOSE__`
|
|
49
|
+
// constant.
|
|
50
|
+
//
|
|
51
|
+
// Vite replaces `__NS_ENV_VERBOSE__` at build time via `define`. In
|
|
52
|
+
// unit tests (vitest, plain ts-node, etc.) the identifier is
|
|
53
|
+
// undeclared at runtime, so a bare reference throws ReferenceError —
|
|
54
|
+
// `typeof` is the only safe way to probe it. We collapse the
|
|
55
|
+
// build-time constant into a runtime boolean once at module load and
|
|
56
|
+
// then short-circuit on `verbose` arguments at every call-site.
|
|
57
|
+
//
|
|
58
|
+
// Pre-alpha.59 several call-sites wrote `if (__NS_ENV_VERBOSE__ &&
|
|
59
|
+
// options.verbose)`, which threw on the FIRST call into
|
|
60
|
+
// `refreshAngularBootstrapOptions` from a test. Always order
|
|
61
|
+
// `verbose && envVerbose` so the runtime flag short-circuits the
|
|
62
|
+
// build constant.
|
|
63
|
+
const envVerbose = (() => {
|
|
64
|
+
try {
|
|
65
|
+
return typeof __NS_ENV_VERBOSE__ === 'boolean' ? __NS_ENV_VERBOSE__ : false;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
})();
|
|
1
71
|
export function installAngularHmrClientHooks() {
|
|
2
72
|
const g = globalThis;
|
|
3
73
|
if (g.__NS_ANGULAR_HMR_CLIENT_INSTALLED__) {
|
|
@@ -5,16 +75,184 @@ export function installAngularHmrClientHooks() {
|
|
|
5
75
|
}
|
|
6
76
|
try {
|
|
7
77
|
g.__NS_ANGULAR_HMR_CLIENT_INSTALLED__ = true;
|
|
8
|
-
if (
|
|
78
|
+
if (envVerbose) {
|
|
9
79
|
console.log('[hmr-angular] client hooks installed');
|
|
10
80
|
}
|
|
11
81
|
}
|
|
12
82
|
catch { }
|
|
13
83
|
}
|
|
84
|
+
// alpha.59 — HMR cycle serialization mutex.
|
|
85
|
+
//
|
|
86
|
+
// Pre-alpha.59 a back-to-back save (e.g., the user holds Cmd+S, or
|
|
87
|
+
// `runOnSave` saves a file twice during one tick) could overlap two
|
|
88
|
+
// HMR cycles: the first cycle's `import(entry)` would still be
|
|
89
|
+
// resolving when the second cycle's `__nsInvalidateModules` ran,
|
|
90
|
+
// leaving the registry in a half-evicted state and producing flaky
|
|
91
|
+
// "module already evaluated" errors.
|
|
92
|
+
//
|
|
93
|
+
// Each `handleAngularHotUpdateMessage` call now publishes a promise
|
|
94
|
+
// to `inFlightHmrCycle` and awaits the previous publication before
|
|
95
|
+
// starting its own evict + import. The previous-cycle promise resolves
|
|
96
|
+
// regardless of success or failure (we always run `resolveCycle()` in
|
|
97
|
+
// `finally`), so a stuck cycle can't deadlock the queue. The mutex is
|
|
98
|
+
// intentionally process-wide and resets naturally on cold-boot or
|
|
99
|
+
// websocket reconnect (both blow away the JS realm).
|
|
100
|
+
let inFlightHmrCycle = null;
|
|
101
|
+
// alpha.59 — Explicit module eviction.
|
|
102
|
+
//
|
|
103
|
+
// `__nsInvalidateModules` is a runtime-installed global that takes an
|
|
104
|
+
// array of canonical /ns/m/<rel> URLs and removes each one from V8's
|
|
105
|
+
// module registry (`g_moduleRegistry`). The runtime canonicalizer
|
|
106
|
+
// (HMRSupport.mm) strips legacy `__ns_hmr__/<tag>/` and
|
|
107
|
+
// `__ns_boot__/b1/` segments before lookup, so the same URL evicts
|
|
108
|
+
// every cache entry historically created for that module — even if a
|
|
109
|
+
// pre-alpha.59 stale tagged URL is still around.
|
|
110
|
+
//
|
|
111
|
+
// Soft-fails on older runtimes (alpha.58 and earlier) that don't
|
|
112
|
+
// expose the function. In that case we fall through to the legacy
|
|
113
|
+
// URL-versioning path and emit a one-time warning so the user knows
|
|
114
|
+
// the eviction protocol is unavailable.
|
|
115
|
+
function invalidateModules(urls, verbose) {
|
|
116
|
+
if (!urls || !urls.length)
|
|
117
|
+
return false;
|
|
118
|
+
const g = globalThis;
|
|
119
|
+
const fn = g.__nsInvalidateModules;
|
|
120
|
+
if (typeof fn !== 'function') {
|
|
121
|
+
if (verbose && envVerbose) {
|
|
122
|
+
try {
|
|
123
|
+
console.warn(`[hmr-angular] runtime missing __nsInvalidateModules; falling back to legacy URL versioning. evict=${urls.length}`);
|
|
124
|
+
}
|
|
125
|
+
catch { }
|
|
126
|
+
}
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
fn.call(null, urls);
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (verbose && envVerbose) {
|
|
135
|
+
try {
|
|
136
|
+
console.warn('[hmr-angular] __nsInvalidateModules threw', error?.message || error);
|
|
137
|
+
}
|
|
138
|
+
catch { }
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// alpha.64 — Eviction-set size cap for the kickstart.
|
|
144
|
+
//
|
|
145
|
+
// `__NS_HMR_KICKSTART_MAX_URLS__` is a build-time literal injected
|
|
146
|
+
// by `helpers/global-defines.ts` (default 32). It is a pure
|
|
147
|
+
// performance gate: the kickstart never affects correctness, so
|
|
148
|
+
// skipping it for large fan-out edits just reverts the runtime to
|
|
149
|
+
// alpha.62-style sequential `HttpFetchText`. See the doc comment on
|
|
150
|
+
// `resolveHmrKickstartMaxUrls` (in global-defines.ts) for the
|
|
151
|
+
// rationale and the empirical numbers behind the default.
|
|
152
|
+
//
|
|
153
|
+
// The constant is read once at module load (the same pattern used
|
|
154
|
+
// for `overlayEnabled`) so each call site is a single inequality
|
|
155
|
+
// check rather than a try/typeof. Tests that re-import this module
|
|
156
|
+
// see `undefined` and fall back to the default.
|
|
157
|
+
const KICKSTART_DEFAULT_MAX_URLS = 32;
|
|
158
|
+
const kickstartMaxUrls = (() => {
|
|
159
|
+
try {
|
|
160
|
+
const raw = __NS_HMR_KICKSTART_MAX_URLS__;
|
|
161
|
+
if (typeof raw !== 'number')
|
|
162
|
+
return KICKSTART_DEFAULT_MAX_URLS;
|
|
163
|
+
if (!Number.isFinite(raw))
|
|
164
|
+
return Number.POSITIVE_INFINITY;
|
|
165
|
+
if (raw < 0)
|
|
166
|
+
return KICKSTART_DEFAULT_MAX_URLS;
|
|
167
|
+
return Math.floor(raw);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return KICKSTART_DEFAULT_MAX_URLS;
|
|
171
|
+
}
|
|
172
|
+
})();
|
|
173
|
+
// Decide whether to run the kickstart for a given eviction set.
|
|
174
|
+
// Exported for unit testing — callers in this module use the inline
|
|
175
|
+
// `evictPaths.length` comparison below for a slightly cheaper
|
|
176
|
+
// hot-path.
|
|
177
|
+
//
|
|
178
|
+
// Semantics:
|
|
179
|
+
// - `0` urls → no work to do; skip (returns false).
|
|
180
|
+
// - `urls.length <= cap` → kickstart eligible (returns true).
|
|
181
|
+
// - `urls.length > cap` → skip kickstart (returns false). V8 falls
|
|
182
|
+
// back to per-module synchronous fetches inside its module walk.
|
|
183
|
+
// - `cap === 0` → kickstart disabled regardless of size.
|
|
184
|
+
// - `cap === Infinity` → kickstart always eligible (alpha.63
|
|
185
|
+
// behavior).
|
|
186
|
+
export function shouldRunKickstart(urlCount, maxUrls = kickstartMaxUrls) {
|
|
187
|
+
if (!Number.isFinite(urlCount) || urlCount <= 0)
|
|
188
|
+
return false;
|
|
189
|
+
if (!Number.isFinite(maxUrls))
|
|
190
|
+
return maxUrls > 0;
|
|
191
|
+
if (maxUrls <= 0)
|
|
192
|
+
return false;
|
|
193
|
+
return urlCount <= maxUrls;
|
|
194
|
+
}
|
|
195
|
+
function kickstartHmrPrefetch(urls, verbose) {
|
|
196
|
+
if (!urls || !urls.length)
|
|
197
|
+
return null;
|
|
198
|
+
const g = globalThis;
|
|
199
|
+
const fn = g.__nsKickstartHmrPrefetch;
|
|
200
|
+
if (typeof fn !== 'function') {
|
|
201
|
+
if (verbose && envVerbose) {
|
|
202
|
+
try {
|
|
203
|
+
console.info(`[hmr-angular] runtime missing __nsKickstartHmrPrefetch; serial fetches will be used. urls=${urls.length}`);
|
|
204
|
+
}
|
|
205
|
+
catch { }
|
|
206
|
+
}
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
// Concurrency cap of 16 matches the runtime's documented
|
|
211
|
+
// default for the kickstart BFS. Timeout at 10s tracks the
|
|
212
|
+
// runtime's `HttpFetchText` retry envelope so we don't
|
|
213
|
+
// hold the JS thread forever on a stalled dev server.
|
|
214
|
+
const result = fn.call(null, urls.slice(), { maxConcurrent: 16, timeoutMs: 10000 });
|
|
215
|
+
if (result && typeof result === 'object') {
|
|
216
|
+
const ok = !!result.ok;
|
|
217
|
+
const fetched = typeof result.fetched === 'number' ? result.fetched : 0;
|
|
218
|
+
const ms = typeof result.ms === 'number' ? result.ms : 0;
|
|
219
|
+
return { ok, fetched, ms };
|
|
220
|
+
}
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
if (verbose && envVerbose) {
|
|
225
|
+
try {
|
|
226
|
+
console.warn('[hmr-angular] __nsKickstartHmrPrefetch threw', error?.message || error);
|
|
227
|
+
}
|
|
228
|
+
catch { }
|
|
229
|
+
}
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
14
233
|
function getAngularBootstrapEntryCandidates(msg) {
|
|
15
234
|
const root = typeof __NS_APP_ROOT_VIRTUAL__ === 'string' && __NS_APP_ROOT_VIRTUAL__ ? __NS_APP_ROOT_VIRTUAL__ : '/src';
|
|
16
|
-
|
|
17
|
-
|
|
235
|
+
// alpha.59 — Server announces the canonical bootstrap entry as
|
|
236
|
+
// `importerEntry`, computed from `package.json#main`. Fall back to
|
|
237
|
+
// the legacy `entryCandidates` array (for older servers) and finally
|
|
238
|
+
// to a hard-coded list. All candidates must be project-relative
|
|
239
|
+
// posix paths (e.g. `/src/main.ts`) so they slot directly behind
|
|
240
|
+
// `${origin}/ns/m`.
|
|
241
|
+
const explicit = typeof msg?.importerEntry === 'string' && msg.importerEntry.startsWith('/') ? [msg.importerEntry] : [];
|
|
242
|
+
const legacy = Array.isArray(msg?.entryCandidates) && msg.entryCandidates.length ? msg.entryCandidates : [];
|
|
243
|
+
const fallback = [`${root}/main.ts`, `${root}/app.ts`];
|
|
244
|
+
const merged = [...explicit, ...legacy, ...fallback];
|
|
245
|
+
const seen = new Set();
|
|
246
|
+
const result = [];
|
|
247
|
+
for (const candidate of merged) {
|
|
248
|
+
if (typeof candidate !== 'string' || !candidate.startsWith('/'))
|
|
249
|
+
continue;
|
|
250
|
+
if (seen.has(candidate))
|
|
251
|
+
continue;
|
|
252
|
+
seen.add(candidate);
|
|
253
|
+
result.push(candidate);
|
|
254
|
+
}
|
|
255
|
+
return result;
|
|
18
256
|
}
|
|
19
257
|
async function importAngularBootstrapEntry(url) {
|
|
20
258
|
const g = globalThis;
|
|
@@ -28,18 +266,109 @@ export async function refreshAngularBootstrapOptions(msg, options) {
|
|
|
28
266
|
if (typeof g.__NS_UPDATE_ANGULAR_APP_OPTIONS__ !== 'function') {
|
|
29
267
|
return;
|
|
30
268
|
}
|
|
31
|
-
const version = typeof msg?.version === 'number' ? msg.version : 0;
|
|
32
|
-
if (!version) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
269
|
const originSource = typeof msg?.origin === 'string' && /^https?:\/\//.test(msg.origin) ? msg.origin : g.__NS_HTTP_ORIGIN__;
|
|
36
270
|
if (typeof originSource !== 'string' || !/^https?:\/\//.test(originSource)) {
|
|
37
271
|
return;
|
|
38
272
|
}
|
|
39
273
|
const origin = originSource.replace(/\/$/, '');
|
|
274
|
+
// alpha.59 — Explicit eviction set takes precedence over URL
|
|
275
|
+
// versioning. The server walks the inverse-dep closure of the
|
|
276
|
+
// changed file (collectAngularEvictionUrls) and emits canonical
|
|
277
|
+
// /ns/m/<rel> URLs in `evictPaths`. We hand the list to the runtime
|
|
278
|
+
// before re-importing the entry; the runtime drops those entries
|
|
279
|
+
// from `g_moduleRegistry` so V8's subsequent `import(entry)` walks
|
|
280
|
+
// the dep graph and re-fetches ONLY those modules. Everything else
|
|
281
|
+
// stays hot in the cache (the dominant cost of a pre-alpha.59 HMR
|
|
282
|
+
// cycle was V8 re-fetching the ENTIRE graph because the URL changed
|
|
283
|
+
// for every node — see HMR_STABLE_URL_INVALIDATION_PLAN.md).
|
|
284
|
+
const evictPaths = Array.isArray(msg?.evictPaths) ? msg.evictPaths.filter((u) => typeof u === 'string' && /^https?:\/\//.test(u)) : [];
|
|
285
|
+
// Round-eleven.3 — Drive the apply-progress overlay through the
|
|
286
|
+
// 'evicting' frame *before* the runtime invalidate call so the
|
|
287
|
+
// user sees the count even on the cheapest stage. Eviction count
|
|
288
|
+
// also doubles as a useful debug breadcrumb in the overlay's
|
|
289
|
+
// detail line — large counts (e.g. constants edits → 100+
|
|
290
|
+
// importers) explain why a cycle takes longer than an HTML edit.
|
|
291
|
+
setUpdateOverlayStage('evicting', {
|
|
292
|
+
detail: evictPaths.length ? `Invalidating ${evictPaths.length} module${evictPaths.length === 1 ? '' : 's'}` : 'Invalidating module cache',
|
|
293
|
+
});
|
|
294
|
+
const evicted = invalidateModules(evictPaths, options.verbose);
|
|
295
|
+
if (options.verbose && envVerbose) {
|
|
296
|
+
try {
|
|
297
|
+
console.info(`[ns-hmr][angular] evict count=${evictPaths.length} ok=${evicted ? 'yes' : 'no'}`);
|
|
298
|
+
}
|
|
299
|
+
catch { }
|
|
300
|
+
}
|
|
301
|
+
// alpha.63 — Parallel HTTP prefetch for the freshly-evicted modules.
|
|
302
|
+
//
|
|
303
|
+
// Order matters here: the kickstart MUST run after the eviction so
|
|
304
|
+
// that it actually re-populates `g_prefetchCache` for the modules
|
|
305
|
+
// V8 will ask for. If we kickstarted before the eviction, every URL
|
|
306
|
+
// would skip on the "already cached" check (the walk consumes
|
|
307
|
+
// destructively but the prior non-evicted modules sit in V8's
|
|
308
|
+
// `g_moduleRegistry`, not the prefetch cache).
|
|
309
|
+
//
|
|
310
|
+
// We only kickstart when the eviction succeeded, because the
|
|
311
|
+
// fallback path (legacy URL-versioning, see `useStableUrls = evicted`
|
|
312
|
+
// below) doesn't go through canonical /ns/m URLs and the runtime
|
|
313
|
+
// would not match its prefetch cache lookups against the version-
|
|
314
|
+
// prefixed forms V8 will end up requesting. Better to skip the
|
|
315
|
+
// optimization than risk a confusing partial cache hit.
|
|
316
|
+
//
|
|
317
|
+
// alpha.64 — `shouldRunKickstart` gates large eviction sets out
|
|
318
|
+
// of the parallel wave. A `.ts` file with deep inverse-dep
|
|
319
|
+
// fan-in (constants files, design-system enums) can produce a
|
|
320
|
+
// 200–300-URL closure that overwhelms Vite's single-threaded
|
|
321
|
+
// transform pipeline. The kickstart fan-out then makes the cycle
|
|
322
|
+
// 5–8× slower than letting V8 fetch sequentially as it walks the
|
|
323
|
+
// real forward path. The cap (default 32, override with
|
|
324
|
+
// `NS_VITE_KICKSTART_MAX_URLS`) keeps component-shaped closures
|
|
325
|
+
// (typically 5–30 URLs) on the fast path. Correctness is
|
|
326
|
+
// unaffected — V8's per-module synchronous fetch is the same code
|
|
327
|
+
// path the runtime used through alpha.62.
|
|
328
|
+
if (evicted && evictPaths.length > 0) {
|
|
329
|
+
if (shouldRunKickstart(evictPaths.length)) {
|
|
330
|
+
const result = kickstartHmrPrefetch(evictPaths, options.verbose);
|
|
331
|
+
if (options.verbose && envVerbose && result) {
|
|
332
|
+
try {
|
|
333
|
+
console.info(`[ns-hmr][angular] kickstart urls=${evictPaths.length} fetched=${result.fetched} ok=${result.ok ? 'yes' : 'no'} ms=${result.ms}`);
|
|
334
|
+
}
|
|
335
|
+
catch { }
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
else if (options.verbose && envVerbose) {
|
|
339
|
+
try {
|
|
340
|
+
console.info(`[ns-hmr][angular] kickstart skipped urls=${evictPaths.length} cap=${Number.isFinite(kickstartMaxUrls) ? kickstartMaxUrls : 'Infinity'} (eviction set too large; falling back to sequential fetch)`);
|
|
341
|
+
}
|
|
342
|
+
catch { }
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// URL strategy:
|
|
346
|
+
//
|
|
347
|
+
// * `evicted=true` → alpha.59 runtime accepted the eviction; we
|
|
348
|
+
// re-import the entry under its STABLE canonical URL. V8's
|
|
349
|
+
// registry no longer holds the evicted modules so the import
|
|
350
|
+
// triggers fresh fetches for them; the rest of the graph is a
|
|
351
|
+
// cache hit.
|
|
352
|
+
// * `evicted=false` → either we have no eviction set (older server)
|
|
353
|
+
// or the runtime lacks `__nsInvalidateModules` (older runtime).
|
|
354
|
+
// Fall back to the legacy `__ns_hmr__/v<version>/` URL pattern
|
|
355
|
+
// so V8 sees a fresh URL and re-fetches the entry. The runtime
|
|
356
|
+
// canonicalizer (alpha.59) collapses the path back to the stable
|
|
357
|
+
// key, which keeps cache identity consistent across saves.
|
|
358
|
+
const versionRaw = typeof msg?.version === 'number' ? msg.version : 0;
|
|
359
|
+
const useStableUrls = evicted;
|
|
40
360
|
let lastError;
|
|
361
|
+
// Round-eleven.3 — 'reimporting' is the entry point for the long
|
|
362
|
+
// tail of an HMR cycle: V8 walks the freshly-evicted graph and
|
|
363
|
+
// the iOS runtime re-fetches each node from the dev server. We
|
|
364
|
+
// announce the stage once, before the loop, so the user sees a
|
|
365
|
+
// progress jump even when the import resolves on the first
|
|
366
|
+
// candidate (the common case).
|
|
367
|
+
setUpdateOverlayStage('reimporting', {
|
|
368
|
+
detail: 'Re-importing Angular bootstrap entry',
|
|
369
|
+
});
|
|
41
370
|
for (const entry of getAngularBootstrapEntryCandidates(msg)) {
|
|
42
|
-
const url = `${origin}/ns/m/__ns_hmr__/v${
|
|
371
|
+
const url = useStableUrls ? `${origin}/ns/m${entry}` : versionRaw ? `${origin}/ns/m/__ns_hmr__/v${versionRaw}${entry}` : `${origin}/ns/m${entry}`;
|
|
43
372
|
try {
|
|
44
373
|
g.__NS_ANGULAR_HMR_REGISTER_ONLY__ = true;
|
|
45
374
|
await importAngularBootstrapEntry(url);
|
|
@@ -52,7 +381,7 @@ export async function refreshAngularBootstrapOptions(msg, options) {
|
|
|
52
381
|
g.__NS_ANGULAR_HMR_REGISTER_ONLY__ = false;
|
|
53
382
|
}
|
|
54
383
|
}
|
|
55
|
-
if (options.verbose &&
|
|
384
|
+
if (options.verbose && envVerbose && lastError) {
|
|
56
385
|
try {
|
|
57
386
|
console.warn('[hmr-angular] failed to refresh Angular bootstrap entry', lastError?.message || lastError);
|
|
58
387
|
}
|
|
@@ -63,6 +392,51 @@ export async function handleAngularHotUpdateMessage(msg, options) {
|
|
|
63
392
|
if (!msg || msg.type !== 'ns:angular-update') {
|
|
64
393
|
return false;
|
|
65
394
|
}
|
|
395
|
+
// alpha.59 — Cycle mutex. See `inFlightHmrCycle` for why this is
|
|
396
|
+
// necessary. We publish `thisCycle` *before* awaiting the previous
|
|
397
|
+
// one so a third concurrent message sees the latest in-flight,
|
|
398
|
+
// not the stale previous. This serializes N concurrent updates into
|
|
399
|
+
// a single FIFO chain.
|
|
400
|
+
const previousCycle = inFlightHmrCycle;
|
|
401
|
+
let resolveCycle;
|
|
402
|
+
const thisCycle = new Promise((resolve) => {
|
|
403
|
+
resolveCycle = resolve;
|
|
404
|
+
});
|
|
405
|
+
inFlightHmrCycle = thisCycle;
|
|
406
|
+
if (previousCycle) {
|
|
407
|
+
try {
|
|
408
|
+
await previousCycle;
|
|
409
|
+
}
|
|
410
|
+
catch { }
|
|
411
|
+
}
|
|
412
|
+
// Single-line log lands in iOS device console as `CONSOLE INFO` so the user can
|
|
413
|
+
// correlate with the server's `[hmr-ws][update] ...` line and see
|
|
414
|
+
// where the save's wall time actually goes (refresh vs. reboot).
|
|
415
|
+
const t0 = Date.now();
|
|
416
|
+
let tAfterRefresh = t0;
|
|
417
|
+
let tEnd = t0;
|
|
418
|
+
const filePath = typeof msg?.path === 'string' ? msg.path : '<unknown>';
|
|
419
|
+
const emitTiming = (ok, errorMessage) => {
|
|
420
|
+
try {
|
|
421
|
+
const refreshMs = Math.max(0, tAfterRefresh - t0);
|
|
422
|
+
const rebootMs = Math.max(0, tEnd - tAfterRefresh);
|
|
423
|
+
const totalMs = Math.max(0, tEnd - t0);
|
|
424
|
+
const status = ok ? 'ok' : 'FAILED';
|
|
425
|
+
const suffix = errorMessage ? ` error=${errorMessage}` : '';
|
|
426
|
+
console.info(`[ns-hmr][angular] ${status} file=${filePath} refresh=${refreshMs}ms reboot=${rebootMs}ms total=${totalMs}ms${suffix}`);
|
|
427
|
+
}
|
|
428
|
+
catch { }
|
|
429
|
+
};
|
|
430
|
+
// Show the apply-progress overlay as soon as the
|
|
431
|
+
// mutex unblocks us. Posting this *after* the awaited
|
|
432
|
+
// previousCycle keeps each cycle's stages visually grouped in the
|
|
433
|
+
// overlay (cycle-1 finishes its 'complete' before cycle-2's
|
|
434
|
+
// 'received' overrides it).
|
|
435
|
+
//
|
|
436
|
+
// The detail line surfaces the changed file path so the user can
|
|
437
|
+
// confirm at a glance which save the overlay is reflecting.
|
|
438
|
+
const overlayDetail = filePath && filePath !== '<unknown>' ? `Updating ${filePath}` : 'Preparing update';
|
|
439
|
+
setUpdateOverlayStage('received', { detail: overlayDetail });
|
|
66
440
|
try {
|
|
67
441
|
const g = globalThis;
|
|
68
442
|
// Prefer __reboot_ng_modules__ — it properly disposes existing modules,
|
|
@@ -72,10 +446,11 @@ export async function handleAngularHotUpdateMessage(msg, options) {
|
|
|
72
446
|
// canonical reboot entry point.
|
|
73
447
|
const reboot = g.__reboot_ng_modules__;
|
|
74
448
|
if (typeof reboot === 'function') {
|
|
75
|
-
if (options.verbose &&
|
|
449
|
+
if (options.verbose && envVerbose) {
|
|
76
450
|
console.log('[hmr-angular] rebooting Angular modules via __reboot_ng_modules__');
|
|
77
451
|
}
|
|
78
452
|
await refreshAngularBootstrapOptions(msg, options);
|
|
453
|
+
tAfterRefresh = Date.now();
|
|
79
454
|
try {
|
|
80
455
|
g.__NS_HMR_IMPORT_NONCE__ = (typeof g.__NS_HMR_IMPORT_NONCE__ === 'number' ? g.__NS_HMR_IMPORT_NONCE__ : 0) + 1;
|
|
81
456
|
}
|
|
@@ -84,6 +459,14 @@ export async function handleAngularHotUpdateMessage(msg, options) {
|
|
|
84
459
|
g.__NS_DEV_RESET_IN_PROGRESS__ = true;
|
|
85
460
|
}
|
|
86
461
|
catch { }
|
|
462
|
+
// Round-eleven.3 — 'rebooting' marks the long tail of the
|
|
463
|
+
// cycle: NgZone teardown, module re-instantiation, and
|
|
464
|
+
// resetRootView. The detail line shows refresh-so-far ms
|
|
465
|
+
// so a user can already see if the slow phase is
|
|
466
|
+
// re-import or reboot.
|
|
467
|
+
setUpdateOverlayStage('rebooting', {
|
|
468
|
+
detail: `Re-bootstrapping Angular (refresh ${Math.max(0, tAfterRefresh - t0)}ms)`,
|
|
469
|
+
});
|
|
87
470
|
try {
|
|
88
471
|
reboot(true);
|
|
89
472
|
}
|
|
@@ -93,11 +476,25 @@ export async function handleAngularHotUpdateMessage(msg, options) {
|
|
|
93
476
|
}
|
|
94
477
|
catch { }
|
|
95
478
|
}
|
|
479
|
+
tEnd = Date.now();
|
|
480
|
+
emitTiming(true);
|
|
481
|
+
// Round-eleven.3 — 'complete' surfaces the wall-clock
|
|
482
|
+
// total so a user gets a single-glance confirmation
|
|
483
|
+
// matching the [ns-hmr][angular] log line in the
|
|
484
|
+
// terminal. The overlay auto-hides shortly after.
|
|
485
|
+
setUpdateOverlayStage('complete', {
|
|
486
|
+
detail: `Total ${Math.max(0, tEnd - t0)}ms`,
|
|
487
|
+
});
|
|
96
488
|
return true;
|
|
97
489
|
}
|
|
98
|
-
if (options.verbose &&
|
|
490
|
+
if (options.verbose && envVerbose) {
|
|
99
491
|
console.warn('[hmr-angular] No Angular HMR handler found. Ensure runNativeScriptAngularApp() has been called.');
|
|
100
492
|
}
|
|
493
|
+
tEnd = Date.now();
|
|
494
|
+
emitTiming(false, 'no-reboot-handler');
|
|
495
|
+
// No reboot handler → we can't apply the update; hide the
|
|
496
|
+
// overlay rather than leaving stale progress on screen.
|
|
497
|
+
hideUpdateOverlay();
|
|
101
498
|
}
|
|
102
499
|
catch (error) {
|
|
103
500
|
if (options.verbose) {
|
|
@@ -106,6 +503,22 @@ export async function handleAngularHotUpdateMessage(msg, options) {
|
|
|
106
503
|
}
|
|
107
504
|
catch { }
|
|
108
505
|
}
|
|
506
|
+
tEnd = Date.now();
|
|
507
|
+
emitTiming(false, (error && error.message) || String(error));
|
|
508
|
+
// Errors → drop the overlay so the user isn't left looking
|
|
509
|
+
// at indefinite progress; the underlying error is already
|
|
510
|
+
// logged above (and surfaced via Vite's standard error
|
|
511
|
+
// pipeline through the websocket).
|
|
512
|
+
hideUpdateOverlay();
|
|
513
|
+
}
|
|
514
|
+
finally {
|
|
515
|
+
try {
|
|
516
|
+
resolveCycle();
|
|
517
|
+
}
|
|
518
|
+
catch { }
|
|
519
|
+
if (inFlightHmrCycle === thisCycle) {
|
|
520
|
+
inFlightHmrCycle = null;
|
|
521
|
+
}
|
|
109
522
|
}
|
|
110
523
|
return true;
|
|
111
524
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/vite/hmr/frameworks/angular/client/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/vite/hmr/frameworks/angular/client/index.ts"],"names":[],"mappings":"AAwBA,kEAAkE;AAClE,kEAAkE;AAClE,0EAA0E;AAC1E,oEAAoE;AACpE,mEAAmE;AACnE,uEAAuE;AACvE,mEAAmE;AACnE,yBAAyB;AACzB,MAAM,cAAc,GAAY,CAAC,GAAG,EAAE;IACrC,IAAI,CAAC;QACJ,OAAO,OAAO,mCAAmC,KAAK,SAAS,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9G,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC,CAAC,EAAE,CAAC;AAEL,SAAS,gBAAgB;IACxB,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,CAAC;QACJ,OAAQ,UAAkB,CAAC,sBAAsB,IAAI,IAAI,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,qBAAqB,CAAC,KAA4B,EAAE,IAA2B;IACvF,IAAI,CAAC,cAAc;QAAE,OAAO;IAC5B,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAC/B,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;YACrD,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACX,CAAC;AAED,SAAS,iBAAiB;IACzB,IAAI,CAAC,cAAc;QAAE,OAAO;IAC5B,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;QAC/B,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3C,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACX,CAAC;AAED,mEAAmE;AACnE,YAAY;AACZ,EAAE;AACF,oEAAoE;AACpE,6DAA6D;AAC7D,qEAAqE;AACrE,6DAA6D;AAC7D,qEAAqE;AACrE,gEAAgE;AAChE,EAAE;AACF,mEAAmE;AACnE,wDAAwD;AACxD,6DAA6D;AAC7D,iEAAiE;AACjE,kBAAkB;AAClB,MAAM,UAAU,GAAY,CAAC,GAAG,EAAE;IACjC,IAAI,CAAC;QACJ,OAAO,OAAO,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,UAAU,4BAA4B;IAC3C,MAAM,CAAC,GAAQ,UAAU,CAAC;IAC1B,IAAI,CAAC,CAAC,mCAAmC,EAAE,CAAC;QAC3C,OAAO;IACR,CAAC;IACD,IAAI,CAAC;QACJ,CAAC,CAAC,mCAAmC,GAAG,IAAI,CAAC;QAC7C,IAAI,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACrD,CAAC;IACF,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACX,CAAC;AAOD,4CAA4C;AAC5C,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AACpE,+DAA+D;AAC/D,iEAAiE;AACjE,mEAAmE;AACnE,qCAAqC;AACrC,EAAE;AACF,oEAAoE;AACpE,mEAAmE;AACnE,uEAAuE;AACvE,sEAAsE;AACtE,sEAAsE;AACtE,kEAAkE;AAClE,qDAAqD;AACrD,IAAI,gBAAgB,GAAyB,IAAI,CAAC;AAElD,uCAAuC;AACvC,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,kEAAkE;AAClE,wDAAwD;AACxD,mEAAmE;AACnE,qEAAqE;AACrE,iDAAiD;AACjD,EAAE;AACF,iEAAiE;AACjE,kEAAkE;AAClE,oEAAoE;AACpE,wCAAwC;AACxC,SAAS,iBAAiB,CAAC,IAAuB,EAAE,OAAgB;IACnE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,CAAC,GAAQ,UAAU,CAAC;IAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,qBAAqB,CAAC;IACnC,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;QAC9B,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,qGAAqG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAClI,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACX,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACJ,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAG,KAAa,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;YAC7F,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACX,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAiDD,sDAAsD;AACtD,EAAE;AACF,mEAAmE;AACnE,4DAA4D;AAC5D,gEAAgE;AAChE,kEAAkE;AAClE,oEAAoE;AACpE,8DAA8D;AAC9D,0DAA0D;AAC1D,EAAE;AACF,kEAAkE;AAClE,iEAAiE;AACjE,mEAAmE;AACnE,gDAAgD;AAChD,MAAM,0BAA0B,GAAG,EAAE,CAAC;AACtC,MAAM,gBAAgB,GAAW,CAAC,GAAG,EAAE;IACtC,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,6BAA6B,CAAC;QAC1C,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,0BAA0B,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC;QAC3D,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,0BAA0B,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,0BAA0B,CAAC;IACnC,CAAC;AACF,CAAC,CAAC,EAAE,CAAC;AAEL,gEAAgE;AAChE,oEAAoE;AACpE,8DAA8D;AAC9D,YAAY;AACZ,EAAE;AACF,aAAa;AACb,sDAAsD;AACtD,8DAA8D;AAC9D,oEAAoE;AACpE,mEAAmE;AACnE,mEAAmE;AACnE,gEAAgE;AAChE,eAAe;AACf,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,UAAkB,gBAAgB;IACtF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,GAAG,CAAC,CAAC;IAClD,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/B,OAAO,QAAQ,IAAI,OAAO,CAAC;AAC5B,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAuB,EAAE,OAAgB;IACtE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,CAAC,GAAQ,UAAU,CAAC;IAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,wBAAwB,CAAC;IACtC,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;QAC9B,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,6FAA6F,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1H,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,CAAC;QACJ,yDAAyD;QACzD,2DAA2D;QAC3D,uDAAuD;QACvD,sDAAsD;QACtD,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACpF,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,EAAE,GAAG,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,8CAA8C,EAAG,KAAa,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;YAChG,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,SAAS,kCAAkC,CAAC,GAAQ;IACnD,MAAM,IAAI,GAAG,OAAO,uBAAuB,KAAK,QAAQ,IAAI,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC;IACvH,+DAA+D;IAC/D,mEAAmE;IACnE,qEAAqE;IACrE,gEAAgE;IAChE,iEAAiE;IACjE,oBAAoB;IACpB,MAAM,QAAQ,GAAG,OAAO,GAAG,EAAE,aAAa,KAAK,QAAQ,IAAI,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAuB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClI,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAE,GAAG,CAAC,eAA6B,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3H,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,UAAU,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;QAChC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC1E,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QAClC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,GAAW;IACrD,MAAM,CAAC,GAAQ,UAAU,CAAC;IAC1B,IAAI,OAAO,CAAC,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;QAC/C,OAAO,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,GAAQ,EAAE,OAA6B;IAC3F,MAAM,CAAC,GAAQ,UAAU,CAAC;IAC1B,IAAI,OAAO,CAAC,CAAC,iCAAiC,KAAK,UAAU,EAAE,CAAC;QAC/D,OAAO;IACR,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,GAAG,EAAE,MAAM,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC5H,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5E,OAAO;IACR,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE/C,6DAA6D;IAC7D,8DAA8D;IAC9D,gEAAgE;IAChE,oEAAoE;IACpE,iEAAiE;IACjE,mEAAmE;IACnE,mEAAmE;IACnE,kEAAkE;IAClE,oEAAoE;IACpE,6DAA6D;IAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,UAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnK,gEAAgE;IAChE,+DAA+D;IAC/D,iEAAiE;IACjE,6DAA6D;IAC7D,0DAA0D;IAC1D,iEAAiE;IACjE,qBAAqB,CAAC,UAAU,EAAE;QACjC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,UAAU,CAAC,MAAM,UAAU,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,2BAA2B;KACzI,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/D,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,iCAAiC,UAAU,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjG,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IAED,qEAAqE;IACrE,EAAE;IACF,mEAAmE;IACnE,kEAAkE;IAClE,oEAAoE;IACpE,8DAA8D;IAC9D,8DAA8D;IAC9D,+CAA+C;IAC/C,EAAE;IACF,6DAA6D;IAC7D,sEAAsE;IACtE,iEAAiE;IACjE,kEAAkE;IAClE,+DAA+D;IAC/D,wDAAwD;IACxD,EAAE;IACF,gEAAgE;IAChE,2DAA2D;IAC3D,8DAA8D;IAC9D,6DAA6D;IAC7D,iEAAiE;IACjE,iEAAiE;IACjE,wDAAwD;IACxD,gEAAgE;IAChE,yDAAyD;IACzD,kEAAkE;IAClE,0CAA0C;IAC1C,IAAI,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,IAAI,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;gBAC7C,IAAI,CAAC;oBACJ,OAAO,CAAC,IAAI,CAAC,oCAAoC,UAAU,CAAC,MAAM,YAAY,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;gBAChJ,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACX,CAAC;QACF,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,4CAA4C,UAAU,CAAC,MAAM,QAAQ,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,6DAA6D,CAAC,CAAC;YACnN,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACX,CAAC;IACF,CAAC;IAED,gBAAgB;IAChB,EAAE;IACF,iEAAiE;IACjE,6DAA6D;IAC7D,+DAA+D;IAC/D,gEAAgE;IAChE,eAAe;IACf,oEAAoE;IACpE,kEAAkE;IAClE,iEAAiE;IACjE,iEAAiE;IACjE,mEAAmE;IACnE,6DAA6D;IAC7D,MAAM,UAAU,GAAG,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,OAAO,CAAC;IAE9B,IAAI,SAAkB,CAAC;IAEvB,iEAAiE;IACjE,+DAA+D;IAC/D,+DAA+D;IAC/D,+DAA+D;IAC/D,2DAA2D;IAC3D,+BAA+B;IAC/B,qBAAqB,CAAC,aAAa,EAAE;QACpC,MAAM,EAAE,sCAAsC;KAC9C,CAAC,CAAC;IAEH,KAAK,MAAM,KAAK,IAAI,kCAAkC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,qBAAqB,UAAU,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,QAAQ,KAAK,EAAE,CAAC;QAClJ,IAAI,CAAC;YACJ,CAAC,CAAC,gCAAgC,GAAG,IAAI,CAAC;YAC1C,MAAM,2BAA2B,CAAC,GAAG,CAAC,CAAC;YACvC,OAAO;QACR,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,SAAS,GAAG,KAAK,CAAC;QACnB,CAAC;gBAAS,CAAC;YACV,CAAC,CAAC,gCAAgC,GAAG,KAAK,CAAC;QAC5C,CAAC;IACF,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;QAChD,IAAI,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,yDAAyD,EAAG,SAAiB,EAAE,OAAO,IAAI,SAAS,CAAC,CAAC;QACnH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,GAAQ,EAAE,OAA6B;IAC1F,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACd,CAAC;IAED,iEAAiE;IACjE,mEAAmE;IACnE,+DAA+D;IAC/D,oEAAoE;IACpE,uBAAuB;IACvB,MAAM,aAAa,GAAG,gBAAgB,CAAC;IACvC,IAAI,YAAyB,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC/C,YAAY,GAAG,OAAO,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,gBAAgB,GAAG,SAAS,CAAC;IAC7B,IAAI,aAAa,EAAE,CAAC;QACnB,IAAI,CAAC;YACJ,MAAM,aAAa,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IAED,gFAAgF;IAChF,kEAAkE;IAClE,iEAAiE;IACjE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,MAAM,QAAQ,GAAG,OAAO,GAAG,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;IACxE,MAAM,UAAU,GAAG,CAAC,EAAW,EAAE,YAAqB,EAAE,EAAE;QACzD,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,EAAE,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;YACpC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,qBAAqB,MAAM,SAAS,QAAQ,YAAY,SAAS,aAAa,QAAQ,YAAY,OAAO,KAAK,MAAM,EAAE,CAAC,CAAC;QACtI,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC,CAAC;IAEF,iDAAiD;IACjD,sDAAsD;IACtD,kEAAkE;IAClE,4DAA4D;IAC5D,4BAA4B;IAC5B,EAAE;IACF,iEAAiE;IACjE,4DAA4D;IAC5D,MAAM,aAAa,GAAG,QAAQ,IAAI,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACzG,qBAAqB,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAE7D,IAAI,CAAC;QACJ,MAAM,CAAC,GAAQ,UAAU,CAAC;QAE1B,wEAAwE;QACxE,0EAA0E;QAC1E,qEAAqE;QACrE,gEAAgE;QAChE,gCAAgC;QAChC,MAAM,MAAM,GAAG,CAAC,CAAC,qBAAqB,CAAC;QACvC,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,8BAA8B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACnD,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACJ,CAAC,CAAC,uBAAuB,GAAG,CAAC,OAAO,CAAC,CAAC,uBAAuB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,IAAI,CAAC;gBACJ,CAAC,CAAC,4BAA4B,GAAG,IAAI,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,0DAA0D;YAC1D,uDAAuD;YACvD,yDAAyD;YACzD,iDAAiD;YACjD,uBAAuB;YACvB,qBAAqB,CAAC,WAAW,EAAE;gBAClC,MAAM,EAAE,qCAAqC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,EAAE,CAAC,KAAK;aACjF,CAAC,CAAC;YACH,IAAI,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,CAAC;YACd,CAAC;oBAAS,CAAC;gBACV,IAAI,CAAC;oBACJ,CAAC,CAAC,4BAA4B,GAAG,KAAK,CAAC;gBACxC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACX,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,sDAAsD;YACtD,oDAAoD;YACpD,iDAAiD;YACjD,kDAAkD;YAClD,qBAAqB,CAAC,UAAU,EAAE;gBACjC,MAAM,EAAE,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,IAAI;aAC3C,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,iGAAiG,CAAC,CAAC;QACjH,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClB,UAAU,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACvC,0DAA0D;QAC1D,wDAAwD;QACxD,iBAAiB,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC;gBACJ,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,CAAC,KAAK,IAAK,KAAa,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC;YACnG,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACX,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClB,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,IAAK,KAAa,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,2DAA2D;QAC3D,0DAA0D;QAC1D,uDAAuD;QACvD,mCAAmC;QACnC,iBAAiB,EAAE,CAAC;IACrB,CAAC;YAAS,CAAC;QACV,IAAI,CAAC;YACJ,YAAY,EAAE,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACpC,gBAAgB,GAAG,IAAI,CAAC;QACzB,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC"}
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
* "@nativescript/core/index.js";
|
|
9
9
|
* This trips the sanitizer's local-core-path detector and breaks HTTP ESM loading.
|
|
10
10
|
*
|
|
11
|
-
* This helper safely maps those literals to:
|
|
12
|
-
* import "/ns/core?p=
|
|
11
|
+
* This helper safely maps those literals to the canonical path form:
|
|
12
|
+
* import "/ns/core/<sub>"; // subpath form, no version, no ?p=
|
|
13
13
|
* or, without subpath:
|
|
14
14
|
* import "/ns/core";
|
|
15
15
|
*/
|
|
@@ -48,9 +48,9 @@ export declare function rewriteSpecifiersForDevice(code: string, origin: string,
|
|
|
48
48
|
/**
|
|
49
49
|
* Determine whether a `/ns/core` bridge URL points to a real subpath module.
|
|
50
50
|
*
|
|
51
|
-
* Any `/ns/core
|
|
51
|
+
* Any `/ns/core/<sub>` module now serves real ESM content with real named
|
|
52
52
|
* exports via Vite's transform pipeline, except for package-main aliases like
|
|
53
|
-
* `/ns/core
|
|
53
|
+
* `/ns/core/index`, which should be treated like the main `/ns/core`
|
|
54
54
|
* bridge and destructured from its default export.
|
|
55
55
|
* The main proxy bridge (`/ns/core`) still only exports a default Proxy and
|
|
56
56
|
* requires named imports to be destructured from it.
|
|
@@ -58,6 +58,10 @@ export declare function rewriteSpecifiersForDevice(code: string, origin: string,
|
|
|
58
58
|
* This check is used in all named-import-to-default destructuring passes to
|
|
59
59
|
* skip rewriting for real subpath modules — they have named exports that work
|
|
60
60
|
* natively without conversion.
|
|
61
|
+
*
|
|
62
|
+
* Accepts both the canonical path form (`/ns/core/<sub>`) and the legacy
|
|
63
|
+
* query form (`/ns/core?p=<sub>`) for back-compat; every emitter has been
|
|
64
|
+
* migrated to the path form but external code may still carry the old URL.
|
|
61
65
|
*/
|
|
62
66
|
export declare function isDeepCoreSubpath(url: string): boolean;
|
|
63
67
|
/**
|