@nativescript/vite 8.0.0-alpha.71 → 8.0.0-alpha.72

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 (52) hide show
  1. package/helpers/workers.js +15 -27
  2. package/helpers/workers.js.map +1 -1
  3. package/hmr/client/hot-context.js +2 -2
  4. package/hmr/client/hot-context.js.map +1 -1
  5. package/hmr/client/utils.js +5 -5
  6. package/hmr/client/utils.js.map +1 -1
  7. package/hmr/entry-runtime.js +14 -8
  8. package/hmr/entry-runtime.js.map +1 -1
  9. package/hmr/frameworks/angular/client/index.js +33 -113
  10. package/hmr/frameworks/angular/client/index.js.map +1 -1
  11. package/hmr/frameworks/angular/server/strategy.js +1 -1
  12. package/hmr/frameworks/angular/server/strategy.js.map +1 -1
  13. package/hmr/frameworks/angular/server/websocket-angular-hot-update.js +2 -2
  14. package/hmr/frameworks/angular/server/websocket-angular-hot-update.js.map +1 -1
  15. package/hmr/frameworks/solid/client/app-runtime.js +2 -2
  16. package/hmr/frameworks/solid/client/app-runtime.js.map +1 -1
  17. package/hmr/frameworks/vue/client/index.js +1 -1
  18. package/hmr/frameworks/vue/client/index.js.map +1 -1
  19. package/hmr/frameworks/vue/server/sfc-route-shared.d.ts +1 -1
  20. package/hmr/frameworks/vue/server/sfc-route-shared.js +1 -1
  21. package/hmr/frameworks/vue/server/strategy.js +1 -1
  22. package/hmr/frameworks/vue/server/strategy.js.map +1 -1
  23. package/hmr/server/framework-strategy.d.ts +1 -1
  24. package/hmr/server/import-map.d.ts +3 -3
  25. package/hmr/server/import-map.js +3 -3
  26. package/hmr/server/websocket-import-map-route.d.ts +1 -1
  27. package/hmr/server/websocket-import-map-route.js +1 -1
  28. package/hmr/server/websocket-ns-m-paths.js +1 -1
  29. package/hmr/server/websocket-ns-m-paths.js.map +1 -1
  30. package/hmr/server/websocket-ns-m.js +1 -1
  31. package/hmr/server/websocket-ns-m.js.map +1 -1
  32. package/hmr/server/websocket-served-module-helpers.js +1 -1
  33. package/hmr/server/websocket-served-module-helpers.js.map +1 -1
  34. package/hmr/shared/ns-globals.d.ts +2 -1
  35. package/hmr/shared/ns-globals.js +1 -1
  36. package/hmr/shared/ns-globals.js.map +1 -1
  37. package/hmr/shared/runtime/boot-complete.d.ts +1 -1
  38. package/hmr/shared/runtime/boot-complete.js +1 -1
  39. package/hmr/shared/runtime/browser-runtime-contract.d.ts +11 -9
  40. package/hmr/shared/runtime/browser-runtime-contract.js +3 -3
  41. package/hmr/shared/runtime/browser-runtime-contract.js.map +1 -1
  42. package/hmr/shared/runtime/ns-runtime-test-double.d.ts +3 -3
  43. package/hmr/shared/runtime/ns-runtime-test-double.js +2 -2
  44. package/hmr/shared/runtime/ns-runtime-test-double.js.map +1 -1
  45. package/hmr/shared/runtime/root-placeholder.js +1 -1
  46. package/hmr/shared/runtime/root-placeholder.js.map +1 -1
  47. package/hmr/shared/runtime/session-bootstrap.js +16 -9
  48. package/hmr/shared/runtime/session-bootstrap.js.map +1 -1
  49. package/hmr/shared/runtime/worker-tracking.d.ts +28 -0
  50. package/hmr/shared/runtime/worker-tracking.js +114 -0
  51. package/hmr/shared/runtime/worker-tracking.js.map +1 -0
  52. package/package.json +1 -1
@@ -0,0 +1,28 @@
1
+ export interface WorkerSweepResult {
2
+ /** Workers whose `terminate()` was called successfully. */
3
+ terminated: number;
4
+ /** Workers whose `terminate()` threw (already dead, native error, …). */
5
+ failed: number;
6
+ /** Size of the tracked set before the sweep. */
7
+ total: number;
8
+ }
9
+ /**
10
+ * Patch the global `Worker` constructor so every construction is recorded in
11
+ * `g.__NS_HMR_WORKERS__`. Idempotent (safe to call from every boot path);
12
+ * transparent to callers — `instanceof`, prototype methods and statics all
13
+ * resolve through the native constructor, and subclassing keeps working via
14
+ * `new.target`.
15
+ *
16
+ * Returns `false` when the realm has no `Worker` (tests, worker realms with
17
+ * workers disabled) or the global scope rejects the patch.
18
+ */
19
+ export declare function installWorkerConstructorTracking(g: any, options?: {
20
+ verbose?: boolean;
21
+ }): boolean;
22
+ /**
23
+ * Terminate every worker in the tracked set and clear it. Per-worker
24
+ * failures are counted, never thrown — a single misbehaving worker must not
25
+ * abort the HMR cycle that triggered the sweep. Clearing unconditionally
26
+ * keeps the set from growing unbounded across cycles.
27
+ */
28
+ export declare function sweepTrackedWorkers(g: any): WorkerSweepResult;
@@ -0,0 +1,114 @@
1
+ // Dev-session worker teardown — fully userland.
2
+ //
3
+ // The NativeScript runtime deliberately exposes no worker-teardown member on
4
+ // the `ns:module` builtin (see the iOS repo's
5
+ // WORKER_TERMINATION_USERLAND_REVIEW.md decision record). Instead the dev
6
+ // session patches the global `Worker` constructor BEFORE any app, framework,
7
+ // or vendor code evaluates, so every main-realm spawn — including plugin
8
+ // `dist` code and hand-written `new Worker(...)` calls the transform
9
+ // pipeline never saw — lands in the session-wide tracked set
10
+ // (`globalThis.__NS_HMR_WORKERS__`). The HMR client sweeps that set before
11
+ // framework reboots.
12
+ //
13
+ // Nested workers need no tracking here: `worker.terminate()` tears down the
14
+ // worker's native runtime, whose destructor terminates that realm's child
15
+ // workers, cascading down the worker tree. And the sweep can never run
16
+ // inside a worker realm — the dev client only evaluates on the main realm —
17
+ // so a stuck worker cannot take down its peers.
18
+ /**
19
+ * Patch the global `Worker` constructor so every construction is recorded in
20
+ * `g.__NS_HMR_WORKERS__`. Idempotent (safe to call from every boot path);
21
+ * transparent to callers — `instanceof`, prototype methods and statics all
22
+ * resolve through the native constructor, and subclassing keeps working via
23
+ * `new.target`.
24
+ *
25
+ * Returns `false` when the realm has no `Worker` (tests, worker realms with
26
+ * workers disabled) or the global scope rejects the patch.
27
+ */
28
+ export function installWorkerConstructorTracking(g, options) {
29
+ let NativeWorker;
30
+ try {
31
+ NativeWorker = g && g.Worker;
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ if (typeof NativeWorker !== 'function') {
37
+ return false;
38
+ }
39
+ if (g.__NS_HMR_WORKER_TRACKING_INSTALLED__ === true) {
40
+ return true;
41
+ }
42
+ let tracked;
43
+ try {
44
+ tracked = g.__NS_HMR_WORKERS__ instanceof Set ? g.__NS_HMR_WORKERS__ : (g.__NS_HMR_WORKERS__ = new Set());
45
+ }
46
+ catch {
47
+ return false;
48
+ }
49
+ const TrackedWorker = function Worker(...args) {
50
+ const instance = Reflect.construct(NativeWorker, args, new.target || TrackedWorker);
51
+ try {
52
+ tracked.add(instance);
53
+ }
54
+ catch { }
55
+ return instance;
56
+ };
57
+ TrackedWorker.prototype = NativeWorker.prototype;
58
+ try {
59
+ // Statics (if the host ever adds any) keep resolving through the
60
+ // native constructor.
61
+ Object.setPrototypeOf(TrackedWorker, NativeWorker);
62
+ }
63
+ catch { }
64
+ try {
65
+ g.Worker = TrackedWorker;
66
+ g.__NS_HMR_WORKER_TRACKING_INSTALLED__ = true;
67
+ }
68
+ catch {
69
+ return false;
70
+ }
71
+ if (options?.verbose) {
72
+ console.info('[ns-hmr][workers] Worker constructor tracking installed');
73
+ }
74
+ return true;
75
+ }
76
+ /**
77
+ * Terminate every worker in the tracked set and clear it. Per-worker
78
+ * failures are counted, never thrown — a single misbehaving worker must not
79
+ * abort the HMR cycle that triggered the sweep. Clearing unconditionally
80
+ * keeps the set from growing unbounded across cycles.
81
+ */
82
+ export function sweepTrackedWorkers(g) {
83
+ let tracked;
84
+ try {
85
+ tracked = g && g.__NS_HMR_WORKERS__;
86
+ }
87
+ catch {
88
+ // fall through with `tracked === undefined`
89
+ }
90
+ const total = tracked && typeof tracked.size === 'number' ? tracked.size : 0;
91
+ let terminated = 0;
92
+ let failed = 0;
93
+ if (tracked && total > 0) {
94
+ for (const worker of tracked) {
95
+ try {
96
+ if (worker && typeof worker.terminate === 'function') {
97
+ worker.terminate();
98
+ terminated++;
99
+ }
100
+ }
101
+ catch {
102
+ failed++;
103
+ }
104
+ }
105
+ }
106
+ if (tracked) {
107
+ try {
108
+ tracked.clear();
109
+ }
110
+ catch { }
111
+ }
112
+ return { terminated, failed, total };
113
+ }
114
+ //# sourceMappingURL=worker-tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-tracking.js","sourceRoot":"","sources":["../../../../../../packages/vite/hmr/shared/runtime/worker-tracking.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nativescript/vite",
3
- "version": "8.0.0-alpha.71",
3
+ "version": "8.0.0-alpha.72",
4
4
  "description": "Vite for NativeScript",
5
5
  "main": "./index.js",
6
6
  "module": "./index.js",