@absolutejs/absolute 0.19.0-beta.879 → 0.19.0-beta.880

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
@@ -115,6 +115,7 @@ var isValidHMRClientMessage = (data) => {
115
115
  case "request-rebuild":
116
116
  case "hydration-error":
117
117
  case "hmr-timing":
118
+ case "angular:hmr-ack":
118
119
  return true;
119
120
  default:
120
121
  return false;
@@ -9882,7 +9883,26 @@ var ENTITY_DECORATOR_RE, IMPORT_RE, TOP_LEVEL_DECL_RE, extractAllTopLevelNames =
9882
9883
  // patch the prototype, no view recreation needed).
9883
9884
  {
9884
9885
  const __ng_hmr_id = ${encodedIdLiteral};
9886
+ // Send a server-side ack so the dev terminal can log the
9887
+ // full HMR latency (server compile + WS hop + client apply +
9888
+ // CD pulse) rather than just the server-side compile time.
9889
+ const __ng_hmr_ack = (tier, applyMs, error) => {
9890
+ try {
9891
+ const ws = globalThis.__HMR_WS__;
9892
+ if (ws && ws.readyState === 1) {
9893
+ ws.send(JSON.stringify({
9894
+ type: 'angular:hmr-ack',
9895
+ id: __ng_hmr_id,
9896
+ className: ${JSON.stringify(className)},
9897
+ tier,
9898
+ applyMs,
9899
+ error
9900
+ }));
9901
+ }
9902
+ } catch {}
9903
+ };
9885
9904
  const __ng_hmr_load = async (t) => {
9905
+ const t0 = performance.now();
9886
9906
  const [u, core] = await Promise.all([
9887
9907
  import('/@ng/component?c=' + encodeURIComponent(__ng_hmr_id) + '&t=' + t),
9888
9908
  import('@angular/core')
@@ -9898,13 +9918,16 @@ var ENTITY_DECORATOR_RE, IMPORT_RE, TOP_LEVEL_DECL_RE, extractAllTopLevelNames =
9898
9918
  import.meta,
9899
9919
  __ng_hmr_id
9900
9920
  );
9921
+ __ng_hmr_ack('tier-0', performance.now() - t0);
9901
9922
  } catch (err) {
9902
9923
  console.error('[abs-hmr] \u0275\u0275replaceMetadata threw for ${className}:', err);
9924
+ __ng_hmr_ack('tier-0', performance.now() - t0, String(err && err.message || err));
9903
9925
  }
9904
9926
  } else {
9905
9927
  // Non-component entity (pipe / directive / service) \u2014 no
9906
9928
  // LView tree to walk, just apply the prototype patch.
9907
9929
  u.default(${className}, [core]);
9930
+ __ng_hmr_ack('tier-0', performance.now() - t0);
9908
9931
  }
9909
9932
  };
9910
9933
  // Tier 1 remount: structural changes (new ctor params / new field
@@ -9917,6 +9940,7 @@ var ENTITY_DECORATOR_RE, IMPORT_RE, TOP_LEVEL_DECL_RE, extractAllTopLevelNames =
9917
9940
  // shared implementation is on \`globalThis.__absAngularRemount\` \u2014
9918
9941
  // installed by hmrClient.ts's import-time wiring.
9919
9942
  const __ng_hmr_remount = async (t) => {
9943
+ const t0 = performance.now();
9920
9944
  const [u, core] = await Promise.all([
9921
9945
  import('/@ng/component?c=' + encodeURIComponent(__ng_hmr_id) + '&t=' + t),
9922
9946
  import('@angular/core')
@@ -9932,8 +9956,10 @@ var ENTITY_DECORATOR_RE, IMPORT_RE, TOP_LEVEL_DECL_RE, extractAllTopLevelNames =
9932
9956
  core,
9933
9957
  ${JSON.stringify(className)}
9934
9958
  );
9959
+ __ng_hmr_ack('tier-1a', performance.now() - t0);
9935
9960
  } catch (err) {
9936
9961
  console.error('[abs-hmr] remount threw for ${className}:', err);
9962
+ __ng_hmr_ack('tier-1a', performance.now() - t0, String(err && err.message || err));
9937
9963
  }
9938
9964
  } else {
9939
9965
  // No remount helper installed (older absolutejs runtime, or
@@ -16763,6 +16789,12 @@ var trySendMessage = (client2, messageStr) => {
16763
16789
  case "hmr-timing":
16764
16790
  logHmrUpdate(state.lastHmrPath ?? "", state.lastHmrFramework, data.duration);
16765
16791
  break;
16792
+ case "angular:hmr-ack": {
16793
+ const tag = data.tier === "tier-0" ? "tier-0" : "tier-1a";
16794
+ const suffix = data.error ? ` FAILED \u2014 ${data.error}` : ` applied in ${data.applyMs.toFixed(0)}ms`;
16795
+ logInfo(`[ng-hmr] ${tag} ${data.className}${suffix}`);
16796
+ break;
16797
+ }
16766
16798
  }
16767
16799
  }, handleHMRMessage = (state, client2, message) => {
16768
16800
  try {
@@ -18425,13 +18457,21 @@ var init_typescript_translator = __esm(() => {
18425
18457
  var exports_fastHmrCompiler = {};
18426
18458
  __export(exports_fastHmrCompiler, {
18427
18459
  tryFastHmr: () => tryFastHmr,
18460
+ takePendingModule: () => takePendingModule,
18428
18461
  recordFingerprint: () => recordFingerprint,
18429
18462
  invalidateFingerprintCache: () => invalidateFingerprintCache
18430
18463
  });
18431
18464
  import { existsSync as existsSync26, readFileSync as readFileSync20, statSync as statSync4 } from "fs";
18432
18465
  import { dirname as dirname19, relative as relative13, resolve as resolve33 } from "path";
18433
18466
  import ts7 from "typescript";
18434
- var fail = (reason, detail) => ({ ok: false, reason, detail }), fingerprintCache, arraysEqual = (a, b2) => {
18467
+ var fail = (reason, detail) => ({ ok: false, reason, detail }), fingerprintCache, pendingModuleCache, takePendingModule = (id) => {
18468
+ const cached = pendingModuleCache.get(id);
18469
+ if (cached !== undefined)
18470
+ pendingModuleCache.delete(id);
18471
+ return cached;
18472
+ }, setPendingModule = (id, moduleText) => {
18473
+ pendingModuleCache.set(id, moduleText);
18474
+ }, arraysEqual = (a, b2) => {
18435
18475
  if (a.length !== b2.length)
18436
18476
  return false;
18437
18477
  for (let i = 0;i < a.length; i++) {
@@ -19254,6 +19294,7 @@ ${block}
19254
19294
  }
19255
19295
  }
19256
19296
  fingerprintCache.set(fingerprintId, currentFingerprint);
19297
+ setPendingModule(fingerprintId, moduleText);
19257
19298
  return {
19258
19299
  componentSource: sourceFile,
19259
19300
  fingerprintChanged,
@@ -19268,6 +19309,7 @@ var init_fastHmrCompiler = __esm(() => {
19268
19309
  init_hmrImportGenerator();
19269
19310
  init_typescript_translator();
19270
19311
  fingerprintCache = new Map;
19312
+ pendingModuleCache = new Map;
19271
19313
  INPUT_OUTPUT_DECORATORS = new Set(["Input", "Output"]);
19272
19314
  providerProbeCache = new Map;
19273
19315
  TS_EXTENSIONS = [".ts", ".tsx", ".d.ts"];
@@ -19434,6 +19476,12 @@ var globalCache, getCachedHmrProgram = () => globalCache.__ABSOLUTE_ANGULAR_HMR_
19434
19476
  const filePathRel = decoded.slice(0, at2);
19435
19477
  const className = decoded.slice(at2 + 1);
19436
19478
  const componentFilePath = resolve34(process.cwd(), filePathRel);
19479
+ const cacheKey2 = encodeURIComponent(`${componentFilePath}@${className}`);
19480
+ const { takePendingModule: takePendingModule2 } = await Promise.resolve().then(() => (init_fastHmrCompiler(), exports_fastHmrCompiler));
19481
+ const cached = takePendingModule2(cacheKey2);
19482
+ if (cached !== undefined) {
19483
+ return cached;
19484
+ }
19437
19485
  const { resolveOwningComponents: resolveOwningComponents2 } = await Promise.resolve().then(() => (init_resolveOwningComponents(), exports_resolveOwningComponents));
19438
19486
  const owners = resolveOwningComponents2({
19439
19487
  changedFilePath: componentFilePath,
@@ -20101,21 +20149,19 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20101
20149
  return { queue, tier: 0 };
20102
20150
  }, broadcastSurgical = (state, queue) => {
20103
20151
  const timestamp = Date.now();
20104
- for (const { id, className } of queue) {
20152
+ for (const { id } of queue) {
20105
20153
  broadcastToClients(state, {
20106
20154
  data: { id, timestamp },
20107
20155
  type: "angular:component-update"
20108
20156
  });
20109
- logInfo(`[ng-hmr broadcast] ${className}`);
20110
20157
  }
20111
20158
  }, broadcastRemount = (state, queue) => {
20112
20159
  const timestamp = Date.now();
20113
- for (const { id, className } of queue) {
20160
+ for (const { id } of queue) {
20114
20161
  broadcastToClients(state, {
20115
20162
  data: { id, timestamp },
20116
20163
  type: "angular:component-remount"
20117
20164
  });
20118
- logInfo(`[ng-hmr tier-1 remount] ${className}`);
20119
20165
  }
20120
20166
  }, broadcastRebootstrap = async (state, reason) => {
20121
20167
  logInfo(`[ng-hmr tier-1 rebootstrap] ${reason}`);
@@ -20168,20 +20214,25 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, runSequent
20168
20214
  }
20169
20215
  const angularPagesPath = resolve37(angularDir, "pages");
20170
20216
  const pageEntries = resolveAngularPageEntries(state, angularFiles, angularPagesPath);
20217
+ const tierStart = performance.now();
20171
20218
  const verdict = await decideAngularTier(state, angularDir);
20219
+ const tierMs = (performance.now() - tierStart).toFixed(0);
20172
20220
  const runBundle = async () => {
20173
20221
  if (pageEntries.length === 0)
20174
20222
  return;
20175
20223
  await compileAndBundleAngular(state, pageEntries, angularDir);
20176
20224
  markSsrCacheDirty("angular");
20177
20225
  };
20226
+ const queueDescription = (queue) => queue.map((e) => e.className).join(", ");
20178
20227
  if (verdict.tier === 0) {
20179
20228
  broadcastSurgical(state, verdict.queue);
20229
+ logInfo(`[ng-hmr] tier-0 ${queueDescription(verdict.queue)} (server ${tierMs}ms; awaiting client apply)`);
20180
20230
  runBundle().catch((err) => {
20181
20231
  logWarn(`[ng-hmr async bundle] rebuild failed: ${err instanceof Error ? err.message : String(err)}`);
20182
20232
  });
20183
20233
  } else if (verdict.tier === 1 && verdict.kind === "remount") {
20184
20234
  broadcastRemount(state, verdict.queue);
20235
+ logInfo(`[ng-hmr] tier-1a remount ${queueDescription(verdict.queue)} (server ${tierMs}ms; awaiting client apply)`);
20185
20236
  runBundle().catch((err) => {
20186
20237
  logWarn(`[ng-hmr async bundle] rebuild failed: ${err instanceof Error ? err.message : String(err)}`);
20187
20238
  });
@@ -30489,5 +30540,5 @@ export {
30489
30540
  ANGULAR_INIT_TIMEOUT_MS
30490
30541
  };
30491
30542
 
30492
- //# debugId=4117F8576985AF1A64756E2164756E21
30543
+ //# debugId=5A13955C630604EE64756E2164756E21
30493
30544
  //# sourceMappingURL=index.js.map