@nativescript/vite 0.0.2 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +37 -0
  2. package/bin/cli.cjs +32 -0
  3. package/configuration/angular.js +66 -175
  4. package/configuration/angular.js.map +1 -1
  5. package/configuration/base.js +18 -21
  6. package/configuration/base.js.map +1 -1
  7. package/configuration/javascript.js +6 -5
  8. package/configuration/javascript.js.map +1 -1
  9. package/configuration/typescript.js +6 -5
  10. package/configuration/typescript.js.map +1 -1
  11. package/helpers/{angular-linker.js → angular/angular-linker.js} +27 -19
  12. package/helpers/angular/angular-linker.js.map +1 -0
  13. package/helpers/angular/shared-linker.d.ts +4 -0
  14. package/helpers/angular/shared-linker.js +39 -0
  15. package/helpers/angular/shared-linker.js.map +1 -0
  16. package/helpers/angular/util.d.ts +1 -0
  17. package/helpers/angular/util.js +67 -0
  18. package/helpers/angular/util.js.map +1 -0
  19. package/helpers/global-defines.d.ts +2 -0
  20. package/helpers/global-defines.js +5 -0
  21. package/helpers/global-defines.js.map +1 -1
  22. package/helpers/init.d.ts +1 -0
  23. package/helpers/init.js +119 -0
  24. package/helpers/init.js.map +1 -0
  25. package/helpers/logging.js +4 -0
  26. package/helpers/logging.js.map +1 -1
  27. package/helpers/main-entry.js +12 -4
  28. package/helpers/main-entry.js.map +1 -1
  29. package/helpers/nativeclass-transform.js +1 -1
  30. package/helpers/nativeclass-transform.js.map +1 -1
  31. package/helpers/utils.d.ts +4 -0
  32. package/helpers/utils.js +55 -0
  33. package/helpers/utils.js.map +1 -1
  34. package/hmr/client/index.js +257 -84
  35. package/hmr/client/index.js.map +1 -1
  36. package/hmr/entry-runtime.js +1 -1
  37. package/hmr/entry-runtime.js.map +1 -1
  38. package/hmr/frameworks/angular/client/index.d.ts +8 -0
  39. package/hmr/frameworks/angular/client/index.js +59 -0
  40. package/hmr/frameworks/angular/client/index.js.map +1 -0
  41. package/hmr/frameworks/angular/server/linker.d.ts +1 -0
  42. package/hmr/frameworks/angular/server/linker.js +101 -0
  43. package/hmr/frameworks/angular/server/linker.js.map +1 -0
  44. package/hmr/frameworks/angular/server/strategy.js +106 -20
  45. package/hmr/frameworks/angular/server/strategy.js.map +1 -1
  46. package/hmr/frameworks/solid/server/strategy.d.ts +2 -0
  47. package/hmr/frameworks/solid/server/strategy.js +56 -0
  48. package/hmr/frameworks/solid/server/strategy.js.map +1 -0
  49. package/hmr/frameworks/typescript/server/strategy.d.ts +2 -0
  50. package/hmr/frameworks/typescript/server/strategy.js +125 -0
  51. package/hmr/frameworks/typescript/server/strategy.js.map +1 -0
  52. package/hmr/frameworks/vue/client/index.js +7 -3
  53. package/hmr/frameworks/vue/client/index.js.map +1 -1
  54. package/hmr/frameworks/vue/server/strategy.js +3 -4
  55. package/hmr/frameworks/vue/server/strategy.js.map +1 -1
  56. package/hmr/server/index.js +5 -1
  57. package/hmr/server/index.js.map +1 -1
  58. package/hmr/server/websocket.d.ts +6 -0
  59. package/hmr/server/websocket.js +117 -26
  60. package/hmr/server/websocket.js.map +1 -1
  61. package/hmr/shared/vendor/manifest.d.ts +1 -0
  62. package/hmr/shared/vendor/manifest.js +38 -14
  63. package/hmr/shared/vendor/manifest.js.map +1 -1
  64. package/index.js +11 -0
  65. package/index.js.map +1 -1
  66. package/package.json +12 -9
  67. package/shims/angular-animations-stub.d.ts +62 -2
  68. package/shims/angular-animations-stub.js +132 -6
  69. package/shims/angular-animations-stub.js.map +1 -1
  70. package/helpers/angular-linker.js.map +0 -1
  71. /package/helpers/{angular-linker.d.ts → angular/angular-linker.d.ts} +0 -0
@@ -1,47 +1,116 @@
1
1
  import * as path from 'path';
2
2
  import { readFileSync, readdirSync, statSync } from 'fs';
3
- // Very lightweight candidate scanner: watches for @Component and templateUrl usage
4
- // and registers external templates for the watcher by sending no-op registry (future use).
5
- // This primes the pipeline for template-only updates.
6
- // Minimal Angular server strategy: Angular doesn't use .vue SFCs, so most
7
- // Vue-specific transformations are no-ops here. This stub enables the HMR
8
- // server to select a framework without attempting Vue SFC logic.
3
+ import * as PAT from '../../../server/constants.js';
4
+ import { linkAngularPartialsIfNeeded } from './linker.js';
5
+ import { getProjectAppPath, getProjectAppVirtualPath } from '../../../../helpers/utils.js';
6
+ // Angular server strategy for NativeScript HMR.
7
+ //
8
+ // Responsibilities:
9
+ // - Identify Angular app entry modules under /src.
10
+ // - Use Vite dev server to transform HTTP-served Angular modules.
11
+ // - Run resulting code through the Angular linker helper so no ɵɵngDeclare
12
+ // partial declarations reach the device, even in strict mode.
13
+ // - Register external templates/styles with the watcher for live updates.
14
+ const ANGULAR_APP_DIR = getProjectAppPath();
15
+ const ANGULAR_APP_VIRTUAL_WITH_SLASH = `${getProjectAppVirtualPath()}/`;
16
+ function findAngularEntryFiles(root) {
17
+ const srcDir = path.join(root, ANGULAR_APP_DIR);
18
+ const results = [];
19
+ function walk(dir) {
20
+ let entries = [];
21
+ try {
22
+ entries = readdirSync(dir);
23
+ }
24
+ catch {
25
+ return;
26
+ }
27
+ for (const name of entries) {
28
+ if (name === 'node_modules' || name === '.ns-vite-build' || name === 'dist')
29
+ continue;
30
+ const full = path.join(dir, name);
31
+ let st;
32
+ try {
33
+ st = statSync(full);
34
+ }
35
+ catch {
36
+ continue;
37
+ }
38
+ if (st.isDirectory()) {
39
+ walk(full);
40
+ }
41
+ else if (st.isFile() && (name.endsWith('.ts') || name.endsWith('.js'))) {
42
+ try {
43
+ const code = readFileSync(full, 'utf8');
44
+ // Heuristic: treat files that bootstrap Angular (platformNativeScript, bootstrapApplication, etc.)
45
+ // as HMR-relevant roots.
46
+ if (/bootstrapApplication\s*\(|platformNativeScript/i.test(code) || /@NgModule\s*\(/.test(code)) {
47
+ const rel = '/' + path.relative(root, full).split(path.sep).join('/');
48
+ results.push(rel);
49
+ }
50
+ }
51
+ catch { }
52
+ }
53
+ }
54
+ }
55
+ walk(srcDir);
56
+ return results;
57
+ }
9
58
  export const angularServerStrategy = {
10
59
  flavor: 'angular',
11
60
  matchesFile(id) {
12
61
  // Treat only application TS/JS as candidates for ordering/graph purposes
13
- return /\.(ts|js|tsx|jsx|mjs)$/i.test(id) && id.startsWith('/src/');
62
+ return /\.(ts|js|tsx|jsx|mjs)$/i.test(id) && id.startsWith(ANGULAR_APP_VIRTUAL_WITH_SLASH);
14
63
  },
15
64
  preClean(code) {
16
65
  return code;
17
66
  },
18
67
  rewriteFrameworkImports(code) {
68
+ // Angular runtime imports are handled via the vendor bridge; no extra rewrite.
19
69
  return code;
20
70
  },
21
71
  postClean(code) {
22
72
  return code;
23
73
  },
24
- ensureVersionedImports(code) {
74
+ ensureVersionedImports(code, _origin, _version) {
75
+ // No Angular-specific HTTP endpoints yet; leave imports as-is.
25
76
  return code;
26
77
  },
27
- async processFile(_ctx) {
28
- // No special processing required for Angular at server side for now
29
- return;
78
+ async processFile(ctx) {
79
+ // Ensure any Angular code the HMR server assembles for HTTP consumption is fully linked.
80
+ const { filePath, server, verbose } = ctx;
81
+ try {
82
+ const transformed = await server.transformRequest(filePath);
83
+ if (!transformed?.code)
84
+ return;
85
+ let code = transformed.code;
86
+ // Sanitize Angular partial declarations inline before device evaluation.
87
+ code = linkAngularPartialsIfNeeded(code, filePath);
88
+ // No additional per-file registry at the moment; core HMR loader will fetch via HTTP.
89
+ if (verbose) {
90
+ console.log(`[angular-hmr] processed ${filePath}`);
91
+ }
92
+ }
93
+ catch (err) {
94
+ if (verbose) {
95
+ console.warn('[angular-hmr] processFile error for', filePath, err);
96
+ }
97
+ }
30
98
  },
31
99
  async buildRegistry(ctx) {
32
100
  const { server, verbose } = ctx;
33
101
  const root = server.config.root || process.cwd();
34
- const srcDir = path.join(root, 'src');
102
+ const entries = findAngularEntryFiles(root);
35
103
  const templateFiles = [];
36
- function walk(dir) {
37
- let entries = [];
104
+ // Maintain existing behavior: watch external templates and styles referenced via templateUrl/styleUrls.
105
+ function walkForTemplates(dir) {
106
+ let list = [];
38
107
  try {
39
- entries = readdirSync(dir);
108
+ list = readdirSync(dir);
40
109
  }
41
110
  catch {
42
111
  return;
43
112
  }
44
- for (const name of entries) {
113
+ for (const name of list) {
45
114
  if (name === 'node_modules' || name === '.ns-vite-build' || name === 'dist')
46
115
  continue;
47
116
  const full = path.join(dir, name);
@@ -53,7 +122,7 @@ export const angularServerStrategy = {
53
122
  continue;
54
123
  }
55
124
  if (st.isDirectory()) {
56
- walk(full);
125
+ walkForTemplates(full);
57
126
  }
58
127
  else if (st.isFile() && name.endsWith('.ts')) {
59
128
  try {
@@ -65,12 +134,11 @@ export const angularServerStrategy = {
65
134
  templateFiles.push(htmlAbs);
66
135
  }
67
136
  }
68
- // Also detect styleUrls and watch those files, too
69
137
  const styleArrayMatch = code.match(/styleUrls\s*:\s*\[([\s\S]*?)\]/);
70
138
  if (styleArrayMatch && styleArrayMatch[1]) {
71
139
  const entries = styleArrayMatch[1]
72
140
  .split(',')
73
- .map((s) => s.trim().replace(/^['"`]|['"`]$/g, ''))
141
+ .map((s) => s.trim().replace(/^["'`]|["'`]$/g, ''))
74
142
  .filter((s) => s.startsWith('./') && (s.endsWith('.css') || s.endsWith('.scss')));
75
143
  for (const rel of entries) {
76
144
  const cssAbs = path.join(path.dirname(full), rel);
@@ -82,7 +150,7 @@ export const angularServerStrategy = {
82
150
  }
83
151
  }
84
152
  }
85
- walk(srcDir);
153
+ walkForTemplates(path.join(root, 'src'));
86
154
  try {
87
155
  for (const abs of templateFiles) {
88
156
  try {
@@ -96,6 +164,24 @@ export const angularServerStrategy = {
96
164
  }
97
165
  }
98
166
  catch { }
167
+ // At this stage, we only need to ensure Angular HMR roots are transformed and linked at least once.
168
+ for (const rel of entries) {
169
+ try {
170
+ const transformed = await server.transformRequest(rel);
171
+ if (!transformed?.code)
172
+ continue;
173
+ let code = transformed.code;
174
+ code = linkAngularPartialsIfNeeded(code, rel);
175
+ if (verbose) {
176
+ console.log(`[angular-registry] primed entry: ${rel}`);
177
+ }
178
+ }
179
+ catch (err) {
180
+ if (verbose) {
181
+ console.warn('[angular-registry] failed to prime entry', rel, err);
182
+ }
183
+ }
184
+ }
99
185
  },
100
186
  };
101
187
  //# sourceMappingURL=strategy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../../../../../packages/vite/hmr/frameworks/angular/server/strategy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEzD,mFAAmF;AACnF,2FAA2F;AAC3F,sDAAsD;AAEtD,0EAA0E;AAC1E,0EAA0E;AAC1E,iEAAiE;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAA4B;IAC7D,MAAM,EAAE,SAAS;IACjB,WAAW,CAAC,EAAU;QACrB,yEAAyE;QACzE,OAAO,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IACD,QAAQ,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,uBAAuB,CAAC,IAAY;QACnC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,SAAS,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,sBAAsB,CAAC,IAAY;QAClC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,KAAK,CAAC,WAAW,CAAC,IAAiC;QAClD,oEAAoE;QACpE,OAAO;IACR,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,GAA6B;QAChD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,SAAS,IAAI,CAAC,GAAW;YACxB,IAAI,OAAO,GAAa,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACJ,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO;YACR,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,MAAM;oBAAE,SAAS;gBACtF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAClC,IAAI,EAAO,CAAC;gBACZ,IAAI,CAAC;oBACJ,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC;gBAAC,MAAM,CAAC;oBACR,SAAS;gBACV,CAAC;gBACD,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;oBACtB,IAAI,CAAC,IAAI,CAAC,CAAC;gBACZ,CAAC;qBAAM,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChD,IAAI,CAAC;wBACJ,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;wBACxC,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC9E,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;4BAClE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gCACf,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCACpD,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;4BAC7B,CAAC;wBACF,CAAC;wBACD,mDAAmD;wBACnD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;wBACrE,IAAI,eAAe,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC3C,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC;iCAChC,KAAK,CAAC,GAAG,CAAC;iCACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;iCAClD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;4BACnF,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gCAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gCAClD,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BAC5B,CAAC;wBACF,CAAC;oBACF,CAAC;oBAAC,MAAM,CAAC,CAAA,CAAC;gBACX,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,CAAC;QACb,IAAI,CAAC;YACJ,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACJ,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBACV,IAAI,OAAO,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACrE,OAAO,CAAC,GAAG,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;gBAC7D,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;CACD,CAAC"}
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../../../../../packages/vite/hmr/frameworks/angular/server/strategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { FrameworkServerStrategy } from '../../../server/framework-strategy.js';
2
+ export declare const solidServerStrategy: FrameworkServerStrategy;
@@ -0,0 +1,56 @@
1
+ import * as path from 'path';
2
+ import * as PAT from '../../../server/constants.js';
3
+ import { getProjectAppVirtualPath } from '../../../../helpers/utils.js';
4
+ // Solid server strategy for NativeScript HMR.
5
+ // For Solid we don't have .vue-style SFCs today; this strategy mainly
6
+ // ensures Solid runtime imports can be rewritten to vendor when needed
7
+ // and allows future per-file processing hooks.
8
+ const SOLID_FILE_PATTERN = /\.(tsx?|jsx?)$/i;
9
+ const SOLID_APP_PREFIX = `${getProjectAppVirtualPath()}/`;
10
+ export const solidServerStrategy = {
11
+ flavor: 'solid',
12
+ matchesFile(id) {
13
+ // Treat app TS/TSX/JS/JSX under the configured app root as Solid candidates.
14
+ return SOLID_FILE_PATTERN.test(id) && id.startsWith(SOLID_APP_PREFIX);
15
+ },
16
+ preClean(code) {
17
+ // No Solid-specific pre-clean yet.
18
+ return code;
19
+ },
20
+ rewriteFrameworkImports(code) {
21
+ // Solid HMR primarily operates via Vite's own solid-refresh plugin;
22
+ // @nativescript/vite vendor bridging handles NativeScript modules.
23
+ // We keep this hook in case we need to remap solid-js imports later.
24
+ return code;
25
+ },
26
+ postClean(code) {
27
+ // No extra Solid-specific cleanup for now.
28
+ return code;
29
+ },
30
+ ensureVersionedImports(code, _origin, _version) {
31
+ // Solid currently has no dedicated HTTP endpoints like /ns/sfc.
32
+ return code;
33
+ },
34
+ async processFile(ctx) {
35
+ // For now we rely on the generic pipeline; no per-file Solid SFC registry.
36
+ const { filePath, server, verbose } = ctx;
37
+ try {
38
+ const transformed = await server.transformRequest(filePath);
39
+ if (!transformed?.code)
40
+ return;
41
+ if (verbose) {
42
+ console.log(`[solid-hmr] processed ${filePath}`);
43
+ }
44
+ }
45
+ catch (err) {
46
+ if (verbose) {
47
+ console.warn('[solid-hmr] processFile error for', filePath, err);
48
+ }
49
+ }
50
+ },
51
+ async buildRegistry(_ctx) {
52
+ // No Solid registry messaging yet; HTTP-only boot imports app modules directly.
53
+ return;
54
+ },
55
+ };
56
+ //# sourceMappingURL=strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../../../../../packages/vite/hmr/frameworks/solid/server/strategy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAExE,8CAA8C;AAC9C,sEAAsE;AACtE,uEAAuE;AACvE,+CAA+C;AAE/C,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAC7C,MAAM,gBAAgB,GAAG,GAAG,wBAAwB,EAAE,GAAG,CAAC;AAE1D,MAAM,CAAC,MAAM,mBAAmB,GAA4B;IAC3D,MAAM,EAAE,OAAO;IACf,WAAW,CAAC,EAAU;QACrB,6EAA6E;QAC7E,OAAO,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACvE,CAAC;IACD,QAAQ,CAAC,IAAY;QACpB,mCAAmC;QACnC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,uBAAuB,CAAC,IAAY;QACnC,oEAAoE;QACpE,mEAAmE;QACnE,qEAAqE;QACrE,OAAO,IAAI,CAAC;IACb,CAAC;IACD,SAAS,CAAC,IAAY;QACrB,2CAA2C;QAC3C,OAAO,IAAI,CAAC;IACb,CAAC;IACD,sBAAsB,CAAC,IAAY,EAAE,OAAe,EAAE,QAAgB;QACrE,gEAAgE;QAChE,OAAO,IAAI,CAAC;IACb,CAAC;IACD,KAAK,CAAC,WAAW,CAAC,GAAgC;QACjD,2EAA2E;QAC3E,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;QAC1C,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,WAAW,EAAE,IAAI;gBAAE,OAAO;YAC/B,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;YAClD,CAAC;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YAClE,CAAC;QACF,CAAC;IACF,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,IAA8B;QACjD,gFAAgF;QAChF,OAAO;IACR,CAAC;CACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { FrameworkServerStrategy } from '../../../server/framework-strategy.js';
2
+ export declare const typescriptServerStrategy: FrameworkServerStrategy;
@@ -0,0 +1,125 @@
1
+ import { getProjectAppPath, getProjectAppVirtualPath } from '../../../../helpers/utils.js';
2
+ import * as path from 'path';
3
+ // TypeScript server strategy for NativeScript HMR.
4
+ // This is a lightweight strategy that treats app TS/JS files
5
+ // as HTTP-loaded modules, relying on the shared HMR pipeline
6
+ // (rewriteImports, device-side require bridge, etc.).
7
+ const TS_APP_PREFIX = `${getProjectAppVirtualPath()}/`;
8
+ const TS_FILE_PATTERN = /\.(ts|tsx|js|jsx|mjs)$/i;
9
+ export const typescriptServerStrategy = {
10
+ flavor: 'typescript',
11
+ matchesFile(id) {
12
+ // Treat any app TS/JS under the virtual app root as HMR-relevant.
13
+ return TS_FILE_PATTERN.test(id) && id.startsWith(TS_APP_PREFIX);
14
+ },
15
+ preClean(code) {
16
+ // No TS-specific pre-clean; generic sanitizers handle core/HMR noise.
17
+ return code;
18
+ },
19
+ rewriteFrameworkImports(code) {
20
+ // For plain TS apps we rely on vendor bridging and generic import rewriting.
21
+ return code;
22
+ },
23
+ postClean(code) {
24
+ return code;
25
+ },
26
+ ensureVersionedImports(code, _origin, _version) {
27
+ // TypeScript flavor uses direct /ns/entry-rt and HTTP graph; no extra versioning.
28
+ return code;
29
+ },
30
+ async processFile(ctx) {
31
+ // Ensure that any TS app module requested by the HTTP realm is transformed once,
32
+ // so that downstream helpers (rewriteImports, vendor bridge) see a stable shape.
33
+ const { filePath, server, verbose } = ctx;
34
+ try {
35
+ const transformed = await server.transformRequest(filePath);
36
+ if (!transformed?.code)
37
+ return;
38
+ if (verbose) {
39
+ console.log(`[ts-hmr] processed ${filePath}`);
40
+ }
41
+ }
42
+ catch (err) {
43
+ if (verbose) {
44
+ console.warn('[ts-hmr] processFile error for', filePath, err);
45
+ }
46
+ }
47
+ },
48
+ async buildRegistry(ctx) {
49
+ // Build a minimal registry for TS apps: treat all TS/JS
50
+ // modules under the app root as HMR graph members so the
51
+ // server can emit a non-empty ns:hmr-full-graph.
52
+ const { server, verbose, wss } = ctx;
53
+ const root = server.config.root || process.cwd();
54
+ const appDir = getProjectAppPath();
55
+ const appRootAbs = path.join(root, appDir);
56
+ const entries = [];
57
+ // Use Node's fs since getProjectAppPath/root are real filesystem paths.
58
+ const fs = await import('fs');
59
+ function walk(dir) {
60
+ let list = [];
61
+ try {
62
+ list = fs.readdirSync(dir);
63
+ }
64
+ catch {
65
+ return;
66
+ }
67
+ for (const name of list) {
68
+ const full = path.join(dir, name);
69
+ let st;
70
+ try {
71
+ st = fs.statSync(full);
72
+ }
73
+ catch {
74
+ continue;
75
+ }
76
+ if (st.isDirectory()) {
77
+ walk(full);
78
+ }
79
+ else if (st.isFile() && TS_FILE_PATTERN.test(name)) {
80
+ const rel = '/' + path.relative(root, full).split(path.sep).join('/');
81
+ entries.push(rel);
82
+ }
83
+ }
84
+ }
85
+ walk(appRootAbs);
86
+ if (!entries.length) {
87
+ if (verbose) {
88
+ console.log('[ts-hmr][registry] no TS app modules found');
89
+ }
90
+ return;
91
+ }
92
+ // Prime transforms so the shared pipeline can analyze deps.
93
+ for (const rel of entries) {
94
+ try {
95
+ const transformed = await server.transformRequest(rel);
96
+ if (verbose && transformed?.code) {
97
+ console.log('[ts-hmr][registry] primed module', rel);
98
+ }
99
+ }
100
+ catch (e) {
101
+ if (verbose) {
102
+ console.warn('[ts-hmr][registry] failed to transform', rel, e);
103
+ }
104
+ }
105
+ }
106
+ // Send a TS-oriented registry message; server-side graph
107
+ // code will coalesce this into ns:hmr-full-graph.
108
+ if (!wss)
109
+ return;
110
+ const msg = {
111
+ type: 'ns:ts-module-registry',
112
+ modules: entries,
113
+ ts: Date.now(),
114
+ };
115
+ wss.clients.forEach((client) => {
116
+ if (client.readyState === client.OPEN) {
117
+ client.send(JSON.stringify(msg));
118
+ }
119
+ });
120
+ if (verbose) {
121
+ console.log(`[ts-hmr][registry] sent ${entries.length} TS modules`);
122
+ }
123
+ },
124
+ };
125
+ //# sourceMappingURL=strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../../../../../../packages/vite/hmr/frameworks/typescript/server/strategy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC3F,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,mDAAmD;AACnD,6DAA6D;AAC7D,6DAA6D;AAC7D,sDAAsD;AAEtD,MAAM,aAAa,GAAG,GAAG,wBAAwB,EAAE,GAAG,CAAC;AACvD,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAElD,MAAM,CAAC,MAAM,wBAAwB,GAA4B;IAChE,MAAM,EAAE,YAAY;IACpB,WAAW,CAAC,EAAU;QACrB,kEAAkE;QAClE,OAAO,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;IACD,QAAQ,CAAC,IAAY;QACpB,sEAAsE;QACtE,OAAO,IAAI,CAAC;IACb,CAAC;IACD,uBAAuB,CAAC,IAAY;QACnC,6EAA6E;QAC7E,OAAO,IAAI,CAAC;IACb,CAAC;IACD,SAAS,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,sBAAsB,CAAC,IAAY,EAAE,OAAe,EAAE,QAAgB;QACrE,kFAAkF;QAClF,OAAO,IAAI,CAAC;IACb,CAAC;IACD,KAAK,CAAC,WAAW,CAAC,GAAgC;QACjD,iFAAiF;QACjF,iFAAiF;QACjF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;QAC1C,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,WAAW,EAAE,IAAI;gBAAE,OAAO;YAC/B,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;YAC/C,CAAC;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC/D,CAAC;QACF,CAAC;IACF,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,GAA6B;QAChD,wDAAwD;QACxD,yDAAyD;QACzD,iDAAiD;QACjD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,wEAAwE;QACxE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,SAAS,IAAI,CAAC,GAAW;YACxB,IAAI,IAAI,GAAa,EAAE,CAAC;YACxB,IAAI,CAAC;gBACJ,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAwB,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO;YACR,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAClC,IAAI,EAAO,CAAC;gBACZ,IAAI,CAAC;oBACJ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACR,SAAS;gBACV,CAAC;gBACD,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;oBACtB,IAAI,CAAC,IAAI,CAAC,CAAC;gBACZ,CAAC;qBAAM,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtD,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC;YACF,CAAC;QACF,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACrB,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO;QACR,CAAC;QACD,4DAA4D;QAC5D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACJ,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBACvD,IAAI,OAAO,IAAI,WAAW,EAAE,IAAI,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;gBACtD,CAAC;YACF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,IAAI,OAAO,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBAChE,CAAC;YACF,CAAC;QACF,CAAC;QACD,yDAAyD;QACzD,kDAAkD;QAClD,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,GAAG,GAAG;YACX,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,OAAO;YAChB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;SACd,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9B,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAClC,CAAC;QACF,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,2BAA2B,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;QACrE,CAAC;IACF,CAAC;CACD,CAAC"}
@@ -1,4 +1,8 @@
1
1
  import { attachDiagnosticsToFrame, deriveHttpOrigin, getCore, getCurrentApp, getGraphVersion, getHMRWsUrl, getHttpOriginForVite, normalizeSpec, safeDynImport, safeReadDefault, setCurrentApp } from '../../../client/utils.js';
2
+ const APP_VIRTUAL_WITH_SLASH = (() => {
3
+ const root = typeof __NS_APP_ROOT_VIRTUAL__ === 'string' && __NS_APP_ROOT_VIRTUAL__ ? __NS_APP_ROOT_VIRTUAL__ : '/src';
4
+ return root.replace(/\/+$/, '') + '/';
5
+ })();
2
6
  // Optional runtime knob: allow disabling assembler path in favor of variant-only flow
3
7
  const DISABLE_ASM = !!globalThis.__NS_HMR_DISABLE_ASM__;
4
8
  // Module-scoped state to avoid leaking into globalThis
@@ -688,7 +692,7 @@ async function waitForSfcMapping(id, timeoutMs = 350) {
688
692
  if (!/\.vue$/i.test(id))
689
693
  return true;
690
694
  const base = id.split('?')[0];
691
- const srcIdx = base.indexOf('/src/');
695
+ const srcIdx = base.indexOf(APP_VIRTUAL_WITH_SLASH);
692
696
  const rel = srcIdx !== -1 ? base.slice(srcIdx) : base;
693
697
  if (sfcArtifactMap.has(rel) || sfcArtifactMap.has(base))
694
698
  return true;
@@ -707,9 +711,9 @@ export function addSfcMapping(originalPath, fileName) {
707
711
  return;
708
712
  const base = originalPath.split('?')[0];
709
713
  const norm = normalizeSpec(base);
710
- // Also derive a relative variant if under /src/ to handle lookups that slice to /src/ portion
714
+ // Also derive a relative variant if under app root to handle lookups that slice to that portion
711
715
  let rel = norm;
712
- const srcIdx = norm.indexOf('/src/');
716
+ const srcIdx = norm.indexOf(APP_VIRTUAL_WITH_SLASH);
713
717
  if (srcIdx !== -1)
714
718
  rel = norm.slice(srcIdx);
715
719
  sfcArtifactMap.set(norm, fileName);