@absolutejs/absolute 0.19.0-beta.853 → 0.19.0-beta.854

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/dist/index.js CHANGED
@@ -11683,26 +11683,7 @@ var traceAngularPhase = async (name, fn2, metadata2) => {
11683
11683
  if (existsSync17(fromNodeModules))
11684
11684
  return fromNodeModules;
11685
11685
  return resolve20(import.meta.dir, "./dev/client");
11686
- }, devClientDir4, hmrClientPath5, hmrRuntimePath, injectHMRRegistration = (content, sourceId) => {
11687
- const entityClassRegex = /(?:export\s+)?class\s+(\w+(?:Component|Service|Directive|Pipe))\s/g;
11688
- const entityNames = [];
11689
- let match;
11690
- while ((match = entityClassRegex.exec(content)) !== null) {
11691
- if (match[1])
11692
- entityNames.push(match[1]);
11693
- }
11694
- if (entityNames.length === 0)
11695
- return content;
11696
- const registrations = entityNames.map((name) => ` if (typeof ${name} === 'function') window.__ANGULAR_HMR__.register('${sourceId}#${name}', ${name});`).join(`
11697
- `);
11698
- const hmrBlock = `
11699
- // Angular HMR Runtime Layer (Level 3) \u2014 Auto-registration
11700
- if (typeof window !== 'undefined' && window.__ANGULAR_HMR__) {
11701
- ${registrations}
11702
- }
11703
- `;
11704
- return content + hmrBlock;
11705
- }, formatDiagnosticMessage = (diagnostic) => {
11686
+ }, devClientDir4, hmrClientPath5, formatDiagnosticMessage = (diagnostic) => {
11706
11687
  try {
11707
11688
  return ts2.flattenDiagnosticMessageText(diagnostic.messageText, `
11708
11689
  `);
@@ -12525,14 +12506,10 @@ export default ${componentClassName};
12525
12506
  export const __ABSOLUTE_PAGE_USES_LEGACY_ANIMATIONS__ = true;
12526
12507
  `;
12527
12508
  }
12528
- if (hmr) {
12529
- rewritten = injectHMRRegistration(rewritten, resolvedEntry);
12530
- }
12531
12509
  await traceAngularPhase("wrapper/write-server-output", () => fs.writeFile(rawServerFile, rewritten, "utf-8"), { entry: resolvedEntry });
12532
12510
  const relativePath = relative10(indexesDir, rawServerFile).replace(/\\/g, "/");
12533
12511
  const normalizedImportPath = relativePath.startsWith(".") ? relativePath : `./${relativePath}`;
12534
12512
  const hmrPreamble = hmr ? `window.__HMR_FRAMEWORK__ = "angular";
12535
- import "${hmrRuntimePath}";
12536
12513
  import "${hmrClientPath5}";
12537
12514
  ` : "";
12538
12515
  const hydration = hmr ? `${hmrPreamble}
@@ -12574,68 +12551,66 @@ var absoluteHttpTransferCacheOptions = {
12574
12551
  }
12575
12552
  };
12576
12553
 
12577
- // Re-export the page module so HMR fast-patch (in handlers/angular.ts) can
12578
- // dynamically import this chunk and discover the freshly-built component
12579
- // classes without needing a separate build artifact.
12580
- export * from '${normalizedImportPath}';
12581
-
12582
- // Record this evaluation's \`routes\` and \`providers\` exports for the
12583
- // HMR fast-patch to compare against on the next reload. If they change
12584
- // (a new route was added, a provider was edited), fast-patch falls back
12585
- // to a full re-bootstrap because those values are consumed once at
12586
- // bootstrap and won't propagate to the running router/injector via an
12587
- // in-place component patch.
12588
- if (typeof window !== 'undefined' && window.__ANGULAR_HMR__ && typeof window.__ANGULAR_HMR__.recordPageExports === 'function') {
12589
- var __abs_hmr_routes = Reflect.get(pageModule, 'routes');
12590
- window.__ANGULAR_HMR__.recordPageExports('${resolvedEntry}', __abs_hmr_routes, maybePageProviders);
12591
- }
12592
-
12593
- // Re-Bootstrap HMR with View Transitions API.
12594
- // Skipped during fast-patch: the HMR client sets
12595
- // window.__ANGULAR_HMR_FAST_PATCH__ = true before \`import()\`-ing this
12596
- // chunk so it can read the new component classes via \`export *\` above
12597
- // without destroying the running app.
12598
- if (!window.__ANGULAR_HMR_FAST_PATCH__) {
12599
- if (window.__ANGULAR_APP__) {
12600
- try { window.__ANGULAR_APP__.destroy(); } catch (_err) { /* ignore */ }
12601
- window.__ANGULAR_APP__ = null;
12602
- }
12603
-
12604
- // Ensure root element exists after destroy (Angular removes it)
12605
- var _sel = ${componentClassName}.\u0275cmp?.selectors?.[0]?.[0] || 'ng-app';
12606
- if (!document.querySelector(_sel)) {
12607
- (document.getElementById('root') || document.body).appendChild(document.createElement(_sel));
12608
- }
12609
-
12610
- var providers = [provideZonelessChangeDetection()];
12611
- if (!window.__HMR_SKIP_HYDRATION__ && !pageHasIslands) {
12612
- providers.push(provideClientHydration(withHttpTransferCacheOptions(absoluteHttpTransferCacheOptions)));
12613
- }
12614
- delete window.__HMR_SKIP_HYDRATION__;
12615
- providers.push.apply(providers, pageProviders);
12616
- providers.push.apply(providers, propProviders);
12617
- window.__ABS_SLOT_HYDRATION_PENDING__ = pageHasRawStreamingSlots;
12618
-
12619
- if (pageHasRawStreamingSlots) {
12554
+ // SURGICAL_HMR Tier 1 \u2014 Re-bootstrap hook. The dev client invokes
12555
+ // \`window.__ABS_ANGULAR_REBOOTSTRAP__()\` when it receives an
12556
+ // \`angular:rebootstrap\` WS message; the hook looks up this page's
12557
+ // freshly-built bundle URL (the rebuild already broadcast its
12558
+ // updated manifest, so window.__HMR_MANIFEST__ is current) and
12559
+ // dynamic-imports it. Re-importing the chunk re-runs the
12560
+ // destroy+bootstrap block below \u2014 no special path needed because
12561
+ // chunk eval is the bootstrap.
12562
+ window.__ABS_ANGULAR_PAGE_BUNDLE_ID__ = '${toPascal(fileBase)}Index';
12563
+ window.__ABS_ANGULAR_REBOOTSTRAP__ = async function() {
12564
+ var id = window.__ABS_ANGULAR_PAGE_BUNDLE_ID__;
12565
+ var manifest = window.__HMR_MANIFEST__ || {};
12566
+ var newUrl = manifest[id];
12567
+ if (!newUrl) {
12568
+ console.warn('[absolutejs] no bundle URL in manifest for', id, '\u2014 full reload');
12569
+ window.location.reload();
12570
+ return;
12571
+ }
12572
+ await import(newUrl + '?t=' + Date.now());
12573
+ };
12574
+
12575
+ if (window.__ANGULAR_APP__) {
12576
+ try { window.__ANGULAR_APP__.destroy(); } catch (_err) { /* ignore */ }
12577
+ window.__ANGULAR_APP__ = null;
12578
+ }
12579
+
12580
+ // Ensure root element exists after destroy (Angular removes it)
12581
+ var _sel = ${componentClassName}.\u0275cmp?.selectors?.[0]?.[0] || 'ng-app';
12582
+ if (!document.querySelector(_sel)) {
12583
+ (document.getElementById('root') || document.body).appendChild(document.createElement(_sel));
12584
+ }
12585
+
12586
+ var providers = [provideZonelessChangeDetection()];
12587
+ if (!window.__HMR_SKIP_HYDRATION__ && !pageHasIslands) {
12588
+ providers.push(provideClientHydration(withHttpTransferCacheOptions(absoluteHttpTransferCacheOptions)));
12589
+ }
12590
+ delete window.__HMR_SKIP_HYDRATION__;
12591
+ providers.push.apply(providers, pageProviders);
12592
+ providers.push.apply(providers, propProviders);
12593
+ window.__ABS_SLOT_HYDRATION_PENDING__ = pageHasRawStreamingSlots;
12594
+
12595
+ if (pageHasRawStreamingSlots) {
12596
+ window.__ABS_SLOT_HYDRATION_PENDING__ = false;
12597
+ if (typeof window.__ABS_SLOT_FLUSH__ === 'function') {
12598
+ requestAnimationFrame(function() {
12599
+ window.__ABS_SLOT_FLUSH__();
12600
+ });
12601
+ }
12602
+ } else {
12603
+ bootstrapApplication(${componentClassName}, {
12604
+ providers: providers
12605
+ }).then(function (appRef) {
12606
+ window.__ANGULAR_APP__ = appRef;
12620
12607
  window.__ABS_SLOT_HYDRATION_PENDING__ = false;
12621
12608
  if (typeof window.__ABS_SLOT_FLUSH__ === 'function') {
12622
12609
  requestAnimationFrame(function() {
12623
12610
  window.__ABS_SLOT_FLUSH__();
12624
12611
  });
12625
12612
  }
12626
- } else {
12627
- bootstrapApplication(${componentClassName}, {
12628
- providers: providers
12629
- }).then(function (appRef) {
12630
- window.__ANGULAR_APP__ = appRef;
12631
- window.__ABS_SLOT_HYDRATION_PENDING__ = false;
12632
- if (typeof window.__ABS_SLOT_FLUSH__ === 'function') {
12633
- requestAnimationFrame(function() {
12634
- window.__ABS_SLOT_FLUSH__();
12635
- });
12636
- }
12637
- });
12638
- }
12613
+ });
12639
12614
  }
12640
12615
  `.trim() : `
12641
12616
  import '@angular/compiler';
@@ -12737,7 +12712,6 @@ var init_compileAngular = __esm(() => {
12737
12712
  init_generatedDir();
12738
12713
  devClientDir4 = resolveDevClientDir4();
12739
12714
  hmrClientPath5 = join18(devClientDir4, "hmrClient.ts").replace(/\\/g, "/");
12740
- hmrRuntimePath = join18(devClientDir4, "handlers", "angularRuntime.ts").replace(/\\/g, "/");
12741
12715
  jitContentCache = new Map;
12742
12716
  wrapperOutputCache = new Map;
12743
12717
  });
@@ -16704,247 +16678,6 @@ var init_ssrCache = __esm(() => {
16704
16678
  dirtyFrameworks = new Set;
16705
16679
  });
16706
16680
 
16707
- // src/dev/angular/editTypeDetection.ts
16708
- import { readFileSync as readFileSync18 } from "fs";
16709
- import { basename as basename11 } from "path";
16710
- import * as ts3 from "typescript";
16711
- var TYPE_PRIORITY, STYLE_EXT_RE, COMPONENT_STYLE_RE, TEMPLATE_RE, COMPONENT_CLASS_RE, SERVICE_RE, ROUTES_RE, PAGE_TS_RE, SIDE_EFFECT_CALL_NAMES, SIDE_EFFECT_NEW_NAMES, getCalleeName = (node) => {
16712
- const callee = node.expression;
16713
- if (ts3.isIdentifier(callee))
16714
- return callee.text;
16715
- if (ts3.isPropertyAccessExpression(callee))
16716
- return callee.name.text;
16717
- return null;
16718
- }, getNewExprName = (node) => {
16719
- const callee = node.expression;
16720
- if (ts3.isIdentifier(callee))
16721
- return callee.text;
16722
- if (ts3.isPropertyAccessExpression(callee))
16723
- return callee.name.text;
16724
- return null;
16725
- }, collectMethodBodies = (cls) => {
16726
- const methods = new Map;
16727
- cls.members.forEach((member) => {
16728
- if (!member.name || !ts3.isIdentifier(member.name))
16729
- return;
16730
- if (ts3.isMethodDeclaration(member) && member.body) {
16731
- methods.set(member.name.text, member.body);
16732
- return;
16733
- }
16734
- if (ts3.isPropertyDeclaration(member) && member.initializer) {
16735
- const init = member.initializer;
16736
- if (ts3.isArrowFunction(init) || ts3.isFunctionExpression(init)) {
16737
- methods.set(member.name.text, init.body);
16738
- }
16739
- }
16740
- });
16741
- return methods;
16742
- }, findSideEffectInBody = (body, methods, visited) => {
16743
- let hit = { found: false };
16744
- const walk = (node) => {
16745
- if (hit.found)
16746
- return;
16747
- if (ts3.isCallExpression(node)) {
16748
- const name = getCalleeName(node);
16749
- if (name && SIDE_EFFECT_CALL_NAMES.has(name)) {
16750
- hit = {
16751
- found: true,
16752
- reason: `constructor invokes ${name}(...)`
16753
- };
16754
- return;
16755
- }
16756
- if (name && methods.has(name) && !visited.has(name)) {
16757
- visited.add(name);
16758
- const target = methods.get(name);
16759
- if (target) {
16760
- const inner = findSideEffectInBody(target, methods, visited);
16761
- if (inner.found) {
16762
- hit = {
16763
- found: true,
16764
- reason: `${inner.reason} (via this.${name}())`
16765
- };
16766
- return;
16767
- }
16768
- }
16769
- }
16770
- }
16771
- if (ts3.isNewExpression(node)) {
16772
- const name = getNewExprName(node);
16773
- if (name && SIDE_EFFECT_NEW_NAMES.has(name)) {
16774
- hit = {
16775
- found: true,
16776
- reason: `constructor instantiates new ${name}(...)`
16777
- };
16778
- return;
16779
- }
16780
- }
16781
- ts3.forEachChild(node, walk);
16782
- };
16783
- walk(body);
16784
- return hit;
16785
- }, analyzeServiceFile = (file5) => {
16786
- let source;
16787
- try {
16788
- source = readFileSync18(file5, "utf8");
16789
- } catch {
16790
- return {
16791
- hasSideEffectCtor: true,
16792
- reason: "service file unreadable \u2014 defaulting to reboot"
16793
- };
16794
- }
16795
- const sf = ts3.createSourceFile(file5, source, ts3.ScriptTarget.Latest, true);
16796
- let result = {
16797
- hasSideEffectCtor: false,
16798
- reason: "constructor has no side-effecting calls"
16799
- };
16800
- const visit = (node) => {
16801
- if (result.hasSideEffectCtor)
16802
- return;
16803
- if (!ts3.isClassDeclaration(node)) {
16804
- ts3.forEachChild(node, visit);
16805
- return;
16806
- }
16807
- const methods = collectMethodBodies(node);
16808
- const ctor = node.members.find(ts3.isConstructorDeclaration);
16809
- const targets = [];
16810
- if (ctor?.body)
16811
- targets.push(ctor.body);
16812
- node.members.forEach((member) => {
16813
- if (ts3.isPropertyDeclaration(member) && member.initializer) {
16814
- targets.push(member.initializer);
16815
- }
16816
- });
16817
- for (const target of targets) {
16818
- const r = findSideEffectInBody(target, methods, new Set);
16819
- if (r.found) {
16820
- result = { hasSideEffectCtor: true, reason: r.reason };
16821
- break;
16822
- }
16823
- }
16824
- if (!result.hasSideEffectCtor)
16825
- ts3.forEachChild(node, visit);
16826
- };
16827
- visit(sf);
16828
- return result;
16829
- }, classifyAngularEdit = (file5) => {
16830
- const base = basename11(file5);
16831
- if (TEMPLATE_RE.test(file5)) {
16832
- return {
16833
- type: "template",
16834
- reason: `${base} \u2014 template edit`,
16835
- sourceFile: file5
16836
- };
16837
- }
16838
- if (COMPONENT_STYLE_RE.test(file5)) {
16839
- return {
16840
- type: "style-component",
16841
- reason: `${base} \u2014 component-scoped stylesheet edit`,
16842
- sourceFile: file5
16843
- };
16844
- }
16845
- if (STYLE_EXT_RE.test(file5)) {
16846
- return {
16847
- type: "reboot",
16848
- reason: `${base} \u2014 non-component-named stylesheet, falling back to reboot until scoping is verified`,
16849
- sourceFile: file5
16850
- };
16851
- }
16852
- if (ROUTES_RE.test(file5)) {
16853
- return {
16854
- type: "route",
16855
- reason: `${base} \u2014 router config, requires reboot`,
16856
- sourceFile: file5
16857
- };
16858
- }
16859
- if (SERVICE_RE.test(file5)) {
16860
- const a = analyzeServiceFile(file5);
16861
- if (a.hasSideEffectCtor) {
16862
- return {
16863
- type: "service-with-side-effects",
16864
- reason: `${base} \u2014 ${a.reason}`,
16865
- sourceFile: file5
16866
- };
16867
- }
16868
- return {
16869
- type: "service-method-only",
16870
- reason: `${base} \u2014 ${a.reason}`,
16871
- sourceFile: file5
16872
- };
16873
- }
16874
- if (COMPONENT_CLASS_RE.test(file5)) {
16875
- return {
16876
- type: "class-component",
16877
- reason: `${base} \u2014 component class edit`,
16878
- sourceFile: file5
16879
- };
16880
- }
16881
- if (PAGE_TS_RE.test(file5)) {
16882
- return {
16883
- type: "class-component",
16884
- reason: `${base} \u2014 page component edit`,
16885
- sourceFile: file5
16886
- };
16887
- }
16888
- return {
16889
- type: "reboot",
16890
- reason: `${base} \u2014 unrecognized angular file type, falling back to reboot`,
16891
- sourceFile: file5
16892
- };
16893
- }, collapseClassifications = (classifications) => {
16894
- if (classifications.length === 0) {
16895
- return {
16896
- type: "reboot",
16897
- reason: "no classifiable files in batch",
16898
- sourceFile: ""
16899
- };
16900
- }
16901
- let winner = classifications[0];
16902
- for (let i = 1;i < classifications.length; i++) {
16903
- const candidate = classifications[i];
16904
- if (TYPE_PRIORITY[candidate.type] > TYPE_PRIORITY[winner.type]) {
16905
- winner = candidate;
16906
- }
16907
- }
16908
- return winner;
16909
- };
16910
- var init_editTypeDetection = __esm(() => {
16911
- TYPE_PRIORITY = {
16912
- template: 0,
16913
- "style-component": 1,
16914
- "service-method-only": 2,
16915
- "class-component": 3,
16916
- "service-with-side-effects": 4,
16917
- route: 5,
16918
- reboot: 6
16919
- };
16920
- STYLE_EXT_RE = /\.(css|scss|sass|less|styl|stylus|pcss|postcss)$/i;
16921
- COMPONENT_STYLE_RE = /\.component\.(css|scss|sass|less|styl|stylus|pcss|postcss)$/i;
16922
- TEMPLATE_RE = /\.html$/i;
16923
- COMPONENT_CLASS_RE = /\.component\.ts$/i;
16924
- SERVICE_RE = /\.service\.ts$/i;
16925
- ROUTES_RE = /(?:^|[\\/])(?:app\.)?routes\.ts$/i;
16926
- PAGE_TS_RE = /(?:^|[\\/])pages[\\/][^\\/]+\.ts$/i;
16927
- SIDE_EFFECT_CALL_NAMES = new Set([
16928
- "subscribe",
16929
- "setInterval",
16930
- "setTimeout",
16931
- "addEventListener",
16932
- "effect",
16933
- "afterNextRender",
16934
- "afterRender",
16935
- "afterEveryRender",
16936
- "requestAnimationFrame",
16937
- "requestIdleCallback"
16938
- ]);
16939
- SIDE_EFFECT_NEW_NAMES = new Set([
16940
- "Worker",
16941
- "SharedWorker",
16942
- "EventSource",
16943
- "WebSocket",
16944
- "BroadcastChannel"
16945
- ]);
16946
- });
16947
-
16948
16681
  // src/dev/moduleServer.ts
16949
16682
  var exports_moduleServer = {};
16950
16683
  __export(exports_moduleServer, {
@@ -16956,8 +16689,8 @@ __export(exports_moduleServer, {
16956
16689
  createModuleServer: () => createModuleServer,
16957
16690
  SRC_URL_PREFIX: () => SRC_URL_PREFIX
16958
16691
  });
16959
- import { existsSync as existsSync25, readFileSync as readFileSync19, statSync as statSync2 } from "fs";
16960
- import { basename as basename12, dirname as dirname17, extname as extname8, join as join28, resolve as resolve31, relative as relative12 } from "path";
16692
+ import { existsSync as existsSync25, readFileSync as readFileSync18, statSync as statSync2 } from "fs";
16693
+ import { basename as basename11, dirname as dirname17, extname as extname8, join as join28, resolve as resolve31, relative as relative12 } from "path";
16961
16694
  var SRC_PREFIX = "/@src/", jsTranspiler2, tsTranspiler2, tsxTranspiler, TRANSPILABLE, ALL_EXPORTS_RE, STRING_CONTENTS_RE, preserveTypeExports = (originalSource, transpiled, valueExports) => {
16962
16695
  const codeOnly = originalSource.replace(STRING_CONTENTS_RE, '""');
16963
16696
  const allExports = [];
@@ -17029,7 +16762,7 @@ ${stubs}
17029
16762
  const pkgDir = resolve31(projectRoot, "node_modules", packageName ?? "");
17030
16763
  const pkgJsonPath = join28(pkgDir, "package.json");
17031
16764
  if (existsSync25(pkgJsonPath)) {
17032
- const pkg = JSON.parse(readFileSync19(pkgJsonPath, "utf-8"));
16765
+ const pkg = JSON.parse(readFileSync18(pkgJsonPath, "utf-8"));
17033
16766
  const esmEntry = typeof pkg.module === "string" && pkg.module || typeof pkg.browser === "string" && pkg.browser;
17034
16767
  if (esmEntry) {
17035
16768
  const resolved = resolve31(pkgDir, esmEntry);
@@ -17128,7 +16861,7 @@ ${code}`;
17128
16861
  reactFastRefreshWarningEmitted = true;
17129
16862
  logWarn("React HMR is blocked: this Bun build ignores " + "`reactFastRefresh` on Bun.Transpiler, so component state " + "cannot be preserved across edits. Tracking " + "https://github.com/oven-sh/bun/pull/28312 \u2014 if it still has " + "not merged, leave a \uD83D\uDC4D on the PR so the Bun team knows it " + "is blocking you. Until then, React edits trigger a full " + "reload instead of a fast refresh.");
17130
16863
  }, transformReactFile = (filePath, projectRoot, rewriter) => {
17131
- const raw = readFileSync19(filePath, "utf-8");
16864
+ const raw = readFileSync18(filePath, "utf-8");
17132
16865
  const valueExports = tsxTranspiler.scan(raw).exports;
17133
16866
  let transpiled = reactTranspiler.transformSync(raw);
17134
16867
  transpiled = preserveTypeExports(raw, transpiled, valueExports);
@@ -17144,7 +16877,7 @@ ${transpiled}`;
17144
16877
  transpiled += buildIslandMetadataExports(raw);
17145
16878
  return rewriteImports(transpiled, filePath, projectRoot, rewriter);
17146
16879
  }, transformPlainFile = (filePath, projectRoot, rewriter, vueDir) => {
17147
- const raw = readFileSync19(filePath, "utf-8");
16880
+ const raw = readFileSync18(filePath, "utf-8");
17148
16881
  const ext = extname8(filePath);
17149
16882
  const isTS = ext === ".ts" || ext === ".tsx";
17150
16883
  const isTSX = ext === ".tsx" || ext === ".jsx";
@@ -17310,7 +17043,7 @@ ${code}`;
17310
17043
  ` + ` var __hmr_accept = function(cb) { window.__SVELTE_HMR_ACCEPT__[${JSON.stringify(moduleUrl)}] = cb; };`);
17311
17044
  return code.replace(/import\.meta\.hot\.accept\(/g, "__hmr_accept(");
17312
17045
  }, transformSvelteFile = async (filePath, projectRoot, rewriter, stylePreprocessors) => {
17313
- const raw = readFileSync19(filePath, "utf-8");
17046
+ const raw = readFileSync18(filePath, "utf-8");
17314
17047
  if (!svelteCompiler) {
17315
17048
  svelteCompiler = await import("svelte/compiler");
17316
17049
  }
@@ -17370,12 +17103,12 @@ export default __script__;`;
17370
17103
  return `${cssInjection}
17371
17104
  ${code}`;
17372
17105
  }, transformVueFile = async (filePath, projectRoot, rewriter, vueDir, stylePreprocessors) => {
17373
- const rawSource = readFileSync19(filePath, "utf-8");
17106
+ const rawSource = readFileSync18(filePath, "utf-8");
17374
17107
  const raw = addAutoRouterSetupApp(rawSource);
17375
17108
  if (!vueCompiler) {
17376
17109
  vueCompiler = await import("@vue/compiler-sfc");
17377
17110
  }
17378
- const fileName = basename12(filePath, ".vue");
17111
+ const fileName = basename11(filePath, ".vue");
17379
17112
  const componentId = fileName.toLowerCase();
17380
17113
  const { descriptor } = vueCompiler.parse(raw, { filename: filePath });
17381
17114
  const hasScript = descriptor.script || descriptor.scriptSetup;
@@ -17425,7 +17158,7 @@ ${code}`;
17425
17158
  }
17426
17159
  });
17427
17160
  }, handleCssRequest = (filePath) => {
17428
- const raw = readFileSync19(filePath, "utf-8");
17161
+ const raw = readFileSync18(filePath, "utf-8");
17429
17162
  const escaped = raw.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\$/g, "\\$");
17430
17163
  return [
17431
17164
  `const style = document.createElement('style');`,
@@ -17750,9 +17483,9 @@ var exports_resolveOwningComponents = {};
17750
17483
  __export(exports_resolveOwningComponents, {
17751
17484
  resolveOwningComponents: () => resolveOwningComponents
17752
17485
  });
17753
- import { readdirSync as readdirSync2, readFileSync as readFileSync20, statSync as statSync3 } from "fs";
17486
+ import { readdirSync as readdirSync2, readFileSync as readFileSync19, statSync as statSync3 } from "fs";
17754
17487
  import { dirname as dirname18, extname as extname9, join as join29, resolve as resolve32 } from "path";
17755
- import ts4 from "typescript";
17488
+ import ts3 from "typescript";
17756
17489
  var isComponentTsFile = (file5) => file5.endsWith(".component.ts") || file5.endsWith(".component.tsx"), walkComponentTsFiles = (root) => {
17757
17490
  const out = [];
17758
17491
  const visit = (dir) => {
@@ -17778,13 +17511,13 @@ var isComponentTsFile = (file5) => file5.endsWith(".component.ts") || file5.ends
17778
17511
  return out;
17779
17512
  }, getStringPropertyValue = (obj, name) => {
17780
17513
  for (const prop of obj.properties) {
17781
- if (!ts4.isPropertyAssignment(prop))
17514
+ if (!ts3.isPropertyAssignment(prop))
17782
17515
  continue;
17783
- const propName = ts4.isIdentifier(prop.name) ? prop.name.text : ts4.isStringLiteral(prop.name) ? prop.name.text : null;
17516
+ const propName = ts3.isIdentifier(prop.name) ? prop.name.text : ts3.isStringLiteral(prop.name) ? prop.name.text : null;
17784
17517
  if (propName !== name)
17785
17518
  continue;
17786
17519
  const init = prop.initializer;
17787
- if (ts4.isStringLiteral(init) || ts4.isNoSubstitutionTemplateLiteral(init)) {
17520
+ if (ts3.isStringLiteral(init) || ts3.isNoSubstitutionTemplateLiteral(init)) {
17788
17521
  return init.text;
17789
17522
  }
17790
17523
  }
@@ -17792,16 +17525,16 @@ var isComponentTsFile = (file5) => file5.endsWith(".component.ts") || file5.ends
17792
17525
  }, getStringArrayProperty = (obj, name) => {
17793
17526
  const out = [];
17794
17527
  for (const prop of obj.properties) {
17795
- if (!ts4.isPropertyAssignment(prop))
17528
+ if (!ts3.isPropertyAssignment(prop))
17796
17529
  continue;
17797
- const propName = ts4.isIdentifier(prop.name) ? prop.name.text : ts4.isStringLiteral(prop.name) ? prop.name.text : null;
17530
+ const propName = ts3.isIdentifier(prop.name) ? prop.name.text : ts3.isStringLiteral(prop.name) ? prop.name.text : null;
17798
17531
  if (propName !== name)
17799
17532
  continue;
17800
17533
  const init = prop.initializer;
17801
- if (!ts4.isArrayLiteralExpression(init))
17534
+ if (!ts3.isArrayLiteralExpression(init))
17802
17535
  continue;
17803
17536
  for (const element of init.elements) {
17804
- if (ts4.isStringLiteral(element) || ts4.isNoSubstitutionTemplateLiteral(element)) {
17537
+ if (ts3.isStringLiteral(element) || ts3.isNoSubstitutionTemplateLiteral(element)) {
17805
17538
  out.push(element.text);
17806
17539
  }
17807
17540
  }
@@ -17815,24 +17548,24 @@ var isComponentTsFile = (file5) => file5.endsWith(".component.ts") || file5.ends
17815
17548
  };
17816
17549
  let source;
17817
17550
  try {
17818
- source = readFileSync20(filePath, "utf8");
17551
+ source = readFileSync19(filePath, "utf8");
17819
17552
  } catch {
17820
17553
  return refs;
17821
17554
  }
17822
- const sourceFile = ts4.createSourceFile(filePath, source, ts4.ScriptTarget.ES2022, true, ts4.ScriptKind.TS);
17555
+ const sourceFile = ts3.createSourceFile(filePath, source, ts3.ScriptTarget.ES2022, true, ts3.ScriptKind.TS);
17823
17556
  const visit = (node) => {
17824
- if (ts4.isClassDeclaration(node) && node.name) {
17825
- const decorators = ts4.getDecorators(node) ?? [];
17557
+ if (ts3.isClassDeclaration(node) && node.name) {
17558
+ const decorators = ts3.getDecorators(node) ?? [];
17826
17559
  for (const decorator of decorators) {
17827
17560
  const expr = decorator.expression;
17828
- if (!ts4.isCallExpression(expr))
17561
+ if (!ts3.isCallExpression(expr))
17829
17562
  continue;
17830
17563
  const fn2 = expr.expression;
17831
- if (!ts4.isIdentifier(fn2) || fn2.text !== "Component")
17564
+ if (!ts3.isIdentifier(fn2) || fn2.text !== "Component")
17832
17565
  continue;
17833
17566
  refs.classNames.push(node.name.text);
17834
17567
  const arg = expr.arguments[0];
17835
- if (!arg || !ts4.isObjectLiteralExpression(arg))
17568
+ if (!arg || !ts3.isObjectLiteralExpression(arg))
17836
17569
  continue;
17837
17570
  const tplUrl = getStringPropertyValue(arg, "templateUrl");
17838
17571
  if (tplUrl)
@@ -17843,7 +17576,7 @@ var isComponentTsFile = (file5) => file5.endsWith(".component.ts") || file5.ends
17843
17576
  refs.styleUrls.push(...getStringArrayProperty(arg, "styleUrls"));
17844
17577
  }
17845
17578
  }
17846
- ts4.forEachChild(node, visit);
17579
+ ts3.forEachChild(node, visit);
17847
17580
  };
17848
17581
  visit(sourceFile);
17849
17582
  return refs;
@@ -17892,18 +17625,18 @@ var isComponentTsFile = (file5) => file5.endsWith(".component.ts") || file5.ends
17892
17625
  var init_resolveOwningComponents = () => {};
17893
17626
 
17894
17627
  // src/dev/angular/hmrImportGenerator.ts
17895
- import ts5 from "typescript";
17628
+ import ts4 from "typescript";
17896
17629
  var createHmrImportGenerator = (namespaceMap) => ({
17897
17630
  addImport(request) {
17898
17631
  const ns = namespaceMap.get(request.exportModuleSpecifier);
17899
17632
  if (!ns) {
17900
17633
  throw new Error(`HMR import generator has no namespace mapping for ${request.exportModuleSpecifier}. ` + `Add it to namespaceDependencies before calling compileHmrUpdateCallback.`);
17901
17634
  }
17902
- const namespaceId = ts5.factory.createIdentifier(ns);
17635
+ const namespaceId = ts4.factory.createIdentifier(ns);
17903
17636
  if (request.exportSymbolName === null) {
17904
17637
  return namespaceId;
17905
17638
  }
17906
- return ts5.factory.createPropertyAccessExpression(namespaceId, ts5.factory.createIdentifier(request.exportSymbolName));
17639
+ return ts4.factory.createPropertyAccessExpression(namespaceId, ts4.factory.createIdentifier(request.exportSymbolName));
17907
17640
  }
17908
17641
  });
17909
17642
  var init_hmrImportGenerator = () => {};
@@ -18245,13 +17978,13 @@ var init_translator = __esm(() => {
18245
17978
  });
18246
17979
 
18247
17980
  // src/dev/angular/vendor/translator/ts_util.ts
18248
- import ts6 from "typescript";
17981
+ import ts5 from "typescript";
18249
17982
  function tsNumericExpression(value) {
18250
17983
  if (value < 0) {
18251
- const operand = ts6.factory.createNumericLiteral(Math.abs(value));
18252
- return ts6.factory.createPrefixUnaryExpression(ts6.SyntaxKind.MinusToken, operand);
17984
+ const operand = ts5.factory.createNumericLiteral(Math.abs(value));
17985
+ return ts5.factory.createPrefixUnaryExpression(ts5.SyntaxKind.MinusToken, operand);
18253
17986
  }
18254
- return ts6.factory.createNumericLiteral(value);
17987
+ return ts5.factory.createNumericLiteral(value);
18255
17988
  }
18256
17989
  var init_ts_util = __esm(() => {
18257
17990
  /*!
@@ -18264,147 +17997,147 @@ var init_ts_util = __esm(() => {
18264
17997
  });
18265
17998
 
18266
17999
  // src/dev/angular/vendor/translator/typescript_ast_factory.ts
18267
- import ts7 from "typescript";
18000
+ import ts6 from "typescript";
18268
18001
 
18269
18002
  class TypeScriptAstFactory {
18270
18003
  annotateForClosureCompiler;
18271
18004
  externalSourceFiles = new Map;
18272
18005
  UNARY_OPERATORS = /* @__PURE__ */ (() => ({
18273
- "+": ts7.SyntaxKind.PlusToken,
18274
- "-": ts7.SyntaxKind.MinusToken,
18275
- "!": ts7.SyntaxKind.ExclamationToken
18006
+ "+": ts6.SyntaxKind.PlusToken,
18007
+ "-": ts6.SyntaxKind.MinusToken,
18008
+ "!": ts6.SyntaxKind.ExclamationToken
18276
18009
  }))();
18277
18010
  BINARY_OPERATORS = /* @__PURE__ */ (() => ({
18278
- "&&": ts7.SyntaxKind.AmpersandAmpersandToken,
18279
- ">": ts7.SyntaxKind.GreaterThanToken,
18280
- ">=": ts7.SyntaxKind.GreaterThanEqualsToken,
18281
- "&": ts7.SyntaxKind.AmpersandToken,
18282
- "|": ts7.SyntaxKind.BarToken,
18283
- "/": ts7.SyntaxKind.SlashToken,
18284
- "==": ts7.SyntaxKind.EqualsEqualsToken,
18285
- "===": ts7.SyntaxKind.EqualsEqualsEqualsToken,
18286
- "<": ts7.SyntaxKind.LessThanToken,
18287
- "<=": ts7.SyntaxKind.LessThanEqualsToken,
18288
- "-": ts7.SyntaxKind.MinusToken,
18289
- "%": ts7.SyntaxKind.PercentToken,
18290
- "*": ts7.SyntaxKind.AsteriskToken,
18291
- "**": ts7.SyntaxKind.AsteriskAsteriskToken,
18292
- "!=": ts7.SyntaxKind.ExclamationEqualsToken,
18293
- "!==": ts7.SyntaxKind.ExclamationEqualsEqualsToken,
18294
- "||": ts7.SyntaxKind.BarBarToken,
18295
- "+": ts7.SyntaxKind.PlusToken,
18296
- "??": ts7.SyntaxKind.QuestionQuestionToken,
18297
- "=": ts7.SyntaxKind.EqualsToken,
18298
- "+=": ts7.SyntaxKind.PlusEqualsToken,
18299
- "-=": ts7.SyntaxKind.MinusEqualsToken,
18300
- "*=": ts7.SyntaxKind.AsteriskEqualsToken,
18301
- "/=": ts7.SyntaxKind.SlashEqualsToken,
18302
- "%=": ts7.SyntaxKind.PercentEqualsToken,
18303
- "**=": ts7.SyntaxKind.AsteriskAsteriskEqualsToken,
18304
- "&&=": ts7.SyntaxKind.AmpersandAmpersandEqualsToken,
18305
- "||=": ts7.SyntaxKind.BarBarEqualsToken,
18306
- "??=": ts7.SyntaxKind.QuestionQuestionEqualsToken,
18307
- in: ts7.SyntaxKind.InKeyword,
18308
- instanceof: ts7.SyntaxKind.InstanceOfKeyword
18011
+ "&&": ts6.SyntaxKind.AmpersandAmpersandToken,
18012
+ ">": ts6.SyntaxKind.GreaterThanToken,
18013
+ ">=": ts6.SyntaxKind.GreaterThanEqualsToken,
18014
+ "&": ts6.SyntaxKind.AmpersandToken,
18015
+ "|": ts6.SyntaxKind.BarToken,
18016
+ "/": ts6.SyntaxKind.SlashToken,
18017
+ "==": ts6.SyntaxKind.EqualsEqualsToken,
18018
+ "===": ts6.SyntaxKind.EqualsEqualsEqualsToken,
18019
+ "<": ts6.SyntaxKind.LessThanToken,
18020
+ "<=": ts6.SyntaxKind.LessThanEqualsToken,
18021
+ "-": ts6.SyntaxKind.MinusToken,
18022
+ "%": ts6.SyntaxKind.PercentToken,
18023
+ "*": ts6.SyntaxKind.AsteriskToken,
18024
+ "**": ts6.SyntaxKind.AsteriskAsteriskToken,
18025
+ "!=": ts6.SyntaxKind.ExclamationEqualsToken,
18026
+ "!==": ts6.SyntaxKind.ExclamationEqualsEqualsToken,
18027
+ "||": ts6.SyntaxKind.BarBarToken,
18028
+ "+": ts6.SyntaxKind.PlusToken,
18029
+ "??": ts6.SyntaxKind.QuestionQuestionToken,
18030
+ "=": ts6.SyntaxKind.EqualsToken,
18031
+ "+=": ts6.SyntaxKind.PlusEqualsToken,
18032
+ "-=": ts6.SyntaxKind.MinusEqualsToken,
18033
+ "*=": ts6.SyntaxKind.AsteriskEqualsToken,
18034
+ "/=": ts6.SyntaxKind.SlashEqualsToken,
18035
+ "%=": ts6.SyntaxKind.PercentEqualsToken,
18036
+ "**=": ts6.SyntaxKind.AsteriskAsteriskEqualsToken,
18037
+ "&&=": ts6.SyntaxKind.AmpersandAmpersandEqualsToken,
18038
+ "||=": ts6.SyntaxKind.BarBarEqualsToken,
18039
+ "??=": ts6.SyntaxKind.QuestionQuestionEqualsToken,
18040
+ in: ts6.SyntaxKind.InKeyword,
18041
+ instanceof: ts6.SyntaxKind.InstanceOfKeyword
18309
18042
  }))();
18310
18043
  VAR_TYPES = /* @__PURE__ */ (() => ({
18311
- const: ts7.NodeFlags.Const,
18312
- let: ts7.NodeFlags.Let,
18313
- var: ts7.NodeFlags.None
18044
+ const: ts6.NodeFlags.Const,
18045
+ let: ts6.NodeFlags.Let,
18046
+ var: ts6.NodeFlags.None
18314
18047
  }))();
18315
18048
  constructor(annotateForClosureCompiler) {
18316
18049
  this.annotateForClosureCompiler = annotateForClosureCompiler;
18317
18050
  }
18318
18051
  attachComments = attachComments;
18319
- createArrayLiteral = ts7.factory.createArrayLiteralExpression;
18052
+ createArrayLiteral = ts6.factory.createArrayLiteralExpression;
18320
18053
  createAssignment(target, operator, value) {
18321
- return ts7.factory.createBinaryExpression(target, this.BINARY_OPERATORS[operator], value);
18054
+ return ts6.factory.createBinaryExpression(target, this.BINARY_OPERATORS[operator], value);
18322
18055
  }
18323
18056
  createBinaryExpression(leftOperand, operator, rightOperand) {
18324
- return ts7.factory.createBinaryExpression(leftOperand, this.BINARY_OPERATORS[operator], rightOperand);
18057
+ return ts6.factory.createBinaryExpression(leftOperand, this.BINARY_OPERATORS[operator], rightOperand);
18325
18058
  }
18326
18059
  createBlock(body) {
18327
- return ts7.factory.createBlock(body);
18060
+ return ts6.factory.createBlock(body);
18328
18061
  }
18329
18062
  createCallExpression(callee, args, pure) {
18330
- const call = ts7.factory.createCallExpression(callee, undefined, args);
18063
+ const call = ts6.factory.createCallExpression(callee, undefined, args);
18331
18064
  if (pure) {
18332
- ts7.addSyntheticLeadingComment(call, ts7.SyntaxKind.MultiLineCommentTrivia, this.annotateForClosureCompiler ? "* @pureOrBreakMyCode " /* CLOSURE */ : "@__PURE__" /* TERSER */, false);
18065
+ ts6.addSyntheticLeadingComment(call, ts6.SyntaxKind.MultiLineCommentTrivia, this.annotateForClosureCompiler ? "* @pureOrBreakMyCode " /* CLOSURE */ : "@__PURE__" /* TERSER */, false);
18333
18066
  }
18334
18067
  return call;
18335
18068
  }
18336
18069
  createConditional(condition, whenTrue, whenFalse) {
18337
- return ts7.factory.createConditionalExpression(condition, undefined, whenTrue, undefined, whenFalse);
18070
+ return ts6.factory.createConditionalExpression(condition, undefined, whenTrue, undefined, whenFalse);
18338
18071
  }
18339
- createElementAccess = ts7.factory.createElementAccessExpression;
18340
- createExpressionStatement = ts7.factory.createExpressionStatement;
18072
+ createElementAccess = ts6.factory.createElementAccessExpression;
18073
+ createExpressionStatement = ts6.factory.createExpressionStatement;
18341
18074
  createDynamicImport(url) {
18342
- return ts7.factory.createCallExpression(ts7.factory.createToken(ts7.SyntaxKind.ImportKeyword), undefined, [typeof url === "string" ? ts7.factory.createStringLiteral(url) : url]);
18075
+ return ts6.factory.createCallExpression(ts6.factory.createToken(ts6.SyntaxKind.ImportKeyword), undefined, [typeof url === "string" ? ts6.factory.createStringLiteral(url) : url]);
18343
18076
  }
18344
18077
  createFunctionDeclaration(functionName, parameters, body) {
18345
- if (!ts7.isBlock(body)) {
18346
- throw new Error(`Invalid syntax, expected a block, but got ${ts7.SyntaxKind[body.kind]}.`);
18078
+ if (!ts6.isBlock(body)) {
18079
+ throw new Error(`Invalid syntax, expected a block, but got ${ts6.SyntaxKind[body.kind]}.`);
18347
18080
  }
18348
- return ts7.factory.createFunctionDeclaration(undefined, undefined, functionName, undefined, parameters.map((param) => this.createParameter(param)), undefined, body);
18081
+ return ts6.factory.createFunctionDeclaration(undefined, undefined, functionName, undefined, parameters.map((param) => this.createParameter(param)), undefined, body);
18349
18082
  }
18350
18083
  createFunctionExpression(functionName, parameters, body) {
18351
- if (!ts7.isBlock(body)) {
18352
- throw new Error(`Invalid syntax, expected a block, but got ${ts7.SyntaxKind[body.kind]}.`);
18084
+ if (!ts6.isBlock(body)) {
18085
+ throw new Error(`Invalid syntax, expected a block, but got ${ts6.SyntaxKind[body.kind]}.`);
18353
18086
  }
18354
- return ts7.factory.createFunctionExpression(undefined, undefined, functionName ?? undefined, undefined, parameters.map((param) => this.createParameter(param)), undefined, body);
18087
+ return ts6.factory.createFunctionExpression(undefined, undefined, functionName ?? undefined, undefined, parameters.map((param) => this.createParameter(param)), undefined, body);
18355
18088
  }
18356
18089
  createArrowFunctionExpression(parameters, body) {
18357
- if (ts7.isStatement(body) && !ts7.isBlock(body)) {
18358
- throw new Error(`Invalid syntax, expected a block, but got ${ts7.SyntaxKind[body.kind]}.`);
18090
+ if (ts6.isStatement(body) && !ts6.isBlock(body)) {
18091
+ throw new Error(`Invalid syntax, expected a block, but got ${ts6.SyntaxKind[body.kind]}.`);
18359
18092
  }
18360
- return ts7.factory.createArrowFunction(undefined, undefined, parameters.map((param) => this.createParameter(param)), undefined, undefined, body);
18093
+ return ts6.factory.createArrowFunction(undefined, undefined, parameters.map((param) => this.createParameter(param)), undefined, undefined, body);
18361
18094
  }
18362
18095
  createParameter(param) {
18363
- return ts7.factory.createParameterDeclaration(undefined, undefined, param.name, undefined, param.type ?? undefined);
18096
+ return ts6.factory.createParameterDeclaration(undefined, undefined, param.name, undefined, param.type ?? undefined);
18364
18097
  }
18365
- createIdentifier = ts7.factory.createIdentifier;
18098
+ createIdentifier = ts6.factory.createIdentifier;
18366
18099
  createIfStatement(condition, thenStatement, elseStatement) {
18367
- return ts7.factory.createIfStatement(condition, thenStatement, elseStatement ?? undefined);
18100
+ return ts6.factory.createIfStatement(condition, thenStatement, elseStatement ?? undefined);
18368
18101
  }
18369
18102
  createLiteral(value) {
18370
18103
  if (value === undefined) {
18371
- return ts7.factory.createIdentifier("undefined");
18104
+ return ts6.factory.createIdentifier("undefined");
18372
18105
  } else if (value === null) {
18373
- return ts7.factory.createNull();
18106
+ return ts6.factory.createNull();
18374
18107
  } else if (typeof value === "boolean") {
18375
- return value ? ts7.factory.createTrue() : ts7.factory.createFalse();
18108
+ return value ? ts6.factory.createTrue() : ts6.factory.createFalse();
18376
18109
  } else if (typeof value === "number") {
18377
18110
  return tsNumericExpression(value);
18378
18111
  } else {
18379
- return ts7.factory.createStringLiteral(value);
18112
+ return ts6.factory.createStringLiteral(value);
18380
18113
  }
18381
18114
  }
18382
18115
  createNewExpression(expression, args) {
18383
- return ts7.factory.createNewExpression(expression, undefined, args);
18116
+ return ts6.factory.createNewExpression(expression, undefined, args);
18384
18117
  }
18385
18118
  createObjectLiteral(properties) {
18386
- return ts7.factory.createObjectLiteralExpression(properties.map((prop) => {
18119
+ return ts6.factory.createObjectLiteralExpression(properties.map((prop) => {
18387
18120
  if (prop.kind === "spread") {
18388
- return ts7.factory.createSpreadAssignment(prop.expression);
18121
+ return ts6.factory.createSpreadAssignment(prop.expression);
18389
18122
  }
18390
- return ts7.factory.createPropertyAssignment(prop.quoted ? ts7.factory.createStringLiteral(prop.propertyName) : ts7.factory.createIdentifier(prop.propertyName), prop.value);
18123
+ return ts6.factory.createPropertyAssignment(prop.quoted ? ts6.factory.createStringLiteral(prop.propertyName) : ts6.factory.createIdentifier(prop.propertyName), prop.value);
18391
18124
  }));
18392
18125
  }
18393
- createParenthesizedExpression = ts7.factory.createParenthesizedExpression;
18394
- createPropertyAccess = ts7.factory.createPropertyAccessExpression;
18395
- createSpreadElement = ts7.factory.createSpreadElement;
18126
+ createParenthesizedExpression = ts6.factory.createParenthesizedExpression;
18127
+ createPropertyAccess = ts6.factory.createPropertyAccessExpression;
18128
+ createSpreadElement = ts6.factory.createSpreadElement;
18396
18129
  createReturnStatement(expression) {
18397
- return ts7.factory.createReturnStatement(expression ?? undefined);
18130
+ return ts6.factory.createReturnStatement(expression ?? undefined);
18398
18131
  }
18399
18132
  createTaggedTemplate(tag, template) {
18400
- return ts7.factory.createTaggedTemplateExpression(tag, undefined, this.createTemplateLiteral(template));
18133
+ return ts6.factory.createTaggedTemplateExpression(tag, undefined, this.createTemplateLiteral(template));
18401
18134
  }
18402
18135
  createTemplateLiteral(template) {
18403
18136
  let templateLiteral;
18404
18137
  const length = template.elements.length;
18405
18138
  const head = template.elements[0];
18406
18139
  if (length === 1) {
18407
- templateLiteral = ts7.factory.createNoSubstitutionTemplateLiteral(head.cooked, head.raw);
18140
+ templateLiteral = ts6.factory.createNoSubstitutionTemplateLiteral(head.cooked, head.raw);
18408
18141
  } else {
18409
18142
  const spans = [];
18410
18143
  for (let i = 1;i < length - 1; i++) {
@@ -18413,7 +18146,7 @@ class TypeScriptAstFactory {
18413
18146
  if (range !== null) {
18414
18147
  this.setSourceMapRange(middle, range);
18415
18148
  }
18416
- spans.push(ts7.factory.createTemplateSpan(template.expressions[i - 1], middle));
18149
+ spans.push(ts6.factory.createTemplateSpan(template.expressions[i - 1], middle));
18417
18150
  }
18418
18151
  const resolvedExpression = template.expressions[length - 2];
18419
18152
  const templatePart = template.elements[length - 1];
@@ -18421,27 +18154,27 @@ class TypeScriptAstFactory {
18421
18154
  if (templatePart.range !== null) {
18422
18155
  this.setSourceMapRange(templateTail, templatePart.range);
18423
18156
  }
18424
- spans.push(ts7.factory.createTemplateSpan(resolvedExpression, templateTail));
18425
- templateLiteral = ts7.factory.createTemplateExpression(ts7.factory.createTemplateHead(head.cooked, head.raw), spans);
18157
+ spans.push(ts6.factory.createTemplateSpan(resolvedExpression, templateTail));
18158
+ templateLiteral = ts6.factory.createTemplateExpression(ts6.factory.createTemplateHead(head.cooked, head.raw), spans);
18426
18159
  }
18427
18160
  if (head.range !== null) {
18428
18161
  this.setSourceMapRange(templateLiteral, head.range);
18429
18162
  }
18430
18163
  return templateLiteral;
18431
18164
  }
18432
- createThrowStatement = ts7.factory.createThrowStatement;
18433
- createTypeOfExpression = ts7.factory.createTypeOfExpression;
18434
- createVoidExpression = ts7.factory.createVoidExpression;
18165
+ createThrowStatement = ts6.factory.createThrowStatement;
18166
+ createTypeOfExpression = ts6.factory.createTypeOfExpression;
18167
+ createVoidExpression = ts6.factory.createVoidExpression;
18435
18168
  createUnaryExpression(operator, operand) {
18436
- return ts7.factory.createPrefixUnaryExpression(this.UNARY_OPERATORS[operator], operand);
18169
+ return ts6.factory.createPrefixUnaryExpression(this.UNARY_OPERATORS[operator], operand);
18437
18170
  }
18438
18171
  createVariableDeclaration(variableName, initializer, variableType, type) {
18439
- return ts7.factory.createVariableStatement(undefined, ts7.factory.createVariableDeclarationList([
18440
- ts7.factory.createVariableDeclaration(variableName, undefined, type ?? undefined, initializer ?? undefined)
18172
+ return ts6.factory.createVariableStatement(undefined, ts6.factory.createVariableDeclarationList([
18173
+ ts6.factory.createVariableDeclaration(variableName, undefined, type ?? undefined, initializer ?? undefined)
18441
18174
  ], this.VAR_TYPES[variableType]));
18442
18175
  }
18443
18176
  createRegularExpressionLiteral(body, flags) {
18444
- return ts7.factory.createRegularExpressionLiteral(`/${body}/${flags ?? ""}`);
18177
+ return ts6.factory.createRegularExpressionLiteral(`/${body}/${flags ?? ""}`);
18445
18178
  }
18446
18179
  setSourceMapRange(node, sourceMapRange) {
18447
18180
  if (sourceMapRange === null) {
@@ -18449,10 +18182,10 @@ class TypeScriptAstFactory {
18449
18182
  }
18450
18183
  const url = sourceMapRange.url;
18451
18184
  if (!this.externalSourceFiles.has(url)) {
18452
- this.externalSourceFiles.set(url, ts7.createSourceMapSource(url, sourceMapRange.content, (pos) => pos));
18185
+ this.externalSourceFiles.set(url, ts6.createSourceMapSource(url, sourceMapRange.content, (pos) => pos));
18453
18186
  }
18454
18187
  const source = this.externalSourceFiles.get(url);
18455
- ts7.setSourceMapRange(node, {
18188
+ ts6.setSourceMapRange(node, {
18456
18189
  pos: sourceMapRange.start.offset,
18457
18190
  end: sourceMapRange.end.offset,
18458
18191
  source
@@ -18462,77 +18195,77 @@ class TypeScriptAstFactory {
18462
18195
  createBuiltInType(type) {
18463
18196
  switch (type) {
18464
18197
  case "any":
18465
- return ts7.factory.createKeywordTypeNode(ts7.SyntaxKind.AnyKeyword);
18198
+ return ts6.factory.createKeywordTypeNode(ts6.SyntaxKind.AnyKeyword);
18466
18199
  case "boolean":
18467
- return ts7.factory.createKeywordTypeNode(ts7.SyntaxKind.BooleanKeyword);
18200
+ return ts6.factory.createKeywordTypeNode(ts6.SyntaxKind.BooleanKeyword);
18468
18201
  case "number":
18469
- return ts7.factory.createKeywordTypeNode(ts7.SyntaxKind.NumberKeyword);
18202
+ return ts6.factory.createKeywordTypeNode(ts6.SyntaxKind.NumberKeyword);
18470
18203
  case "string":
18471
- return ts7.factory.createKeywordTypeNode(ts7.SyntaxKind.StringKeyword);
18204
+ return ts6.factory.createKeywordTypeNode(ts6.SyntaxKind.StringKeyword);
18472
18205
  case "function":
18473
- return ts7.factory.createTypeReferenceNode(ts7.factory.createIdentifier("Function"));
18206
+ return ts6.factory.createTypeReferenceNode(ts6.factory.createIdentifier("Function"));
18474
18207
  case "never":
18475
- return ts7.factory.createKeywordTypeNode(ts7.SyntaxKind.NeverKeyword);
18208
+ return ts6.factory.createKeywordTypeNode(ts6.SyntaxKind.NeverKeyword);
18476
18209
  case "unknown":
18477
- return ts7.factory.createKeywordTypeNode(ts7.SyntaxKind.UnknownKeyword);
18210
+ return ts6.factory.createKeywordTypeNode(ts6.SyntaxKind.UnknownKeyword);
18478
18211
  }
18479
18212
  }
18480
18213
  createExpressionType(expression, typeParams) {
18481
18214
  const typeName = getEntityTypeFromExpression(expression);
18482
- return ts7.factory.createTypeReferenceNode(typeName, typeParams ?? undefined);
18215
+ return ts6.factory.createTypeReferenceNode(typeName, typeParams ?? undefined);
18483
18216
  }
18484
18217
  createArrayType(elementType) {
18485
- return ts7.factory.createArrayTypeNode(elementType);
18218
+ return ts6.factory.createArrayTypeNode(elementType);
18486
18219
  }
18487
18220
  createMapType(valueType) {
18488
- return ts7.factory.createTypeLiteralNode([
18489
- ts7.factory.createIndexSignature(undefined, [
18490
- ts7.factory.createParameterDeclaration(undefined, undefined, "key", undefined, ts7.factory.createKeywordTypeNode(ts7.SyntaxKind.StringKeyword))
18221
+ return ts6.factory.createTypeLiteralNode([
18222
+ ts6.factory.createIndexSignature(undefined, [
18223
+ ts6.factory.createParameterDeclaration(undefined, undefined, "key", undefined, ts6.factory.createKeywordTypeNode(ts6.SyntaxKind.StringKeyword))
18491
18224
  ], valueType)
18492
18225
  ]);
18493
18226
  }
18494
18227
  transplantType(type) {
18495
- if (typeof type.kind === "number" && typeof type.getSourceFile === "function" && ts7.isTypeNode(type)) {
18228
+ if (typeof type.kind === "number" && typeof type.getSourceFile === "function" && ts6.isTypeNode(type)) {
18496
18229
  return type;
18497
18230
  }
18498
18231
  throw new Error("Attempting to transplant a type node from a non-TypeScript AST: " + type);
18499
18232
  }
18500
18233
  }
18501
18234
  function createTemplateMiddle(cooked, raw) {
18502
- const node = ts7.factory.createTemplateHead(cooked, raw);
18503
- node.kind = ts7.SyntaxKind.TemplateMiddle;
18235
+ const node = ts6.factory.createTemplateHead(cooked, raw);
18236
+ node.kind = ts6.SyntaxKind.TemplateMiddle;
18504
18237
  return node;
18505
18238
  }
18506
18239
  function createTemplateTail(cooked, raw) {
18507
- const node = ts7.factory.createTemplateHead(cooked, raw);
18508
- node.kind = ts7.SyntaxKind.TemplateTail;
18240
+ const node = ts6.factory.createTemplateHead(cooked, raw);
18241
+ node.kind = ts6.SyntaxKind.TemplateTail;
18509
18242
  return node;
18510
18243
  }
18511
18244
  function attachComments(statement, leadingComments) {
18512
18245
  for (const comment of leadingComments) {
18513
- const commentKind = comment.multiline ? ts7.SyntaxKind.MultiLineCommentTrivia : ts7.SyntaxKind.SingleLineCommentTrivia;
18246
+ const commentKind = comment.multiline ? ts6.SyntaxKind.MultiLineCommentTrivia : ts6.SyntaxKind.SingleLineCommentTrivia;
18514
18247
  if (comment.multiline) {
18515
- ts7.addSyntheticLeadingComment(statement, commentKind, comment.toString(), comment.trailingNewline);
18248
+ ts6.addSyntheticLeadingComment(statement, commentKind, comment.toString(), comment.trailingNewline);
18516
18249
  } else {
18517
18250
  for (const line of comment.toString().split(`
18518
18251
  `)) {
18519
- ts7.addSyntheticLeadingComment(statement, commentKind, line, comment.trailingNewline);
18252
+ ts6.addSyntheticLeadingComment(statement, commentKind, line, comment.trailingNewline);
18520
18253
  }
18521
18254
  }
18522
18255
  }
18523
18256
  }
18524
18257
  function getEntityTypeFromExpression(expression) {
18525
- if (ts7.isIdentifier(expression)) {
18258
+ if (ts6.isIdentifier(expression)) {
18526
18259
  return expression;
18527
18260
  }
18528
- if (ts7.isPropertyAccessExpression(expression)) {
18261
+ if (ts6.isPropertyAccessExpression(expression)) {
18529
18262
  const left = getEntityTypeFromExpression(expression.expression);
18530
- if (!ts7.isIdentifier(expression.name)) {
18263
+ if (!ts6.isIdentifier(expression.name)) {
18531
18264
  throw new Error(`Unsupported property access for type reference: ${expression.name.text}`);
18532
18265
  }
18533
- return ts7.factory.createQualifiedName(left, expression.name);
18266
+ return ts6.factory.createQualifiedName(left, expression.name);
18534
18267
  }
18535
- throw new Error(`Unsupported expression for type reference: ${ts7.SyntaxKind[expression.kind]}`);
18268
+ throw new Error(`Unsupported expression for type reference: ${ts6.SyntaxKind[expression.kind]}`);
18536
18269
  }
18537
18270
  var init_typescript_ast_factory = __esm(() => {
18538
18271
  init_ts_util();
@@ -18548,31 +18281,73 @@ var init_typescript_translator = __esm(() => {
18548
18281
  });
18549
18282
 
18550
18283
  // src/dev/angular/fastHmrCompiler.ts
18551
- import { existsSync as existsSync26, readFileSync as readFileSync21 } from "fs";
18284
+ var exports_fastHmrCompiler = {};
18285
+ __export(exports_fastHmrCompiler, {
18286
+ tryFastHmr: () => tryFastHmr,
18287
+ recordFingerprint: () => recordFingerprint,
18288
+ invalidateFingerprintCache: () => invalidateFingerprintCache
18289
+ });
18290
+ import { existsSync as existsSync26, readFileSync as readFileSync20 } from "fs";
18552
18291
  import { dirname as dirname19, relative as relative13, resolve as resolve33 } from "path";
18553
- import ts8 from "typescript";
18554
- var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclaration = (sourceFile, className) => {
18292
+ import ts7 from "typescript";
18293
+ var fail = (reason, detail) => ({ ok: false, reason, detail }), fingerprintCache, fingerprintsEqual = (a, b2) => {
18294
+ if (a.className !== b2.className)
18295
+ return false;
18296
+ if (a.selector !== b2.selector)
18297
+ return false;
18298
+ if (a.standalone !== b2.standalone)
18299
+ return false;
18300
+ if (a.importsArity !== b2.importsArity)
18301
+ return false;
18302
+ if (a.hasProviders !== b2.hasProviders)
18303
+ return false;
18304
+ if (a.hasViewProviders !== b2.hasViewProviders)
18305
+ return false;
18306
+ if (a.ctorParamTypes.length !== b2.ctorParamTypes.length)
18307
+ return false;
18308
+ for (let i = 0;i < a.ctorParamTypes.length; i++) {
18309
+ if (a.ctorParamTypes[i] !== b2.ctorParamTypes[i])
18310
+ return false;
18311
+ }
18312
+ if (a.inputs.length !== b2.inputs.length)
18313
+ return false;
18314
+ for (let i = 0;i < a.inputs.length; i++) {
18315
+ if (a.inputs[i] !== b2.inputs[i])
18316
+ return false;
18317
+ }
18318
+ if (a.outputs.length !== b2.outputs.length)
18319
+ return false;
18320
+ for (let i = 0;i < a.outputs.length; i++) {
18321
+ if (a.outputs[i] !== b2.outputs[i])
18322
+ return false;
18323
+ }
18324
+ return true;
18325
+ }, recordFingerprint = (id, fp) => {
18326
+ fingerprintCache.set(id, fp);
18327
+ }, invalidateFingerprintCache = () => {
18328
+ fingerprintCache.clear();
18329
+ }, findClassDeclaration = (sourceFile, className) => {
18555
18330
  let found = null;
18556
18331
  const walk = (node) => {
18557
18332
  if (found)
18558
18333
  return;
18559
- if (ts8.isClassDeclaration(node) && node.name?.text === className) {
18334
+ if (ts7.isClassDeclaration(node) && node.name?.text === className) {
18560
18335
  found = node;
18561
18336
  return;
18562
18337
  }
18563
- ts8.forEachChild(node, walk);
18338
+ ts7.forEachChild(node, walk);
18564
18339
  };
18565
18340
  walk(sourceFile);
18566
18341
  return found;
18567
18342
  }, getClassDecorators = (cls) => {
18568
- const modifiers = ts8.getDecorators(cls) ?? [];
18343
+ const modifiers = ts7.getDecorators(cls) ?? [];
18569
18344
  return [...modifiers];
18570
18345
  }, findComponentDecorator = (cls) => {
18571
18346
  for (const decorator of getClassDecorators(cls)) {
18572
18347
  const expr = decorator.expression;
18573
- if (ts8.isCallExpression(expr)) {
18348
+ if (ts7.isCallExpression(expr)) {
18574
18349
  const fn2 = expr.expression;
18575
- if (ts8.isIdentifier(fn2) && fn2.text === "Component") {
18350
+ if (ts7.isIdentifier(fn2) && fn2.text === "Component") {
18576
18351
  return decorator;
18577
18352
  }
18578
18353
  }
@@ -18580,15 +18355,15 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18580
18355
  return null;
18581
18356
  }, getDecoratorArgsObject = (decorator) => {
18582
18357
  const call = decorator.expression;
18583
- if (!ts8.isCallExpression(call))
18358
+ if (!ts7.isCallExpression(call))
18584
18359
  return null;
18585
18360
  const arg = call.arguments[0];
18586
- if (!arg || !ts8.isObjectLiteralExpression(arg))
18361
+ if (!arg || !ts7.isObjectLiteralExpression(arg))
18587
18362
  return null;
18588
18363
  return arg;
18589
18364
  }, getProperty = (obj, name) => {
18590
18365
  for (const prop of obj.properties) {
18591
- if (ts8.isPropertyAssignment(prop) && (ts8.isIdentifier(prop.name) && prop.name.text === name || ts8.isStringLiteral(prop.name) && prop.name.text === name)) {
18366
+ if (ts7.isPropertyAssignment(prop) && (ts7.isIdentifier(prop.name) && prop.name.text === name || ts7.isStringLiteral(prop.name) && prop.name.text === name)) {
18592
18367
  return prop.initializer;
18593
18368
  }
18594
18369
  }
@@ -18597,7 +18372,7 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18597
18372
  const expr = getProperty(obj, name);
18598
18373
  if (!expr)
18599
18374
  return null;
18600
- if (ts8.isStringLiteral(expr) || ts8.isNoSubstitutionTemplateLiteral(expr)) {
18375
+ if (ts7.isStringLiteral(expr) || ts7.isNoSubstitutionTemplateLiteral(expr)) {
18601
18376
  return expr.text;
18602
18377
  }
18603
18378
  return null;
@@ -18605,15 +18380,15 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18605
18380
  const expr = getProperty(obj, name);
18606
18381
  if (!expr)
18607
18382
  return null;
18608
- if (expr.kind === ts8.SyntaxKind.TrueKeyword)
18383
+ if (expr.kind === ts7.SyntaxKind.TrueKeyword)
18609
18384
  return true;
18610
- if (expr.kind === ts8.SyntaxKind.FalseKeyword)
18385
+ if (expr.kind === ts7.SyntaxKind.FalseKeyword)
18611
18386
  return false;
18612
18387
  return null;
18613
18388
  }, inheritsDecoratedClass = (cls) => {
18614
18389
  const heritage = cls.heritageClauses ?? [];
18615
18390
  for (const clause of heritage) {
18616
- if (clause.token !== ts8.SyntaxKind.ExtendsKeyword)
18391
+ if (clause.token !== ts7.SyntaxKind.ExtendsKeyword)
18617
18392
  continue;
18618
18393
  if (clause.types.length > 0)
18619
18394
  return true;
@@ -18624,52 +18399,54 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18624
18399
  const stylesExpr = getProperty(args, "styles");
18625
18400
  const importsExpr = getProperty(args, "imports");
18626
18401
  const styleUrls = [];
18627
- if (styleUrlsExpr && ts8.isArrayLiteralExpression(styleUrlsExpr)) {
18402
+ if (styleUrlsExpr && ts7.isArrayLiteralExpression(styleUrlsExpr)) {
18628
18403
  for (const el of styleUrlsExpr.elements) {
18629
- if (ts8.isStringLiteral(el))
18404
+ if (ts7.isStringLiteral(el))
18630
18405
  styleUrls.push(el.text);
18631
18406
  }
18632
18407
  }
18633
18408
  const styles = [];
18634
18409
  if (stylesExpr) {
18635
- if (ts8.isArrayLiteralExpression(stylesExpr)) {
18410
+ if (ts7.isArrayLiteralExpression(stylesExpr)) {
18636
18411
  for (const el of stylesExpr.elements) {
18637
- if (ts8.isStringLiteral(el) || ts8.isNoSubstitutionTemplateLiteral(el)) {
18412
+ if (ts7.isStringLiteral(el) || ts7.isNoSubstitutionTemplateLiteral(el)) {
18638
18413
  styles.push(el.text);
18639
18414
  }
18640
18415
  }
18641
- } else if (ts8.isStringLiteral(stylesExpr) || ts8.isNoSubstitutionTemplateLiteral(stylesExpr)) {
18416
+ } else if (ts7.isStringLiteral(stylesExpr) || ts7.isNoSubstitutionTemplateLiteral(stylesExpr)) {
18642
18417
  styles.push(stylesExpr.text);
18643
18418
  }
18644
18419
  }
18645
18420
  return {
18421
+ hasProviders: getProperty(args, "providers") !== null,
18422
+ hasViewProviders: getProperty(args, "viewProviders") !== null,
18423
+ importsExpr: importsExpr && ts7.isArrayLiteralExpression(importsExpr) ? importsExpr : null,
18424
+ preserveWhitespaces: getBooleanProperty(args, "preserveWhitespaces") ?? false,
18646
18425
  selector: getStringProperty(args, "selector"),
18647
- templateUrl: getStringProperty(args, "templateUrl"),
18648
- template: getStringProperty(args, "template"),
18426
+ standalone: getBooleanProperty(args, "standalone") ?? true,
18649
18427
  styleUrl: getStringProperty(args, "styleUrl"),
18650
18428
  styleUrls,
18651
18429
  styles,
18652
- standalone: getBooleanProperty(args, "standalone") ?? true,
18653
- preserveWhitespaces: getBooleanProperty(args, "preserveWhitespaces") ?? false,
18654
- importsExpr: importsExpr && ts8.isArrayLiteralExpression(importsExpr) ? importsExpr : null
18430
+ template: getStringProperty(args, "template"),
18431
+ templateUrl: getStringProperty(args, "templateUrl")
18655
18432
  };
18656
18433
  }, extractDecoratorInput = (prop) => {
18657
- const decorators = ts8.getDecorators(prop) ?? [];
18434
+ const decorators = ts7.getDecorators(prop) ?? [];
18658
18435
  for (const decorator of decorators) {
18659
18436
  const expr = decorator.expression;
18660
- if (!ts8.isCallExpression(expr))
18437
+ if (!ts7.isCallExpression(expr))
18661
18438
  continue;
18662
18439
  const fn2 = expr.expression;
18663
- if (!ts8.isIdentifier(fn2) || fn2.text !== "Input")
18440
+ if (!ts7.isIdentifier(fn2) || fn2.text !== "Input")
18664
18441
  continue;
18665
18442
  const classPropertyName = prop.name.getText();
18666
18443
  let bindingPropertyName = classPropertyName;
18667
18444
  let required = false;
18668
18445
  const arg = expr.arguments[0];
18669
18446
  if (arg) {
18670
- if (ts8.isStringLiteral(arg)) {
18447
+ if (ts7.isStringLiteral(arg)) {
18671
18448
  bindingPropertyName = arg.text;
18672
- } else if (ts8.isObjectLiteralExpression(arg)) {
18449
+ } else if (ts7.isObjectLiteralExpression(arg)) {
18673
18450
  const aliasNode = getStringProperty(arg, "alias");
18674
18451
  if (aliasNode !== null)
18675
18452
  bindingPropertyName = aliasNode;
@@ -18689,11 +18466,11 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18689
18466
  }
18690
18467
  return null;
18691
18468
  }, isInputSignalCall = (init) => {
18692
- if (ts8.isCallExpression(init)) {
18469
+ if (ts7.isCallExpression(init)) {
18693
18470
  const fn2 = init.expression;
18694
- if (ts8.isIdentifier(fn2) && fn2.text === "input")
18471
+ if (ts7.isIdentifier(fn2) && fn2.text === "input")
18695
18472
  return true;
18696
- if (ts8.isPropertyAccessExpression(fn2) && ts8.isIdentifier(fn2.expression) && fn2.expression.text === "input") {
18473
+ if (ts7.isPropertyAccessExpression(fn2) && ts7.isIdentifier(fn2.expression) && fn2.expression.text === "input") {
18697
18474
  return true;
18698
18475
  }
18699
18476
  }
@@ -18704,12 +18481,12 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18704
18481
  const classPropertyName = prop.name.getText();
18705
18482
  const call = prop.initializer;
18706
18483
  let required = false;
18707
- if (ts8.isPropertyAccessExpression(call.expression) && ts8.isIdentifier(call.expression.name) && call.expression.name.text === "required") {
18484
+ if (ts7.isPropertyAccessExpression(call.expression) && ts7.isIdentifier(call.expression.name) && call.expression.name.text === "required") {
18708
18485
  required = true;
18709
18486
  }
18710
18487
  let bindingPropertyName = classPropertyName;
18711
18488
  const optsArg = call.arguments[required ? 0 : 1];
18712
- if (optsArg && ts8.isObjectLiteralExpression(optsArg)) {
18489
+ if (optsArg && ts7.isObjectLiteralExpression(optsArg)) {
18713
18490
  const aliasNode = getStringProperty(optsArg, "alias");
18714
18491
  if (aliasNode !== null)
18715
18492
  bindingPropertyName = aliasNode;
@@ -18725,28 +18502,28 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18725
18502
  }
18726
18503
  };
18727
18504
  }, extractDecoratorOutput = (prop) => {
18728
- const decorators = ts8.getDecorators(prop) ?? [];
18505
+ const decorators = ts7.getDecorators(prop) ?? [];
18729
18506
  for (const decorator of decorators) {
18730
18507
  const expr = decorator.expression;
18731
- if (!ts8.isCallExpression(expr))
18508
+ if (!ts7.isCallExpression(expr))
18732
18509
  continue;
18733
18510
  const fn2 = expr.expression;
18734
- if (!ts8.isIdentifier(fn2) || fn2.text !== "Output")
18511
+ if (!ts7.isIdentifier(fn2) || fn2.text !== "Output")
18735
18512
  continue;
18736
18513
  const classPropertyName = prop.name.getText();
18737
18514
  let bindingName = classPropertyName;
18738
18515
  const arg = expr.arguments[0];
18739
- if (arg && ts8.isStringLiteral(arg))
18516
+ if (arg && ts7.isStringLiteral(arg))
18740
18517
  bindingName = arg.text;
18741
18518
  return { classPropertyName, bindingName };
18742
18519
  }
18743
18520
  return null;
18744
18521
  }, isOutputSignalCall = (init) => {
18745
- if (ts8.isCallExpression(init)) {
18522
+ if (ts7.isCallExpression(init)) {
18746
18523
  const fn2 = init.expression;
18747
- if (ts8.isIdentifier(fn2) && fn2.text === "output")
18524
+ if (ts7.isIdentifier(fn2) && fn2.text === "output")
18748
18525
  return true;
18749
- if (ts8.isPropertyAccessExpression(fn2) && ts8.isIdentifier(fn2.expression) && fn2.expression.text === "output") {
18526
+ if (ts7.isPropertyAccessExpression(fn2) && ts7.isIdentifier(fn2.expression) && fn2.expression.text === "output") {
18750
18527
  return true;
18751
18528
  }
18752
18529
  }
@@ -18758,7 +18535,7 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18758
18535
  const call = prop.initializer;
18759
18536
  let bindingName = classPropertyName;
18760
18537
  const optsArg = call.arguments[0];
18761
- if (optsArg && ts8.isObjectLiteralExpression(optsArg)) {
18538
+ if (optsArg && ts7.isObjectLiteralExpression(optsArg)) {
18762
18539
  const aliasNode = getStringProperty(optsArg, "alias");
18763
18540
  if (aliasNode !== null)
18764
18541
  bindingName = aliasNode;
@@ -18768,7 +18545,7 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18768
18545
  const inputs = {};
18769
18546
  const outputs = {};
18770
18547
  for (const member of cls.members) {
18771
- if (!ts8.isPropertyDeclaration(member))
18548
+ if (!ts7.isPropertyDeclaration(member))
18772
18549
  continue;
18773
18550
  const decoratorIn = extractDecoratorInput(member);
18774
18551
  if (decoratorIn) {
@@ -18791,11 +18568,37 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18791
18568
  }
18792
18569
  }
18793
18570
  return { inputs, outputs };
18571
+ }, extractFingerprint = (cls, className, decoratorMeta, inputs, outputs) => {
18572
+ const ctorParamTypes = [];
18573
+ for (const member of cls.members) {
18574
+ if (!ts7.isConstructorDeclaration(member))
18575
+ continue;
18576
+ for (const param of member.parameters) {
18577
+ ctorParamTypes.push(param.type ? param.type.getText() : "");
18578
+ }
18579
+ break;
18580
+ }
18581
+ const inputNames = Object.keys(inputs).sort();
18582
+ const outputNames = Object.keys(outputs).sort();
18583
+ const importsArity = decoratorMeta.importsExpr ? decoratorMeta.importsExpr.elements.length : 0;
18584
+ const hasProviders = decoratorMeta.hasProviders;
18585
+ const hasViewProviders = decoratorMeta.hasViewProviders;
18586
+ return {
18587
+ className,
18588
+ ctorParamTypes,
18589
+ hasProviders,
18590
+ hasViewProviders,
18591
+ importsArity,
18592
+ inputs: inputNames,
18593
+ outputs: outputNames,
18594
+ selector: decoratorMeta.selector,
18595
+ standalone: decoratorMeta.standalone
18596
+ };
18794
18597
  }, resolveAndReadResource = (componentDir, url) => {
18795
18598
  const abs = resolve33(componentDir, url);
18796
18599
  if (!existsSync26(abs))
18797
18600
  return null;
18798
- return readFileSync21(abs, "utf8");
18601
+ return readFileSync20(abs, "utf8");
18799
18602
  }, collectStyles = (decoratorMeta, componentDir) => {
18800
18603
  const styles = [...decoratorMeta.styles];
18801
18604
  const urls = [];
@@ -18821,8 +18624,8 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18821
18624
  } catch (err) {
18822
18625
  return fail("unexpected-error", `import @angular/compiler: ${err}`);
18823
18626
  }
18824
- const tsSource = readFileSync21(componentFilePath, "utf8");
18825
- const sourceFile = ts8.createSourceFile(componentFilePath, tsSource, ts8.ScriptTarget.ES2022, true, ts8.ScriptKind.TS);
18627
+ const tsSource = readFileSync20(componentFilePath, "utf8");
18628
+ const sourceFile = ts7.createSourceFile(componentFilePath, tsSource, ts7.ScriptTarget.ES2022, true, ts7.ScriptKind.TS);
18826
18629
  const classNode = findClassDeclaration(sourceFile, className);
18827
18630
  if (!classNode) {
18828
18631
  return fail("class-not-found", `${className} in ${componentFilePath}`);
@@ -18850,7 +18653,7 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18850
18653
  if (!existsSync26(tplAbs)) {
18851
18654
  return fail("template-resource-not-found", tplAbs);
18852
18655
  }
18853
- templateText = readFileSync21(tplAbs, "utf8");
18656
+ templateText = readFileSync20(tplAbs, "utf8");
18854
18657
  templatePath = tplAbs;
18855
18658
  } else {
18856
18659
  return fail("unsupported-decorator-args", "missing template/templateUrl");
@@ -18877,6 +18680,12 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18877
18680
  const wrappedClass = new compiler.WrappedNodeExpr(className_);
18878
18681
  const { inputs, outputs } = extractInputsAndOutputs(classNode);
18879
18682
  const projectRelPath = relative13(projectRoot, componentFilePath).replace(/\\/g, "/");
18683
+ const fingerprintId = encodeURIComponent(`${projectRelPath}@${className}`);
18684
+ const currentFingerprint = extractFingerprint(classNode, className, decoratorMeta, inputs, outputs);
18685
+ const cachedFingerprint = fingerprintCache.get(fingerprintId);
18686
+ if (cachedFingerprint && !fingerprintsEqual(cachedFingerprint, currentFingerprint)) {
18687
+ return fail("structural-change", `fingerprint changed for ${className}; escalate to Tier 1`);
18688
+ }
18880
18689
  const sourceFileObj = new compiler.ParseSourceFile(tsSource, componentFilePath);
18881
18690
  const zeroLoc = new compiler.ParseLocation(sourceFileObj, 0, 0, 0);
18882
18691
  const typeSourceSpan = new compiler.ParseSourceSpan(zeroLoc, zeroLoc);
@@ -18965,23 +18774,24 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18965
18774
  }
18966
18775
  const importGenerator = createHmrImportGenerator(namespaceMap);
18967
18776
  const tsFunctionDecl = translateStatement(sourceFile, callback, importGenerator);
18968
- const exportedDecl = ts8.factory.updateFunctionDeclaration(tsFunctionDecl, [
18969
- ts8.factory.createToken(ts8.SyntaxKind.ExportKeyword),
18970
- ts8.factory.createToken(ts8.SyntaxKind.DefaultKeyword)
18777
+ const exportedDecl = ts7.factory.updateFunctionDeclaration(tsFunctionDecl, [
18778
+ ts7.factory.createToken(ts7.SyntaxKind.ExportKeyword),
18779
+ ts7.factory.createToken(ts7.SyntaxKind.DefaultKeyword)
18971
18780
  ], tsFunctionDecl.asteriskToken, tsFunctionDecl.name, tsFunctionDecl.typeParameters, tsFunctionDecl.parameters, tsFunctionDecl.type, tsFunctionDecl.body);
18972
- const printer = ts8.createPrinter({
18973
- newLine: ts8.NewLineKind.LineFeed,
18781
+ const printer = ts7.createPrinter({
18782
+ newLine: ts7.NewLineKind.LineFeed,
18974
18783
  removeComments: false
18975
18784
  });
18976
- const tsSourceText = printer.printNode(ts8.EmitHint.Unspecified, exportedDecl, sourceFile);
18977
- const moduleText = ts8.transpileModule(tsSourceText, {
18785
+ const tsSourceText = printer.printNode(ts7.EmitHint.Unspecified, exportedDecl, sourceFile);
18786
+ const moduleText = ts7.transpileModule(tsSourceText, {
18978
18787
  compilerOptions: {
18979
- module: ts8.ModuleKind.ES2022,
18980
- target: ts8.ScriptTarget.ES2022
18788
+ module: ts7.ModuleKind.ES2022,
18789
+ target: ts7.ScriptTarget.ES2022
18981
18790
  },
18982
18791
  fileName: componentFilePath,
18983
18792
  reportDiagnostics: false
18984
18793
  }).outputText;
18794
+ fingerprintCache.set(fingerprintId, currentFingerprint);
18985
18795
  return { ok: true, moduleText, componentSource: sourceFile };
18986
18796
  } catch (err) {
18987
18797
  return fail("unexpected-error", String(err));
@@ -18990,6 +18800,7 @@ var fail = (reason, detail) => ({ ok: false, reason, detail }), findClassDeclara
18990
18800
  var init_fastHmrCompiler = __esm(() => {
18991
18801
  init_hmrImportGenerator();
18992
18802
  init_typescript_translator();
18803
+ fingerprintCache = new Map;
18993
18804
  });
18994
18805
 
18995
18806
  // src/dev/angular/hmrCompiler.ts
@@ -19002,9 +18813,9 @@ __export(exports_hmrCompiler, {
19002
18813
  compileAngularForHmr: () => compileAngularForHmr
19003
18814
  });
19004
18815
  import { existsSync as existsSync27 } from "fs";
19005
- import { basename as basename13, dirname as dirname20, join as join30, relative as relative14, resolve as resolve34 } from "path";
18816
+ import { basename as basename12, dirname as dirname20, join as join30, relative as relative14, resolve as resolve34 } from "path";
19006
18817
  import { performance as performance2 } from "perf_hooks";
19007
- import ts9 from "typescript";
18818
+ import ts8 from "typescript";
19008
18819
  var globalCache, getCachedHmrProgram = () => globalCache.__ABSOLUTE_ANGULAR_HMR_PROGRAM__ ?? null, setCachedHmrProgram = (program) => {
19009
18820
  globalCache.__ABSOLUTE_ANGULAR_HMR_PROGRAM__ = program;
19010
18821
  }, resolveTypescriptLibDirCached = null, resolveTypescriptLibDir = () => {
@@ -19019,14 +18830,14 @@ var globalCache, getCachedHmrProgram = () => globalCache.__ABSOLUTE_ANGULAR_HMR_
19019
18830
  emitDecoratorMetadata: true,
19020
18831
  esModuleInterop: true,
19021
18832
  experimentalDecorators: true,
19022
- module: ts9.ModuleKind.ESNext,
19023
- moduleResolution: ts9.ModuleResolutionKind.Bundler,
19024
- newLine: ts9.NewLineKind.LineFeed,
18833
+ module: ts8.ModuleKind.ESNext,
18834
+ moduleResolution: ts8.ModuleResolutionKind.Bundler,
18835
+ newLine: ts8.NewLineKind.LineFeed,
19025
18836
  noEmit: false,
19026
18837
  noLib: false,
19027
18838
  rootDir: process.cwd(),
19028
18839
  skipLibCheck: true,
19029
- target: ts9.ScriptTarget.ES2022,
18840
+ target: ts8.ScriptTarget.ES2022,
19030
18841
  _enableHmr: true,
19031
18842
  enableHmr: true
19032
18843
  }), ANGULAR_COMPILER_OPTIONS_CACHE, loadAngularCompilerOptions = async () => {
@@ -19053,20 +18864,20 @@ var globalCache, getCachedHmrProgram = () => globalCache.__ABSOLUTE_ANGULAR_HMR_
19053
18864
  const baseOptions = await loadAngularCompilerOptions();
19054
18865
  const options = buildHmrCompilerOptions(baseOptions);
19055
18866
  options.outDir = outDir;
19056
- options.target = ts9.ScriptTarget.ES2022;
18867
+ options.target = ts8.ScriptTarget.ES2022;
19057
18868
  options.experimentalDecorators = true;
19058
18869
  options.emitDecoratorMetadata = true;
19059
- options.newLine = ts9.NewLineKind.LineFeed;
18870
+ options.newLine = ts8.NewLineKind.LineFeed;
19060
18871
  options.incremental = false;
19061
18872
  options.tsBuildInfoFile = undefined;
19062
18873
  const tsLibDir = resolveTypescriptLibDir();
19063
- const host = ts9.createCompilerHost(options);
18874
+ const host = ts8.createCompilerHost(options);
19064
18875
  const originalGetDefaultLibLocation = host.getDefaultLibLocation;
19065
18876
  host.getDefaultLibLocation = () => tsLibDir || (originalGetDefaultLibLocation ? originalGetDefaultLibLocation() : "");
19066
18877
  const originalGetDefaultLibFileName = host.getDefaultLibFileName;
19067
18878
  host.getDefaultLibFileName = (opts) => {
19068
18879
  const fileName = originalGetDefaultLibFileName ? originalGetDefaultLibFileName(opts) : "lib.d.ts";
19069
- return basename13(fileName);
18880
+ return basename12(fileName);
19070
18881
  };
19071
18882
  const originalGetSourceFile = host.getSourceFile;
19072
18883
  host.getSourceFile = (fileName, languageVersion, onError) => {
@@ -19137,11 +18948,11 @@ var globalCache, getCachedHmrProgram = () => globalCache.__ABSOLUTE_ANGULAR_HMR_
19137
18948
  const walk = (node) => {
19138
18949
  if (found)
19139
18950
  return;
19140
- if (ts9.isClassDeclaration(node) && node.name?.text === className) {
18951
+ if (ts8.isClassDeclaration(node) && node.name?.text === className) {
19141
18952
  found = node;
19142
18953
  return;
19143
18954
  }
19144
- ts9.forEachChild(node, walk);
18955
+ ts8.forEachChild(node, walk);
19145
18956
  };
19146
18957
  walk(sourceFile);
19147
18958
  return found;
@@ -19368,7 +19179,7 @@ var init_simpleHTMXHMR = () => {};
19368
19179
 
19369
19180
  // src/dev/rebuildTrigger.ts
19370
19181
  import { existsSync as existsSync28 } from "fs";
19371
- import { basename as basename14, dirname as dirname21, relative as relative15, resolve as resolve37 } from "path";
19182
+ import { basename as basename13, dirname as dirname21, relative as relative15, resolve as resolve37 } from "path";
19372
19183
  var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequentially = (items, action) => items.reduce((chain, item) => chain.then(() => action(item)), Promise.resolve()), getStyleTransformConfig = (config) => createStyleTransformConfig(config.stylePreprocessors, config.postcss), recompileTailwindForFastPath = async (state, config, files) => {
19373
19184
  if (!config.tailwind)
19374
19185
  return;
@@ -19701,7 +19512,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
19701
19512
  const { commonAncestor: commonAncestor2 } = await Promise.resolve().then(() => (init_commonAncestor(), exports_commonAncestor));
19702
19513
  return clientRoots.length === 1 ? clientRoots[0] ?? projectRoot : commonAncestor2(clientRoots, projectRoot);
19703
19514
  }, updateServerManifestEntry = (state, artifact) => {
19704
- const fileWithHash = basename14(artifact.path);
19515
+ const fileWithHash = basename13(artifact.path);
19705
19516
  const [baseName] = fileWithHash.split(`.${artifact.hash}.`);
19706
19517
  if (!baseName) {
19707
19518
  return;
@@ -19762,59 +19573,63 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
19762
19573
  const clientManifest = generateManifest2(clientResult.outputs, buildDir);
19763
19574
  Object.assign(state.manifest, clientManifest);
19764
19575
  await populateAssetStore(state.assetStore, clientManifest, buildDir);
19765
- }, filterToUserEdits = (candidates, userEditedFiles) => {
19766
- if (!userEditedFiles || userEditedFiles.size === 0)
19767
- return candidates;
19768
- const filtered = candidates.filter((file5) => userEditedFiles.has(resolve37(file5)));
19769
- return filtered.length > 0 ? filtered : candidates;
19770
- }, broadcastAngularComponentUpdates = async (state, angularDir) => {
19576
+ }, decideAngularTier = async (state, angularDir) => {
19771
19577
  const userEdited = state.lastUserEditedFiles ?? new Set;
19772
19578
  if (userEdited.size === 0)
19773
- return;
19579
+ return { queue: [], tier: 0 };
19774
19580
  const { resolveOwningComponents: resolveOwningComponents2 } = await Promise.resolve().then(() => (init_resolveOwningComponents(), exports_resolveOwningComponents));
19775
19581
  const { encodeHmrComponentId: encodeHmrComponentId2 } = await Promise.resolve().then(() => (init_hmrCompiler(), exports_hmrCompiler));
19776
- const broadcastedIds = new Set;
19777
- const broadcastTimestamp = Date.now();
19582
+ const { tryFastHmr: tryFastHmr2 } = await Promise.resolve().then(() => (init_fastHmrCompiler(), exports_fastHmrCompiler));
19583
+ const queue = [];
19584
+ const queueIds = new Set;
19778
19585
  for (const editedFile of userEdited) {
19779
19586
  const owners = resolveOwningComponents2({
19780
19587
  changedFilePath: editedFile,
19781
19588
  userAngularRoot: angularDir
19782
19589
  });
19590
+ if (owners.length === 0 && editedFile.endsWith(".component.ts")) {
19591
+ return {
19592
+ reason: `no @Component class found in ${editedFile}`,
19593
+ tier: 1
19594
+ };
19595
+ }
19783
19596
  for (const { componentFilePath, className } of owners) {
19784
19597
  const id = encodeHmrComponentId2(componentFilePath, className);
19785
- if (broadcastedIds.has(id))
19598
+ if (queueIds.has(id))
19786
19599
  continue;
19787
- broadcastedIds.add(id);
19788
- broadcastToClients(state, {
19789
- data: { id, timestamp: broadcastTimestamp },
19790
- type: "angular:component-update"
19791
- });
19792
- logInfo(`[ng-hmr broadcast] ${className}`);
19600
+ const result = await tryFastHmr2({ className, componentFilePath });
19601
+ if (!result.ok) {
19602
+ return {
19603
+ reason: `${className}: ${result.reason}${result.detail ? ` (${result.detail})` : ""}`,
19604
+ tier: 1
19605
+ };
19606
+ }
19607
+ queueIds.add(id);
19608
+ queue.push({ className, id });
19793
19609
  }
19794
19610
  }
19795
- }, broadcastAngularPageUpdates = (state, pagesToUpdate, manifest, startTime, classification) => {
19796
- pagesToUpdate.forEach((angularPagePath) => {
19797
- const fileName = basename14(angularPagePath);
19798
- const baseName = fileName.replace(/\.[tj]s$/, "");
19799
- const pascalName = toPascal(baseName);
19800
- const cssKey = `${pascalName}CSS`;
19801
- const cssUrl = manifest[cssKey] || null;
19802
- const duration = Date.now() - startTime;
19803
- logHmrUpdate(angularPagePath, "angular", duration);
19611
+ return { queue, tier: 0 };
19612
+ }, broadcastSurgical = (state, queue) => {
19613
+ const timestamp = Date.now();
19614
+ for (const { id, className } of queue) {
19804
19615
  broadcastToClients(state, {
19805
- data: {
19806
- cssBaseName: baseName,
19807
- cssUrl,
19808
- editSourceFile: classification.sourceFile,
19809
- framework: "angular",
19810
- manifest,
19811
- reason: classification.reason,
19812
- sourceFile: angularPagePath,
19813
- updateType: classification.type
19814
- },
19815
- type: "angular-update"
19616
+ data: { id, timestamp },
19617
+ type: "angular:component-update"
19816
19618
  });
19619
+ logInfo(`[ng-hmr broadcast] ${className}`);
19620
+ }
19621
+ }, broadcastRebootstrap = async (state, reason) => {
19622
+ logInfo(`[ng-hmr tier-1 rebootstrap] ${reason}`);
19623
+ broadcastToClients(state, {
19624
+ data: {
19625
+ manifest: state.manifest,
19626
+ reason,
19627
+ timestamp: Date.now()
19628
+ },
19629
+ type: "angular:rebootstrap"
19817
19630
  });
19631
+ const { invalidateFingerprintCache: invalidateFingerprintCache2 } = await Promise.resolve().then(() => (init_fastHmrCompiler(), exports_fastHmrCompiler));
19632
+ invalidateFingerprintCache2();
19818
19633
  }, compileAndBundleAngular = async (state, pageEntries, angularDir) => {
19819
19634
  const { compileAngular: compileAngular2 } = await Promise.resolve().then(() => (init_compileAngular(), exports_compileAngular));
19820
19635
  const { clientPaths, serverPaths } = await compileAngular2(pageEntries, angularDir, true, getStyleTransformConfig(state.config));
@@ -19839,7 +19654,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
19839
19654
  await rewriteImports3(ssrPaths, angServerVendorPaths);
19840
19655
  }
19841
19656
  serverPaths.forEach((serverPath, idx) => {
19842
- const fileBase = basename14(serverPath, ".js");
19657
+ const fileBase = basename13(serverPath, ".js");
19843
19658
  const ssrPath = ssrPaths[idx] ?? serverPath;
19844
19659
  state.manifest[toPascal(fileBase)] = resolve37(ssrPath);
19845
19660
  });
@@ -19854,18 +19669,23 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
19854
19669
  }
19855
19670
  const angularPagesPath = resolve37(angularDir, "pages");
19856
19671
  const pageEntries = resolveAngularPageEntries(state, angularFiles, angularPagesPath);
19857
- if (pageEntries.length > 0) {
19672
+ const verdict = await decideAngularTier(state, angularDir);
19673
+ const runBundle = async () => {
19674
+ if (pageEntries.length === 0)
19675
+ return;
19858
19676
  await compileAndBundleAngular(state, pageEntries, angularDir);
19859
19677
  markSsrCacheDirty("angular");
19678
+ };
19679
+ if (verdict.tier === 0) {
19680
+ broadcastSurgical(state, verdict.queue);
19681
+ runBundle().catch((err) => {
19682
+ logWarn(`[ng-hmr async bundle] rebuild failed: ${err instanceof Error ? err.message : String(err)}`);
19683
+ });
19684
+ } else {
19685
+ await runBundle();
19686
+ await broadcastRebootstrap(state, verdict.reason);
19860
19687
  }
19861
19688
  const { manifest } = state;
19862
- const angularHmrFiles = angularFiles.filter((file5) => file5.endsWith(".ts") || file5.endsWith(".html"));
19863
- const angularPageFiles = angularHmrFiles.filter((file5) => file5.replace(/\\/g, "/").includes("/pages/"));
19864
- const pagesToUpdate = angularPageFiles.length > 0 ? angularPageFiles : pageEntries;
19865
- const filesToClassify = filterToUserEdits(angularFiles, state.lastUserEditedFiles);
19866
- const classification = collapseClassifications(filesToClassify.map(classifyAngularEdit));
19867
- broadcastAngularPageUpdates(state, pagesToUpdate, manifest, startTime, classification);
19868
- await broadcastAngularComponentUpdates(state, angularDir);
19869
19689
  onRebuildComplete({ hmrState: state, manifest });
19870
19690
  return manifest;
19871
19691
  }, getModuleUrl = async (pageFile) => {
@@ -19992,7 +19812,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
19992
19812
  const clientEntries = [...svelteIndexPaths, ...svelteClientPaths];
19993
19813
  const { getFrameworkGeneratedDir: getFrameworkGeneratedDir2 } = await Promise.resolve().then(() => (init_generatedDir(), exports_generatedDir));
19994
19814
  const serverRoot = resolve37(getFrameworkGeneratedDir2("svelte"), "server");
19995
- const serverOutDir = resolve37(buildDir, basename14(svelteDir));
19815
+ const serverOutDir = resolve37(buildDir, basename13(svelteDir));
19996
19816
  const [serverResult, clientResult] = await Promise.all([
19997
19817
  serverEntries.length > 0 ? bunBuild9({
19998
19818
  entrypoints: serverEntries,
@@ -20034,7 +19854,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20034
19854
  const duration = Date.now() - startTime;
20035
19855
  const broadcastFiles = svelteFiles.length > 0 ? svelteFiles : filesToRebuild;
20036
19856
  broadcastFiles.forEach((sveltePagePath) => {
20037
- const fileName = basename14(sveltePagePath);
19857
+ const fileName = basename13(sveltePagePath);
20038
19858
  const baseName = fileName.replace(/\.svelte$/, "");
20039
19859
  const pascalName = toPascal(baseName);
20040
19860
  const cssKey = `${pascalName}CSS`;
@@ -20141,7 +19961,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20141
19961
  const { compileEmber: compileEmber2 } = await Promise.resolve().then(() => (init_compileEmber(), exports_compileEmber));
20142
19962
  const { serverPaths } = await compileEmber2(allPageEntries, emberDir, process.cwd(), true);
20143
19963
  for (const serverPath of serverPaths) {
20144
- const fileBase = basename14(serverPath, ".js");
19964
+ const fileBase = basename13(serverPath, ".js");
20145
19965
  state.manifest[toPascal(fileBase)] = resolve37(serverPath);
20146
19966
  }
20147
19967
  const { invalidateEmberSsrCache: invalidateEmberSsrCache2 } = await Promise.resolve().then(() => (init_ember(), exports_ember));
@@ -20212,7 +20032,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20212
20032
  });
20213
20033
  }
20214
20034
  }, handleScriptUpdate = (state, scriptFile, manifest, framework, duration) => {
20215
- const scriptBaseName = basename14(scriptFile).replace(/\.(ts|js|tsx|jsx)$/, "");
20035
+ const scriptBaseName = basename13(scriptFile).replace(/\.(ts|js|tsx|jsx)$/, "");
20216
20036
  const pascalName = toPascal(scriptBaseName);
20217
20037
  const scriptPath = manifest[pascalName] || null;
20218
20038
  if (!scriptPath) {
@@ -20291,7 +20111,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20291
20111
  if (isSingle) {
20292
20112
  return resolve37(state.resolvedPaths.buildDir, "pages");
20293
20113
  }
20294
- const dirName = framework === "html" ? basename14(config.htmlDirectory ?? "html") : basename14(config.htmxDirectory ?? "htmx");
20114
+ const dirName = framework === "html" ? basename13(config.htmlDirectory ?? "html") : basename13(config.htmxDirectory ?? "htmx");
20295
20115
  return resolve37(state.resolvedPaths.buildDir, dirName, "pages");
20296
20116
  }, processHtmlPageUpdate = async (state, pageFile, builtHtmlPagePath, manifest, duration) => {
20297
20117
  try {
@@ -20330,7 +20150,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20330
20150
  const shouldRefreshAllPages = htmlPageFiles.length === 0 && shouldRefreshFromIslandChange;
20331
20151
  const pageFilesToUpdate = shouldRefreshAllPages ? await scanEntryPoints(outputHtmlPages, "*.html") : htmlPageFiles;
20332
20152
  await runSequentially(pageFilesToUpdate, async (pageFile) => {
20333
- const htmlPageName = basename14(pageFile);
20153
+ const htmlPageName = basename13(pageFile);
20334
20154
  const builtHtmlPagePath = resolve37(outputHtmlPages, htmlPageName);
20335
20155
  await processHtmlPageUpdate(state, pageFile, builtHtmlPagePath, manifest, duration);
20336
20156
  });
@@ -20339,7 +20159,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20339
20159
  if (!cssFile) {
20340
20160
  return;
20341
20161
  }
20342
- const cssBaseName = basename14(getStyleBaseName(cssFile));
20162
+ const cssBaseName = basename13(getStyleBaseName(cssFile));
20343
20163
  const cssPascalName = toPascal(cssBaseName);
20344
20164
  const cssKey = `${cssPascalName}CSS`;
20345
20165
  const cssUrl = manifest[cssKey] || null;
@@ -20388,7 +20208,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20388
20208
  type: "vue-update"
20389
20209
  });
20390
20210
  }, broadcastVuePageChange = async (state, config, vuePagePath, manifest, duration) => {
20391
- const fileName = basename14(vuePagePath);
20211
+ const fileName = basename13(vuePagePath);
20392
20212
  const baseName = fileName.replace(/\.vue$/, "");
20393
20213
  const pascalName = toPascal(baseName);
20394
20214
  const vueRoot = config.vueDirectory;
@@ -20434,7 +20254,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20434
20254
  if (!cssFile) {
20435
20255
  return;
20436
20256
  }
20437
- const cssBaseName = basename14(getStyleBaseName(cssFile));
20257
+ const cssBaseName = basename13(getStyleBaseName(cssFile));
20438
20258
  const cssPascalName = toPascal(cssBaseName);
20439
20259
  const cssKey = `${cssPascalName}CSS`;
20440
20260
  const cssUrl = manifest[cssKey] || null;
@@ -20452,7 +20272,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20452
20272
  });
20453
20273
  }, broadcastSveltePageUpdate = (state, sveltePagePath, manifest, duration) => {
20454
20274
  try {
20455
- const fileName = basename14(sveltePagePath);
20275
+ const fileName = basename13(sveltePagePath);
20456
20276
  const baseName = fileName.replace(/\.svelte$/, "");
20457
20277
  const pascalName = toPascal(baseName);
20458
20278
  const cssKey = `${pascalName}CSS`;
@@ -20495,26 +20315,12 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20495
20315
  pagesToUpdate.forEach((sveltePagePath) => {
20496
20316
  broadcastSveltePageUpdate(state, sveltePagePath, manifest, duration);
20497
20317
  });
20498
- }, collectAngularAffectedPages = (affected, resolvedPages) => {
20499
- affected.forEach((file5) => {
20500
- if (file5.replace(/\\/g, "/").includes("/pages/") && file5.endsWith(".ts")) {
20501
- resolvedPages.add(file5);
20502
- }
20503
- });
20504
- }, resolveAngularPagesFromDependencyGraph = (state, angularFiles) => {
20505
- const resolvedPages = new Set;
20506
- angularFiles.forEach((componentFile) => {
20507
- const lookupFile = resolveComponentLookupFile(componentFile, state.dependencyGraph);
20508
- const affected = getAffectedFiles(state.dependencyGraph, lookupFile);
20509
- collectAngularAffectedPages(affected, resolvedPages);
20510
- });
20511
- return Array.from(resolvedPages);
20512
20318
  }, handleAngularCssOnlyUpdate = (state, angularCssFiles, manifest, duration) => {
20513
20319
  const [cssFile] = angularCssFiles;
20514
20320
  if (!cssFile) {
20515
20321
  return;
20516
20322
  }
20517
- const cssBaseName = basename14(getStyleBaseName(cssFile));
20323
+ const cssBaseName = basename13(getStyleBaseName(cssFile));
20518
20324
  const cssPascalName = toPascal(cssBaseName);
20519
20325
  const cssKey = `${cssPascalName}CSS`;
20520
20326
  const cssUrl = manifest[cssKey] || null;
@@ -20530,58 +20336,17 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20530
20336
  },
20531
20337
  type: "angular-update"
20532
20338
  });
20533
- }, broadcastAngularPageHmrUpdate = (state, angularPagePath, manifest, duration, classification) => {
20534
- try {
20535
- const fileName = basename14(angularPagePath);
20536
- const baseName = fileName.replace(/\.[tj]s$/, "");
20537
- const pascalName = toPascal(baseName);
20538
- const cssKey = `${pascalName}CSS`;
20539
- const cssUrl = manifest[cssKey] || null;
20540
- logHmrUpdate(angularPagePath, "angular", duration);
20541
- broadcastToClients(state, {
20542
- data: {
20543
- cssBaseName: baseName,
20544
- cssUrl,
20545
- editSourceFile: classification.sourceFile,
20546
- framework: "angular",
20547
- manifest,
20548
- reason: classification.reason,
20549
- sourceFile: angularPagePath,
20550
- updateType: classification.type
20551
- },
20552
- type: "angular-update"
20553
- });
20554
- } catch (err) {
20555
- sendTelemetryEvent("hmr:error", {
20556
- framework: "angular",
20557
- message: err instanceof Error ? err.message : String(err)
20558
- });
20559
- }
20560
20339
  }, handleAngularHMR = (state, config, filesToRebuild, manifest, duration) => {
20561
- if (!config.angularDirectory) {
20340
+ if (!config.angularDirectory)
20562
20341
  return;
20563
- }
20564
20342
  const angularFiles = filesToRebuild.filter((file5) => detectFramework(file5, state.resolvedPaths) === "angular");
20565
- if (angularFiles.length === 0) {
20343
+ if (angularFiles.length === 0)
20566
20344
  return;
20567
- }
20568
- broadcastAngularComponentUpdates(state, config.angularDirectory);
20569
20345
  const angularCssFiles = angularFiles.filter(isStylePath);
20570
20346
  const isCssOnlyChange = angularFiles.every(isStylePath) && angularCssFiles.length > 0;
20571
- const angularPageFiles = angularFiles.filter((file5) => file5.replace(/\\/g, "/").includes("/pages/"));
20572
- let pagesToUpdate = angularPageFiles;
20573
- if (pagesToUpdate.length === 0 && state.dependencyGraph) {
20574
- pagesToUpdate = resolveAngularPagesFromDependencyGraph(state, angularFiles);
20575
- }
20576
- if (isCssOnlyChange && angularCssFiles.length > 0) {
20347
+ if (isCssOnlyChange) {
20577
20348
  handleAngularCssOnlyUpdate(state, angularCssFiles, manifest, duration);
20578
- return;
20579
20349
  }
20580
- const filesToClassifySlow = filterToUserEdits(angularFiles, state.lastUserEditedFiles);
20581
- const classification = collapseClassifications(filesToClassifySlow.map(classifyAngularEdit));
20582
- pagesToUpdate.forEach((angularPagePath) => {
20583
- broadcastAngularPageHmrUpdate(state, angularPagePath, manifest, duration, classification);
20584
- });
20585
20350
  }, handleHTMXScriptHMR = (state, filesToRebuild, manifest, duration) => {
20586
20351
  if (!state.resolvedPaths.htmxDir) {
20587
20352
  return;
@@ -20635,7 +20400,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20635
20400
  const shouldRefreshAllPages = htmxPageFiles.length === 0 && shouldRefreshFromIslandChange;
20636
20401
  const pageFilesToUpdate = shouldRefreshAllPages ? await scanEntryPoints(outputHtmxPages, "*.html") : htmxPageFiles;
20637
20402
  await runSequentially(pageFilesToUpdate, async (htmxPageFile) => {
20638
- const htmxPageName = basename14(htmxPageFile);
20403
+ const htmxPageName = basename13(htmxPageFile);
20639
20404
  const builtHtmxPagePath = resolve37(outputHtmxPages, htmxPageName);
20640
20405
  await processHtmxPageUpdate(state, htmxPageFile, builtHtmxPagePath, manifest, duration);
20641
20406
  });
@@ -20745,7 +20510,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20745
20510
  html = html.slice(0, bodyClose.index) + hmrScript + html.slice(bodyClose.index);
20746
20511
  writeFs(destPath, html);
20747
20512
  }, processMarkupFileFastPath = async (state, sourceFile, outputDir, framework, startTime, updateAssetPaths2, handleUpdate, readFs, writeFs) => {
20748
- const destPath = resolve37(outputDir, basename14(sourceFile));
20513
+ const destPath = resolve37(outputDir, basename13(sourceFile));
20749
20514
  const hmrScript = extractHmrScript(destPath, readFs);
20750
20515
  const source = await Bun.file(sourceFile).text();
20751
20516
  await Bun.write(destPath, source);
@@ -20991,7 +20756,6 @@ var init_rebuildTrigger = __esm(() => {
20991
20756
  init_compileTailwind();
20992
20757
  init_tailwindCompiler();
20993
20758
  init_ssrCache();
20994
- init_editTypeDetection();
20995
20759
  moduleServerPromise = Promise.resolve().then(() => (init_moduleServer(), exports_moduleServer));
20996
20760
  getReactModuleUrl = getModuleUrl;
20997
20761
  EMBER_PAGE_EXTENSIONS = [".gts", ".gjs", ".ts", ".js"];
@@ -21059,7 +20823,7 @@ var toSafeFileName6 = (specifier) => {
21059
20823
  framework: Array.from(framework).filter(isResolvable4)
21060
20824
  };
21061
20825
  }, collectTransitiveImports = async (specs, alreadyVendored, alreadyScanned) => {
21062
- const { readFileSync: readFileSync22 } = await import("fs");
20826
+ const { readFileSync: readFileSync21 } = await import("fs");
21063
20827
  const transpiler5 = new Bun.Transpiler({ loader: "js" });
21064
20828
  const newSpecs = new Set;
21065
20829
  for (const spec of specs) {
@@ -21074,7 +20838,7 @@ var toSafeFileName6 = (specifier) => {
21074
20838
  }
21075
20839
  let content;
21076
20840
  try {
21077
- content = readFileSync22(resolved, "utf-8");
20841
+ content = readFileSync21(resolved, "utf-8");
21078
20842
  } catch {
21079
20843
  continue;
21080
20844
  }
@@ -21799,7 +21563,7 @@ __export(exports_devtoolsJson, {
21799
21563
  normalizeDevtoolsWorkspaceRoot: () => normalizeDevtoolsWorkspaceRoot,
21800
21564
  devtoolsJson: () => devtoolsJson
21801
21565
  });
21802
- import { existsSync as existsSync29, mkdirSync as mkdirSync14, readFileSync as readFileSync22, writeFileSync as writeFileSync9 } from "fs";
21566
+ import { existsSync as existsSync29, mkdirSync as mkdirSync14, readFileSync as readFileSync21, writeFileSync as writeFileSync9 } from "fs";
21803
21567
  import { dirname as dirname22, join as join32, resolve as resolve39 } from "path";
21804
21568
  import { Elysia as Elysia3 } from "elysia";
21805
21569
  var ENDPOINT = "/.well-known/appspecific/com.chrome.devtools.json", UUID_CACHE_KEY = "__absoluteDevtoolsWorkspaceUuid", getGlobalUuid = () => Reflect.get(globalThis, UUID_CACHE_KEY), setGlobalUuid = (uuid) => {
@@ -21809,7 +21573,7 @@ var ENDPOINT = "/.well-known/appspecific/com.chrome.devtools.json", UUID_CACHE_K
21809
21573
  if (!existsSync29(cachePath))
21810
21574
  return null;
21811
21575
  try {
21812
- const value = readFileSync22(cachePath, "utf-8").trim();
21576
+ const value = readFileSync21(cachePath, "utf-8").trim();
21813
21577
  return isUuidV4(value) ? value : null;
21814
21578
  } catch {
21815
21579
  return null;
@@ -22164,7 +21928,7 @@ __export(exports_prerender, {
22164
21928
  prerender: () => prerender,
22165
21929
  PRERENDER_BYPASS_HEADER: () => PRERENDER_BYPASS_HEADER
22166
21930
  });
22167
- import { mkdirSync as mkdirSync15, readFileSync as readFileSync23 } from "fs";
21931
+ import { mkdirSync as mkdirSync15, readFileSync as readFileSync22 } from "fs";
22168
21932
  import { join as join33 } from "path";
22169
21933
  var SERVER_OUTPUT_LIMIT = 4000, STARTUP_POLL_INTERVAL_MS = 100, DEFAULT_STARTUP_TIMEOUT_MS = 30000, PRERENDER_BYPASS_HEADER = "X-Absolute-Prerender-Bypass", routeToFilename = (route) => route === "/" ? "index.html" : `${route.slice(1).replace(/\//g, "-")}.html`, writeTimestamp = async (htmlPath) => {
22170
21934
  const metaPath = htmlPath.replace(/\.html$/, ".meta");
@@ -22172,7 +21936,7 @@ var SERVER_OUTPUT_LIMIT = 4000, STARTUP_POLL_INTERVAL_MS = 100, DEFAULT_STARTUP_
22172
21936
  }, readTimestamp = (htmlPath) => {
22173
21937
  const metaPath = htmlPath.replace(/\.html$/, ".meta");
22174
21938
  try {
22175
- const content = readFileSync23(metaPath, "utf-8");
21939
+ const content = readFileSync22(metaPath, "utf-8");
22176
21940
  return Number(content) || 0;
22177
21941
  } catch {
22178
21942
  return 0;
@@ -22859,8 +22623,8 @@ var handleHTMXPageRequest = async (pagePath) => {
22859
22623
  });
22860
22624
  };
22861
22625
  // src/core/prepare.ts
22862
- import { existsSync as existsSync31, readdirSync as readdirSync3, readFileSync as readFileSync24 } from "fs";
22863
- import { basename as basename15, join as join34, relative as relative16, resolve as resolve41 } from "path";
22626
+ import { existsSync as existsSync31, readdirSync as readdirSync3, readFileSync as readFileSync23 } from "fs";
22627
+ import { basename as basename14, join as join34, relative as relative16, resolve as resolve41 } from "path";
22864
22628
  import { Elysia as Elysia5 } from "elysia";
22865
22629
 
22866
22630
  // src/utils/loadConfig.ts
@@ -23439,7 +23203,7 @@ var loadPrerenderMap = (prerenderDir) => {
23439
23203
  for (const entry of entries) {
23440
23204
  if (!entry.endsWith(".html"))
23441
23205
  continue;
23442
- const name = basename15(entry, ".html");
23206
+ const name = basename14(entry, ".html");
23443
23207
  const route = name === "index" ? "/" : `/${name}`;
23444
23208
  map.set(route, join34(prerenderDir, entry));
23445
23209
  }
@@ -23482,7 +23246,7 @@ var prepare = async (configOrPath) => {
23482
23246
  return result;
23483
23247
  }
23484
23248
  stepStartedAt = performance.now();
23485
- const manifest = JSON.parse(readFileSync24(`${buildDir}/manifest.json`, "utf-8"));
23249
+ const manifest = JSON.parse(readFileSync23(`${buildDir}/manifest.json`, "utf-8"));
23486
23250
  setCurrentIslandManifest(manifest);
23487
23251
  if (config.islands?.registry) {
23488
23252
  setCurrentIslandRegistry(await loadIslandRegistry(config.islands.registry));
@@ -23492,7 +23256,7 @@ var prepare = async (configOrPath) => {
23492
23256
  stepStartedAt = performance.now();
23493
23257
  const conventionsPath = join34(buildDir, "conventions.json");
23494
23258
  if (existsSync31(conventionsPath)) {
23495
- const conventions2 = JSON.parse(readFileSync24(conventionsPath, "utf-8"));
23259
+ const conventions2 = JSON.parse(readFileSync23(conventionsPath, "utf-8"));
23496
23260
  setConventions(conventions2);
23497
23261
  }
23498
23262
  recordStep("load production conventions", stepStartedAt);
@@ -23564,7 +23328,7 @@ import { argv } from "process";
23564
23328
  var {env: env4 } = globalThis.Bun;
23565
23329
 
23566
23330
  // src/dev/devCert.ts
23567
- import { existsSync as existsSync32, mkdirSync as mkdirSync16, readFileSync as readFileSync25, rmSync as rmSync3 } from "fs";
23331
+ import { existsSync as existsSync32, mkdirSync as mkdirSync16, readFileSync as readFileSync24, rmSync as rmSync3 } from "fs";
23568
23332
  import { join as join35 } from "path";
23569
23333
  var CERT_DIR = join35(process.cwd(), ".absolutejs");
23570
23334
  var CERT_PATH = join35(CERT_DIR, "cert.pem");
@@ -23575,7 +23339,7 @@ var devWarn = (msg) => console.log(`\x1B[2m${new Date().toLocaleTimeString()}\x1
23575
23339
  var certFilesExist = () => existsSync32(CERT_PATH) && existsSync32(KEY_PATH);
23576
23340
  var isCertExpired = () => {
23577
23341
  try {
23578
- const certPem = readFileSync25(CERT_PATH, "utf-8");
23342
+ const certPem = readFileSync24(CERT_PATH, "utf-8");
23579
23343
  const proc = Bun.spawnSync(["openssl", "x509", "-enddate", "-noout"], {
23580
23344
  stdin: new TextEncoder().encode(certPem)
23581
23345
  });
@@ -23671,8 +23435,8 @@ var loadDevCert = () => {
23671
23435
  return null;
23672
23436
  try {
23673
23437
  return {
23674
- cert: readFileSync25(paths.cert, "utf-8"),
23675
- key: readFileSync25(paths.key, "utf-8")
23438
+ cert: readFileSync24(paths.cert, "utf-8"),
23439
+ key: readFileSync24(paths.key, "utf-8")
23676
23440
  };
23677
23441
  } catch {
23678
23442
  return null;
@@ -23900,7 +23664,7 @@ var jsonLd2 = (schema) => {
23900
23664
  };
23901
23665
  // src/utils/defineEnv.ts
23902
23666
  var {env: bunEnv } = globalThis.Bun;
23903
- import { existsSync as existsSync33, readFileSync as readFileSync26 } from "fs";
23667
+ import { existsSync as existsSync33, readFileSync as readFileSync25 } from "fs";
23904
23668
  import { resolve as resolve42 } from "path";
23905
23669
 
23906
23670
  // node_modules/@sinclair/typebox/build/esm/type/guard/value.mjs
@@ -29942,13 +29706,13 @@ var checkEnvFileSecurity = (properties) => {
29942
29706
  const sensitiveKeys = Object.keys(properties).filter(isSensitive);
29943
29707
  if (sensitiveKeys.length === 0)
29944
29708
  return;
29945
- const envContent = readFileSync26(envPath, "utf-8");
29709
+ const envContent = readFileSync25(envPath, "utf-8");
29946
29710
  const presentKeys = sensitiveKeys.filter((key) => envContent.includes(`${key}=`));
29947
29711
  if (presentKeys.length === 0)
29948
29712
  return;
29949
29713
  const gitignorePath = resolve42(cwd2, ".gitignore");
29950
29714
  if (existsSync33(gitignorePath)) {
29951
- const gitignore = readFileSync26(gitignorePath, "utf-8");
29715
+ const gitignore = readFileSync25(gitignorePath, "utf-8");
29952
29716
  if (gitignore.split(`
29953
29717
  `).some((line) => line.trim() === ".env"))
29954
29718
  return;
@@ -30186,5 +29950,5 @@ export {
30186
29950
  ANGULAR_INIT_TIMEOUT_MS
30187
29951
  };
30188
29952
 
30189
- //# debugId=7343965EF08E9CF664756E2164756E21
29953
+ //# debugId=1AAD42B006C96FC764756E2164756E21
30190
29954
  //# sourceMappingURL=index.js.map