@analogjs/platform 2.8.0-beta.10 → 2.8.0-beta.12

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/platform",
3
- "version": "2.8.0-beta.10",
3
+ "version": "2.8.0-beta.12",
4
4
  "description": "The fullstack meta-framework for Angular",
5
5
  "type": "module",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
@@ -29,8 +29,8 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "nitropack": "^2.13.1",
32
- "@analogjs/vite-plugin-angular": "^2.8.0-beta.10",
33
- "@analogjs/vite-plugin-nitro": "^2.8.0-beta.10",
32
+ "@analogjs/vite-plugin-angular": "^2.8.0-beta.12",
33
+ "@analogjs/vite-plugin-nitro": "^2.8.0-beta.12",
34
34
  "oxc-parser": "^0.121.0",
35
35
  "vitefu": "^1.1.2"
36
36
  },
@@ -1,10 +1,10 @@
1
1
  export declare const V18_X_NX_DEVKIT = "^20.0.0";
2
2
  export declare const V18_X_NX_ANGULAR = "^20.0.0";
3
- export declare const V18_X_ANALOG_JS_CONTENT = "^2.8.0-beta.10";
4
- export declare const V18_X_ANALOG_JS_ROUTER = "^2.8.0-beta.10";
3
+ export declare const V18_X_ANALOG_JS_CONTENT = "^2.8.0-beta.12";
4
+ export declare const V18_X_ANALOG_JS_ROUTER = "^2.8.0-beta.12";
5
5
  export declare const V18_X_ANALOG_JS_TRPC = "~0.4.0";
6
- export declare const V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.8.0-beta.10";
7
- export declare const V18_X_ANALOG_JS_VITEST_ANGULAR = "^2.8.0-beta.10";
6
+ export declare const V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.8.0-beta.12";
7
+ export declare const V18_X_ANALOG_JS_VITEST_ANGULAR = "^2.8.0-beta.12";
8
8
  export declare const V18_X_TRPC_CLIENT = "^10.25.0";
9
9
  export declare const V18_X_TRPC_SERVER = "^10.25.0";
10
10
  export declare const V18_X_ISOMORPHIC_FETCH = "^3.0.0";
@@ -20,7 +20,7 @@ export declare const V18_X_TAILWINDCSS = "^4.1.4";
20
20
  export declare const V18_X_TAILWINDCSS_VITE = "^4.1.4";
21
21
  export declare const V18_X_POSTCSS = "^8.5.3";
22
22
  export declare const V18_X_AUTOPREFIXER = "^10.4.0";
23
- export declare const V18_X_ANALOG_JS_PLATFORM = "^2.8.0-beta.10";
23
+ export declare const V18_X_ANALOG_JS_PLATFORM = "^2.8.0-beta.12";
24
24
  export declare const V18_X_ANGULAR_DEVKIT_BUILD_ANGULAR = "^19.0.0";
25
25
  export declare const V18_X_NX_VITE = "^21.0.0";
26
26
  export declare const V18_X_NX_LINTER = "^21.0.0";
@@ -5,11 +5,11 @@ exports.V18_X_ZOD = exports.V18_X_VITEST = exports.V18_X_VITE_TSCONFIG_PATHS = e
5
5
  // dependencies
6
6
  exports.V18_X_NX_DEVKIT = '^20.0.0';
7
7
  exports.V18_X_NX_ANGULAR = '^20.0.0';
8
- exports.V18_X_ANALOG_JS_CONTENT = '^2.8.0-beta.10';
9
- exports.V18_X_ANALOG_JS_ROUTER = '^2.8.0-beta.10';
8
+ exports.V18_X_ANALOG_JS_CONTENT = '^2.8.0-beta.12';
9
+ exports.V18_X_ANALOG_JS_ROUTER = '^2.8.0-beta.12';
10
10
  exports.V18_X_ANALOG_JS_TRPC = '~0.4.0';
11
- exports.V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.8.0-beta.10';
12
- exports.V18_X_ANALOG_JS_VITEST_ANGULAR = '^2.8.0-beta.10';
11
+ exports.V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.8.0-beta.12';
12
+ exports.V18_X_ANALOG_JS_VITEST_ANGULAR = '^2.8.0-beta.12';
13
13
  exports.V18_X_TRPC_CLIENT = '^10.25.0';
14
14
  exports.V18_X_TRPC_SERVER = '^10.25.0';
15
15
  exports.V18_X_ISOMORPHIC_FETCH = '^3.0.0';
@@ -26,7 +26,7 @@ exports.V18_X_TAILWINDCSS_VITE = '^4.1.4';
26
26
  exports.V18_X_POSTCSS = '^8.5.3';
27
27
  exports.V18_X_AUTOPREFIXER = '^10.4.0';
28
28
  // devDependencies
29
- exports.V18_X_ANALOG_JS_PLATFORM = '^2.8.0-beta.10';
29
+ exports.V18_X_ANALOG_JS_PLATFORM = '^2.8.0-beta.12';
30
30
  exports.V18_X_ANGULAR_DEVKIT_BUILD_ANGULAR = '^19.0.0';
31
31
  exports.V18_X_NX_VITE = '^21.0.0';
32
32
  exports.V18_X_NX_LINTER = '^21.0.0';
@@ -1,13 +1,13 @@
1
- export declare const V19_X_ANALOG_JS_ROUTER = "^2.8.0-beta.10";
2
- export declare const V19_X_ANALOG_JS_CONTENT = "^2.8.0-beta.10";
1
+ export declare const V19_X_ANALOG_JS_ROUTER = "^2.8.0-beta.12";
2
+ export declare const V19_X_ANALOG_JS_CONTENT = "^2.8.0-beta.12";
3
3
  export declare const V19_X_MARKED = "^15.0.7";
4
4
  export declare const V19_X_MARKED_GFM_HEADING_ID = "^4.1.1";
5
5
  export declare const V19_X_MARKED_HIGHLIGHT = "^2.2.1";
6
6
  export declare const V19_X_MARKED_MANGLE = "^1.1.10";
7
7
  export declare const V19_X_PRISMJS = "^1.29.0";
8
- export declare const V19_X_ANALOG_JS_PLATFORM = "^2.8.0-beta.10";
9
- export declare const V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.8.0-beta.10";
10
- export declare const V19_X_ANALOG_JS_VITEST_ANGULAR = "^2.8.0-beta.10";
8
+ export declare const V19_X_ANALOG_JS_PLATFORM = "^2.8.0-beta.12";
9
+ export declare const V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.8.0-beta.12";
10
+ export declare const V19_X_ANALOG_JS_VITEST_ANGULAR = "^2.8.0-beta.12";
11
11
  export declare const V19_X_NX_ANGULAR = "^22.0.0";
12
12
  export declare const V19_X_NX_VITE = "^22.0.0";
13
13
  export declare const V19_X_JSDOM = "^22.0.0";
@@ -2,17 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NX_X_LATEST_NX = exports.NX_X_LATEST_VITEST = exports.NX_X_LATEST_VITE = exports.V19_X_VITE = exports.V19_X_VITEST = exports.V19_X_VITE_TSCONFIG_PATHS = exports.V19_X_JSDOM = exports.V19_X_NX_VITE = exports.V19_X_NX_ANGULAR = exports.V19_X_ANALOG_JS_VITEST_ANGULAR = exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = exports.V19_X_ANALOG_JS_PLATFORM = exports.V19_X_PRISMJS = exports.V19_X_MARKED_MANGLE = exports.V19_X_MARKED_HIGHLIGHT = exports.V19_X_MARKED_GFM_HEADING_ID = exports.V19_X_MARKED = exports.V19_X_ANALOG_JS_CONTENT = exports.V19_X_ANALOG_JS_ROUTER = void 0;
4
4
  // V19_X
5
- exports.V19_X_ANALOG_JS_ROUTER = '^2.8.0-beta.10';
6
- exports.V19_X_ANALOG_JS_CONTENT = '^2.8.0-beta.10';
5
+ exports.V19_X_ANALOG_JS_ROUTER = '^2.8.0-beta.12';
6
+ exports.V19_X_ANALOG_JS_CONTENT = '^2.8.0-beta.12';
7
7
  exports.V19_X_MARKED = '^15.0.7';
8
8
  exports.V19_X_MARKED_GFM_HEADING_ID = '^4.1.1';
9
9
  exports.V19_X_MARKED_HIGHLIGHT = '^2.2.1';
10
10
  exports.V19_X_MARKED_MANGLE = '^1.1.10';
11
11
  exports.V19_X_PRISMJS = '^1.29.0';
12
12
  // devDependencies
13
- exports.V19_X_ANALOG_JS_PLATFORM = '^2.8.0-beta.10';
14
- exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.8.0-beta.10';
15
- exports.V19_X_ANALOG_JS_VITEST_ANGULAR = '^2.8.0-beta.10';
13
+ exports.V19_X_ANALOG_JS_PLATFORM = '^2.8.0-beta.12';
14
+ exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.8.0-beta.12';
15
+ exports.V19_X_ANALOG_JS_VITEST_ANGULAR = '^2.8.0-beta.12';
16
16
  exports.V19_X_NX_ANGULAR = '^22.0.0';
17
17
  exports.V19_X_NX_VITE = '^22.0.0';
18
18
  exports.V19_X_JSDOM = '^22.0.0';
@@ -1,13 +1,5 @@
1
1
  import type { Plugin } from 'vite';
2
- /**
3
- * Minimum Angular major whose compiled `@angular/core` FESM matches the
4
- * streaming patch anchors. Incremental hydration is a stable public API from
5
- * v20 (`withIncrementalHydration`, `@publicApi 20.0`), but v20's FESM inlines
6
- * the injection anchor's `DeferBlockStateEnd` profiler event to its numeric
7
- * ordinal, whereas v21+ keeps the symbolic `ProfilerEvent.DeferBlockStateEnd`
8
- * form the anchor matches on. Keying on the literal ordinal would be fragile
9
- * (enum values shift between versions), so v21 is the floor.
10
- */
2
+ /** Minimum Angular major qualified for streaming; the actual runtime shape is checked below. */
11
3
  export declare const MIN_STREAMING_ANGULAR_MAJOR = 21;
12
4
  /**
13
5
  * Whether the streaming SSR patch can be applied to the installed Angular.
@@ -16,33 +8,9 @@ export declare const MIN_STREAMING_ANGULAR_MAJOR = 21;
16
8
  * build time and falls back to buffered rendering.
17
9
  */
18
10
  export declare function streamingSupportedOnAngular(major: number | null): boolean;
19
- /**
20
- * Pure transform that injects the streaming-SSR per-block resolution hook into
21
- * `@angular/core`'s compiled output. It is the same class of transform as
22
- * `i18nDefRegistryPlugin` in ./ssr-build-plugin — a string patch of Angular's
23
- * bundle applied only to SSR builds. Exported separately so it can be unit
24
- * tested against a bundle string.
25
- *
26
- * Two edits, both keyed on single-occurrence anchors in the module that holds
27
- * the defer runtime:
28
- * 1. Inside `applyDeferBlockState`, fire `globalThis.__analogSsrDeferCapture`
29
- * when a `@defer` block reaches `Complete` on the server, passing the
30
- * block's live `lContainer` — this is the per-block resolution signal a
31
- * streaming renderer consumes.
32
- * 2. Expose `collectNativeNodesInLContainer` via `globalThis.__analogSsrInternals`
33
- * so the renderer can serialize a block's subtree.
34
- *
35
- * Returns `null` when the module is not the one carrying the defer runtime, so
36
- * it is a no-op on every other Angular module.
37
- */
11
+ /** Inject capture before the named defer function's final profiler call, preserving its original source. */
38
12
  export declare function injectDeferStreamingHook(code: string): string | null;
39
- /**
40
- * Classify an `@angular/core` module for the streaming patch. The patch anchors
41
- * on internal symbol names, so when Angular changes those the transform would
42
- * otherwise become a silent no-op and streaming would degrade to buffered with
43
- * no signal. This distinguishes "not the target module" (skip quietly) from
44
- * "this IS the `@defer` runtime module but the anchors drifted" (worth warning).
45
- */
13
+ /** Inspect the named function's final profiler call without depending on enum ordinals. */
46
14
  export declare function inspectAngularCoreModule(code: string): {
47
15
  kind: 'not-target';
48
16
  } | {
@@ -1,12 +1,5 @@
1
- /**
2
- * Minimum Angular major whose compiled `@angular/core` FESM matches the
3
- * streaming patch anchors. Incremental hydration is a stable public API from
4
- * v20 (`withIncrementalHydration`, `@publicApi 20.0`), but v20's FESM inlines
5
- * the injection anchor's `DeferBlockStateEnd` profiler event to its numeric
6
- * ordinal, whereas v21+ keeps the symbolic `ProfilerEvent.DeferBlockStateEnd`
7
- * form the anchor matches on. Keying on the literal ordinal would be fragile
8
- * (enum values shift between versions), so v21 is the floor.
9
- */
1
+ import { parseSync } from 'oxc-parser';
2
+ /** Minimum Angular major qualified for streaming; the actual runtime shape is checked below. */
10
3
  export const MIN_STREAMING_ANGULAR_MAJOR = 21;
11
4
  /**
12
5
  * Whether the streaming SSR patch can be applied to the installed Angular.
@@ -17,66 +10,80 @@ export const MIN_STREAMING_ANGULAR_MAJOR = 21;
17
10
  export function streamingSupportedOnAngular(major) {
18
11
  return major === null || major >= MIN_STREAMING_ANGULAR_MAJOR;
19
12
  }
20
- /**
21
- * Pure transform that injects the streaming-SSR per-block resolution hook into
22
- * `@angular/core`'s compiled output. It is the same class of transform as
23
- * `i18nDefRegistryPlugin` in ./ssr-build-plugin — a string patch of Angular's
24
- * bundle applied only to SSR builds. Exported separately so it can be unit
25
- * tested against a bundle string.
26
- *
27
- * Two edits, both keyed on single-occurrence anchors in the module that holds
28
- * the defer runtime:
29
- * 1. Inside `applyDeferBlockState`, fire `globalThis.__analogSsrDeferCapture`
30
- * when a `@defer` block reaches `Complete` on the server, passing the
31
- * block's live `lContainer` — this is the per-block resolution signal a
32
- * streaming renderer consumes.
33
- * 2. Expose `collectNativeNodesInLContainer` via `globalThis.__analogSsrInternals`
34
- * so the renderer can serialize a block's subtree.
35
- *
36
- * Returns `null` when the module is not the one carrying the defer runtime, so
37
- * it is a no-op on every other Angular module.
38
- */
39
- export function injectDeferStreamingHook(code) {
40
- const END_ANCHOR = 'profiler(ProfilerEvent.DeferBlockStateEnd);';
41
- if (!code.includes('function applyDeferBlockState(') ||
42
- !code.includes(END_ANCHOR)) {
43
- return null;
44
- }
45
- // Wrap the entire guard — not just the call — so a drifted Angular runtime
46
- // that still matches the anchors but renamed these locals fails as a silent
47
- // no-op instead of throwing a ReferenceError inside applyDeferBlockState.
13
+ function analyzeDeferRuntime(code) {
14
+ if (!code.includes('function applyDeferBlockState('))
15
+ return { kind: 'not-target' };
16
+ const parsed = parseSync('angular-core.mjs', code);
17
+ if (parsed.errors.length)
18
+ return { kind: 'drifted', reason: 'invalid Angular core JavaScript' };
19
+ const fn = parsed.program.body.find((node) => node.type === 'FunctionDeclaration' &&
20
+ node.id?.name === 'applyDeferBlockState');
21
+ if (!fn || fn.type !== 'FunctionDeclaration' || !fn.body)
22
+ return { kind: 'not-target' };
23
+ const names = fn.params
24
+ .map((param) => (param.type === 'Identifier' ? param.name : ''))
25
+ .join(',');
26
+ if (names !== 'newState,lDetails,lContainer,tNode,hostLView')
27
+ return {
28
+ kind: 'drifted',
29
+ reason: 'changed applyDeferBlockState parameters',
30
+ };
31
+ const collector = parsed.program.body.some((node) => node.type === 'FunctionDeclaration' &&
32
+ node.id?.name === 'collectNativeNodesInLContainer');
33
+ if (!collector)
34
+ return {
35
+ kind: 'drifted',
36
+ reason: 'missing collectNativeNodesInLContainer',
37
+ };
38
+ const offset = profilerEndOffset(fn.body.body[fn.body.body.length - 1]);
39
+ return offset === undefined
40
+ ? { kind: 'drifted', reason: 'missing DeferBlockStateEnd profiler anchor' }
41
+ : { kind: 'patchable', offset };
42
+ }
43
+ function profilerEndOffset(statement) {
44
+ if (statement?.type !== 'ExpressionStatement' ||
45
+ statement.expression.type !== 'CallExpression')
46
+ return;
47
+ const call = statement.expression;
48
+ if (call.callee.type !== 'Identifier' ||
49
+ call.callee.name !== 'profiler' ||
50
+ call.arguments.length !== 1)
51
+ return;
52
+ return isEndEvent(call.arguments[0]) ? statement.start : undefined;
53
+ }
54
+ function isEndEvent(event) {
55
+ if (event?.type === 'Literal')
56
+ return typeof event.value === 'number';
57
+ return (event?.type === 'MemberExpression' &&
58
+ !event.computed &&
59
+ event.object.type === 'Identifier' &&
60
+ event.object.name === 'ProfilerEvent' &&
61
+ event.property.type === 'Identifier' &&
62
+ event.property.name === 'DeferBlockStateEnd');
63
+ }
64
+ function patchDeferRuntime(code, offset) {
65
+ if (code.includes('globalThis.__analogSsrDeferCapture({'))
66
+ return code;
48
67
  const capture = `try { if (newState === DeferBlockState.Complete && ` +
49
68
  `typeof ngServerMode !== 'undefined' && ngServerMode && ` +
50
69
  `typeof globalThis.__analogSsrDeferCapture === 'function') { ` +
51
70
  `globalThis.__analogSsrDeferCapture({ ssrUniqueId: lDetails[SSR_UNIQUE_ID], lContainer, hostLView }); } } catch (e) {}\n `;
52
- let out = code.replace(END_ANCHOR, capture + END_ANCHOR);
53
- if (code.includes('function collectNativeNodesInLContainer(')) {
54
- out +=
55
- '\nglobalThis.__analogSsrInternals = Object.assign(globalThis.__analogSsrInternals || {}, { collectNativeNodesInLContainer });\n';
56
- }
57
- return out;
71
+ return (code.slice(0, offset) +
72
+ capture +
73
+ code.slice(offset) +
74
+ '\nglobalThis.__analogSsrInternals = Object.assign(globalThis.__analogSsrInternals || {}, { collectNativeNodesInLContainer });\n');
58
75
  }
59
- /**
60
- * Classify an `@angular/core` module for the streaming patch. The patch anchors
61
- * on internal symbol names, so when Angular changes those the transform would
62
- * otherwise become a silent no-op and streaming would degrade to buffered with
63
- * no signal. This distinguishes "not the target module" (skip quietly) from
64
- * "this IS the `@defer` runtime module but the anchors drifted" (worth warning).
65
- */
76
+ /** Inject capture before the named defer function's final profiler call, preserving its original source. */
77
+ export function injectDeferStreamingHook(code) {
78
+ const info = analyzeDeferRuntime(code);
79
+ return info.kind === 'patchable'
80
+ ? patchDeferRuntime(code, info.offset)
81
+ : null;
82
+ }
83
+ /** Inspect the named function's final profiler call without depending on enum ordinals. */
66
84
  export function inspectAngularCoreModule(code) {
67
- if (!code.includes('function applyDeferBlockState(')) {
68
- return { kind: 'not-target' };
69
- }
70
- const missing = [];
71
- if (!code.includes('profiler(ProfilerEvent.DeferBlockStateEnd);')) {
72
- missing.push('DeferBlockStateEnd profiler anchor');
73
- }
74
- if (!code.includes('function collectNativeNodesInLContainer(')) {
75
- missing.push('collectNativeNodesInLContainer');
76
- }
77
- return missing.length === 0
78
- ? { kind: 'patchable' }
79
- : { kind: 'drifted', reason: `missing ${missing.join(', ')}` };
85
+ const info = analyzeDeferRuntime(code);
86
+ return info.kind === 'patchable' ? { kind: 'patchable' } : info;
80
87
  }
81
88
  /**
82
89
  * Vite plugin that applies {@link injectDeferStreamingHook} to `@angular/core`
@@ -90,11 +97,17 @@ export function inspectAngularCoreModule(code) {
90
97
  * that falls back to buffered rendering.
91
98
  */
92
99
  export function deferStreamingPlugin() {
93
- let applied = false;
94
- let warnedDrift = false;
100
+ const applied = new Set();
101
+ const warnedDrift = new Set();
95
102
  return {
96
103
  name: 'analogjs-defer-streaming',
97
104
  enforce: 'post',
105
+ config() {
106
+ return {
107
+ ssr: { noExternal: ['@angular/core'] },
108
+ environments: { ssr: { optimizeDeps: { exclude: ['@angular/core'] } } },
109
+ };
110
+ },
98
111
  transform: {
99
112
  filter: {
100
113
  id: /\/@angular\/core\//,
@@ -102,12 +115,13 @@ export function deferStreamingPlugin() {
102
115
  handler(code, _id, options) {
103
116
  if (!options?.ssr)
104
117
  return;
105
- const info = inspectAngularCoreModule(code);
118
+ const environment = this.environment.name;
119
+ const info = analyzeDeferRuntime(code);
106
120
  if (info.kind === 'not-target')
107
121
  return;
108
122
  if (info.kind === 'drifted') {
109
- if (!warnedDrift) {
110
- warnedDrift = true;
123
+ if (!warnedDrift.has(environment)) {
124
+ warnedDrift.add(environment);
111
125
  this.warn(`experimental streaming SSR: found @angular/core's @defer runtime ` +
112
126
  `but could not apply the resolution hook (${info.reason}). The ` +
113
127
  `installed Angular version likely changed internals the patch ` +
@@ -115,15 +129,18 @@ export function deferStreamingPlugin() {
115
129
  }
116
130
  return;
117
131
  }
118
- const out = injectDeferStreamingHook(code);
119
- if (!out)
120
- return;
121
- applied = true;
132
+ const out = patchDeferRuntime(code, info.offset);
133
+ applied.add(environment);
122
134
  return { code: out };
123
135
  },
124
136
  },
125
137
  buildEnd() {
126
- if (!applied && !warnedDrift) {
138
+ // Require coverage from the SSR service. A later Nitro rebundle may
139
+ // also encounter Angular modules imported by endpoint handlers.
140
+ const environment = this.environment.name;
141
+ if (environment !== 'ssr')
142
+ return;
143
+ if (!applied.has(environment) && !warnedDrift.has(environment)) {
127
144
  this.warn(`experimental streaming SSR is enabled but @angular/core's @defer ` +
128
145
  `runtime module was never encountered during the SSR build, so the ` +
129
146
  `resolution hook was not injected. Streaming will fall back to ` +
@@ -132,4 +149,4 @@ export function deferStreamingPlugin() {
132
149
  },
133
150
  };
134
151
  }
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmZXItc3RyZWFtaW5nLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvc3NyL2RlZmVyLXN0cmVhbWluZy1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxFQUFFLENBQUM7QUFFOUM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsS0FBb0I7SUFDOUQsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssSUFBSSwyQkFBMkIsQ0FBQztBQUNoRSxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxJQUFZO0lBQ25ELE1BQU0sVUFBVSxHQUFHLDZDQUE2QyxDQUFDO0lBQ2pFLElBQ0UsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDO1FBQ2hELENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFDMUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQzFFLE1BQU0sT0FBTyxHQUNYLHFEQUFxRDtRQUNyRCx5REFBeUQ7UUFDekQsOERBQThEO1FBQzlELDJIQUEySCxDQUFDO0lBRTlILElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQztJQUV6RCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsMENBQTBDLENBQUMsRUFBRSxDQUFDO1FBQzlELEdBQUc7WUFDRCxpSUFBaUksQ0FBQztJQUN0SSxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFB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
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmZXItc3RyZWFtaW5nLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvc3NyL2RlZmVyLXN0cmVhbWluZy1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBaUMsTUFBTSxZQUFZLENBQUM7QUFFdEUsZ0dBQWdHO0FBQ2hHLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztBQUU5Qzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxLQUFvQjtJQUM5RCxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxJQUFJLDJCQUEyQixDQUFDO0FBQ2hFLENBQUM7QUFPRCxTQUFTLG1CQUFtQixDQUFDLElBQVk7SUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0NBQWdDLENBQUM7UUFDbEQsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUNoQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07UUFDdEIsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGlDQUFpQyxFQUFFLENBQUM7SUFDeEUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNqQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsSUFBSSxDQUFDLElBQUksS0FBSyxxQkFBcUI7UUFDbkMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEtBQUssc0JBQXNCLENBQzNDLENBQUM7SUFDRixJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLElBQUksQ0FBQyxFQUFFLENBQUMsSUFB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