@angular/platform-server 18.1.0-rc.0 → 18.2.0-next.0

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.
@@ -27,10 +27,10 @@ export class ServerXhr {
27
27
  }
28
28
  return new impl.XMLHttpRequest();
29
29
  }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerXhr, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
31
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerXhr }); }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerXhr, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
31
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerXhr }); }
32
32
  }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerXhr, decorators: [{
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerXhr, decorators: [{
34
34
  type: Injectable
35
35
  }] });
36
36
  function relativeUrlsTransformerInterceptorFn(request, next) {
@@ -101,10 +101,10 @@ export class ServerPlatformLocation {
101
101
  getState() {
102
102
  return undefined;
103
103
  }
104
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerPlatformLocation, deps: [{ token: DOCUMENT }, { token: INITIAL_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
105
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerPlatformLocation }); }
104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerPlatformLocation, deps: [{ token: DOCUMENT }, { token: INITIAL_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
105
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerPlatformLocation }); }
106
106
  }
107
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerPlatformLocation, decorators: [{
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerPlatformLocation, decorators: [{
108
108
  type: Injectable
109
109
  }], ctorParameters: () => [{ type: undefined, decorators: [{
110
110
  type: Inject,
@@ -30,10 +30,10 @@ export class PlatformState {
30
30
  getDocument() {
31
31
  return this._doc;
32
32
  }
33
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: PlatformState, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
34
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: PlatformState }); }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: PlatformState, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
34
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: PlatformState }); }
35
35
  }
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: PlatformState, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: PlatformState, decorators: [{
37
37
  type: Injectable
38
38
  }], ctorParameters: () => [{ type: undefined, decorators: [{
39
39
  type: Inject,
@@ -7,4 +7,5 @@
7
7
  */
8
8
  export { INTERNAL_SERVER_PLATFORM_PROVIDERS as ɵINTERNAL_SERVER_PLATFORM_PROVIDERS, SERVER_RENDER_PROVIDERS as ɵSERVER_RENDER_PROVIDERS, } from './server';
9
9
  export { SERVER_CONTEXT as ɵSERVER_CONTEXT } from './utils';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9leHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS1zZXJ2ZXIvc3JjL3ByaXZhdGVfZXhwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFDTCxrQ0FBa0MsSUFBSSxtQ0FBbUMsRUFDekUsdUJBQXVCLElBQUksd0JBQXdCLEdBQ3BELE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxjQUFjLElBQUksZUFBZSxFQUFDLE1BQU0sU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCB7XG4gIElOVEVSTkFMX1NFUlZFUl9QTEFURk9STV9QUk9WSURFUlMgYXMgybVJTlRFUk5BTF9TRVJWRVJfUExBVEZPUk1fUFJPVklERVJTLFxuICBTRVJWRVJfUkVOREVSX1BST1ZJREVSUyBhcyDJtVNFUlZFUl9SRU5ERVJfUFJPVklERVJTLFxufSBmcm9tICcuL3NlcnZlcic7XG5leHBvcnQge1NFUlZFUl9DT05URVhUIGFzIMm1U0VSVkVSX0NPTlRFWFR9IGZyb20gJy4vdXRpbHMnO1xuIl19
10
+ export { enableSsrProfiling as ɵenableSsrProfiling, disableSsrProfiling as ɵdisableSsrProfiling, } from './profiler';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZV9leHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS1zZXJ2ZXIvc3JjL3ByaXZhdGVfZXhwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFDTCxrQ0FBa0MsSUFBSSxtQ0FBbUMsRUFDekUsdUJBQXVCLElBQUksd0JBQXdCLEdBQ3BELE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxjQUFjLElBQUksZUFBZSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQzFELE9BQU8sRUFDTCxrQkFBa0IsSUFBSSxtQkFBbUIsRUFDekMsbUJBQW1CLElBQUksb0JBQW9CLEdBQzVDLE1BQU0sWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCB7XG4gIElOVEVSTkFMX1NFUlZFUl9QTEFURk9STV9QUk9WSURFUlMgYXMgybVJTlRFUk5BTF9TRVJWRVJfUExBVEZPUk1fUFJPVklERVJTLFxuICBTRVJWRVJfUkVOREVSX1BST1ZJREVSUyBhcyDJtVNFUlZFUl9SRU5ERVJfUFJPVklERVJTLFxufSBmcm9tICcuL3NlcnZlcic7XG5leHBvcnQge1NFUlZFUl9DT05URVhUIGFzIMm1U0VSVkVSX0NPTlRFWFR9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHtcbiAgZW5hYmxlU3NyUHJvZmlsaW5nIGFzIMm1ZW5hYmxlU3NyUHJvZmlsaW5nLFxuICBkaXNhYmxlU3NyUHJvZmlsaW5nIGFzIMm1ZGlzYWJsZVNzclByb2ZpbGluZyxcbn0gZnJvbSAnLi9wcm9maWxlcic7XG4iXX0=
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ const PERFORMANCE_MARK_PREFIX = '🅰️';
9
+ let enablePerfLogging = false;
10
+ export function runAndMeasurePerf(label, method) {
11
+ if (!enablePerfLogging) {
12
+ return method();
13
+ }
14
+ const labelName = `${PERFORMANCE_MARK_PREFIX}:${label}`;
15
+ const startLabel = `start:${labelName}`;
16
+ const endLabel = `end:${labelName}`;
17
+ const end = () => {
18
+ /* tslint:disable:ban */
19
+ performance.mark(endLabel);
20
+ performance.measure(labelName, startLabel, endLabel);
21
+ performance.clearMarks(startLabel);
22
+ performance.clearMarks(endLabel);
23
+ /* tslint:enable:ban */
24
+ };
25
+ /* tslint:disable:ban */
26
+ performance.mark(startLabel);
27
+ /* tslint:enable:ban */
28
+ const returnValue = method();
29
+ if (returnValue instanceof Promise) {
30
+ return returnValue.finally(() => end());
31
+ }
32
+ else {
33
+ end();
34
+ return returnValue;
35
+ }
36
+ }
37
+ let warningLogged = false;
38
+ /**
39
+ * This enables an internal performance profiler for SSR apps
40
+ *
41
+ * It should not be imported in application code
42
+ */
43
+ export function enableSsrProfiling() {
44
+ if (!warningLogged &&
45
+ (typeof performance === 'undefined' || !performance.mark || !performance.measure)) {
46
+ warningLogged = true;
47
+ console.warn('Performance API is not supported on this platform');
48
+ return;
49
+ }
50
+ enablePerfLogging = true;
51
+ }
52
+ export function disableSsrProfiling() {
53
+ enablePerfLogging = false;
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS1zZXJ2ZXIvc3JjL3Byb2ZpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0FBRXRDLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBRTlCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBSSxLQUFhLEVBQUUsTUFBZTtJQUNqRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN2QixPQUFPLE1BQU0sRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxHQUFHLHVCQUF1QixJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3hELE1BQU0sVUFBVSxHQUFHLFNBQVMsU0FBUyxFQUFFLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxTQUFTLEVBQUUsQ0FBQztJQUVwQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUU7UUFDZix3QkFBd0I7UUFDeEIsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQixXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckQsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLHVCQUF1QjtJQUN6QixDQUFDLENBQUM7SUFFRix3QkFBd0I7SUFDeEIsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3Qix1QkFBdUI7SUFFdkIsTUFBTSxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDN0IsSUFBSSxXQUFXLFlBQVksT0FBTyxFQUFFLENBQUM7UUFDbkMsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFNLENBQUM7SUFDL0MsQ0FBQztTQUFNLENBQUM7UUFDTixHQUFHLEVBQUUsQ0FBQztRQUNOLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDO0FBRUQsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQzFCOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLElBQ0UsQ0FBQyxhQUFhO1FBQ2QsQ0FBQyxPQUFPLFdBQVcsS0FBSyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUNqRixDQUFDO1FBQ0QsYUFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDbEUsT0FBTztJQUNULENBQUM7SUFFRCxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDM0IsQ0FBQztBQUNELE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuY29uc3QgUEVSRk9STUFOQ0VfTUFSS19QUkVGSVggPSAn8J+FsO+4jyc7XG5cbmxldCBlbmFibGVQZXJmTG9nZ2luZyA9IGZhbHNlO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVuQW5kTWVhc3VyZVBlcmY8VD4obGFiZWw6IHN0cmluZywgbWV0aG9kOiAoKSA9PiBUKTogVCB7XG4gIGlmICghZW5hYmxlUGVyZkxvZ2dpbmcpIHtcbiAgICByZXR1cm4gbWV0aG9kKCk7XG4gIH1cblxuICBjb25zdCBsYWJlbE5hbWUgPSBgJHtQRVJGT1JNQU5DRV9NQVJLX1BSRUZJWH06JHtsYWJlbH1gO1xuICBjb25zdCBzdGFydExhYmVsID0gYHN0YXJ0OiR7bGFiZWxOYW1lfWA7XG4gIGNvbnN0IGVuZExhYmVsID0gYGVuZDoke2xhYmVsTmFtZX1gO1xuXG4gIGNvbnN0IGVuZCA9ICgpID0+IHtcbiAgICAvKiB0c2xpbnQ6ZGlzYWJsZTpiYW4gKi9cbiAgICBwZXJmb3JtYW5jZS5tYXJrKGVuZExhYmVsKTtcbiAgICBwZXJmb3JtYW5jZS5tZWFzdXJlKGxhYmVsTmFtZSwgc3RhcnRMYWJlbCwgZW5kTGFiZWwpO1xuICAgIHBlcmZvcm1hbmNlLmNsZWFyTWFya3Moc3RhcnRMYWJlbCk7XG4gICAgcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyhlbmRMYWJlbCk7XG4gICAgLyogdHNsaW50OmVuYWJsZTpiYW4gKi9cbiAgfTtcblxuICAvKiB0c2xpbnQ6ZGlzYWJsZTpiYW4gKi9cbiAgcGVyZm9ybWFuY2UubWFyayhzdGFydExhYmVsKTtcbiAgLyogdHNsaW50OmVuYWJsZTpiYW4gKi9cblxuICBjb25zdCByZXR1cm5WYWx1ZSA9IG1ldGhvZCgpO1xuICBpZiAocmV0dXJuVmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlLmZpbmFsbHkoKCkgPT4gZW5kKCkpIGFzIFQ7XG4gIH0gZWxzZSB7XG4gICAgZW5kKCk7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG59XG5cbmxldCB3YXJuaW5nTG9nZ2VkID0gZmFsc2U7XG4vKipcbiAqIFRoaXMgZW5hYmxlcyBhbiBpbnRlcm5hbCBwZXJmb3JtYW5jZSBwcm9maWxlciBmb3IgU1NSIGFwcHNcbiAqXG4gKiBJdCBzaG91bGQgbm90IGJlIGltcG9ydGVkIGluIGFwcGxpY2F0aW9uIGNvZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZVNzclByb2ZpbGluZygpIHtcbiAgaWYgKFxuICAgICF3YXJuaW5nTG9nZ2VkICYmXG4gICAgKHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIXBlcmZvcm1hbmNlLm1hcmsgfHwgIXBlcmZvcm1hbmNlLm1lYXN1cmUpXG4gICkge1xuICAgIHdhcm5pbmdMb2dnZWQgPSB0cnVlO1xuICAgIGNvbnNvbGUud2FybignUGVyZm9ybWFuY2UgQVBJIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVuYWJsZVBlcmZMb2dnaW5nID0gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlU3NyUHJvZmlsaW5nKCkge1xuICBlbmFibGVQZXJmTG9nZ2luZyA9IGZhbHNlO1xufVxuIl19
@@ -53,11 +53,11 @@ export const PLATFORM_SERVER_PROVIDERS = [
53
53
  * @publicApi
54
54
  */
55
55
  export class ServerModule {
56
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
57
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerModule, imports: [HttpClientModule, NoopAnimationsModule], exports: [BrowserModule] }); }
58
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerModule, providers: PLATFORM_SERVER_PROVIDERS, imports: [HttpClientModule, NoopAnimationsModule, BrowserModule] }); }
56
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
57
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerModule, imports: [HttpClientModule, NoopAnimationsModule], exports: [BrowserModule] }); }
58
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerModule, providers: PLATFORM_SERVER_PROVIDERS, imports: [HttpClientModule, NoopAnimationsModule, BrowserModule] }); }
59
59
  }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerModule, decorators: [{
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerModule, decorators: [{
61
61
  type: NgModule,
62
62
  args: [{
63
63
  exports: [BrowserModule],
@@ -21,10 +21,10 @@ export class ServerEventManagerPlugin extends EventManagerPlugin {
21
21
  addEventListener(element, eventName, handler) {
22
22
  return getDOM().onAndCancel(element, eventName, handler);
23
23
  }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerEventManagerPlugin, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
25
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerEventManagerPlugin }); }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerEventManagerPlugin, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
25
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerEventManagerPlugin }); }
26
26
  }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerEventManagerPlugin, decorators: [{
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerEventManagerPlugin, decorators: [{
28
28
  type: Injectable
29
29
  }], ctorParameters: () => [{ type: undefined, decorators: [{
30
30
  type: Inject,
@@ -10,6 +10,7 @@ import { PlatformState } from './platform_state';
10
10
  import { platformServer } from './server';
11
11
  import { BEFORE_APP_SERIALIZED, INITIAL_CONFIG } from './tokens';
12
12
  import { createScript } from './transfer_state';
13
+ import { runAndMeasurePerf } from './profiler';
13
14
  /**
14
15
  * Event dispatch (JSAction) script is inlined into the HTML by the build
15
16
  * process to avoid extra blocking request on a page. The script looks like this:
@@ -208,8 +209,10 @@ export async function renderModule(moduleType, options) {
208
209
  * @publicApi
209
210
  */
210
211
  export async function renderApplication(bootstrap, options) {
211
- const platformRef = createServerPlatform(options);
212
- const applicationRef = await bootstrap();
213
- return _render(platformRef, applicationRef);
212
+ return runAndMeasurePerf('renderApplication', async () => {
213
+ const platformRef = createServerPlatform(options);
214
+ const applicationRef = await bootstrap();
215
+ return _render(platformRef, applicationRef);
216
+ });
214
217
  }
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS1zZXJ2ZXIvc3JjL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFDTCxNQUFNLEVBQ04sY0FBYyxFQUNkLFNBQVMsRUFDVCxjQUFjLEVBR2QsU0FBUyxFQUdULHFCQUFxQixJQUFJLG9CQUFvQixFQUM3QywrQkFBK0IsSUFBSSw4QkFBOEIsRUFDakUsNkJBQTZCLElBQUksNEJBQTRCLEVBQzdELFdBQVcsSUFBSSxVQUFVLEdBQzFCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRTlDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyw0QkFBNEIsQ0FBQztBQVFyRTs7O0dBR0c7QUFDSCxTQUFTLG9CQUFvQixDQUFDLE9BQXdCO0lBQ3BELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7SUFDdkQsT0FBTyxjQUFjLENBQUM7UUFDcEIsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxFQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFDLEVBQUM7UUFDbkYsY0FBYztLQUNmLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHVCQUF1QixDQUFDLEdBQWE7SUFDNUMsT0FBTyxHQUFHLENBQUMsY0FBYyxD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QXFCLENBQUMsYUFBcUI7SUFDbEQsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDO0FBQy9ELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxVQUFtQixFQUNuQixPQUF3RjtJQUV4RixNQUFNLEVBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUMsR0FBRyxPQUFPLENBQUM7SUFDbkUsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFDLENBQUMsQ0FBQztJQUM3RSxNQUFNLFNBQVMsR0FBRyxNQUFNLFdBQVcsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEUsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUQsT0FBTyxPQUFPLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFNBQXdDLEVBQ3hDLE9BQXFGO0lBRXJGLE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sY0FBYyxHQUFHLE1BQU0sU0FBUyxFQUFFLENBQUM7SUFDekMsT0FBTyxPQUFPLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtcbiAgQVBQX0lELFxuICBBcHBsaWNhdGlvblJlZixcbiAgQ1NQX05PTkNFLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgUGxhdGZvcm1SZWYsXG4gIFByb3ZpZGVyLFxuICBSZW5kZXJlcjIsXG4gIFN0YXRpY1Byb3ZpZGVyLFxuICBUeXBlLFxuICDJtWFubm90YXRlRm9ySHlkcmF0aW9uIGFzIGFubm90YXRlRm9ySHlkcmF0aW9uLFxuICDJtUlTX0hZRFJBVElPTl9ET01fUkVVU0VfRU5BQkxFRCBhcyBJU19IWURSQVRJT05fRE9NX1JFVVNFX0VOQUJMRUQsXG4gIMm1U1NSX0NPTlRFTlRfSU5URUdSSVRZX01BUktFUiBhcyBTU1JfQ09OVEVOVF9JTlRFR1JJVFlfTUFSS0VSLFxuICDJtXdoZW5TdGFibGUgYXMgd2hlblN0YWJsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7UGxhdGZvcm1TdGF0ZX0gZnJvbSAnLi9wbGF0Zm9ybV9zdGF0ZSc7XG5pbXBvcnQge3BsYXRmb3JtU2VydmVyfSBmcm9tICcuL3NlcnZlcic7XG5pbXBvcnQge0JFRk9SRV9BUFBfU0VSSUFMSVpFRCwgSU5JVElBTF9DT05GSUd9IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB7Y3JlYXRlU2NyaXB0fSBmcm9tICcuL3RyYW5zZmVyX3N0YXRlJztcblxuLyoqXG4gKiBFdmVudCBkaXNwYXRjaCAoSlNBY3Rpb24pIHNjcmlwdCBpcyBpbmxpbmVkIGludG8gdGhlIEhUTUwgYnkgdGhlIGJ1aWxkXG4gKiBwcm9jZXNzIHRvIGF2b2lkIGV4dHJhIGJsb2NraW5nIHJlcXVlc3Qgb24gYSBwYWdlLiBUaGUgc2NyaXB0IGxvb2tzIGxpa2UgdGhpczpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgaWQ9XCJuZy1ldmVudC1kaXNwYXRjaC1jb250cmFjdFwiPi4uLjwvc2NyaXB0PlxuICogYGBgXG4gKiBUaGlzIGNvbnN0IHJlcHJlc2VudHMgdGhlIFwiaWRcIiBhdHRyaWJ1dGUgdmFsdWUuXG4gKi9cbmV4cG9ydCBjb25zdCBFVkVOVF9ESVNQQVRDSF9TQ1JJUFRfSUQgPSAnbmctZXZlbnQtZGlzcGF0Y2gtY29udHJhY3QnO1xuXG5pbnRlcmZhY2UgUGxhdGZvcm1PcHRpb25zIHtcbiAgZG9jdW1lbnQ/OiBzdHJpbmcgfCBEb2N1bWVudDtcbiAgdXJsPzogc3RyaW5nO1xuICBwbGF0Zm9ybVByb3ZpZGVycz86IFByb3ZpZGVyW107XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBhIHNlcnZlciBwbGF0Zm9ybSAod2l0aCBvciB3aXRob3V0IEpJVCBjb21waWxlciBzdXBwb3J0XG4gKiBkZXBlbmRpbmcgb24gdGhlIGBuZ0ppdE1vZGVgIGdsb2JhbCBjb25zdCB2YWx1ZSksIHVzaW5nIHByb3ZpZGVkIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNlcnZlclBsYXRmb3JtKG9wdGlvbnM6IFBsYXRmb3JtT3B0aW9ucyk6IFBsYXRmb3JtUmVmIHtcbiAgY29uc3QgZXh0cmFQcm92aWRlcnMgPSBvcHRpb25zLnBsYXRmb3JtUHJvdmlkZXJzID8/IFtdO1xuICByZXR1cm4gcGxhdGZvcm1TZXJ2ZXIoW1xuICAgIHtwcm92aWRlOiBJTklUSUFMX0NPTkZJRywgdXNlVmFsdWU6IHtkb2N1bWVudDogb3B0aW9ucy5kb2N1bWVudCwgdXJsOiBvcHRpb25zLnVybH19LFxuICAgIGV4dHJhUHJvdmlkZXJzLFxuICBdKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhbmQgcmV0dXJucyBpbmxpbmVkIGV2ZW50IGRpc3BhdGNoIHNjcmlwdCBpZiBpdCBleGlzdHMuXG4gKiBTZWUgdGhlIGBFVkVOVF9ESVNQQVRDSF9TQ1JJUFRfSURgIGNvbnN0IGRvY3MgZm9yIGFkZGl0aW9uYWwgaW5mby5cbiAqL1xuZnVuY3Rpb24gZmluZEV2ZW50RGlzcGF0Y2hTY3JpcHQoZG9jOiBEb2N1bWVudCkge1xuICByZXR1cm4gZG9jLmdldEVsZW1lbnRCeUlkKEVWRU5UX0RJU1BBVENIX1NDUklQVF9JRCk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBpbmxpbmVkIGV2ZW50IGRpc3BhdGNoIHNjcmlwdCBpZiBpdCBleGlzdHMuXG4gKiBTZWUgdGhlIGBFVkVOVF9ESVNQQVRDSF9TQ1JJUFRfSURgIGNvbnN0IGRvY3MgZm9yIGFkZGl0aW9uYWwgaW5mby5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRXZlbnREaXNwYXRjaFNjcmlwdChkb2M6IERvY3VtZW50KSB7XG4gIGZpbmRFdmVudERpc3BhdGNoU2NyaXB0KGRvYyk/LnJlbW92ZSgpO1xufVxuXG4vKipcbiAqIEFubm90YXRlIG5vZGVzIGZvciBoeWRyYXRpb24gYW5kIHJlbW92ZSBldmVudCBkaXNwYXRjaCBzY3JpcHQgd2hlbiBub3QgbmVlZGVkLlxuICovXG5mdW5jdGlvbiBwcmVwYXJlRm9ySHlkcmF0aW9uKHBsYXRmb3JtU3RhdGU6IFBsYXRmb3JtU3RhdGUsIGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZik6IHZvaWQge1xuICBjb25zdCBlbnZpcm9ubWVudEluamVjdG9yID0gYXBwbGljYXRpb25SZWYuaW5qZWN0b3I7XG4gIGNvbnN0IGRvYyA9IHBsYXRmb3JtU3RhdGUuZ2V0RG9jdW1lbnQoKTtcblxuICBpZiAoIWVudmlyb25tZW50SW5qZWN0b3IuZ2V0KElTX0hZRFJBVElPTl9ET01fUkVVU0VfRU5BQkxFRCwgZmFsc2UpKSB7XG4gICAgLy8gSHlkcmF0aW9uIGlzIGRpYWJsZWQsIHJlbW92ZSBpbmxpbmVkIGV2ZW50IGRpc3BhdGNoIHNjcmlwdC5cbiAgICAvLyAod2hpY2ggd2FzIGluamVjdGVkIGJ5IHRoZSBidWlsZCBwcm9jZXNzKSBmcm9tIHRoZSBIVE1MLlxuICAgIHJlbW92ZUV2ZW50RGlzcGF0Y2hTY3JpcHQoZG9jKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGFwcGVuZFNzckNvbnRlbnRJbnRlZ3JpdHlNYXJrZXIoZG9jKTtcblxuICBjb25zdCBldmVudFR5cGVzVG9SZXBsYXkgPSBhbm5vdGF0ZUZvckh5ZHJhdGlvbihhcHBsaWNhdGlvblJlZiwgZG9jKTtcbiAgaWYgKGV2ZW50VHlwZXNUb1JlcGxheS5yZWd1bGFyLnNpemUgfHwgZXZlbnRUeXBlc1RvUmVwbGF5LmNhcHR1cmUuc2l6ZSkge1xuICAgIGluc2VydEV2ZW50UmVjb3JkU2NyaXB0KFxuICAgICAgZW52aXJvbm1lbnRJbmplY3Rvci5nZXQoQVBQX0lEKSxcbiAgICAgIGRvYyxcbiAgICAgIGV2ZW50VHlwZXNUb1JlcGxheSxcbiAgICAgIGVudmlyb25tZW50SW5qZWN0b3IuZ2V0KENTUF9OT05DRSwgbnVsbCksXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBObyBldmVudHMgdG8gcmVwbGF5LCB3ZSBzaG91bGQgcmVtb3ZlIGlubGluZWQgZXZlbnQgZGlzcGF0Y2ggc2NyaXB0XG4gICAgLy8gKHdoaWNoIHdhcyBpbmplY3RlZCBieSB0aGUgYnVpbGQgcHJvY2VzcykgZnJvbSB0aGUgSFRNTC5cbiAgICByZW1vdmVFdmVudERpc3BhdGNoU2NyaXB0KGRvYyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFya2VyIGNvbW1lbnQgbm9kZSBhbmQgYXBwZW5kIGl0IGludG8gdGhlIGA8Ym9keT5gLlxuICogU29tZSBDRE5zIGhhdmUgbWVjaGFuaXNtcyB0byByZW1vdmUgYWxsIGNvbW1lbnQgbm9kZSBmcm9tIEhUTUwuXG4gKiBUaGlzIGJlaGF2aW91ciBicmVha3MgaHlkcmF0aW9uLCBzbyB3ZSdsbCBkZXRlY3Qgb24gdGhlIGNsaWVudCBzaWRlIGlmIHRoaXNcbiAqIG1hcmtlciBjb21tZW50IGlzIHN0aWxsIGF2YWlsYWJsZSBvciBlbHNlIHRocm93IGFuIGVycm9yXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFNzckNvbnRlbnRJbnRlZ3JpdHlNYXJrZXIoZG9jOiBEb2N1bWVudCkge1xuICAvLyBBZGRpbmcgYSBuZyBoeWRyYXRpb24gbWFya2VyIGNvbW1lbnRcbiAgY29uc3QgY29tbWVudCA9IGRvYy5jcmVhdGVDb21tZW50KFNTUl9DT05URU5UX0lOVEVHUklUWV9NQVJLRVIpO1xuICBkb2MuYm9keS5maXJzdENoaWxkXG4gICAgPyBkb2MuYm9keS5pbnNlcnRCZWZvcmUoY29tbWVudCwgZG9jLmJvZHkuZmlyc3RDaGlsZClcbiAgICA6IGRvYy5ib2R5LmFwcGVuZChjb21tZW50KTtcbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBgbmctc2VydmVyLWNvbnRleHRgIGF0dHJpYnV0ZSB0byBob3N0IGVsZW1lbnRzIG9mIGFsbCBib290c3RyYXBwZWQgY29tcG9uZW50c1xuICogd2l0aGluIGEgZ2l2ZW4gYXBwbGljYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFNlcnZlckNvbnRleHRJbmZvKGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZikge1xuICBjb25zdCBpbmplY3RvciA9IGFwcGxpY2F0aW9uUmVmLmluamVjdG9yO1xuICBsZXQgc2VydmVyQ29udGV4dCA9IHNhbml0aXplU2VydmVyQ29udGV4dChpbmplY3Rvci5nZXQoU0VSVkVSX0NPTlRFWFQsIERFRkFVTFRfU0VSVkVSX0NPTlRFWFQpKTtcbiAgYXBwbGljYXRpb25SZWYuY29tcG9uZW50cy5mb3JFYWNoKChjb21wb25lbnRSZWYpID0+IHtcbiAgICBjb25zdCByZW5kZXJlciA9IGNvbXBvbmVudFJlZi5pbmplY3Rvci5nZXQoUmVuZGVyZXIyKTtcbiAgICBjb25zdCBlbGVtZW50ID0gY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50LCAnbmctc2VydmVyLWNvbnRleHQnLCBzZXJ2ZXJDb250ZXh0KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRFdmVudFJlY29yZFNjcmlwdChcbiAgYXBwSWQ6IHN0cmluZyxcbiAgZG9jOiBEb2N1bWVudCxcbiAgZXZlbnRUeXBlc1RvUmVwbGF5OiB7cmVndWxhcjogU2V0PHN0cmluZz47IGNhcHR1cmU6IFNldDxzdHJpbmc+fSxcbiAgbm9uY2U6IHN0cmluZyB8IG51bGwsXG4pOiB2b2lkIHtcbiAgY29uc3Qge3JlZ3VsYXIsIGNhcHR1cmV9ID0gZXZlbnRUeXBlc1RvUmVwbGF5O1xuICBjb25zdCBldmVudERpc3BhdGNoU2NyaXB0ID0gZmluZEV2ZW50RGlzcGF0Y2hTY3JpcHQoZG9jKTtcbiAgaWYgKGV2ZW50RGlzcGF0Y2hTY3JpcHQpIHtcbiAgICAvLyBUaGlzIGlzIGRlZmluZWQgaW4gcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL2NvbnRyYWN0X2JpbmFyeS50c1xuICAgIGNvbnN0IHJlcGxheVNjcmlwdENvbnRlbnRzID0gYHdpbmRvdy5fX2pzYWN0aW9uX2Jvb3RzdHJhcCgnbmdDb250cmFjdHMnLCBkb2N1bWVudC5ib2R5LCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgYXBwSWQsXG4gICAgKX0sICR7SlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShyZWd1bGFyKSl9JHtjYXB0dXJlLnNpemUgPyAnLCcgKyBKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGNhcHR1cmUpKSA6ICcnfSk7YDtcblxuICAgIGNvbnN0IHJlcGxheVNjcmlwdCA9IGNyZWF0ZVNjcmlwdChkb2MsIHJlcGxheVNjcmlwdENvbnRlbnRzLCBub25jZSk7XG5cbiAgICAvLyBJbnNlcnQgcmVwbGF5IHNjcmlwdCByaWdodCBhZnRlciBpbmxpbmVkIGV2ZW50IGRpc3BhdGNoIHNjcmlwdCwgc2luY2UgaXRcbiAgICAvLyByZWxpZXMgb24gYF9fanNhY3Rpb25fYm9vdHN0cmFwYCB0byBiZSBkZWZpbmVkIGluIHRoZSBnbG9iYWwgc2NvcGUuXG4gICAgZXZlbnREaXNwYXRjaFNjcmlwdC5hZnRlcihyZXBsYXlTY3JpcHQpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9yZW5kZXIocGxhdGZvcm1SZWY6IFBsYXRmb3JtUmVmLCBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYpOiBQcm9taXNlPHN0cmluZz4ge1xuICAvLyBCbG9jayB1bnRpbCBhcHBsaWNhdGlvbiBpcyBzdGFibGUuXG4gIGF3YWl0IHdoZW5TdGFibGUoYXBwbGljYXRpb25SZWYpO1xuXG4gIGNvbnN0IHBsYXRmb3JtU3RhdGUgPSBwbGF0Zm9ybVJlZi5pbmplY3Rvci5nZXQoUGxhdGZvcm1TdGF0ZSk7XG4gIHByZXBhcmVGb3JIeWRyYXRpb24ocGxhdGZvcm1TdGF0ZSwgYXBwbGljYXRpb25SZWYpO1xuXG4gIC8vIFJ1biBhbnkgQkVGT1JFX0FQUF9TRVJJQUxJWkVEIGNhbGxiYWNrcyBqdXN0IGJlZm9yZSByZW5kZXJpbmcgdG8gc3RyaW5nLlxuICBjb25zdCBlbnZpcm9ubWVudEluamVjdG9yID0gYXBwbGljYXRpb25SZWYuaW5qZWN0b3I7XG4gIGNvbnN0IGNhbGxiYWNrcyA9IGVudmlyb25tZW50SW5qZWN0b3IuZ2V0KEJFRk9SRV9BUFBfU0VSSUFMSVpFRCwgbnVsbCk7XG4gIGlmIChjYWxsYmFja3MpIHtcbiAgICBjb25zdCBhc3luY0NhbGxiYWNrczogUHJvbWlzZTx2b2lkPltdID0gW107XG4gICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrUmVzdWx0ID0gY2FsbGJhY2soKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgYXN5bmNDYWxsYmFja3MucHVzaChjYWxsYmFja1Jlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSWdub3JlIGV4Y2VwdGlvbnMuXG4gICAgICAgIGNvbnNvbGUud2FybignSWdub3JpbmcgQkVGT1JFX0FQUF9TRVJJQUxJWkVEIEV4Y2VwdGlvbjogJywgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFzeW5jQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGFzeW5jQ2FsbGJhY2tzKSkge1xuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSWdub3JpbmcgQkVGT1JFX0FQUF9TRVJJQUxJWkVEIEV4Y2VwdGlvbjogJywgcmVzdWx0LnJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBlbmRTZXJ2ZXJDb250ZXh0SW5mbyhhcHBsaWNhdGlvblJlZik7XG4gIGNvbnN0IG91dHB1dCA9IHBsYXRmb3JtU3RhdGUucmVuZGVyVG9TdHJpbmcoKTtcblxuICAvLyBEZXN0cm95IHRoZSBhcHBsaWNhdGlvbiBpbiBhIG1hY3JvdGFzaywgdGhpcyBhbGxvd3MgcGVuZGluZyBwcm9taXNlcyB0byBiZSBzZXR0bGVkIGFuZCBlcnJvcnNcbiAgLy8gdG8gYmUgc3VyZmFjZWQgdG8gdGhlIHVzZXJzLlxuICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcGxhdGZvcm1SZWYuZGVzdHJveSgpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0sIDApO1xuICB9KTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgdmFsdWUgdGhhdCBzaG91bGQgYmUgdXNlZCBpZiBubyBzZXJ2ZXIgY29udGV4dCB2YWx1ZSBoYXMgYmVlbiBwcm92aWRlZC5cbiAqL1xuY29uc3QgREVGQVVMVF9TRVJWRVJfQ09OVEVYVCA9ICdvdGhlcic7XG5cbi8qKlxuICogQW4gaW50ZXJuYWwgdG9rZW4gdGhhdCBhbGxvd3MgcHJvdmlkaW5nIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2ZXIgY29udGV4dFxuICogKGUuZy4gd2hldGhlciBTU1Igb3IgU1NHIHdhcyB1c2VkKS4gVGhlIHZhbHVlIGlzIGEgc3RyaW5nIGFuZCBjaGFyYWN0ZXJzIG90aGVyXG4gKiB0aGFuIFthLXpBLVowLTlcXC1dIGFyZSByZW1vdmVkLiBTZWUgdGhlIGRlZmF1bHQgdmFsdWUgaW4gYERFRkFVTFRfU0VSVkVSX0NPTlRFWFRgIGNvbnN0LlxuICovXG5leHBvcnQgY29uc3QgU0VSVkVSX0NPTlRFWFQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignU0VSVkVSX0NPTlRFWFQnKTtcblxuLyoqXG4gKiBTYW5pdGl6ZXMgcHJvdmlkZWQgc2VydmVyIGNvbnRleHQ6XG4gKiAtIHJlbW92ZXMgYWxsIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBhLXosIEEtWiwgMC05IGFuZCBgLWBcbiAqIC0gcmV0dXJucyBgb3RoZXJgIGlmIG5vdGhpbmcgaXMgcHJvdmlkZWQgb3IgdGhlIHN0cmluZyBpcyBlbXB0eSBhZnRlciBzYW5pdGl6YXRpb25cbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVTZXJ2ZXJDb250ZXh0KHNlcnZlckNvbnRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbnRleHQgPSBzZXJ2ZXJDb250ZXh0LnJlcGxhY2UoL1teYS16QS1aMC05XFwtXS9nLCAnJyk7XG4gIHJldHVybiBjb250ZXh0Lmxlbmd0aCA+IDAgPyBjb250ZXh0IDogREVGQVVMVF9TRVJWRVJfQ09OVEVYVDtcbn1cblxuLyoqXG4gKiBCb290c3RyYXBzIGFuIGFwcGxpY2F0aW9uIHVzaW5nIHByb3ZpZGVkIE5nTW9kdWxlIGFuZCBzZXJpYWxpemVzIHRoZSBwYWdlIGNvbnRlbnQgdG8gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBtb2R1bGVUeXBlIEEgcmVmZXJlbmNlIHRvIGFuIE5nTW9kdWxlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGJvb3RzdHJhcC5cbiAqIEBwYXJhbSBvcHRpb25zIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHJlbmRlciBvcGVyYXRpb246XG4gKiAgLSBgZG9jdW1lbnRgIC0gdGhlIGRvY3VtZW50IG9mIHRoZSBwYWdlIHRvIHJlbmRlciwgZWl0aGVyIGFzIGFuIEhUTUwgc3RyaW5nIG9yXG4gKiAgICAgICAgICAgICAgICAgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGBkb2N1bWVudGAgaW5zdGFuY2UuXG4gKiAgLSBgdXJsYCAtIHRoZSBVUkwgZm9yIHRoZSBjdXJyZW50IHJlbmRlciByZXF1ZXN0LlxuICogIC0gYGV4dHJhUHJvdmlkZXJzYCAtIHNldCBvZiBwbGF0Zm9ybSBsZXZlbCBwcm92aWRlcnMgZm9yIHRoZSBjdXJyZW50IHJlbmRlciByZXF1ZXN0LlxuICpcbiAqIEBwdWJsaWNBcGlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlck1vZHVsZTxUPihcbiAgbW9kdWxlVHlwZTogVHlwZTxUPixcbiAgb3B0aW9uczoge2RvY3VtZW50Pzogc3RyaW5nIHwgRG9jdW1lbnQ7IHVybD86IHN0cmluZzsgZXh0cmFQcm92aWRlcnM/OiBTdGF0aWNQcm92aWRlcltdfSxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtkb2N1bWVudCwgdXJsLCBleHRyYVByb3ZpZGVyczogcGxhdGZvcm1Qcm92aWRlcnN9ID0gb3B0aW9ucztcbiAgY29uc3QgcGxhdGZvcm1SZWYgPSBjcmVhdGVTZXJ2ZXJQbGF0Zm9ybSh7ZG9jdW1lbnQsIHVybCwgcGxhdGZvcm1Qcm92aWRlcnN9KTtcbiAgY29uc3QgbW9kdWxlUmVmID0gYXdhaXQgcGxhdGZvcm1SZWYuYm9vdHN0cmFwTW9kdWxlKG1vZHVsZVR5cGUpO1xuICBjb25zdCBhcHBsaWNhdGlvblJlZiA9IG1vZHVsZVJlZi5pbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpO1xuICByZXR1cm4gX3JlbmRlcihwbGF0Zm9ybVJlZiwgYXBwbGljYXRpb25SZWYpO1xufVxuXG4vKipcbiAqIEJvb3RzdHJhcHMgYW4gaW5zdGFuY2Ugb2YgYW4gQW5ndWxhciBhcHBsaWNhdGlvbiBhbmQgcmVuZGVycyBpdCB0byBhIHN0cmluZy5cblxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYm9vdHN0cmFwID0gKCkgPT4gYm9vdHN0cmFwQXBwbGljYXRpb24oUm9vdENvbXBvbmVudCwgYXBwQ29uZmlnKTtcbiAqIGNvbnN0IG91dHB1dDogc3RyaW5nID0gYXdhaXQgcmVuZGVyQXBwbGljYXRpb24oYm9vdHN0cmFwKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBib290c3RyYXAgQSBtZXRob2QgdGhhdCB3aGVuIGludm9rZWQgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXR1cm5zIGFuIGBBcHBsaWNhdGlvblJlZmBcbiAqICAgICBpbnN0YW5jZSBvbmNlIHJlc29sdmVkLlxuICogQHBhcmFtIG9wdGlvbnMgQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgcmVuZGVyIG9wZXJhdGlvbjpcbiAqICAtIGBkb2N1bWVudGAgLSB0aGUgZG9jdW1lbnQgb2YgdGhlIHBhZ2UgdG8gcmVuZGVyLCBlaXRoZXIgYXMgYW4gSFRNTCBzdHJpbmcgb3JcbiAqICAgICAgICAgICAgICAgICBhcyBhIHJlZmVyZW5jZSB0byB0aGUgYGRvY3VtZW50YCBpbnN0YW5jZS5cbiAqICAtIGB1cmxgIC0gdGhlIFVSTCBmb3IgdGhlIGN1cnJlbnQgcmVuZGVyIHJlcXVlc3QuXG4gKiAgLSBgcGxhdGZvcm1Qcm92aWRlcnNgIC0gdGhlIHBsYXRmb3JtIGxldmVsIHByb3ZpZGVycyBmb3IgdGhlIGN1cnJlbnQgcmVuZGVyIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMgQSBQcm9taXNlLCB0aGF0IHJldHVybnMgc2VyaWFsaXplZCAodG8gYSBzdHJpbmcpIHJlbmRlcmVkIHBhZ2UsIG9uY2UgcmVzb2x2ZWQuXG4gKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyQXBwbGljYXRpb248VD4oXG4gIGJvb3RzdHJhcDogKCkgPT4gUHJvbWlzZTxBcHBsaWNhdGlvblJlZj4sXG4gIG9wdGlvbnM6IHtkb2N1bWVudD86IHN0cmluZyB8IERvY3VtZW50OyB1cmw/OiBzdHJpbmc7IHBsYXRmb3JtUHJvdmlkZXJzPzogUHJvdmlkZXJbXX0sXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwbGF0Zm9ybVJlZiA9IGNyZWF0ZVNlcnZlclBsYXRmb3JtKG9wdGlvbnMpO1xuICBjb25zdCBhcHBsaWNhdGlvblJlZiA9IGF3YWl0IGJvb3RzdHJhcCgpO1xuICByZXR1cm4gX3JlbmRlcihwbGF0Zm9ybVJlZiwgYXBwbGljYXRpb25SZWYpO1xufVxuIl19
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS1zZXJ2ZXIvc3JjL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFDTCxNQUFNLEVBQ04sY0FBYyxFQUNkLFNBQVMsRUFDVCxjQUFjLEVBR2QsU0FBUyxFQUdULHFCQUFxQixJQUFJLG9CQUFvQixFQUM3QywrQkFBK0IsSUFBSSw4QkFBOEIsRUFDakUsNkJBQTZCLElBQUksNEJBQTRCLEVBQzdELFdBQVcsSUFBSSxVQUFVLEdBQzFCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUU3Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsNEJBQTRCLENBQUM7QUFRckU7OztHQUdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxPQUF3QjtJQUNwRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO0lBQ3ZELE9BQU8sY0FBYyxDQUFDO1FBQ3BCLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsRUFBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBQyxFQUFDO1FBQ25GLGNBQWM7S0FDZixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxHQUFhO0lBQzVDLE9BQU8sR0FBRyxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHlCQUF5QixDQUFDLEdBQWE7SUFDOUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDekMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxhQUE0QixFQUFFLGNBQThCO0lBQ3ZGLE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQztJQUNwRCxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFeEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BFLDhEQUE4RDtRQUM5RCwyREFBMkQ7UUFDM0QseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0IsT0FBTztJQUNULENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVyQyxNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRSxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZFLHVCQUF1QixDQUNyQixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQy9CLEdBQUcsRUFDSCxrQkFBa0IsRUFDbEIsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FDekMsQ0FBQztJQUNKLENBQUM7U0FBTSxDQUFDO1FBQ04sc0VBQXNFO1FBQ3RFLDJEQUEyRDtRQUMzRCx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUywrQkFBK0IsQ0FBQyxHQUFhO0lBQ3BELHVDQUF1QztJQUN2QyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDaEUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ2pCLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDckQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHVCQUF1QixDQUFDLGNBQThCO0lBQzdELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7SUFDekMsSUFBSSxhQUFhLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7UUFDakQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDcEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLFFBQVEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUM5QixLQUFhLEVBQ2IsR0FBYSxFQUNiLGtCQUFnRSxFQUNoRSxLQUFvQjtJQUVwQixNQUFNLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxHQUFHLGtCQUFrQixDQUFDO0lBQzlDLE1BQU0sbUJBQW1CLEdBQUcsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekQsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQ3hCLGdGQUFnRjtRQUNoRixNQUFNLG9CQUFvQixHQUFHLDZEQUE2RCxJQUFJLENBQUMsU0FBUyxDQUN0RyxLQUFLLENBQ04sS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM3RCxJQUFJLENBQUM7UUFFTCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXBFLDJFQUEyRTtRQUMzRSxzRUFBc0U7UUFDdEUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFDLENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLE9BQU8sQ0FBQyxXQUF3QixFQUFFLGNBQThCO0lBQzdFLHFDQUFxQztJQUNyQyxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM5RCxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFbkQsMkVBQTJFO0lBQzNFLE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQztJQUNwRCxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkUsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE1BQU0sY0FBYyxHQUFvQixFQUFFLENBQUM7UUFDM0MsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxjQUFjLEdBQUcsUUFBUSxFQUFFLENBQUM7Z0JBQ2xDLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ25CLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxxQkFBcUI7Z0JBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNENBQTRDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEUsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUM5RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNENBQTRDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM1RSxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBRTlDLGdHQUFnRztJQUNoRywrQkFBK0I7SUFDL0IsTUFBTSxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2xDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDO0FBRXZDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQVMsZ0JBQWdCLENBQUMsQ0FBQztBQUUzRTs7OztHQUlHO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxhQUFxQjtJQUNsRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdELE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUM7QUFDL0QsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQ2hDLFVBQW1CLEVBQ25CLE9BQXdGO0lBRXhGLE1BQU0sRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBQyxHQUFHLE9BQU8sQ0FBQztJQUNuRSxNQUFNLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxFQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUMsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sU0FBUyxHQUFHLE1BQU0sV0FBVyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoRSxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5RCxPQUFPLE9BQU8sQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsU0FBd0MsRUFDeEMsT0FBcUY7SUFFckYsT0FBTyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RCxNQUFNLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVsRCxNQUFNLGNBQWMsR0FBRyxNQUFNLFNBQVMsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sT0FBTyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtcbiAgQVBQX0lELFxuICBBcHBsaWNhdGlvblJlZixcbiAgQ1NQX05PTkNFLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgUGxhdGZvcm1SZWYsXG4gIFByb3ZpZGVyLFxuICBSZW5kZXJlcjIsXG4gIFN0YXRpY1Byb3ZpZGVyLFxuICBUeXBlLFxuICDJtWFubm90YXRlRm9ySHlkcmF0aW9uIGFzIGFubm90YXRlRm9ySHlkcmF0aW9uLFxuICDJtUlTX0hZRFJBVElPTl9ET01fUkVVU0VfRU5BQkxFRCBhcyBJU19IWURSQVRJT05fRE9NX1JFVVNFX0VOQUJMRUQsXG4gIMm1U1NSX0NPTlRFTlRfSU5URUdSSVRZX01BUktFUiBhcyBTU1JfQ09OVEVOVF9JTlRFR1JJVFlfTUFSS0VSLFxuICDJtXdoZW5TdGFibGUgYXMgd2hlblN0YWJsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7UGxhdGZvcm1TdGF0ZX0gZnJvbSAnLi9wbGF0Zm9ybV9zdGF0ZSc7XG5pbXBvcnQge3BsYXRmb3JtU2VydmVyfSBmcm9tICcuL3NlcnZlcic7XG5pbXBvcnQge0JFRk9SRV9BUFBfU0VSSUFMSVpFRCwgSU5JVElBTF9DT05GSUd9IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB7Y3JlYXRlU2NyaXB0fSBmcm9tICcuL3RyYW5zZmVyX3N0YXRlJztcbmltcG9ydCB7cnVuQW5kTWVhc3VyZVBlcmZ9IGZyb20gJy4vcHJvZmlsZXInO1xuXG4vKipcbiAqIEV2ZW50IGRpc3BhdGNoIChKU0FjdGlvbikgc2NyaXB0IGlzIGlubGluZWQgaW50byB0aGUgSFRNTCBieSB0aGUgYnVpbGRcbiAqIHByb2Nlc3MgdG8gYXZvaWQgZXh0cmEgYmxvY2tpbmcgcmVxdWVzdCBvbiBhIHBhZ2UuIFRoZSBzY3JpcHQgbG9va3MgbGlrZSB0aGlzOlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBpZD1cIm5nLWV2ZW50LWRpc3BhdGNoLWNvbnRyYWN0XCI+Li4uPC9zY3JpcHQ+XG4gKiBgYGBcbiAqIFRoaXMgY29uc3QgcmVwcmVzZW50cyB0aGUgXCJpZFwiIGF0dHJpYnV0ZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVWRU5UX0RJU1BBVENIX1NDUklQVF9JRCA9ICduZy1ldmVudC1kaXNwYXRjaC1jb250cmFjdCc7XG5cbmludGVyZmFjZSBQbGF0Zm9ybU9wdGlvbnMge1xuICBkb2N1bWVudD86IHN0cmluZyB8IERvY3VtZW50O1xuICB1cmw/OiBzdHJpbmc7XG4gIHBsYXRmb3JtUHJvdmlkZXJzPzogUHJvdmlkZXJbXTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGEgc2VydmVyIHBsYXRmb3JtICh3aXRoIG9yIHdpdGhvdXQgSklUIGNvbXBpbGVyIHN1cHBvcnRcbiAqIGRlcGVuZGluZyBvbiB0aGUgYG5nSml0TW9kZWAgZ2xvYmFsIGNvbnN0IHZhbHVlKSwgdXNpbmcgcHJvdmlkZWQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2VydmVyUGxhdGZvcm0ob3B0aW9uczogUGxhdGZvcm1PcHRpb25zKTogUGxhdGZvcm1SZWYge1xuICBjb25zdCBleHRyYVByb3ZpZGVycyA9IG9wdGlvbnMucGxhdGZvcm1Qcm92aWRlcnMgPz8gW107XG4gIHJldHVybiBwbGF0Zm9ybVNlcnZlcihbXG4gICAge3Byb3ZpZGU6IElOSVRJQUxfQ09ORklHLCB1c2VWYWx1ZToge2RvY3VtZW50OiBvcHRpb25zLmRvY3VtZW50LCB1cmw6IG9wdGlvbnMudXJsfX0sXG4gICAgZXh0cmFQcm92aWRlcnMsXG4gIF0pO1xufVxuXG4vKipcbiAqIEZpbmRzIGFuZCByZXR1cm5zIGlubGluZWQgZXZlbnQgZGlzcGF0Y2ggc2NyaXB0IGlmIGl0IGV4aXN0cy5cbiAqIFNlZSB0aGUgYEVWRU5UX0RJU1BBVENIX1NDUklQVF9JRGAgY29uc3QgZG9jcyBmb3IgYWRkaXRpb25hbCBpbmZvLlxuICovXG5mdW5jdGlvbiBmaW5kRXZlbnREaXNwYXRjaFNjcmlwdChkb2M6IERvY3VtZW50KSB7XG4gIHJldHVybiBkb2MuZ2V0RWxlbWVudEJ5SWQoRVZFTlRfRElTUEFUQ0hfU0NSSVBUX0lEKTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGlubGluZWQgZXZlbnQgZGlzcGF0Y2ggc2NyaXB0IGlmIGl0IGV4aXN0cy5cbiAqIFNlZSB0aGUgYEVWRU5UX0RJU1BBVENIX1NDUklQVF9JRGAgY29uc3QgZG9jcyBmb3IgYWRkaXRpb25hbCBpbmZvLlxuICovXG5mdW5jdGlvbiByZW1vdmVFdmVudERpc3BhdGNoU2NyaXB0KGRvYzogRG9jdW1lbnQpIHtcbiAgZmluZEV2ZW50RGlzcGF0Y2hTY3JpcHQoZG9jKT8ucmVtb3ZlKCk7XG59XG5cbi8qKlxuICogQW5ub3RhdGUgbm9kZXMgZm9yIGh5ZHJhdGlvbiBhbmQgcmVtb3ZlIGV2ZW50IGRpc3BhdGNoIHNjcmlwdCB3aGVuIG5vdCBuZWVkZWQuXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVGb3JIeWRyYXRpb24ocGxhdGZvcm1TdGF0ZTogUGxhdGZvcm1TdGF0ZSwgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmKTogdm9pZCB7XG4gIGNvbnN0IGVudmlyb25tZW50SW5qZWN0b3IgPSBhcHBsaWNhdGlvblJlZi5pbmplY3RvcjtcbiAgY29uc3QgZG9jID0gcGxhdGZvcm1TdGF0ZS5nZXREb2N1bWVudCgpO1xuXG4gIGlmICghZW52aXJvbm1lbnRJbmplY3Rvci5nZXQoSVNfSFlEUkFUSU9OX0RPTV9SRVVTRV9FTkFCTEVELCBmYWxzZSkpIHtcbiAgICAvLyBIeWRyYXRpb24gaXMgZGlhYmxlZCwgcmVtb3ZlIGlubGluZWQgZXZlbnQgZGlzcGF0Y2ggc2NyaXB0LlxuICAgIC8vICh3aGljaCB3YXMgaW5qZWN0ZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MpIGZyb20gdGhlIEhUTUwuXG4gICAgcmVtb3ZlRXZlbnREaXNwYXRjaFNjcmlwdChkb2MpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXBwZW5kU3NyQ29udGVudEludGVncml0eU1hcmtlcihkb2MpO1xuXG4gIGNvbnN0IGV2ZW50VHlwZXNUb1JlcGxheSA9IGFubm90YXRlRm9ySHlkcmF0aW9uKGFwcGxpY2F0aW9uUmVmLCBkb2MpO1xuICBpZiAoZXZlbnRUeXBlc1RvUmVwbGF5LnJlZ3VsYXIuc2l6ZSB8fCBldmVudFR5cGVzVG9SZXBsYXkuY2FwdHVyZS5zaXplKSB7XG4gICAgaW5zZXJ0RXZlbnRSZWNvcmRTY3JpcHQoXG4gICAgICBlbnZpcm9ubWVudEluamVjdG9yLmdldChBUFBfSUQpLFxuICAgICAgZG9jLFxuICAgICAgZXZlbnRUeXBlc1RvUmVwbGF5LFxuICAgICAgZW52aXJvbm1lbnRJbmplY3Rvci5nZXQoQ1NQX05PTkNFLCBudWxsKSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIE5vIGV2ZW50cyB0byByZXBsYXksIHdlIHNob3VsZCByZW1vdmUgaW5saW5lZCBldmVudCBkaXNwYXRjaCBzY3JpcHRcbiAgICAvLyAod2hpY2ggd2FzIGluamVjdGVkIGJ5IHRoZSBidWlsZCBwcm9jZXNzKSBmcm9tIHRoZSBIVE1MLlxuICAgIHJlbW92ZUV2ZW50RGlzcGF0Y2hTY3JpcHQoZG9jKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXJrZXIgY29tbWVudCBub2RlIGFuZCBhcHBlbmQgaXQgaW50byB0aGUgYDxib2R5PmAuXG4gKiBTb21lIENETnMgaGF2ZSBtZWNoYW5pc21zIHRvIHJlbW92ZSBhbGwgY29tbWVudCBub2RlIGZyb20gSFRNTC5cbiAqIFRoaXMgYmVoYXZpb3VyIGJyZWFrcyBoeWRyYXRpb24sIHNvIHdlJ2xsIGRldGVjdCBvbiB0aGUgY2xpZW50IHNpZGUgaWYgdGhpc1xuICogbWFya2VyIGNvbW1lbnQgaXMgc3RpbGwgYXZhaWxhYmxlIG9yIGVsc2UgdGhyb3cgYW4gZXJyb3JcbiAqL1xuZnVuY3Rpb24gYXBwZW5kU3NyQ29udGVudEludGVncml0eU1hcmtlcihkb2M6IERvY3VtZW50KSB7XG4gIC8vIEFkZGluZyBhIG5nIGh5ZHJhdGlvbiBtYXJrZXIgY29tbWVudFxuICBjb25zdCBjb21tZW50ID0gZG9jLmNyZWF0ZUNvbW1lbnQoU1NSX0NPTlRFTlRfSU5URUdSSVRZX01BUktFUik7XG4gIGRvYy5ib2R5LmZpcnN0Q2hpbGRcbiAgICA/IGRvYy5ib2R5Lmluc2VydEJlZm9yZShjb21tZW50LCBkb2MuYm9keS5maXJzdENoaWxkKVxuICAgIDogZG9jLmJvZHkuYXBwZW5kKGNvbW1lbnQpO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIGBuZy1zZXJ2ZXItY29udGV4dGAgYXR0cmlidXRlIHRvIGhvc3QgZWxlbWVudHMgb2YgYWxsIGJvb3RzdHJhcHBlZCBjb21wb25lbnRzXG4gKiB3aXRoaW4gYSBnaXZlbiBhcHBsaWNhdGlvbi5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kU2VydmVyQ29udGV4dEluZm8oYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmKSB7XG4gIGNvbnN0IGluamVjdG9yID0gYXBwbGljYXRpb25SZWYuaW5qZWN0b3I7XG4gIGxldCBzZXJ2ZXJDb250ZXh0ID0gc2FuaXRpemVTZXJ2ZXJDb250ZXh0KGluamVjdG9yLmdldChTRVJWRVJfQ09OVEVYVCwgREVGQVVMVF9TRVJWRVJfQ09OVEVYVCkpO1xuICBhcHBsaWNhdGlvblJlZi5jb21wb25lbnRzLmZvckVhY2goKGNvbXBvbmVudFJlZikgPT4ge1xuICAgIGNvbnN0IHJlbmRlcmVyID0gY29tcG9uZW50UmVmLmluamVjdG9yLmdldChSZW5kZXJlcjIpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQsICduZy1zZXJ2ZXItY29udGV4dCcsIHNlcnZlckNvbnRleHQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluc2VydEV2ZW50UmVjb3JkU2NyaXB0KFxuICBhcHBJZDogc3RyaW5nLFxuICBkb2M6IERvY3VtZW50LFxuICBldmVudFR5cGVzVG9SZXBsYXk6IHtyZWd1bGFyOiBTZXQ8c3RyaW5nPjsgY2FwdHVyZTogU2V0PHN0cmluZz59LFxuICBub25jZTogc3RyaW5nIHwgbnVsbCxcbik6IHZvaWQge1xuICBjb25zdCB7cmVndWxhciwgY2FwdHVyZX0gPSBldmVudFR5cGVzVG9SZXBsYXk7XG4gIGNvbnN0IGV2ZW50RGlzcGF0Y2hTY3JpcHQgPSBmaW5kRXZlbnREaXNwYXRjaFNjcmlwdChkb2MpO1xuICBpZiAoZXZlbnREaXNwYXRjaFNjcmlwdCkge1xuICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBpbiBwYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvY29udHJhY3RfYmluYXJ5LnRzXG4gICAgY29uc3QgcmVwbGF5U2NyaXB0Q29udGVudHMgPSBgd2luZG93Ll9fanNhY3Rpb25fYm9vdHN0cmFwKCduZ0NvbnRyYWN0cycsIGRvY3VtZW50LmJvZHksICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICBhcHBJZCxcbiAgICApfSwgJHtKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHJlZ3VsYXIpKX0ke1xuICAgICAgY2FwdHVyZS5zaXplID8gJywnICsgSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShjYXB0dXJlKSkgOiAnJ1xuICAgIH0pO2A7XG5cbiAgICBjb25zdCByZXBsYXlTY3JpcHQgPSBjcmVhdGVTY3JpcHQoZG9jLCByZXBsYXlTY3JpcHRDb250ZW50cywgbm9uY2UpO1xuXG4gICAgLy8gSW5zZXJ0IHJlcGxheSBzY3JpcHQgcmlnaHQgYWZ0ZXIgaW5saW5lZCBldmVudCBkaXNwYXRjaCBzY3JpcHQsIHNpbmNlIGl0XG4gICAgLy8gcmVsaWVzIG9uIGBfX2pzYWN0aW9uX2Jvb3RzdHJhcGAgdG8gYmUgZGVmaW5lZCBpbiB0aGUgZ2xvYmFsIHNjb3BlLlxuICAgIGV2ZW50RGlzcGF0Y2hTY3JpcHQuYWZ0ZXIocmVwbGF5U2NyaXB0KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVuZGVyKHBsYXRmb3JtUmVmOiBQbGF0Zm9ybVJlZiwgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgLy8gQmxvY2sgdW50aWwgYXBwbGljYXRpb24gaXMgc3RhYmxlLlxuICBhd2FpdCB3aGVuU3RhYmxlKGFwcGxpY2F0aW9uUmVmKTtcblxuICBjb25zdCBwbGF0Zm9ybVN0YXRlID0gcGxhdGZvcm1SZWYuaW5qZWN0b3IuZ2V0KFBsYXRmb3JtU3RhdGUpO1xuICBwcmVwYXJlRm9ySHlkcmF0aW9uKHBsYXRmb3JtU3RhdGUsIGFwcGxpY2F0aW9uUmVmKTtcblxuICAvLyBSdW4gYW55IEJFRk9SRV9BUFBfU0VSSUFMSVpFRCBjYWxsYmFja3MganVzdCBiZWZvcmUgcmVuZGVyaW5nIHRvIHN0cmluZy5cbiAgY29uc3QgZW52aXJvbm1lbnRJbmplY3RvciA9IGFwcGxpY2F0aW9uUmVmLmluamVjdG9yO1xuICBjb25zdCBjYWxsYmFja3MgPSBlbnZpcm9ubWVudEluamVjdG9yLmdldChCRUZPUkVfQVBQX1NFUklBTElaRUQsIG51bGwpO1xuICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgY29uc3QgYXN5bmNDYWxsYmFja3M6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjYWxsYmFja1Jlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgICAgIGlmIChjYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgIGFzeW5jQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2tSZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIElnbm9yZSBleGNlcHRpb25zLlxuICAgICAgICBjb25zb2xlLndhcm4oJ0lnbm9yaW5nIEJFRk9SRV9BUFBfU0VSSUFMSVpFRCBFeGNlcHRpb246ICcsIGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhc3luY0NhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChhc3luY0NhbGxiYWNrcykpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0lnbm9yaW5nIEJFRk9SRV9BUFBfU0VSSUFMSVpFRCBFeGNlcHRpb246ICcsIHJlc3VsdC5yZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXBwZW5kU2VydmVyQ29udGV4dEluZm8oYXBwbGljYXRpb25SZWYpO1xuICBjb25zdCBvdXRwdXQgPSBwbGF0Zm9ybVN0YXRlLnJlbmRlclRvU3RyaW5nKCk7XG5cbiAgLy8gRGVzdHJveSB0aGUgYXBwbGljYXRpb24gaW4gYSBtYWNyb3Rhc2ssIHRoaXMgYWxsb3dzIHBlbmRpbmcgcHJvbWlzZXMgdG8gYmUgc2V0dGxlZCBhbmQgZXJyb3JzXG4gIC8vIHRvIGJlIHN1cmZhY2VkIHRvIHRoZSB1c2Vycy5cbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHBsYXRmb3JtUmVmLmRlc3Ryb3koKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9LCAwKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGJlIHVzZWQgaWYgbm8gc2VydmVyIGNvbnRleHQgdmFsdWUgaGFzIGJlZW4gcHJvdmlkZWQuXG4gKi9cbmNvbnN0IERFRkFVTFRfU0VSVkVSX0NPTlRFWFQgPSAnb3RoZXInO1xuXG4vKipcbiAqIEFuIGludGVybmFsIHRva2VuIHRoYXQgYWxsb3dzIHByb3ZpZGluZyBleHRyYSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmVyIGNvbnRleHRcbiAqIChlLmcuIHdoZXRoZXIgU1NSIG9yIFNTRyB3YXMgdXNlZCkuIFRoZSB2YWx1ZSBpcyBhIHN0cmluZyBhbmQgY2hhcmFjdGVycyBvdGhlclxuICogdGhhbiBbYS16QS1aMC05XFwtXSBhcmUgcmVtb3ZlZC4gU2VlIHRoZSBkZWZhdWx0IHZhbHVlIGluIGBERUZBVUxUX1NFUlZFUl9DT05URVhUYCBjb25zdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFUlZFUl9DT05URVhUID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ1NFUlZFUl9DT05URVhUJyk7XG5cbi8qKlxuICogU2FuaXRpemVzIHByb3ZpZGVkIHNlcnZlciBjb250ZXh0OlxuICogLSByZW1vdmVzIGFsbCBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gYS16LCBBLVosIDAtOSBhbmQgYC1gXG4gKiAtIHJldHVybnMgYG90aGVyYCBpZiBub3RoaW5nIGlzIHByb3ZpZGVkIG9yIHRoZSBzdHJpbmcgaXMgZW1wdHkgYWZ0ZXIgc2FuaXRpemF0aW9uXG4gKi9cbmZ1bmN0aW9uIHNhbml0aXplU2VydmVyQ29udGV4dChzZXJ2ZXJDb250ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb250ZXh0ID0gc2VydmVyQ29udGV4dC5yZXBsYWNlKC9bXmEtekEtWjAtOVxcLV0vZywgJycpO1xuICByZXR1cm4gY29udGV4dC5sZW5ndGggPiAwID8gY29udGV4dCA6IERFRkFVTFRfU0VSVkVSX0NPTlRFWFQ7XG59XG5cbi8qKlxuICogQm9vdHN0cmFwcyBhbiBhcHBsaWNhdGlvbiB1c2luZyBwcm92aWRlZCBOZ01vZHVsZSBhbmQgc2VyaWFsaXplcyB0aGUgcGFnZSBjb250ZW50IHRvIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlVHlwZSBBIHJlZmVyZW5jZSB0byBhbiBOZ01vZHVsZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBib290c3RyYXAuXG4gKiBAcGFyYW0gb3B0aW9ucyBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSByZW5kZXIgb3BlcmF0aW9uOlxuICogIC0gYGRvY3VtZW50YCAtIHRoZSBkb2N1bWVudCBvZiB0aGUgcGFnZSB0byByZW5kZXIsIGVpdGhlciBhcyBhbiBIVE1MIHN0cmluZyBvclxuICogICAgICAgICAgICAgICAgIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBgZG9jdW1lbnRgIGluc3RhbmNlLlxuICogIC0gYHVybGAgLSB0aGUgVVJMIGZvciB0aGUgY3VycmVudCByZW5kZXIgcmVxdWVzdC5cbiAqICAtIGBleHRyYVByb3ZpZGVyc2AgLSBzZXQgb2YgcGxhdGZvcm0gbGV2ZWwgcHJvdmlkZXJzIGZvciB0aGUgY3VycmVudCByZW5kZXIgcmVxdWVzdC5cbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJNb2R1bGU8VD4oXG4gIG1vZHVsZVR5cGU6IFR5cGU8VD4sXG4gIG9wdGlvbnM6IHtkb2N1bWVudD86IHN0cmluZyB8IERvY3VtZW50OyB1cmw/OiBzdHJpbmc7IGV4dHJhUHJvdmlkZXJzPzogU3RhdGljUHJvdmlkZXJbXX0sXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7ZG9jdW1lbnQsIHVybCwgZXh0cmFQcm92aWRlcnM6IHBsYXRmb3JtUHJvdmlkZXJzfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHBsYXRmb3JtUmVmID0gY3JlYXRlU2VydmVyUGxhdGZvcm0oe2RvY3VtZW50LCB1cmwsIHBsYXRmb3JtUHJvdmlkZXJzfSk7XG4gIGNvbnN0IG1vZHVsZVJlZiA9IGF3YWl0IHBsYXRmb3JtUmVmLmJvb3RzdHJhcE1vZHVsZShtb2R1bGVUeXBlKTtcbiAgY29uc3QgYXBwbGljYXRpb25SZWYgPSBtb2R1bGVSZWYuaW5qZWN0b3IuZ2V0KEFwcGxpY2F0aW9uUmVmKTtcbiAgcmV0dXJuIF9yZW5kZXIocGxhdGZvcm1SZWYsIGFwcGxpY2F0aW9uUmVmKTtcbn1cblxuLyoqXG4gKiBCb290c3RyYXBzIGFuIGluc3RhbmNlIG9mIGFuIEFuZ3VsYXIgYXBwbGljYXRpb24gYW5kIHJlbmRlcnMgaXQgdG8gYSBzdHJpbmcuXG5cbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGJvb3RzdHJhcCA9ICgpID0+IGJvb3RzdHJhcEFwcGxpY2F0aW9uKFJvb3RDb21wb25lbnQsIGFwcENvbmZpZyk7XG4gKiBjb25zdCBvdXRwdXQ6IHN0cmluZyA9IGF3YWl0IHJlbmRlckFwcGxpY2F0aW9uKGJvb3RzdHJhcCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYm9vdHN0cmFwIEEgbWV0aG9kIHRoYXQgd2hlbiBpbnZva2VkIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmV0dXJucyBhbiBgQXBwbGljYXRpb25SZWZgXG4gKiAgICAgaW5zdGFuY2Ugb25jZSByZXNvbHZlZC5cbiAqIEBwYXJhbSBvcHRpb25zIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHJlbmRlciBvcGVyYXRpb246XG4gKiAgLSBgZG9jdW1lbnRgIC0gdGhlIGRvY3VtZW50IG9mIHRoZSBwYWdlIHRvIHJlbmRlciwgZWl0aGVyIGFzIGFuIEhUTUwgc3RyaW5nIG9yXG4gKiAgICAgICAgICAgICAgICAgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGBkb2N1bWVudGAgaW5zdGFuY2UuXG4gKiAgLSBgdXJsYCAtIHRoZSBVUkwgZm9yIHRoZSBjdXJyZW50IHJlbmRlciByZXF1ZXN0LlxuICogIC0gYHBsYXRmb3JtUHJvdmlkZXJzYCAtIHRoZSBwbGF0Zm9ybSBsZXZlbCBwcm92aWRlcnMgZm9yIHRoZSBjdXJyZW50IHJlbmRlciByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSwgdGhhdCByZXR1cm5zIHNlcmlhbGl6ZWQgKHRvIGEgc3RyaW5nKSByZW5kZXJlZCBwYWdlLCBvbmNlIHJlc29sdmVkLlxuICpcbiAqIEBwdWJsaWNBcGlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlckFwcGxpY2F0aW9uPFQ+KFxuICBib290c3RyYXA6ICgpID0+IFByb21pc2U8QXBwbGljYXRpb25SZWY+LFxuICBvcHRpb25zOiB7ZG9jdW1lbnQ/OiBzdHJpbmcgfCBEb2N1bWVudDsgdXJsPzogc3RyaW5nOyBwbGF0Zm9ybVByb3ZpZGVycz86IFByb3ZpZGVyW119LFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJ1bkFuZE1lYXN1cmVQZXJmKCdyZW5kZXJBcHBsaWNhdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwbGF0Zm9ybVJlZiA9IGNyZWF0ZVNlcnZlclBsYXRmb3JtKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgYXBwbGljYXRpb25SZWYgPSBhd2FpdCBib290c3RyYXAoKTtcbiAgICByZXR1cm4gX3JlbmRlcihwbGF0Zm9ybVJlZiwgYXBwbGljYXRpb25SZWYpO1xuICB9KTtcbn1cbiJdfQ==
@@ -14,5 +14,5 @@ import { Version } from '@angular/core';
14
14
  /**
15
15
  * @publicApi
16
16
  */
17
- export const VERSION = new Version('18.1.0-rc.0');
17
+ export const VERSION = new Version('18.2.0-next.0');
18
18
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtLXNlcnZlci9zcmMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSDs7OztHQUlHO0FBRUgsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV0Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogQG1vZHVsZVxuICogQGRlc2NyaXB0aW9uXG4gKiBFbnRyeSBwb2ludCBmb3IgYWxsIHB1YmxpYyBBUElzIG9mIHRoZSBwbGF0Zm9ybS1zZXJ2ZXIgcGFja2FnZS5cbiAqL1xuXG5pbXBvcnQge1ZlcnNpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEBwdWJsaWNBcGlcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBuZXcgVmVyc2lvbignMC4wLjAtUExBQ0VIT0xERVInKTtcbiJdfQ==
@@ -22,11 +22,11 @@ export const platformServerTesting = createPlatformFactory(platformCoreDynamicTe
22
22
  * @publicApi
23
23
  */
24
24
  export class ServerTestingModule {
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
26
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerTestingModule, imports: [NoopAnimationsModule], exports: [BrowserDynamicTestingModule] }); }
27
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerTestingModule, providers: SERVER_RENDER_PROVIDERS, imports: [NoopAnimationsModule, BrowserDynamicTestingModule] }); }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
26
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerTestingModule, imports: [NoopAnimationsModule], exports: [BrowserDynamicTestingModule] }); }
27
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerTestingModule, providers: SERVER_RENDER_PROVIDERS, imports: [NoopAnimationsModule, BrowserDynamicTestingModule] }); }
28
28
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerTestingModule, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerTestingModule, decorators: [{
30
30
  type: NgModule,
31
31
  args: [{
32
32
  exports: [BrowserDynamicTestingModule],
package/fesm2022/init.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v18.1.0-rc.0
2
+ * @license Angular v18.2.0-next.0
3
3
  * (c) 2010-2024 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v18.1.0-rc.0
2
+ * @license Angular v18.2.0-next.0
3
3
  * (c) 2010-2024 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -16216,10 +16216,10 @@ class PlatformState {
16216
16216
  getDocument() {
16217
16217
  return this._doc;
16218
16218
  }
16219
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: PlatformState, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
16220
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: PlatformState }); }
16219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: PlatformState, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
16220
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: PlatformState }); }
16221
16221
  }
16222
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: PlatformState, decorators: [{
16222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: PlatformState, decorators: [{
16223
16223
  type: Injectable
16224
16224
  }], ctorParameters: () => [{ type: undefined, decorators: [{
16225
16225
  type: Inject,
@@ -16244,10 +16244,10 @@ class ServerXhr {
16244
16244
  }
16245
16245
  return new impl.XMLHttpRequest();
16246
16246
  }
16247
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerXhr, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
16248
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerXhr }); }
16247
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerXhr, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
16248
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerXhr }); }
16249
16249
  }
16250
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerXhr, decorators: [{
16250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerXhr, decorators: [{
16251
16251
  type: Injectable
16252
16252
  }] });
16253
16253
  function relativeUrlsTransformerInterceptorFn(request, next) {
@@ -16379,10 +16379,10 @@ class ServerPlatformLocation {
16379
16379
  getState() {
16380
16380
  return undefined;
16381
16381
  }
16382
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerPlatformLocation, deps: [{ token: DOCUMENT }, { token: INITIAL_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
16383
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerPlatformLocation }); }
16382
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerPlatformLocation, deps: [{ token: DOCUMENT }, { token: INITIAL_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
16383
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerPlatformLocation }); }
16384
16384
  }
16385
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerPlatformLocation, decorators: [{
16385
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerPlatformLocation, decorators: [{
16386
16386
  type: Injectable
16387
16387
  }], ctorParameters: () => [{ type: undefined, decorators: [{
16388
16388
  type: Inject,
@@ -16406,10 +16406,10 @@ class ServerEventManagerPlugin extends EventManagerPlugin {
16406
16406
  addEventListener(element, eventName, handler) {
16407
16407
  return ɵgetDOM().onAndCancel(element, eventName, handler);
16408
16408
  }
16409
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerEventManagerPlugin, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
16410
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerEventManagerPlugin }); }
16409
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerEventManagerPlugin, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
16410
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerEventManagerPlugin }); }
16411
16411
  }
16412
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerEventManagerPlugin, decorators: [{
16412
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerEventManagerPlugin, decorators: [{
16413
16413
  type: Injectable
16414
16414
  }], ctorParameters: () => [{ type: undefined, decorators: [{
16415
16415
  type: Inject,
@@ -16493,11 +16493,11 @@ const PLATFORM_SERVER_PROVIDERS = [
16493
16493
  * @publicApi
16494
16494
  */
16495
16495
  class ServerModule {
16496
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
16497
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerModule, imports: [HttpClientModule, NoopAnimationsModule], exports: [BrowserModule] }); }
16498
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerModule, providers: PLATFORM_SERVER_PROVIDERS, imports: [HttpClientModule, NoopAnimationsModule, BrowserModule] }); }
16496
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
16497
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerModule, imports: [HttpClientModule, NoopAnimationsModule], exports: [BrowserModule] }); }
16498
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerModule, providers: PLATFORM_SERVER_PROVIDERS, imports: [HttpClientModule, NoopAnimationsModule, BrowserModule] }); }
16499
16499
  }
16500
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0-rc.0", ngImport: i0, type: ServerModule, decorators: [{
16500
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0-next.0", ngImport: i0, type: ServerModule, decorators: [{
16501
16501
  type: NgModule,
16502
16502
  args: [{
16503
16503
  exports: [BrowserModule],
@@ -16545,6 +16545,54 @@ function provideServerRendering() {
16545
16545
  return makeEnvironmentProviders([provideNoopAnimations(), ...PLATFORM_SERVER_PROVIDERS]);
16546
16546
  }
16547
16547
 
16548
+ const PERFORMANCE_MARK_PREFIX = '🅰️';
16549
+ let enablePerfLogging = false;
16550
+ function runAndMeasurePerf(label, method) {
16551
+ if (!enablePerfLogging) {
16552
+ return method();
16553
+ }
16554
+ const labelName = `${PERFORMANCE_MARK_PREFIX}:${label}`;
16555
+ const startLabel = `start:${labelName}`;
16556
+ const endLabel = `end:${labelName}`;
16557
+ const end = () => {
16558
+ /* tslint:disable:ban */
16559
+ performance.mark(endLabel);
16560
+ performance.measure(labelName, startLabel, endLabel);
16561
+ performance.clearMarks(startLabel);
16562
+ performance.clearMarks(endLabel);
16563
+ /* tslint:enable:ban */
16564
+ };
16565
+ /* tslint:disable:ban */
16566
+ performance.mark(startLabel);
16567
+ /* tslint:enable:ban */
16568
+ const returnValue = method();
16569
+ if (returnValue instanceof Promise) {
16570
+ return returnValue.finally(() => end());
16571
+ }
16572
+ else {
16573
+ end();
16574
+ return returnValue;
16575
+ }
16576
+ }
16577
+ let warningLogged = false;
16578
+ /**
16579
+ * This enables an internal performance profiler for SSR apps
16580
+ *
16581
+ * It should not be imported in application code
16582
+ */
16583
+ function enableSsrProfiling() {
16584
+ if (!warningLogged &&
16585
+ (typeof performance === 'undefined' || !performance.mark || !performance.measure)) {
16586
+ warningLogged = true;
16587
+ console.warn('Performance API is not supported on this platform');
16588
+ return;
16589
+ }
16590
+ enablePerfLogging = true;
16591
+ }
16592
+ function disableSsrProfiling() {
16593
+ enablePerfLogging = false;
16594
+ }
16595
+
16548
16596
  /**
16549
16597
  * Event dispatch (JSAction) script is inlined into the HTML by the build
16550
16598
  * process to avoid extra blocking request on a page. The script looks like this:
@@ -16743,9 +16791,11 @@ async function renderModule(moduleType, options) {
16743
16791
  * @publicApi
16744
16792
  */
16745
16793
  async function renderApplication(bootstrap, options) {
16746
- const platformRef = createServerPlatform(options);
16747
- const applicationRef = await bootstrap();
16748
- return _render(platformRef, applicationRef);
16794
+ return runAndMeasurePerf('renderApplication', async () => {
16795
+ const platformRef = createServerPlatform(options);
16796
+ const applicationRef = await bootstrap();
16797
+ return _render(platformRef, applicationRef);
16798
+ });
16749
16799
  }
16750
16800
 
16751
16801
  /**
@@ -16756,7 +16806,7 @@ async function renderApplication(bootstrap, options) {
16756
16806
  /**
16757
16807
  * @publicApi
16758
16808
  */
16759
- const VERSION = new Version('18.1.0-rc.0');
16809
+ const VERSION = new Version('18.2.0-next.0');
16760
16810
 
16761
16811
  /// <reference types="node" />
16762
16812
  // This file only reexports content of the `src` folder. Keep it that way.
@@ -16767,5 +16817,5 @@ const VERSION = new Version('18.1.0-rc.0');
16767
16817
  * Generated bundle index. Do not edit.
16768
16818
  */
16769
16819
 
16770
- export { BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformState, ServerModule, VERSION, platformServer, provideServerRendering, renderApplication, renderModule, INTERNAL_SERVER_PLATFORM_PROVIDERS as ɵINTERNAL_SERVER_PLATFORM_PROVIDERS, SERVER_CONTEXT as ɵSERVER_CONTEXT, SERVER_RENDER_PROVIDERS as ɵSERVER_RENDER_PROVIDERS };
16820
+ export { BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformState, ServerModule, VERSION, platformServer, provideServerRendering, renderApplication, renderModule, INTERNAL_SERVER_PLATFORM_PROVIDERS as ɵINTERNAL_SERVER_PLATFORM_PROVIDERS, SERVER_CONTEXT as ɵSERVER_CONTEXT, SERVER_RENDER_PROVIDERS as ɵSERVER_RENDER_PROVIDERS, disableSsrProfiling as ɵdisableSsrProfiling, enableSsrProfiling as ɵenableSsrProfiling };
16771
16821
  //# sourceMappingURL=platform-server.mjs.map