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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
  2. package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
  3. package/dist/angular/index.js +3 -1
  4. package/dist/angular/index.js.map +3 -3
  5. package/dist/angular/server.js +3 -1
  6. package/dist/angular/server.js.map +3 -3
  7. package/dist/build.js +1919 -284
  8. package/dist/build.js.map +17 -7
  9. package/dist/dev/client/handlers/angularHmrShim.ts +77 -0
  10. package/dist/dev/client/hmrClient.ts +21 -0
  11. package/dist/index.js +2006 -329
  12. package/dist/index.js.map +18 -8
  13. package/dist/react/index.js +3 -1
  14. package/dist/react/index.js.map +2 -2
  15. package/dist/react/server.js +3 -1
  16. package/dist/react/server.js.map +2 -2
  17. package/dist/src/core/prepare.d.ts +25 -0
  18. package/dist/src/dev/angular/fastHmrCompiler.d.ts +19 -0
  19. package/dist/src/dev/angular/hmrCompiler.d.ts +18 -0
  20. package/dist/src/dev/angular/hmrImportGenerator.d.ts +3 -0
  21. package/dist/src/dev/angular/hmrInjectionPlugin.d.ts +7 -0
  22. package/dist/src/dev/angular/resolveOwningComponents.d.ts +8 -0
  23. package/dist/src/dev/angular/vendor/translator/api/ast_factory.d.ts +363 -0
  24. package/dist/src/dev/angular/vendor/translator/api/import_generator.d.ts +49 -0
  25. package/dist/src/dev/angular/vendor/translator/context.d.ts +18 -0
  26. package/dist/src/dev/angular/vendor/translator/translator.d.ts +75 -0
  27. package/dist/src/dev/angular/vendor/translator/ts_util.d.ts +12 -0
  28. package/dist/src/dev/angular/vendor/translator/typescript_ast_factory.d.ts +66 -0
  29. package/dist/src/dev/angular/vendor/translator/typescript_translator.d.ts +13 -0
  30. package/dist/src/plugins/hmr.d.ts +25 -0
  31. package/dist/src/vue/components/Image.d.ts +1 -1
  32. package/dist/svelte/index.js +3 -1
  33. package/dist/svelte/index.js.map +2 -2
  34. package/dist/svelte/server.js +3 -1
  35. package/dist/svelte/server.js.map +2 -2
  36. package/dist/vue/index.js +3 -1
  37. package/dist/vue/index.js.map +2 -2
  38. package/dist/vue/server.js +3 -1
  39. package/dist/vue/server.js.map +2 -2
  40. package/package.json +1 -1
@@ -0,0 +1,77 @@
1
+ import type {} from '../../../types/globals';
2
+ /* `globalThis.__angularHmr` runtime shim.
3
+ *
4
+ * The HMR injection plugin
5
+ * (`src/dev/angular/hmrInjectionPlugin.ts`) appends per-component
6
+ * `__ng_hmr_load` blocks that subscribe via
7
+ * `globalThis.__angularHmr.on('angular:component-update', cb)`.
8
+ * This file installs that bus.
9
+ *
10
+ * It must run before any component chunk does — the injected blocks
11
+ * `if (… && globalThis.__angularHmr.on)` no-op if the shim isn't
12
+ * defined yet, so a registration would silently miss. We keep the
13
+ * shim setup synchronous + at module scope so it's installed during
14
+ * `hmrClient.ts`'s import-evaluation pass, before page chunks load. */
15
+
16
+ export type AngularHmrEvent = 'angular:component-update';
17
+ export type AngularComponentUpdate = {
18
+ id: string;
19
+ timestamp: number;
20
+ };
21
+ export type AngularHmrListener = (data: AngularComponentUpdate) => void;
22
+
23
+ type AngularHmrBus = {
24
+ on(event: AngularHmrEvent, cb: AngularHmrListener): void;
25
+ off(event: AngularHmrEvent, cb: AngularHmrListener): void;
26
+ dispatch(event: AngularHmrEvent, data: AngularComponentUpdate): void;
27
+ };
28
+
29
+ declare global {
30
+ interface Window {
31
+ __angularHmr?: AngularHmrBus;
32
+ }
33
+ // eslint-disable-next-line no-var
34
+ var __angularHmr: AngularHmrBus | undefined;
35
+ }
36
+
37
+ const installAngularHmrShim = (): AngularHmrBus => {
38
+ const listeners = new Map<AngularHmrEvent, Set<AngularHmrListener>>();
39
+
40
+ const bus: AngularHmrBus = {
41
+ on(event, cb) {
42
+ let set = listeners.get(event);
43
+ if (!set) {
44
+ set = new Set();
45
+ listeners.set(event, set);
46
+ }
47
+ set.add(cb);
48
+ },
49
+ off(event, cb) {
50
+ listeners.get(event)?.delete(cb);
51
+ },
52
+ dispatch(event, data) {
53
+ const set = listeners.get(event);
54
+ if (!set) return;
55
+ // Snapshot before iterating — handlers could remove themselves.
56
+ for (const cb of [...set]) {
57
+ try {
58
+ cb(data);
59
+ } catch (err) {
60
+ console.error('[absolutejs] angular HMR listener threw', err);
61
+ }
62
+ }
63
+ }
64
+ };
65
+
66
+ return bus;
67
+ };
68
+
69
+ if (typeof globalThis !== 'undefined' && !globalThis.__angularHmr) {
70
+ globalThis.__angularHmr = installAngularHmrShim();
71
+ }
72
+
73
+ export const dispatchAngularComponentUpdate = (
74
+ data: AngularComponentUpdate
75
+ ) => {
76
+ globalThis.__angularHmr?.dispatch('angular:component-update', data);
77
+ };
@@ -14,6 +14,7 @@ import {
14
14
  import { detectCurrentFramework } from './frameworkDetect';
15
15
  import { hideErrorOverlay, showErrorOverlay } from './errorOverlay';
16
16
  import { handleAngularUpdate } from './handlers/angular';
17
+ import { dispatchAngularComponentUpdate } from './handlers/angularHmrShim';
17
18
  import { handleReactUpdate } from './handlers/react';
18
19
  import { handleHTMLUpdate, handleScriptUpdate } from './handlers/html';
19
20
  import { handleHTMXUpdate } from './handlers/htmx';
@@ -152,6 +153,26 @@ const handleHMRMessage = (message: HMRMessage) => {
152
153
  hideErrorOverlay();
153
154
  handleAngularUpdate(message);
154
155
  break;
156
+ case 'angular:component-update': {
157
+ // Surgical-HMR fast path. Server resolved the changed
158
+ // file → owning component classes and emitted one
159
+ // message per affected component. Our injected
160
+ // `__ng_hmr_load` blocks (see hmrInjectionPlugin.ts)
161
+ // listen here and re-fetch the applyMetadata module.
162
+ const data = message.data as
163
+ | { id?: string; timestamp?: number }
164
+ | undefined;
165
+ if (data && typeof data.id === 'string') {
166
+ dispatchAngularComponentUpdate({
167
+ id: data.id,
168
+ timestamp:
169
+ typeof data.timestamp === 'number'
170
+ ? data.timestamp
171
+ : Date.now()
172
+ });
173
+ }
174
+ break;
175
+ }
155
176
  case 'rebuild-error':
156
177
  handleRebuildError(message);
157
178
  break;