From 45336e8d0374d61aa0fbe2490dbd4b8cda0dc291 Mon Sep 17 00:00:00 2001 From: flauc Date: Sun, 15 May 2022 00:02:37 +0200 Subject: [PATCH 01/55] feat: initial set up for static site with page builder and svelte --- client/package-lock.json | 46 + client/package.json | 2 + .../modules/fb/form-builder-shared.module.ts | 17 +- .../cms/src/app/transloco-root.module.ts | 2 +- client/projects/cms/src/assets/i18n/en.json | 12 +- .../cms/src/assets/i18n/fb-pb/en.json | 48 + .../cms/src/environments/static-config.ts | 19 + .../projects/shared/blocks/blocks.module.ts | 35 + .../blocks/blocks/common-options.const.ts | 157 + .../shared/blocks/blocks/common-styles.scss | 0 .../shared/blocks/blocks/common.block.ts | 50 + .../blocks/content/content.component.html | 1 + .../blocks/content/content.component.scss | 3 + .../blocks/content/content.component.spec.ts | 25 + .../blocks/content/content.component.ts | 54 + .../projects/shared/blocks/blocks/utils.tsx | 23 + .../block-link/block-link.directive.spec.ts | 8 + .../block-link/block-link.directive.ts | 66 + client/transloco.config.js | 4 + definitions/consts/shared-config.const.ts | 2 + definitions/modules/modules.ts | 10 +- definitions/modules/pages/pages.module.tsx | 107 + definitions/modules/pages/processed.const.ts | 3 + definitions/modules/pages/style.css | 92 + definitions/modules/shared/format-search.ts | 1 + definitions/modules/shared/meta.tsx | 65 + definitions/modules/website/layout.module.ts | 47 + definitions/package-lock.json | 72 + definitions/package.json | 2 + definitions/process.ts | 25 + firestore.rules | 15 + web/.eslintrc.cjs | 20 + web/.gitignore | 10 + web/.npmrc | 1 + web/README.md | 38 + web/package-lock.json | 7387 +++++++++++++++++ web/package.json | 31 + web/playwright.config.ts | 10 + web/src/app.css | 105 + web/src/app.d.ts | 18 + web/src/app.html | 12 + web/src/hooks.ts | 12 + web/src/lib/Page.svelte | 12 + web/src/lib/firebase.ts | 43 + web/src/lib/form.ts | 84 + web/src/lib/header/Header.svelte | 15 + web/src/lib/header/logo.svg | 1 + web/src/routes/[id].svelte | 10 + web/src/routes/[id].ts | 6 + web/src/routes/__layout.svelte | 27 + web/src/routes/index.svelte | 10 + web/src/routes/index.ts | 6 + web/src/routes/settings.ts | 11 + web/static/favicon.png | Bin 0 -> 1571 bytes web/static/robots.txt | 3 + web/static/svelte-welcome.png | Bin 0 -> 360807 bytes web/static/svelte-welcome.webp | Bin 0 -> 115470 bytes web/svelte.config.js | 15 + web/tests/test.ts | 6 + web/tsconfig.json | 13 + 60 files changed, 8912 insertions(+), 7 deletions(-) create mode 100644 client/projects/cms/src/assets/i18n/fb-pb/en.json create mode 100644 client/projects/shared/blocks/blocks.module.ts create mode 100644 client/projects/shared/blocks/blocks/common-options.const.ts create mode 100644 client/projects/shared/blocks/blocks/common-styles.scss create mode 100644 client/projects/shared/blocks/blocks/common.block.ts create mode 100644 client/projects/shared/blocks/blocks/content/content.component.html create mode 100644 client/projects/shared/blocks/blocks/content/content.component.scss create mode 100644 client/projects/shared/blocks/blocks/content/content.component.spec.ts create mode 100644 client/projects/shared/blocks/blocks/content/content.component.ts create mode 100644 client/projects/shared/blocks/blocks/utils.tsx create mode 100644 client/projects/shared/blocks/directives/block-link/block-link.directive.spec.ts create mode 100644 client/projects/shared/blocks/directives/block-link/block-link.directive.ts create mode 100644 definitions/modules/pages/pages.module.tsx create mode 100644 definitions/modules/pages/processed.const.ts create mode 100644 definitions/modules/pages/style.css create mode 100644 definitions/modules/shared/format-search.ts create mode 100644 definitions/modules/shared/meta.tsx create mode 100644 definitions/modules/website/layout.module.ts create mode 100644 definitions/process.ts create mode 100644 web/.eslintrc.cjs create mode 100644 web/.gitignore create mode 100644 web/.npmrc create mode 100644 web/README.md create mode 100644 web/package-lock.json create mode 100644 web/package.json create mode 100644 web/playwright.config.ts create mode 100644 web/src/app.css create mode 100644 web/src/app.d.ts create mode 100644 web/src/app.html create mode 100644 web/src/hooks.ts create mode 100644 web/src/lib/Page.svelte create mode 100644 web/src/lib/firebase.ts create mode 100644 web/src/lib/form.ts create mode 100644 web/src/lib/header/Header.svelte create mode 100644 web/src/lib/header/logo.svg create mode 100644 web/src/routes/[id].svelte create mode 100644 web/src/routes/[id].ts create mode 100644 web/src/routes/__layout.svelte create mode 100644 web/src/routes/index.svelte create mode 100644 web/src/routes/index.ts create mode 100644 web/src/routes/settings.ts create mode 100644 web/static/favicon.png create mode 100644 web/static/robots.txt create mode 100644 web/static/svelte-welcome.png create mode 100644 web/static/svelte-welcome.webp create mode 100644 web/svelte.config.js create mode 100644 web/tests/test.ts create mode 100644 web/tsconfig.json diff --git a/client/package-lock.json b/client/package-lock.json index d209d4d8..6d53e920 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -21,7 +21,9 @@ "@angular/platform-browser-dynamic": "13.3.4", "@angular/router": "13.3.4", "@jaspero/fb-fields-mat": "1.12.0", + "@jaspero/fb-page-builder": "3.23.0", "@jaspero/fb-segments-mat": "1.3.10", + "@jaspero/fb-tinymce": "^2.8.0", "@jaspero/form-builder": "5.7.2", "@jaspero/jmsp-notes": "1.6.4", "@jaspero/ng-helpers": "5.2.0", @@ -80,6 +82,7 @@ "devDependencies": { "@google-cloud/storage": "5.19.3", "cross-env": "7.0.3", + "csso": "4.2.0", "firebase-admin": "10.1.0", "rimraf": "3.0.2", "ts-node": "10.7.0", @@ -3053,6 +3056,19 @@ "@ngneat/transloco": "^2.19.1" } }, + "node_modules/@jaspero/fb-page-builder": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@jaspero/fb-page-builder/-/fb-page-builder-3.23.0.tgz", + "integrity": "sha512-iWSSg0ACgd4SHlg3WCoghHpoZeNZK7iZIssUI8I/n+3aEjMmSaZNGLhyfJK3hniWw56zb0TFiEzf/OYEW+FyoQ==", + "dependencies": { + "@jaspero/utils": "^1.3.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@jaspero/form-builder": "5.7.2", + "@ngneat/until-destroy": "^8.0.0" + } + }, "node_modules/@jaspero/fb-segments-mat": { "version": "1.3.10", "resolved": "https://registry.npmjs.org/@jaspero/fb-segments-mat/-/fb-segments-mat-1.3.10.tgz", @@ -3072,6 +3088,18 @@ "@ngneat/transloco": "^2.19.1" } }, + "node_modules/@jaspero/fb-tinymce": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@jaspero/fb-tinymce/-/fb-tinymce-2.8.0.tgz", + "integrity": "sha512-xkmaogUrtjg6EBXsHl5K3mosD+QoXKgWfA8BRVaNob/f5N1C7pMnbzO5B/wlBgZlD3PHUTziln7y1mnJNchXGg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@jaspero/form-builder": "5.7.2", + "tinymce": "^5.4.2" + } + }, "node_modules/@jaspero/form-builder": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/@jaspero/form-builder/-/form-builder-5.7.2.tgz", @@ -16740,6 +16768,15 @@ "tslib": "^2.3.0" } }, + "@jaspero/fb-page-builder": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@jaspero/fb-page-builder/-/fb-page-builder-3.23.0.tgz", + "integrity": "sha512-iWSSg0ACgd4SHlg3WCoghHpoZeNZK7iZIssUI8I/n+3aEjMmSaZNGLhyfJK3hniWw56zb0TFiEzf/OYEW+FyoQ==", + "requires": { + "@jaspero/utils": "^1.3.1", + "tslib": "^2.3.0" + } + }, "@jaspero/fb-segments-mat": { "version": "1.3.10", "resolved": "https://registry.npmjs.org/@jaspero/fb-segments-mat/-/fb-segments-mat-1.3.10.tgz", @@ -16748,6 +16785,14 @@ "tslib": "^2.3.0" } }, + "@jaspero/fb-tinymce": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@jaspero/fb-tinymce/-/fb-tinymce-2.8.0.tgz", + "integrity": "sha512-xkmaogUrtjg6EBXsHl5K3mosD+QoXKgWfA8BRVaNob/f5N1C7pMnbzO5B/wlBgZlD3PHUTziln7y1mnJNchXGg==", + "requires": { + "tslib": "^2.3.0" + } + }, "@jaspero/form-builder": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/@jaspero/form-builder/-/form-builder-5.7.2.tgz", @@ -19050,6 +19095,7 @@ "@jaspero/form-builder": "5.7.2", "adv-firestore-functions": "2.0.9", "cross-env": "7.0.3", + "csso": "4.2.0", "firebase-admin": "10.1.0", "json-schema": "0.4.0", "rimraf": "3.0.2", diff --git a/client/package.json b/client/package.json index e1fc7d6c..5252fa3c 100644 --- a/client/package.json +++ b/client/package.json @@ -28,7 +28,9 @@ "@angular/platform-browser-dynamic": "13.3.4", "@angular/router": "13.3.4", "@jaspero/fb-fields-mat": "1.12.0", + "@jaspero/fb-page-builder": "3.23.0", "@jaspero/fb-segments-mat": "1.3.10", + "@jaspero/fb-tinymce": "2.8.0", "@jaspero/form-builder": "5.7.2", "@jaspero/jmsp-notes": "1.6.4", "@jaspero/ng-helpers": "5.2.0", diff --git a/client/projects/cms/src/app/shared/modules/fb/form-builder-shared.module.ts b/client/projects/cms/src/app/shared/modules/fb/form-builder-shared.module.ts index 5176639b..e71e0389 100644 --- a/client/projects/cms/src/app/shared/modules/fb/form-builder-shared.module.ts +++ b/client/projects/cms/src/app/shared/modules/fb/form-builder-shared.module.ts @@ -3,16 +3,17 @@ import {NgModule} from '@angular/core'; import {MatButtonModule} from '@angular/material/button'; import {MatIconModule} from '@angular/material/icon'; import {FbFieldsMatModule} from '@jaspero/fb-fields-mat'; +import {FB_PAGE_BUILDER_OPTIONS, PageBuilderModule} from '@jaspero/fb-page-builder'; import {FbSegmentsMatModule} from '@jaspero/fb-segments-mat'; import { CUSTOM_COMPONENTS, CUSTOM_FIELDS, DbService as FDbService, FormBuilderModule, - ROLE, - STORAGE_URL, - StorageService + ROLE, StorageService, STORAGE_URL } from '@jaspero/form-builder'; import {TranslocoModule} from '@ngneat/transloco'; +import {TinymceModule} from '@jaspero/fb-tinymce'; +import {BlocksModule} from '@shared/blocks/blocks.module'; import {FbStorageService} from '../../../../../integrations/firebase/fb-storage.service'; import {environment} from '../../../../environments/environment'; import {DbService} from '../../services/db/db.service'; @@ -29,6 +30,8 @@ export function roleFactory(state: StateService) { FormBuilderModule.forRoot(), FbFieldsMatModule.forRoot({prefix: ''}), FbSegmentsMatModule.forRoot({prefix: ''}), + PageBuilderModule, + TinymceModule, /** * Custom fields and component dependencies @@ -67,7 +70,13 @@ export function roleFactory(state: StateService) { { provide: CUSTOM_FIELDS, useValue: {} - } + }, + { + provide: FB_PAGE_BUILDER_OPTIONS, + useValue: { + previewModules: [BlocksModule] + } + }, ], declarations: [DuplicateComponent] }) diff --git a/client/projects/cms/src/app/transloco-root.module.ts b/client/projects/cms/src/app/transloco-root.module.ts index 404b58e2..aec1fd7a 100644 --- a/client/projects/cms/src/app/transloco-root.module.ts +++ b/client/projects/cms/src/app/transloco-root.module.ts @@ -40,7 +40,7 @@ export class TranslocoHttpLoader implements TranslocoLoader { }) }, {provide: TRANSLOCO_LOADER, useClass: TranslocoHttpLoader}, - {provide: TRANSLOCO_SCOPE, useValue: ['fb-fields-mat', 'jmsp-notes']} + {provide: TRANSLOCO_SCOPE, useValue: ['fb-fields-mat', 'jmsp-notes', 'fb-pb']} ] }) export class TranslocoRootModule { } diff --git a/client/projects/cms/src/assets/i18n/en.json b/client/projects/cms/src/assets/i18n/en.json index 1eff4c4e..37666426 100644 --- a/client/projects/cms/src/assets/i18n/en.json +++ b/client/projects/cms/src/assets/i18n/en.json @@ -190,5 +190,15 @@ }, "MODULES": "Modules", - "DOCUMENTS": "Documents" + "DOCUMENTS": "Documents", + + "WEBSITE": "Website", + "LAYOUT": "Layout", + "PAGES": "Pages", + "HEADER_NAVIGATION": "Header Navigation", + "TITLE": "Title", + "URL": "URL", + "ID_HINT": "Created from title if left empty", + "GENERAL": "General", + "LINK": "Link" } diff --git a/client/projects/cms/src/assets/i18n/fb-pb/en.json b/client/projects/cms/src/assets/i18n/fb-pb/en.json new file mode 100644 index 00000000..3770b9a5 --- /dev/null +++ b/client/projects/cms/src/assets/i18n/fb-pb/en.json @@ -0,0 +1,48 @@ +{ + "START": "Start", + "CLOSE": "Close", + "OPEN_ADD": "Add segments", + "ADD": "Add", + "SEGMENT": "Segment", + "FORM": { + "TITLE": "Title", + "ID_HINT": "Created from title if empty", + "COMMON": { + "CONTENT": "Content" + }, + "BLOCKS": { + "SHARED": { + "STANDARD_OPTIONS": "Standard Options", + "ADVANCED_OPTIONS": "Advanced Options", + "BLOCK_OPTIONS": "Segment Options", + "SIZE": "Size", + "SIZE_SMALL": "Small", + "SIZE_REGULAR": "Medium", + "SIZE_LARGE": "Big", + "SIZE_FULL_SCREEN": "Full Screen", + "CONTAINED": "Contained", + "BACKGROUND": "Background", + "BACKGROUND_REPEAT": "Background Repeat", + "BACKGROUND_SIZE": "Background Size", + "BACKGROUND_SIZE_COVER": "Cover", + "BACKGROUND_SIZE_CONTAIN": "Contain", + "VERTICAL_ALIGNMENT": "Vertical Align", + "VERTICAL_ALIGNMENT_CENTER": "Center", + "VERTICAL_ALIGNMENT_TOP": "Top", + "VERTICAL_ALIGNMENT_BOTTOM": "Bottom", + "ADDITIONAL_STYLE": "Custom Style", + "CUSTOM_CLASS": "Custom Class", + "ELEMENT_ID": "Element ID" + }, + "CONTENT": { + "TITLE": "Content" + }, + "FORM": { + "TITLE": "Form", + "FIELDS": { + "FORM": "Form" + } + } + } + } +} diff --git a/client/projects/cms/src/environments/static-config.ts b/client/projects/cms/src/environments/static-config.ts index b83cfc3d..3a8e90d2 100644 --- a/client/projects/cms/src/environments/static-config.ts +++ b/client/projects/cms/src/environments/static-config.ts @@ -45,6 +45,25 @@ export const STATIC_CONFIG = { type: 'link', value: '/dashboard' }, + { + icon: 'language', + label: 'WEBSITE', + type: 'expandable', + children: [ + { + icon: 'settings', + label: 'LAYOUT', + type: 'link', + value: '/m/settings/layout' + }, + { + icon: 'pages', + label: 'PAGES', + type: 'link', + value: '/m/pages' + }, + ] + }, { children: [ { diff --git a/client/projects/shared/blocks/blocks.module.ts b/client/projects/shared/blocks/blocks.module.ts new file mode 100644 index 00000000..050bfc45 --- /dev/null +++ b/client/projects/shared/blocks/blocks.module.ts @@ -0,0 +1,35 @@ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {ReactiveFormsModule} from '@angular/forms'; +import {RouterModule} from '@angular/router'; +import {InlineEditorModule} from '@jaspero/fb-page-builder'; +import {LoadClickModule, SanitizeModule} from '@jaspero/ng-helpers'; +import {CommonBlockComponent} from './blocks/common.block'; +import {ContentComponent} from './blocks/content/content.component'; +import {BlockLinkDirective} from './directives/block-link/block-link.directive'; + +const B_COMPONENTS = [ + ContentComponent +]; + +@NgModule({ + declarations: [ + CommonBlockComponent, + BlockLinkDirective, + ...B_COMPONENTS + ], + exports: [ + ...B_COMPONENTS + ], + imports: [ + CommonModule, + RouterModule, + ReactiveFormsModule, + + InlineEditorModule, + + SanitizeModule, + LoadClickModule + ] +}) +export class BlocksModule { } diff --git a/client/projects/shared/blocks/blocks/common-options.const.ts b/client/projects/shared/blocks/blocks/common-options.const.ts new file mode 100644 index 00000000..211d97ea --- /dev/null +++ b/client/projects/shared/blocks/blocks/common-options.const.ts @@ -0,0 +1,157 @@ +export const COMMON_OPTIONS: { + properties: { + [key: string]: { + type: string + } + } +} & any = { + properties: { + size: {type: 'string'}, + elementId: {type: 'string'}, + contained: {type: 'boolean'}, + verticalAlignment: {type: 'string'}, + addedClasses: {type: 'array'}, + box: {type: 'object'}, + background: {type: 'string'}, + backgroundSize: {type: 'string'}, + backgroundRepeat: {type: 'boolean'}, + backgroundPosition: {type: 'string'}, + additionalStyle: {type: 'string'} + }, + segment: [ + { + type: 'accordion', + title: 'Settings', + icon: 'settings', + configuration: [ + { + title: 'PB.FORM.BLOCKS.SHARED.STANDARD_OPTIONS', + fields: [ + '/box', + '/size', + '/verticalAlignment', + '/background', + '/contained' + ] + }, + { + title: 'PB.FORM.BLOCKS.SHARED.ADVANCED_OPTIONS', + fields: [ + '/addedClasses', + '/elementId', + '/additionalStyle' + ] + }, + ] + } + ], + definitions: { + size: { + label: 'PB.FORM.BLOCKS.SHARED.SIZE', + component: { + type: 'select', + configuration: { + dataSet: [ + {name: 'PB.FORM.BLOCKS.SHARED.SIZE_SMALL', value: 'small'}, + {name: 'PB.FORM.BLOCKS.SHARED.SIZE_REGULAR', value: 'regular'}, + {name: 'PB.FORM.BLOCKS.SHARED.SIZE_LARGE', value: 'large'}, + {name: 'PB.FORM.BLOCKS.SHARED.SIZE_FULL_SCREEN', value: 'full-screen'}, + ] + } + } + }, + contained: {label: 'PB.FORM.BLOCKS.SHARED.CONTAINED'}, + box: { + component: { + type: 'pb-mbp', + configuration: { + presets: { + margin: [ + { + name: 'Small', + sides: { + top: {size: 10, unit: 'px'}, + right: {size: 10, unit: 'px'}, + left: {size: 10, unit: 'px'}, + bottom: {size: 10, unit: 'px'}, + } + }, + { + name: 'Medium', + sides: { + top: {size: 20, unit: 'px'}, + right: {size: 20, unit: 'px'}, + left: {size: 20, unit: 'px'}, + bottom: {size: 20, unit: 'px'}, + } + }, + { + name: 'Large', + sides: { + top: {size: 30, unit: 'px'}, + right: {size: 30, unit: 'px'}, + left: {size: 30, unit: 'px'}, + bottom: {size: 30, unit: 'px'}, + } + } + ] + } + } + } + }, + background: { + label: 'PB.FORM.BLOCKS.SHARED.BACKGROUND', + component: { + type: 'pb-background' + } + }, + addedClasses: {label: 'PB.FORM.BLOCKS.SHARED.CUSTOM_CLASS'}, + elementId: {label: 'PB.FORM.BLOCKS.SHARED.ELEMENT_ID'}, + verticalAlignment: { + label: 'PB.FORM.BLOCKS.SHARED.VERTICAL_ALIGNMENT', + component: { + type: 'select', + configuration: { + dataSet: [ + {name: 'PB.FORM.BLOCKS.SHARED.VERTICAL_ALIGNMENT_CENTER', value: 'center'}, + {name: 'PB.FORM.BLOCKS.SHARED.VERTICAL_ALIGNMENT_TOP', value: 'top'}, + {name: 'PB.FORM.BLOCKS.SHARED.VERTICAL_ALIGNMENT_BOTTOM', value: 'bottom'}, + ] + } + } + }, + additionalStyle: { + label: 'PB.FORM.BLOCKS.SHARED.ADDITIONAL_STYLE', + component: { + type: 'monaco', + configuration: { + options: { + theme: 'vs-dark', + language: 'css', + minimap: { + enabled: false + }, + folding: false, + glyphMargin: false, + lineNumbers: 'off', + activityBar: { + visible: false + }, + lineDecorationsWidth: 0, + lineNumbersMinChars: 0 + } + } + } + } + }, + defaults: { + size: 'regular', + contained: true, + verticalAlignment: 'center', + additionalStyle: '', + background: '', + backgroundRepeat: false, + backgroundSize: 'contain', + backgroundPosition: 'center' + } +}; diff --git a/client/projects/shared/blocks/blocks/common-styles.scss b/client/projects/shared/blocks/blocks/common-styles.scss new file mode 100644 index 00000000..e69de29b diff --git a/client/projects/shared/blocks/blocks/common.block.ts b/client/projects/shared/blocks/blocks/common.block.ts new file mode 100644 index 00000000..be84e75b --- /dev/null +++ b/client/projects/shared/blocks/blocks/common.block.ts @@ -0,0 +1,50 @@ +import {ChangeDetectorRef, Component, ElementRef, HostBinding} from '@angular/core'; +import {BlockData, BlockDataOptions} from '@jaspero/fb-page-builder'; +import {BehaviorSubject} from 'rxjs'; + +export interface CommonOptions extends BlockDataOptions { + elementId?: string; + size?: 'small' | 'regular' | 'large' | 'full-screen'; + verticalAlignment?: 'top' | 'center' | 'bottom'; + contained?: boolean; + addedClasses?: string[]; +} + +@Component({ + selector: 'jms-common-block', + template: '' +}) +export class CommonBlockComponent extends BlockData { + constructor( + public cdr: ChangeDetectorRef, + public el: ElementRef + ) { + super(cdr, el); + } + + /** + * We can set this property to false + * in extended components and then set it + * to true when the component is finished loading + */ + loaded$ = new BehaviorSubject(true); + + @HostBinding('id') + get elementId() { + return this.data.elementId || ''; + } + + get addedClasses() { + return this.data.addedClasses || []; + } + + @HostBinding('class') + get classes() { + return [ + `b-va-${this.data.verticalAlignment || 'center'}`, + `b-size-${this.data.size || 'regular'}`, + ...this.data.contained ? ['contained'] : [], + ...super.classes + ]; + } +} diff --git a/client/projects/shared/blocks/blocks/content/content.component.html b/client/projects/shared/blocks/blocks/content/content.component.html new file mode 100644 index 00000000..428fecda --- /dev/null +++ b/client/projects/shared/blocks/blocks/content/content.component.html @@ -0,0 +1 @@ +
diff --git a/client/projects/shared/blocks/blocks/content/content.component.scss b/client/projects/shared/blocks/blocks/content/content.component.scss new file mode 100644 index 00000000..20903a85 --- /dev/null +++ b/client/projects/shared/blocks/blocks/content/content.component.scss @@ -0,0 +1,3 @@ +.example { + color: blue; +} \ No newline at end of file diff --git a/client/projects/shared/blocks/blocks/content/content.component.spec.ts b/client/projects/shared/blocks/blocks/content/content.component.spec.ts new file mode 100644 index 00000000..3d2ac94c --- /dev/null +++ b/client/projects/shared/blocks/blocks/content/content.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ContentComponent } from './content.component'; + +describe('ContentComponent', () => { + let component: ContentComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ContentComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ContentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/projects/shared/blocks/blocks/content/content.component.ts b/client/projects/shared/blocks/blocks/content/content.component.ts new file mode 100644 index 00000000..f25bcde2 --- /dev/null +++ b/client/projects/shared/blocks/blocks/content/content.component.ts @@ -0,0 +1,54 @@ +import {ChangeDetectionStrategy, Component, Input} from '@angular/core'; +import {Block} from '@jaspero/fb-page-builder'; +import {COMMON_OPTIONS} from '../common-options.const'; +import {CommonBlockComponent, CommonOptions} from '../common.block'; + +interface ContentOptions extends CommonOptions { + content: string; +} + +@Block({ + label: 'PB.FORM.BLOCKS.CONTENT.TITLE', + icon: 'article', + previewValue: { + content: '

Custom Title

Custom Subtitle

Custom content

', + ...COMMON_OPTIONS.defaults + }, + form: { + segments: [ + { + title: 'Content', + icon: 'subject', + fields: [ + '/content' + ], + }, + ...COMMON_OPTIONS.segment + ], + schema: { + properties: { + content: {type: 'string'}, + ...COMMON_OPTIONS.properties + } + }, + definitions: { + content: { + label: '', + component: { + type: 'tinymce' + } + }, + ...COMMON_OPTIONS.definitions + } + } +}) +@Component({ + selector: 'jms-content', + templateUrl: './content.component.html', + styleUrls: [ + '../common-styles.scss', + './content.component.scss' + ], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ContentComponent extends CommonBlockComponent {} diff --git a/client/projects/shared/blocks/blocks/utils.tsx b/client/projects/shared/blocks/blocks/utils.tsx new file mode 100644 index 00000000..fe9f4ed0 --- /dev/null +++ b/client/projects/shared/blocks/blocks/utils.tsx @@ -0,0 +1,23 @@ +import {JSX} from 'definitions'; + +export const IMAGE_DEFINITION = { + component: { + type: 'image', + configuration: { + filePrefix: '/public/', + uploadMethods: [{ + id: 'file-manager', + label: 'FILE_MANAGER.TITLE', + component: JSX(), + configuration: { + route: '/public', + hidePath: false, + hideFolders: false, + filters: [{ + value: file => file.contentType.startsWith('image/') + }] + } + }] + } + } +}; \ No newline at end of file diff --git a/client/projects/shared/blocks/directives/block-link/block-link.directive.spec.ts b/client/projects/shared/blocks/directives/block-link/block-link.directive.spec.ts new file mode 100644 index 00000000..f7455194 --- /dev/null +++ b/client/projects/shared/blocks/directives/block-link/block-link.directive.spec.ts @@ -0,0 +1,8 @@ +import { BlockLinkDirective } from './block-link.directive'; + +describe('BlockLinkDirective', () => { + it('should create an instance', () => { + const directive = new BlockLinkDirective(); + expect(directive).toBeTruthy(); + }); +}); diff --git a/client/projects/shared/blocks/directives/block-link/block-link.directive.ts b/client/projects/shared/blocks/directives/block-link/block-link.directive.ts new file mode 100644 index 00000000..4af7ee59 --- /dev/null +++ b/client/projects/shared/blocks/directives/block-link/block-link.directive.ts @@ -0,0 +1,66 @@ +import {Directive, ElementRef, HostListener, Input, OnInit, Renderer2} from '@angular/core'; +import {Router} from '@angular/router'; + +@Directive({ + selector: '[jmsBlockLink]' +}) +export class BlockLinkDirective implements OnInit { + constructor( + private router: Router, + private el: ElementRef, + private renderer: Renderer2 + ) {} + + @Input('jmsBlockLink') + link: string; + + @HostListener('click', ['$event']) + click(e: MouseEvent) { + if (!this.link) { + return; + } + + const newTab = e.ctrlKey || e.metaKey; + + if (this.link.startsWith('/')) { + + const split = this.link.split('?'); + const path = split[0]; + + if (path && path !== '/') { + if (newTab) { + window.open(this.link, '_blank'); + } else { + this.router.navigateByUrl(this.link); + } + } else { + + const queryParams: any = {}; + + if (split[1]) { + new URLSearchParams('?' + split[1]).forEach((value, key) => { + queryParams[key] = value; + }); + } + + this.router.navigate([], {queryParams}); + } + } else { + if (newTab) { + window.open(this.link, '_blank'); + } else { + window.location.href = this.link; + } + } + } + + ngOnInit() { + if (this.link) { + this.renderer.setStyle( + this.el.nativeElement, + 'cursor', + 'pointer' + ); + } + } +} diff --git a/client/transloco.config.js b/client/transloco.config.js index b46d8942..c901790a 100644 --- a/client/transloco.config.js +++ b/client/transloco.config.js @@ -7,6 +7,10 @@ module.exports = { { src: './node_modules/@jaspero/jmsp-notes', dist: ['./projects/cms/src/assets/i18n/'] + }, + { + src: './node_modules/@jaspero/fb-page-builder', + dist: ['./projects/cms/src/assets/i18n/'] } ] }; diff --git a/definitions/consts/shared-config.const.ts b/definitions/consts/shared-config.const.ts index 4eae532b..9e9f01d0 100644 --- a/definitions/consts/shared-config.const.ts +++ b/definitions/consts/shared-config.const.ts @@ -1,7 +1,9 @@ export const SHARED_CONFIG: { projectId: string, cloudRegion: 'us-central1' | 'us-east1' | 'us-east4' | 'europe-west1' | 'europe-west2' | 'asia-east2' | 'asia-northeast1'; + webUrl: string; } = { projectId: 'jaspero-jms', cloudRegion: 'us-central1', + webUrl: 'https://jaspero-jms.firebaseapp.com', }; \ No newline at end of file diff --git a/definitions/modules/modules.ts b/definitions/modules/modules.ts index 8124eba1..92105696 100644 --- a/definitions/modules/modules.ts +++ b/definitions/modules/modules.ts @@ -2,7 +2,9 @@ import {ROLES_MODULE} from './roles.module'; import {USER_HISTORY_MODULE} from './user-history.module'; import {USER_INVITES_MODULE} from './user-invites.module'; import {USERS_MODULE} from './users.module'; +import {PAGES_MODULE} from './pages/pages.module'; import {DRIVE_MODULE} from './drive.module'; +import {LAYOUT_MODULE} from './website/layout.module'; /** * Schemas for all of the modules @@ -12,5 +14,11 @@ export const MODULES = [ ROLES_MODULE, USER_INVITES_MODULE, USER_HISTORY_MODULE, - DRIVE_MODULE + DRIVE_MODULE, + + /** + * Website + */ + LAYOUT_MODULE, + PAGES_MODULE, ]; diff --git a/definitions/modules/pages/pages.module.tsx b/definitions/modules/pages/pages.module.tsx new file mode 100644 index 00000000..a05f5608 --- /dev/null +++ b/definitions/modules/pages/pages.module.tsx @@ -0,0 +1,107 @@ +import {CREATED_ON} from '../shared/created-on'; +import {FORMAT_SEARCH} from '../shared/format-search'; +import {META} from '../shared/meta'; +import {PROCESSED} from './processed.const'; +import {Module} from '../../interfaces/module.interface'; +import {PipeType} from '../../enums/pipe-type.enum'; +import JSX from '../../jsx.compiler'; +import {SHARED_CONFIG} from '../../consts/shared-config.const'; + +export const PAGES_MODULE: Module = { + id: 'pages', + name: 'PAGES', + authorization: { + write: ['admin'] + }, + layout: { + editTitleKey: 'title', + sort: CREATED_ON.sort, + instance: { + segments: [ + { + title: 'GENERAL', + type: 'card', + fields: [ + '/title', + '/id' + ], + columnsDesktop: 6 + }, + META.segment({columnsDesktop: 6}), + { + type: 'empty', + fields: [ + '/blocks' + ] + } + ] + }, + table: { + tableColumns: [ + CREATED_ON.column(), + {key: '/title', label: 'TITLE'}, + { + key: '/id', + label: 'URL', + pipe: [PipeType.Custom], + pipeArguments: { + 0: id => JSX({id}) + } + }, + {key: '/active', label: 'ACTIVE', control: true} + ], + actions: [ + { + value: it => { + + window['tempDuplicate'] = it.data.blocks; + + const method = () => { + const blocks = [...window['tempDuplicate']]; + delete window['tempDuplicate']; + return {blocks}; + } + + return JSX( + + Duplicate Blocks + + ); + } + } + ] + } + }, + schema: { + properties: { + id: {type: 'string'}, + title: {type: 'string'}, + active: {type: 'boolean'}, + blocks: {type: 'array'}, + ...CREATED_ON.property, + ...META.property(), + } + }, + definitions: { + id: { + label: 'URL', + disableOn: 'edit', + formatOnSave: FORMAT_SEARCH(), + hint: 'ID_HINT' + }, + title: {label: 'TITLE'}, + active: {label: ''}, + blocks: { + component: { + type: 'pb-blocks', + configuration: { + saveCompiled: true, + styles: PROCESSED.css, + styleUrls: [] + } + } + }, + ...CREATED_ON.definition(), + ...META.definitions() + } +}; \ No newline at end of file diff --git a/definitions/modules/pages/processed.const.ts b/definitions/modules/pages/processed.const.ts new file mode 100644 index 00000000..e1983c80 --- /dev/null +++ b/definitions/modules/pages/processed.const.ts @@ -0,0 +1,3 @@ +export const PROCESSED = { + "css": "*,:after,:before{box-sizing:inherit}html{box-sizing:border-box;word-wrap:break-word;overflow-wrap:break-word;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}body,h1,h2,h3,hr,ol,p,ul{margin:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}li>ol,ul{margin-bottom:0}small{font-size:.8em}b,strong{font-weight:700}em,i{font-style:italic}u{text-decoration:underline}a{color:inherit;text-decoration:none}a,button{cursor:pointer}img{max-width:100%;height:auto;vertical-align:middle}" +}; \ No newline at end of file diff --git a/definitions/modules/pages/style.css b/definitions/modules/pages/style.css new file mode 100644 index 00000000..9f4d5a5c --- /dev/null +++ b/definitions/modules/pages/style.css @@ -0,0 +1,92 @@ +*, +*:before, +*:after { + box-sizing: inherit; +} + +html { + box-sizing: border-box; /* [1] */ + word-wrap: break-word; /* [2] */ + overflow-wrap: break-word; /* [2] */ + -moz-osx-font-smoothing: grayscale; /* [3] */ + -webkit-font-smoothing: antialiased; /* [3] */ +} + +body { + margin: 0; +} + +input[type='number']::-webkit-outer-spin-button, +input[type='number']::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +/* Margin resets +*============================================================================*/ + +h1, +h2, +h3, +p, +ol, +ul, +hr { + margin: 0; +} + +li > ol, +ul { + margin-bottom: 0; +} + +/* Semantic markup +*============================================================================*/ + +small { + font-size: 0.8em; +} + +b, +strong { + font-weight: 700; +} + +i, +em { + font-style: italic; +} + +u { + text-decoration: underline; +} + +/* Hyperlinks +*============================================================================*/ + +a { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +/* Buttons +*============================================================================*/ + +button { + cursor: pointer; +} + +/* Images +*============================================================================*/ +/** +* 1. Images will retain their aspect ratio on screen resizing. They + will never scale up to be larger than their original size. +* 2. Removes whitespace under images. +*/ + +img { + max-width: 100%; /* [1] */ + height: auto; /* [1] */ + vertical-align: middle; /* [2] */ +} diff --git a/definitions/modules/shared/format-search.ts b/definitions/modules/shared/format-search.ts new file mode 100644 index 00000000..d797f185 --- /dev/null +++ b/definitions/modules/shared/format-search.ts @@ -0,0 +1 @@ +export const FORMAT_SEARCH = (key = 'title') => `(e,a) => {if(e)return e;let r=(a.${key}||"").trim().replace(/ /g,"-").toLowerCase();return[{value:"č",replace:"c"},{value:"ć",replace:"c"},{value:"ž",replace:"z"},{value:"đ",replace:"d"},{value:"š",replace:"s"}].forEach(e=>r=r.replace(new RegExp(e.value,"g"),e.replace)),r}`; \ No newline at end of file diff --git a/definitions/modules/shared/meta.tsx b/definitions/modules/shared/meta.tsx new file mode 100644 index 00000000..5481cdfb --- /dev/null +++ b/definitions/modules/shared/meta.tsx @@ -0,0 +1,65 @@ +import JSX from '../../jsx.compiler'; + +export const META = { + segment: (options: any = {}) => ({ + type: 'card', + title: 'Meta Data', + fields: [ + '/meta/title', + '/meta/description', + '/meta/keywords', + '/meta/structured', + '/meta/image' + ], + ...options + }), + property: () => ({ + meta: { + type: 'object', + properties: { + structured: {type: 'string'}, + description: {type: 'string'}, + title: {type: 'string'}, + keywords: {type: 'string'}, + image: {type: 'string'} + } + } + }), + definitions: () => ({ + 'meta/structured': { + component: {type: 'textarea'}, + label: 'Structured' + }, + 'meta/title': {label: 'Title'}, + 'meta/description': {label: 'Description'}, + 'meta/keywords': {label: 'Keywords'}, + 'meta/image': { + label: 'Image', + component: { + type: 'image', + configuration: { + maxSize: 5e+6, + generatedImages: [{ + filePrefix: 'thumb_m_', + width: 1200, + height: 630 + }], + filePrefix: '/public/', + uploadMethods: [{ + id: 'file-manager', + label: 'FILE_MANAGER.TITLE', + component: JSX(), + configuration: { + route: '/public', + hidePath: false, + hideFolders: false, + filters: [{ + value: file => file.contentType.startsWith('image/') + }] + } + }] + } + } + } + } as any) +}; \ No newline at end of file diff --git a/definitions/modules/website/layout.module.ts b/definitions/modules/website/layout.module.ts new file mode 100644 index 00000000..8285d5f5 --- /dev/null +++ b/definitions/modules/website/layout.module.ts @@ -0,0 +1,47 @@ +import {Module} from '../../interfaces/module.interface'; + +export const LAYOUT_MODULE: Module = { + id: 'settings', + name: 'LAYOUT', + authorization: { + write: ['admin'] + }, + layout: { + directLink: 'layout', + instance: { + segments: [ + { + title: 'HEADER_NAVIGATION', + array: '/headerLinks', + fields: ['/link', '/label'], + columnsDesktop: 12 + } + ] + } + }, + schema: { + properties: { + id: {type: 'string'}, + headerLinks: { + type: 'array', + items: { + type: 'object', + properties: { + link: {type: 'string'}, + label: {type: 'string'} + } + } + } + } + }, + definitions: { + 'headerLinks/link': { + label: 'LINK', + columnsDesktop: 6 + }, + 'headerLinks/label': { + label: 'LABEL', + columnsDesktop: 6 + } + } +} \ No newline at end of file diff --git a/definitions/package-lock.json b/definitions/package-lock.json index fc3fca2d..fca6e627 100644 --- a/definitions/package-lock.json +++ b/definitions/package-lock.json @@ -16,6 +16,7 @@ "devDependencies": { "@google-cloud/storage": "5.19.3", "cross-env": "7.0.3", + "csso": "4.2.0", "firebase-admin": "10.1.0", "rimraf": "3.0.2", "ts-node": "10.7.0", @@ -1340,6 +1341,31 @@ "node": ">=8" } }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/date-and-time": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.2.1.tgz", @@ -2566,6 +2592,12 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -3357,6 +3389,15 @@ "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=", "devOptional": true }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -4832,6 +4873,25 @@ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "devOptional": true }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, "date-and-time": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.2.1.tgz", @@ -5806,6 +5866,12 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -6397,6 +6463,12 @@ "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=", "devOptional": true }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", diff --git a/definitions/package.json b/definitions/package.json index b1b30ce6..7e7abd04 100644 --- a/definitions/package.json +++ b/definitions/package.json @@ -2,6 +2,7 @@ "name": "definitions", "version": "0.0.1", "scripts": { + "process": "ts-node process.ts", "build": "rimraf dist && tsc", "start": "tsc --w", "setup": "cross-env FIRESTORE_EMULATOR_HOST=localhost:8080 ts-node setup.ts", @@ -18,6 +19,7 @@ "@google-cloud/storage": "5.19.3", "cross-env": "7.0.3", "firebase-admin": "10.1.0", + "csso": "4.2.0", "rimraf": "3.0.2", "ts-node": "10.7.0", "typescript": "4.6.3" diff --git a/definitions/process.ts b/definitions/process.ts new file mode 100644 index 00000000..9f9fb24b --- /dev/null +++ b/definitions/process.ts @@ -0,0 +1,25 @@ +import {readFileSync, writeFileSync} from 'fs'; +import {join} from 'path'; +import {minify} from 'csso'; + +function pages() { + const {css} = minify( + readFileSync(join(__dirname, 'modules/pages/style.css')).toString() + ); + + writeFileSync( + join(__dirname, 'modules/pages/processed.const.ts'), + `export const PROCESSED = ${JSON.stringify({css}, null, 2)};` + ) +} + +async function exec() { + pages(); +} + +exec() + .then(() => process.exit(0)) + .catch(e => { + console.error(e); + process.exit(1) + }); \ No newline at end of file diff --git a/firestore.rules b/firestore.rules index 56e4a62c..b3da45ed 100644 --- a/firestore.rules +++ b/firestore.rules @@ -58,6 +58,21 @@ service cloud.firestore { allow read, write: if admin() || hasId(resource); } + match /settings/{item} { + allow read: if true; + allow write: if admin(); + } + + match /posts/{item} { + allow read: if resource.data.published || admin(); + allow write: if admin(); + } + + match /pages/{item=**} { + allow read: if true; + allow write: if admin(); + } + match /drive/{item=**} { allow read: if driveItemPublicRead() || driveItemPublicWrite() || driveItemRoleRead() || driveItemRoleWrite() || driveItemUserRead() || driveItemUserWrite(); allow write: if driveItemPublicWrite() || driveItemRoleWrite() || driveItemUserWrite(); diff --git a/web/.eslintrc.cjs b/web/.eslintrc.cjs new file mode 100644 index 00000000..13b64140 --- /dev/null +++ b/web/.eslintrc.cjs @@ -0,0 +1,20 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'], + plugins: ['svelte3', '@typescript-eslint'], + ignorePatterns: ['*.cjs'], + overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], + settings: { + 'svelte3/typescript': () => require('typescript') + }, + parserOptions: { + sourceType: 'module', + ecmaVersion: 2020 + }, + env: { + browser: true, + es2017: true, + node: true + } +}; diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 00000000..64007bdd --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example +.vercel +.output diff --git a/web/.npmrc b/web/.npmrc new file mode 100644 index 00000000..b6f27f13 --- /dev/null +++ b/web/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/web/README.md b/web/README.md new file mode 100644 index 00000000..374efec4 --- /dev/null +++ b/web/README.md @@ -0,0 +1,38 @@ +# create-svelte + +Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npm init svelte + +# create a new project in my-app +npm init svelte my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. diff --git a/web/package-lock.json b/web/package-lock.json new file mode 100644 index 00000000..ba2d9a60 --- /dev/null +++ b/web/package-lock.json @@ -0,0 +1,7387 @@ +{ + "name": "web", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "web", + "version": "0.0.1", + "devDependencies": { + "@playwright/test": "1.22.0", + "@sveltejs/adapter-static": "1.0.0-next.30", + "@sveltejs/kit": "1.0.0-next.330", + "@typescript-eslint/eslint-plugin": "5.10.1", + "@typescript-eslint/parser": "5.10.1", + "eslint": "8.12.0", + "eslint-plugin-svelte3": "4.0.0", + "firebase-admin": "10.2.0", + "svelte": "3.48.0", + "svelte-check": "2.7.1", + "svelte-preprocess": "4.10.6", + "tslib": "2.4.0", + "typescript": "4.6.4" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", + "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.9.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@firebase/app": { + "version": "0.7.24", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.7.24.tgz", + "integrity": "sha512-HIbAhayEykbCez1Rl6pmzAWbIx63Mc9+t3ngWKqZdkMnBNAAJvYaUdx7Krus7O9XHUKNw/gzBUETAEYt93jusA==", + "dev": true, + "peer": true, + "dependencies": { + "@firebase/component": "0.5.14", + "@firebase/logger": "0.3.2", + "@firebase/util": "1.6.0", + "idb": "7.0.1", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app-compat": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.25.tgz", + "integrity": "sha512-FdCnYwIM3R+OuRE7nrAdVT5oNlvSAHQHN1ictB/gjCFs58lXMCe0DCIRDrA7zxaOFIKeWPtx35ZNXv3EdPFNpQ==", + "dev": true, + "peer": true, + "dependencies": { + "@firebase/app": "0.7.24", + "@firebase/component": "0.5.14", + "@firebase/logger": "0.3.2", + "@firebase/util": "1.6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/app-types": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.7.0.tgz", + "integrity": "sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg==", + "dev": true + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz", + "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==", + "dev": true, + "peerDependencies": { + "@firebase/app-types": "0.x", + "@firebase/util": "1.x" + } + }, + "node_modules/@firebase/component": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.14.tgz", + "integrity": "sha512-ct2p1MTMV5P/nGIlkC3XjAVwHwjsIZaeo8JVyDAkJCNTROu5mYX3FBK16hjIUIIVJDpgnnzFh9nP74gciL4WrA==", + "dev": true, + "peer": true, + "dependencies": { + "@firebase/util": "1.6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.12.8.tgz", + "integrity": "sha512-JBQVfFLzfhxlQbl4OU6ov9fdsddkytBQdtSSR49cz48homj38ccltAhK6seum+BI7f28cV2LFHF9672lcN+qxA==", + "dev": true, + "dependencies": { + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.13", + "@firebase/logger": "0.3.2", + "@firebase/util": "1.5.2", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.1.8.tgz", + "integrity": "sha512-dhXr5CSieBuKNdU96HgeewMQCT9EgOIkfF1GNy+iRrdl7BWLxmlKuvLfK319rmIytSs/vnCzcD9uqyxTeU/A3A==", + "dev": true, + "dependencies": { + "@firebase/component": "0.5.13", + "@firebase/database": "0.12.8", + "@firebase/database-types": "0.9.7", + "@firebase/logger": "0.3.2", + "@firebase/util": "1.5.2", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/database-compat/node_modules/@firebase/component": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.13.tgz", + "integrity": "sha512-hxhJtpD8Ppf/VU2Rlos6KFCEV77TGIGD5bJlkPK1+B/WUe0mC6dTjW7KhZtXTc+qRBp9nFHWcsIORnT8liHP9w==", + "dev": true, + "dependencies": { + "@firebase/util": "1.5.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database-compat/node_modules/@firebase/database-types": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.9.7.tgz", + "integrity": "sha512-EFhgL89Fz6DY3kkB8TzdHvdu8XaqqvzcF2DLVOXEnQ3Ms7L755p5EO42LfxXoJqb9jKFvgLpFmKicyJG25WFWw==", + "dev": true, + "dependencies": { + "@firebase/app-types": "0.7.0", + "@firebase/util": "1.5.2" + } + }, + "node_modules/@firebase/database-compat/node_modules/@firebase/util": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.5.2.tgz", + "integrity": "sha512-YvBH2UxFcdWG2HdFnhxZptPl2eVFlpOyTH66iDo13JPEYraWzWToZ5AMTtkyRHVmu7sssUpQlU9igy1KET7TOw==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.9.8.tgz", + "integrity": "sha512-bI7bwF5xc0nPi6Oa3JVt6JJdfhVAnEpCwgfTNILR4lYDPtxdxlRXhZzQ5lfqlCj7PR+drKh9RvMu6C24N1q04w==", + "dev": true, + "dependencies": { + "@firebase/app-types": "0.7.0", + "@firebase/util": "1.6.0" + } + }, + "node_modules/@firebase/database/node_modules/@firebase/component": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.13.tgz", + "integrity": "sha512-hxhJtpD8Ppf/VU2Rlos6KFCEV77TGIGD5bJlkPK1+B/WUe0mC6dTjW7KhZtXTc+qRBp9nFHWcsIORnT8liHP9w==", + "dev": true, + "dependencies": { + "@firebase/util": "1.5.2", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database/node_modules/@firebase/util": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.5.2.tgz", + "integrity": "sha512-YvBH2UxFcdWG2HdFnhxZptPl2eVFlpOyTH66iDo13JPEYraWzWToZ5AMTtkyRHVmu7sssUpQlU9igy1KET7TOw==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/logger": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.3.2.tgz", + "integrity": "sha512-lzLrcJp9QBWpo40OcOM9B8QEtBw2Fk1zOZQdvv+rWS6gKmhQBCEMc4SMABQfWdjsylBcDfniD1Q+fUX1dcBTXA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/util": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.6.0.tgz", + "integrity": "sha512-6+hhqb4Zzjoo12xofTDHPkgW3FnN4ydBsjd5X2KuQI268DR3W3Ld64W/gkKPZrKRgUxeNeb+pykfP3qRe7q+vA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@google-cloud/firestore": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-4.15.1.tgz", + "integrity": "sha512-2PWsCkEF1W02QbghSeRsNdYKN1qavrHBP3m72gPDMHQSYrGULOaTi7fSJquQmAtc4iPVB2/x6h80rdLHTATQtA==", + "dev": true, + "optional": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^2.24.1", + "protobufjs": "^6.8.6" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@google-cloud/paginator": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", + "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", + "dev": true, + "optional": true, + "dependencies": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz", + "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz", + "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/storage": { + "version": "5.19.4", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.19.4.tgz", + "integrity": "sha512-Jz7ugcPHhsEmMVvIxM9uoBsdEbKIYwDkh3u07tifsIymEWs47F4/D6+/Tv/W7kLhznqjyOjVJ/0frtBeIC0lJA==", + "dev": true, + "optional": true, + "dependencies": { + "@google-cloud/paginator": "^3.0.7", + "@google-cloud/projectify": "^2.0.0", + "@google-cloud/promisify": "^2.0.0", + "abort-controller": "^3.0.0", + "arrify": "^2.0.0", + "async-retry": "^1.3.3", + "compressible": "^2.0.12", + "configstore": "^5.0.0", + "date-and-time": "^2.0.0", + "duplexify": "^4.0.0", + "ent": "^2.2.0", + "extend": "^3.0.2", + "gaxios": "^4.0.0", + "get-stream": "^6.0.0", + "google-auth-library": "^7.14.1", + "hash-stream-validation": "^0.2.2", + "mime": "^3.0.0", + "mime-types": "^2.0.8", + "p-limit": "^3.0.1", + "pumpify": "^2.0.0", + "retry-request": "^4.2.2", + "snakeize": "^0.1.0", + "stream-events": "^1.0.4", + "teeny-request": "^7.1.3", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", + "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", + "dev": true, + "optional": true, + "dependencies": { + "@grpc/proto-loader": "^0.6.4", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.12.tgz", + "integrity": "sha512-filTVbETFnxb9CyRX98zN18ilChTuf/C5scZ2xyaOTp0EHGq0/ufX8rjqXUcSb1Gpv7eZq4M2jDvbh9BogKnrg==", + "dev": true, + "optional": true, + "dependencies": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.10.0", + "yargs": "^16.2.0" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@panva/asn1.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", + "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@playwright/test": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.22.0.tgz", + "integrity": "sha512-ExcAjiECo3uTG5Sl5H4a7rKp/5TEHTI87dv9NHYEoUFuOHPhSVxB7QsuM70ktO+wTTZ9KzhwzcegxAGRmUFKEA==", + "dev": true, + "dependencies": { + "playwright-core": "1.22.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=", + "dev": true, + "optional": true + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "dev": true, + "optional": true + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "dev": true, + "optional": true + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=", + "dev": true, + "optional": true + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "dev": true, + "optional": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=", + "dev": true, + "optional": true + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=", + "dev": true, + "optional": true + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=", + "dev": true, + "optional": true + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=", + "dev": true, + "optional": true + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", + "dev": true, + "optional": true + }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@sveltejs/adapter-static": { + "version": "1.0.0-next.30", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-1.0.0-next.30.tgz", + "integrity": "sha512-xJPOXuj4T/lw9pZpMQAoN68TgrOPp/zOldvSFA+A5CIhb8yLXkgxOWh6UDUrbVxM1NjOdt8lwPdZfdkh5FL2Fg==", + "dev": true, + "dependencies": { + "tiny-glob": "^0.2.9" + } + }, + "node_modules/@sveltejs/kit": { + "version": "1.0.0-next.330", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.330.tgz", + "integrity": "sha512-Wb95D5tOF8BViZuikqzZLAcupdS7TpXtadNPgpEOxKowmkrW8xjRrrfVdPIkNOLqAP1V+gKInmQ/gFYmnv5EjA==", + "dev": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte": "^1.0.0-next.32", + "chokidar": "^3.5.3", + "sade": "^1.7.4", + "vite": "^2.9.0" + }, + "bin": { + "svelte-kit": "svelte-kit.js" + }, + "engines": { + "node": ">=14.13" + }, + "peerDependencies": { + "svelte": "^3.44.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "1.0.0-next.44", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.44.tgz", + "integrity": "sha512-n+sssEWbzykPS447FmnNyU5GxEhrBPDVd0lxNZnxRGz9P6651LjjwAnISKr3CKgT9v8IybP8VD0n2i5XzbqExg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.2.1", + "debug": "^4.3.4", + "deepmerge": "^4.2.2", + "kleur": "^4.1.4", + "magic-string": "^0.26.1", + "svelte-hmr": "^0.14.11" + }, + "engines": { + "node": "^14.13.1 || >= 16" + }, + "peerDependencies": { + "diff-match-patch": "^1.0.5", + "svelte": "^3.44.0", + "vite": "^2.9.0" + }, + "peerDependenciesMeta": { + "diff-match-patch": { + "optional": true + } + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "dev": true, + "optional": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.33.tgz", + "integrity": "sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==", + "dev": true + }, + "node_modules/@types/pug": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", + "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/sass": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", + "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.1.tgz", + "integrity": "sha512-xN3CYqFlyE/qOcy978/L0xLR2HlcAGIyIK5sMOasxaaAPfQRj/MmMV6OC3I7NZO84oEUdWCOju34Z9W8E0pFDQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.10.1", + "@typescript-eslint/type-utils": "5.10.1", + "@typescript-eslint/utils": "5.10.1", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.1.tgz", + "integrity": "sha512-GReo3tjNBwR5RnRO0K2wDIDN31cM3MmDtgyQ85oAxAmC5K3j/g85IjP+cDfcqDsDDBf1HNKQAD0WqOYL8jXqUA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.10.1", + "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/typescript-estree": "5.10.1", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.1.tgz", + "integrity": "sha512-Lyvi559Gvpn94k7+ElXNMEnXu/iundV5uFmCUNnftbFrUbAJ1WBoaGgkbOBm07jVZa682oaBU37ao/NGGX4ZDg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/visitor-keys": "5.10.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.1.tgz", + "integrity": "sha512-AfVJkV8uck/UIoDqhu+ptEdBoQATON9GXnhOpPLzkQRJcSChkvD//qsz9JVffl2goxX+ybs5klvacE9vmrQyCw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.10.1", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.1.tgz", + "integrity": "sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.1.tgz", + "integrity": "sha512-PwIGnH7jIueXv4opcwEbVGDATjGPO1dx9RkUl5LlHDSe+FXxPwFL5W/qYd5/NHr7f6lo/vvTrAzd0KlQtRusJQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/visitor-keys": "5.10.1", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.1.tgz", + "integrity": "sha512-RRmlITiUbLuTRtn/gcPRi4202niF+q7ylFLCKu4c+O/PcpRvZ/nAUwQ2G00bZgpWkhrNLNnvhZLbDn8Ml0qsQw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.10.1", + "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/typescript-estree": "5.10.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.1.tgz", + "integrity": "sha512-NjQ0Xinhy9IL979tpoTRuLKxMc0zJC7QVSdeerXs2/QvOy2yRkzX5dRb10X5woNUdJgU8G3nYRDlI33sq1K4YQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.10.1", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "optional": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "optional": true, + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "dev": true, + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "optional": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "optional": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "optional": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/date-and-time": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.3.1.tgz", + "integrity": "sha512-OaIRmSJXifwEN21rMVVDs0Kz8uhJ3wWPYd86atkRiqN54liaMQYEbbrgjZQea75YXOBWL4ZFb3rG/waenw1TEg==", + "dev": true, + "optional": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dicer": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.1.tgz", + "integrity": "sha512-ObioMtXnmjYs3aRtpIJt9rgQSPCIhKVkFPip+E9GUDyWl8N435znUxK/JfNwGZJ2wnn5JKQ7Ly3vOK5Q5dylGA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "optional": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dev": true, + "optional": true, + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "optional": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true, + "optional": true + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", + "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.39", + "esbuild-android-arm64": "0.14.39", + "esbuild-darwin-64": "0.14.39", + "esbuild-darwin-arm64": "0.14.39", + "esbuild-freebsd-64": "0.14.39", + "esbuild-freebsd-arm64": "0.14.39", + "esbuild-linux-32": "0.14.39", + "esbuild-linux-64": "0.14.39", + "esbuild-linux-arm": "0.14.39", + "esbuild-linux-arm64": "0.14.39", + "esbuild-linux-mips64le": "0.14.39", + "esbuild-linux-ppc64le": "0.14.39", + "esbuild-linux-riscv64": "0.14.39", + "esbuild-linux-s390x": "0.14.39", + "esbuild-netbsd-64": "0.14.39", + "esbuild-openbsd-64": "0.14.39", + "esbuild-sunos-64": "0.14.39", + "esbuild-windows-32": "0.14.39", + "esbuild-windows-64": "0.14.39", + "esbuild-windows-arm64": "0.14.39" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", + "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", + "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", + "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", + "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", + "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", + "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", + "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", + "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", + "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", + "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", + "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", + "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", + "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", + "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", + "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", + "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", + "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", + "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", + "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", + "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.2.1", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-svelte3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-4.0.0.tgz", + "integrity": "sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==", + "dev": true, + "peerDependencies": { + "eslint": ">=8.0.0", + "svelte": "^3.2.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "dependencies": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "optional": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==", + "dev": true, + "optional": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/firebase-admin": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-10.2.0.tgz", + "integrity": "sha512-6ehn5J9UEFgi4+naqYvozmGpnZae3cJLdwSkSsDc8/Y0eTBjVMFdf9N2ft7N81UNHA0N5DknOyXhlsdAdyBLCA==", + "dev": true, + "dependencies": { + "@firebase/database-compat": "^0.1.8", + "@firebase/database-types": "^0.9.7", + "@types/node": ">=12.12.47", + "dicer": "^0.3.0", + "jsonwebtoken": "^8.5.1", + "jwks-rsa": "^2.0.2", + "node-forge": "^1.3.1", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "optionalDependencies": { + "@google-cloud/firestore": "^4.15.1", + "@google-cloud/storage": "^5.18.3" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "dev": true, + "optional": true, + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gcp-metadata": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", + "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", + "dev": true, + "optional": true, + "dependencies": { + "gaxios": "^4.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "optional": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.2.tgz", + "integrity": "sha512-NzDgHDiJwKYByLrL5lONmQFpK/2G78SMMfo+E9CuGlX4IkvfKDsiQSNPwAYxEy+e6p7ZQ3uslSLlwlJcqezBmQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "node_modules/google-auth-library": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", + "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", + "dev": true, + "optional": true, + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^4.0.0", + "gcp-metadata": "^4.2.0", + "gtoken": "^5.0.4", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/google-gax": { + "version": "2.30.4", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.30.4.tgz", + "integrity": "sha512-/W4wWKjYcCXtd3Vz+ux7fN3MElbLVKGmHCCgA6kotigQgoDrLLueSvnXsck7qZaF39ooYnFhA58Rjr7RHe2heA==", + "dev": true, + "optional": true, + "dependencies": { + "@grpc/grpc-js": "~1.6.0", + "@grpc/proto-loader": "^0.6.12", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^7.14.0", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^0.1.8", + "protobufjs": "6.11.2", + "retry-request": "^4.0.0" + }, + "bin": { + "compileProtos": "build/tools/compileProtos.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/google-p12-pem": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", + "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "dev": true, + "optional": true, + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "dev": true, + "optional": true, + "dependencies": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.1.3", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hash-stream-validation": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz", + "integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==", + "dev": true, + "optional": true + }, + "node_modules/http-parser-js": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", + "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "optional": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==", + "dev": true, + "peer": true + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream-ended": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", + "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==", + "dev": true, + "optional": true + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "optional": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/jose": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz", + "integrity": "sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==", + "dev": true, + "dependencies": { + "@panva/asn1.js": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0 < 13 || >=13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, + "optional": true, + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dev": true, + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, + "optional": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jwks-rsa": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.1.2.tgz", + "integrity": "sha512-QW2SNEUVvMqULiBJVsIJXSuX73Qj9il/DMCsJZsmCI8AQFZ6BjXgQW6h9wOlPr1LswQBNDdyFT2LPogwMRr1ew==", + "dev": true, + "dependencies": { + "@types/express": "^4.17.13", + "debug": "^4.3.4", + "jose": "^2.0.5", + "limiter": "^1.1.5", + "lru-memoizer": "^2.1.4" + }, + "engines": { + "node": ">=10 < 13 || >=14" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, + "optional": true, + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kleur": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", + "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true, + "optional": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true, + "optional": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-memoizer": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.1.4.tgz", + "integrity": "sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==", + "dev": true, + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "~4.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/lru-cache": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", + "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.1", + "yallist": "^2.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", + "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "optional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "optional": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "optional": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "optional": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/playwright-core": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.22.0.tgz", + "integrity": "sha512-XnDPiV4NCzTtXWxQdyJ6Wg8xhST3ciUjt5mITaxoqOoYggmRtofKm0PXLehfbetXh2ppPYj5U8UhtUpdIE4wag==", + "dev": true, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/postcss": { + "version": "8.4.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", + "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.3", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/proto3-json-serializer": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.9.tgz", + "integrity": "sha512-A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ==", + "dev": true, + "optional": true, + "dependencies": { + "protobufjs": "^6.11.2" + } + }, + "node_modules/protobufjs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "dev": true, + "optional": true, + "dependencies": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/retry-request": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", + "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^4.1.1", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.73.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.73.0.tgz", + "integrity": "sha512-h/UngC3S4Zt28mB3g0+2YCMegT5yoftnQplwzPqGZcKvlld5e+kT/QRmJiL+qxGyZKOYpgirWGdLyEO1b0dpLQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/sander": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "integrity": "sha1-dB4kXiMfB8r7b98PEzrfohalAq0=", + "dev": true, + "dependencies": { + "es6-promise": "^3.1.2", + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + } + }, + "node_modules/sander/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "optional": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/snakeize": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz", + "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=", + "dev": true, + "optional": true + }, + "node_modules/sorcery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", + "integrity": "sha1-iukK19fLBfxZ8asMY3hF1cFaUrc=", + "dev": true, + "dependencies": { + "buffer-crc32": "^0.2.5", + "minimist": "^1.2.0", + "sander": "^0.5.0", + "sourcemap-codec": "^1.3.0" + }, + "bin": { + "sorcery": "bin/index.js" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "dev": true, + "optional": true, + "dependencies": { + "stubs": "^3.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true, + "optional": true + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", + "dev": true, + "optional": true + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.48.0.tgz", + "integrity": "sha512-fN2YRm/bGumvjUpu6yI3BpvZnpIm9I6A7HR4oUNYd7ggYyIwSA/BX7DJ+UXXffLp6XNcUijyLvttbPVCYa/3xQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/svelte-check": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.7.1.tgz", + "integrity": "sha512-vHVu2+SQ6ibt77iTQaq2oiOjBgGL48qqcg0ZdEOsP5pPOjgeyR9QbnaEdzdBs9nsVYBc/42haKtzb2uFqS8GVw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.9", + "chokidar": "^3.4.1", + "fast-glob": "^3.2.7", + "import-fresh": "^3.2.1", + "picocolors": "^1.0.0", + "sade": "^1.7.4", + "svelte-preprocess": "^4.0.0", + "typescript": "*" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "peerDependencies": { + "svelte": "^3.24.0" + } + }, + "node_modules/svelte-hmr": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.11.tgz", + "integrity": "sha512-R9CVfX6DXxW1Kn45Jtmx+yUe+sPhrbYSUp7TkzbW0jI5fVPn6lsNG9NEs5dFg5qRhFNAoVdRw5qQDLALNKhwbQ==", + "dev": true, + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": ">=3.19.0" + } + }, + "node_modules/svelte-preprocess": { + "version": "4.10.6", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.6.tgz", + "integrity": "sha512-I2SV1w/AveMvgIQlUF/ZOO3PYVnhxfcpNyGt8pxpUVhPfyfL/CZBkkw/KPfuFix5FJ9TnnNYMhACK3DtSaYVVQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@types/pug": "^2.0.4", + "@types/sass": "^1.16.0", + "detect-indent": "^6.0.0", + "magic-string": "^0.25.7", + "sorcery": "^0.10.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">= 9.11.2" + }, + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": "^2.1.0 || ^3.0.0", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": "^0.55.0", + "sugarss": "^2.0.0", + "svelte": "^3.23.0", + "typescript": "^3.9.5 || ^4.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/svelte-preprocess/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/teeny-request": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.2.0.tgz", + "integrity": "sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==", + "dev": true, + "optional": true, + "dependencies": { + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", + "stream-events": "^1.0.5", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true, + "optional": true + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "optional": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "optional": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vite": { + "version": "2.9.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.9.tgz", + "integrity": "sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==", + "dev": true, + "dependencies": { + "esbuild": "^0.14.27", + "postcss": "^8.4.13", + "resolve": "^1.22.0", + "rollup": "^2.59.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true, + "optional": true + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "optional": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "optional": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@eslint/eslintrc": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", + "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.9.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@firebase/app": { + "version": "0.7.24", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.7.24.tgz", + "integrity": "sha512-HIbAhayEykbCez1Rl6pmzAWbIx63Mc9+t3ngWKqZdkMnBNAAJvYaUdx7Krus7O9XHUKNw/gzBUETAEYt93jusA==", + "dev": true, + "peer": true, + "requires": { + "@firebase/component": "0.5.14", + "@firebase/logger": "0.3.2", + "@firebase/util": "1.6.0", + "idb": "7.0.1", + "tslib": "^2.1.0" + } + }, + "@firebase/app-compat": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.1.25.tgz", + "integrity": "sha512-FdCnYwIM3R+OuRE7nrAdVT5oNlvSAHQHN1ictB/gjCFs58lXMCe0DCIRDrA7zxaOFIKeWPtx35ZNXv3EdPFNpQ==", + "dev": true, + "peer": true, + "requires": { + "@firebase/app": "0.7.24", + "@firebase/component": "0.5.14", + "@firebase/logger": "0.3.2", + "@firebase/util": "1.6.0", + "tslib": "^2.1.0" + } + }, + "@firebase/app-types": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.7.0.tgz", + "integrity": "sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg==", + "dev": true + }, + "@firebase/auth-interop-types": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz", + "integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==", + "dev": true, + "requires": {} + }, + "@firebase/component": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.14.tgz", + "integrity": "sha512-ct2p1MTMV5P/nGIlkC3XjAVwHwjsIZaeo8JVyDAkJCNTROu5mYX3FBK16hjIUIIVJDpgnnzFh9nP74gciL4WrA==", + "dev": true, + "peer": true, + "requires": { + "@firebase/util": "1.6.0", + "tslib": "^2.1.0" + } + }, + "@firebase/database": { + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.12.8.tgz", + "integrity": "sha512-JBQVfFLzfhxlQbl4OU6ov9fdsddkytBQdtSSR49cz48homj38ccltAhK6seum+BI7f28cV2LFHF9672lcN+qxA==", + "dev": true, + "requires": { + "@firebase/auth-interop-types": "0.1.6", + "@firebase/component": "0.5.13", + "@firebase/logger": "0.3.2", + "@firebase/util": "1.5.2", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.13.tgz", + "integrity": "sha512-hxhJtpD8Ppf/VU2Rlos6KFCEV77TGIGD5bJlkPK1+B/WUe0mC6dTjW7KhZtXTc+qRBp9nFHWcsIORnT8liHP9w==", + "dev": true, + "requires": { + "@firebase/util": "1.5.2", + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.5.2.tgz", + "integrity": "sha512-YvBH2UxFcdWG2HdFnhxZptPl2eVFlpOyTH66iDo13JPEYraWzWToZ5AMTtkyRHVmu7sssUpQlU9igy1KET7TOw==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + } + } + }, + "@firebase/database-compat": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.1.8.tgz", + "integrity": "sha512-dhXr5CSieBuKNdU96HgeewMQCT9EgOIkfF1GNy+iRrdl7BWLxmlKuvLfK319rmIytSs/vnCzcD9uqyxTeU/A3A==", + "dev": true, + "requires": { + "@firebase/component": "0.5.13", + "@firebase/database": "0.12.8", + "@firebase/database-types": "0.9.7", + "@firebase/logger": "0.3.2", + "@firebase/util": "1.5.2", + "tslib": "^2.1.0" + }, + "dependencies": { + "@firebase/component": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.13.tgz", + "integrity": "sha512-hxhJtpD8Ppf/VU2Rlos6KFCEV77TGIGD5bJlkPK1+B/WUe0mC6dTjW7KhZtXTc+qRBp9nFHWcsIORnT8liHP9w==", + "dev": true, + "requires": { + "@firebase/util": "1.5.2", + "tslib": "^2.1.0" + } + }, + "@firebase/database-types": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.9.7.tgz", + "integrity": "sha512-EFhgL89Fz6DY3kkB8TzdHvdu8XaqqvzcF2DLVOXEnQ3Ms7L755p5EO42LfxXoJqb9jKFvgLpFmKicyJG25WFWw==", + "dev": true, + "requires": { + "@firebase/app-types": "0.7.0", + "@firebase/util": "1.5.2" + } + }, + "@firebase/util": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.5.2.tgz", + "integrity": "sha512-YvBH2UxFcdWG2HdFnhxZptPl2eVFlpOyTH66iDo13JPEYraWzWToZ5AMTtkyRHVmu7sssUpQlU9igy1KET7TOw==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + } + } + }, + "@firebase/database-types": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.9.8.tgz", + "integrity": "sha512-bI7bwF5xc0nPi6Oa3JVt6JJdfhVAnEpCwgfTNILR4lYDPtxdxlRXhZzQ5lfqlCj7PR+drKh9RvMu6C24N1q04w==", + "dev": true, + "requires": { + "@firebase/app-types": "0.7.0", + "@firebase/util": "1.6.0" + } + }, + "@firebase/logger": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.3.2.tgz", + "integrity": "sha512-lzLrcJp9QBWpo40OcOM9B8QEtBw2Fk1zOZQdvv+rWS6gKmhQBCEMc4SMABQfWdjsylBcDfniD1Q+fUX1dcBTXA==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "@firebase/util": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.6.0.tgz", + "integrity": "sha512-6+hhqb4Zzjoo12xofTDHPkgW3FnN4ydBsjd5X2KuQI268DR3W3Ld64W/gkKPZrKRgUxeNeb+pykfP3qRe7q+vA==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "@google-cloud/firestore": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-4.15.1.tgz", + "integrity": "sha512-2PWsCkEF1W02QbghSeRsNdYKN1qavrHBP3m72gPDMHQSYrGULOaTi7fSJquQmAtc4iPVB2/x6h80rdLHTATQtA==", + "dev": true, + "optional": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^2.24.1", + "protobufjs": "^6.8.6" + } + }, + "@google-cloud/paginator": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", + "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", + "dev": true, + "optional": true, + "requires": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + } + }, + "@google-cloud/projectify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz", + "integrity": "sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==", + "dev": true, + "optional": true + }, + "@google-cloud/promisify": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz", + "integrity": "sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==", + "dev": true, + "optional": true + }, + "@google-cloud/storage": { + "version": "5.19.4", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-5.19.4.tgz", + "integrity": "sha512-Jz7ugcPHhsEmMVvIxM9uoBsdEbKIYwDkh3u07tifsIymEWs47F4/D6+/Tv/W7kLhznqjyOjVJ/0frtBeIC0lJA==", + "dev": true, + "optional": true, + "requires": { + "@google-cloud/paginator": "^3.0.7", + "@google-cloud/projectify": "^2.0.0", + "@google-cloud/promisify": "^2.0.0", + "abort-controller": "^3.0.0", + "arrify": "^2.0.0", + "async-retry": "^1.3.3", + "compressible": "^2.0.12", + "configstore": "^5.0.0", + "date-and-time": "^2.0.0", + "duplexify": "^4.0.0", + "ent": "^2.2.0", + "extend": "^3.0.2", + "gaxios": "^4.0.0", + "get-stream": "^6.0.0", + "google-auth-library": "^7.14.1", + "hash-stream-validation": "^0.2.2", + "mime": "^3.0.0", + "mime-types": "^2.0.8", + "p-limit": "^3.0.1", + "pumpify": "^2.0.0", + "retry-request": "^4.2.2", + "snakeize": "^0.1.0", + "stream-events": "^1.0.4", + "teeny-request": "^7.1.3", + "xdg-basedir": "^4.0.0" + } + }, + "@grpc/grpc-js": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", + "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", + "dev": true, + "optional": true, + "requires": { + "@grpc/proto-loader": "^0.6.4", + "@types/node": ">=12.12.47" + } + }, + "@grpc/proto-loader": { + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.12.tgz", + "integrity": "sha512-filTVbETFnxb9CyRX98zN18ilChTuf/C5scZ2xyaOTp0EHGq0/ufX8rjqXUcSb1Gpv7eZq4M2jDvbh9BogKnrg==", + "dev": true, + "optional": true, + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.10.0", + "yargs": "^16.2.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@panva/asn1.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", + "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==", + "dev": true + }, + "@playwright/test": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.22.0.tgz", + "integrity": "sha512-ExcAjiECo3uTG5Sl5H4a7rKp/5TEHTI87dv9NHYEoUFuOHPhSVxB7QsuM70ktO+wTTZ9KzhwzcegxAGRmUFKEA==", + "dev": true, + "requires": { + "playwright-core": "1.22.0" + } + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=", + "dev": true, + "optional": true + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "dev": true, + "optional": true + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "dev": true, + "optional": true + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=", + "dev": true, + "optional": true + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "dev": true, + "optional": true, + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=", + "dev": true, + "optional": true + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=", + "dev": true, + "optional": true + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=", + "dev": true, + "optional": true + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=", + "dev": true, + "optional": true + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", + "dev": true, + "optional": true + }, + "@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "@sveltejs/adapter-static": { + "version": "1.0.0-next.30", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-1.0.0-next.30.tgz", + "integrity": "sha512-xJPOXuj4T/lw9pZpMQAoN68TgrOPp/zOldvSFA+A5CIhb8yLXkgxOWh6UDUrbVxM1NjOdt8lwPdZfdkh5FL2Fg==", + "dev": true, + "requires": { + "tiny-glob": "^0.2.9" + } + }, + "@sveltejs/kit": { + "version": "1.0.0-next.330", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.330.tgz", + "integrity": "sha512-Wb95D5tOF8BViZuikqzZLAcupdS7TpXtadNPgpEOxKowmkrW8xjRrrfVdPIkNOLqAP1V+gKInmQ/gFYmnv5EjA==", + "dev": true, + "requires": { + "@sveltejs/vite-plugin-svelte": "^1.0.0-next.32", + "chokidar": "^3.5.3", + "sade": "^1.7.4", + "vite": "^2.9.0" + } + }, + "@sveltejs/vite-plugin-svelte": { + "version": "1.0.0-next.44", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.44.tgz", + "integrity": "sha512-n+sssEWbzykPS447FmnNyU5GxEhrBPDVd0lxNZnxRGz9P6651LjjwAnISKr3CKgT9v8IybP8VD0n2i5XzbqExg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.2.1", + "debug": "^4.3.4", + "deepmerge": "^4.2.2", + "kleur": "^4.1.4", + "magic-string": "^0.26.1", + "svelte-hmr": "^0.14.11" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "optional": true + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "dev": true, + "optional": true + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/node": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.33.tgz", + "integrity": "sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==", + "dev": true + }, + "@types/pug": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", + "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/sass": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", + "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.1.tgz", + "integrity": "sha512-xN3CYqFlyE/qOcy978/L0xLR2HlcAGIyIK5sMOasxaaAPfQRj/MmMV6OC3I7NZO84oEUdWCOju34Z9W8E0pFDQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.10.1", + "@typescript-eslint/type-utils": "5.10.1", + "@typescript-eslint/utils": "5.10.1", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.1.tgz", + "integrity": "sha512-GReo3tjNBwR5RnRO0K2wDIDN31cM3MmDtgyQ85oAxAmC5K3j/g85IjP+cDfcqDsDDBf1HNKQAD0WqOYL8jXqUA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.10.1", + "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/typescript-estree": "5.10.1", + "debug": "^4.3.2" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.1.tgz", + "integrity": "sha512-Lyvi559Gvpn94k7+ElXNMEnXu/iundV5uFmCUNnftbFrUbAJ1WBoaGgkbOBm07jVZa682oaBU37ao/NGGX4ZDg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/visitor-keys": "5.10.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.1.tgz", + "integrity": "sha512-AfVJkV8uck/UIoDqhu+ptEdBoQATON9GXnhOpPLzkQRJcSChkvD//qsz9JVffl2goxX+ybs5klvacE9vmrQyCw==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.10.1", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.1.tgz", + "integrity": "sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.1.tgz", + "integrity": "sha512-PwIGnH7jIueXv4opcwEbVGDATjGPO1dx9RkUl5LlHDSe+FXxPwFL5W/qYd5/NHr7f6lo/vvTrAzd0KlQtRusJQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/visitor-keys": "5.10.1", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.1.tgz", + "integrity": "sha512-RRmlITiUbLuTRtn/gcPRi4202niF+q7ylFLCKu4c+O/PcpRvZ/nAUwQ2G00bZgpWkhrNLNnvhZLbDn8Ml0qsQw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.10.1", + "@typescript-eslint/types": "5.10.1", + "@typescript-eslint/typescript-estree": "5.10.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.1.tgz", + "integrity": "sha512-NjQ0Xinhy9IL979tpoTRuLKxMc0zJC7QVSdeerXs2/QvOy2yRkzX5dRb10X5woNUdJgU8G3nYRDlI33sq1K4YQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.10.1", + "eslint-visitor-keys": "^3.0.0" + } + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "optional": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "optional": true, + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "optional": true + }, + "async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, + "optional": true, + "requires": { + "retry": "0.13.1" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "optional": true + }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "dev": true, + "optional": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "optional": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "optional": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "optional": true + }, + "date-and-time": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-2.3.1.tgz", + "integrity": "sha512-OaIRmSJXifwEN21rMVVDs0Kz8uhJ3wWPYd86atkRiqN54liaMQYEbbrgjZQea75YXOBWL4ZFb3rG/waenw1TEg==", + "dev": true, + "optional": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "dicer": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.1.tgz", + "integrity": "sha512-ObioMtXnmjYs3aRtpIJt9rgQSPCIhKVkFPip+E9GUDyWl8N435znUxK/JfNwGZJ2wnn5JKQ7Ly3vOK5Q5dylGA==", + "dev": true, + "requires": { + "streamsearch": "^1.1.0" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "optional": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dev": true, + "optional": true, + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "optional": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "optional": true, + "requires": { + "once": "^1.4.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true, + "optional": true + }, + "es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "dev": true + }, + "esbuild": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", + "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", + "dev": true, + "requires": { + "esbuild-android-64": "0.14.39", + "esbuild-android-arm64": "0.14.39", + "esbuild-darwin-64": "0.14.39", + "esbuild-darwin-arm64": "0.14.39", + "esbuild-freebsd-64": "0.14.39", + "esbuild-freebsd-arm64": "0.14.39", + "esbuild-linux-32": "0.14.39", + "esbuild-linux-64": "0.14.39", + "esbuild-linux-arm": "0.14.39", + "esbuild-linux-arm64": "0.14.39", + "esbuild-linux-mips64le": "0.14.39", + "esbuild-linux-ppc64le": "0.14.39", + "esbuild-linux-riscv64": "0.14.39", + "esbuild-linux-s390x": "0.14.39", + "esbuild-netbsd-64": "0.14.39", + "esbuild-openbsd-64": "0.14.39", + "esbuild-sunos-64": "0.14.39", + "esbuild-windows-32": "0.14.39", + "esbuild-windows-64": "0.14.39", + "esbuild-windows-arm64": "0.14.39" + } + }, + "esbuild-android-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", + "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", + "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", + "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", + "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", + "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", + "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", + "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", + "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", + "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", + "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", + "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", + "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", + "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", + "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", + "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", + "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", + "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", + "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", + "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.39", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", + "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "optional": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.2.1", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "eslint-plugin-svelte3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-4.0.0.tgz", + "integrity": "sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "optional": true + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "optional": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==", + "dev": true, + "optional": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "firebase-admin": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-10.2.0.tgz", + "integrity": "sha512-6ehn5J9UEFgi4+naqYvozmGpnZae3cJLdwSkSsDc8/Y0eTBjVMFdf9N2ft7N81UNHA0N5DknOyXhlsdAdyBLCA==", + "dev": true, + "requires": { + "@firebase/database-compat": "^0.1.8", + "@firebase/database-types": "^0.9.7", + "@google-cloud/firestore": "^4.15.1", + "@google-cloud/storage": "^5.18.3", + "@types/node": ">=12.12.47", + "dicer": "^0.3.0", + "jsonwebtoken": "^8.5.1", + "jwks-rsa": "^2.0.2", + "node-forge": "^1.3.1", + "uuid": "^8.3.2" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "dev": true, + "optional": true, + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + } + }, + "gcp-metadata": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", + "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", + "dev": true, + "optional": true, + "requires": { + "gaxios": "^4.0.0", + "json-bigint": "^1.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "optional": true + }, + "glob": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.2.tgz", + "integrity": "sha512-NzDgHDiJwKYByLrL5lONmQFpK/2G78SMMfo+E9CuGlX4IkvfKDsiQSNPwAYxEy+e6p7ZQ3uslSLlwlJcqezBmQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "google-auth-library": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz", + "integrity": "sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==", + "dev": true, + "optional": true, + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^4.0.0", + "gcp-metadata": "^4.2.0", + "gtoken": "^5.0.4", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + } + }, + "google-gax": { + "version": "2.30.4", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.30.4.tgz", + "integrity": "sha512-/W4wWKjYcCXtd3Vz+ux7fN3MElbLVKGmHCCgA6kotigQgoDrLLueSvnXsck7qZaF39ooYnFhA58Rjr7RHe2heA==", + "dev": true, + "optional": true, + "requires": { + "@grpc/grpc-js": "~1.6.0", + "@grpc/proto-loader": "^0.6.12", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^7.14.0", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^0.1.8", + "protobufjs": "6.11.2", + "retry-request": "^4.0.0" + } + }, + "google-p12-pem": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz", + "integrity": "sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==", + "dev": true, + "optional": true, + "requires": { + "node-forge": "^1.3.1" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "gtoken": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz", + "integrity": "sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==", + "dev": true, + "optional": true, + "requires": { + "gaxios": "^4.0.0", + "google-p12-pem": "^3.1.3", + "jws": "^4.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hash-stream-validation": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz", + "integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==", + "dev": true, + "optional": true + }, + "http-parser-js": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", + "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", + "dev": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "optional": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "optional": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "idb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.1.tgz", + "integrity": "sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==", + "dev": true, + "peer": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "optional": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "optional": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "optional": true + }, + "is-stream-ended": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", + "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==", + "dev": true, + "optional": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "optional": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "jose": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.5.tgz", + "integrity": "sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==", + "dev": true, + "requires": { + "@panva/asn1.js": "^1.0.0" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, + "optional": true, + "requires": { + "bignumber.js": "^9.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dev": true, + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, + "optional": true, + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jwks-rsa": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-2.1.2.tgz", + "integrity": "sha512-QW2SNEUVvMqULiBJVsIJXSuX73Qj9il/DMCsJZsmCI8AQFZ6BjXgQW6h9wOlPr1LswQBNDdyFT2LPogwMRr1ew==", + "dev": true, + "requires": { + "@types/express": "^4.17.13", + "debug": "^4.3.4", + "jose": "^2.0.5", + "limiter": "^1.1.5", + "lru-memoizer": "^2.1.4" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, + "optional": true, + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "kleur": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", + "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true, + "optional": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true, + "optional": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "lru-memoizer": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.1.4.tgz", + "integrity": "sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==", + "dev": true, + "requires": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "~4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", + "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", + "dev": true, + "requires": { + "pseudomap": "^1.0.1", + "yallist": "^2.0.0" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "magic-string": { + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", + "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "optional": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "optional": true + } + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "optional": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "optional": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "optional": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "optional": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "optional": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "playwright-core": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.22.0.tgz", + "integrity": "sha512-XnDPiV4NCzTtXWxQdyJ6Wg8xhST3ciUjt5mITaxoqOoYggmRtofKm0PXLehfbetXh2ppPYj5U8UhtUpdIE4wag==", + "dev": true + }, + "postcss": { + "version": "8.4.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", + "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", + "dev": true, + "requires": { + "nanoid": "^3.3.3", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "proto3-json-serializer": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.9.tgz", + "integrity": "sha512-A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ==", + "dev": true, + "optional": true, + "requires": { + "protobufjs": "^6.11.2" + } + }, + "protobufjs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", + "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "dev": true, + "optional": true, + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "dev": true, + "optional": true, + "requires": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "optional": true + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "optional": true + }, + "retry-request": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", + "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.1", + "extend": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.73.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.73.0.tgz", + "integrity": "sha512-h/UngC3S4Zt28mB3g0+2YCMegT5yoftnQplwzPqGZcKvlld5e+kT/QRmJiL+qxGyZKOYpgirWGdLyEO1b0dpLQ==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "requires": { + "mri": "^1.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "sander": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "integrity": "sha1-dB4kXiMfB8r7b98PEzrfohalAq0=", + "dev": true, + "requires": { + "es6-promise": "^3.1.2", + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "optional": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "snakeize": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz", + "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=", + "dev": true, + "optional": true + }, + "sorcery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", + "integrity": "sha1-iukK19fLBfxZ8asMY3hF1cFaUrc=", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.5", + "minimist": "^1.2.0", + "sander": "^0.5.0", + "sourcemap-codec": "^1.3.0" + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "dev": true, + "optional": true, + "requires": { + "stubs": "^3.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true, + "optional": true + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "optional": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", + "dev": true, + "optional": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svelte": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.48.0.tgz", + "integrity": "sha512-fN2YRm/bGumvjUpu6yI3BpvZnpIm9I6A7HR4oUNYd7ggYyIwSA/BX7DJ+UXXffLp6XNcUijyLvttbPVCYa/3xQ==", + "dev": true + }, + "svelte-check": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.7.1.tgz", + "integrity": "sha512-vHVu2+SQ6ibt77iTQaq2oiOjBgGL48qqcg0ZdEOsP5pPOjgeyR9QbnaEdzdBs9nsVYBc/42haKtzb2uFqS8GVw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.9", + "chokidar": "^3.4.1", + "fast-glob": "^3.2.7", + "import-fresh": "^3.2.1", + "picocolors": "^1.0.0", + "sade": "^1.7.4", + "svelte-preprocess": "^4.0.0", + "typescript": "*" + } + }, + "svelte-hmr": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.11.tgz", + "integrity": "sha512-R9CVfX6DXxW1Kn45Jtmx+yUe+sPhrbYSUp7TkzbW0jI5fVPn6lsNG9NEs5dFg5qRhFNAoVdRw5qQDLALNKhwbQ==", + "dev": true, + "requires": {} + }, + "svelte-preprocess": { + "version": "4.10.6", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.6.tgz", + "integrity": "sha512-I2SV1w/AveMvgIQlUF/ZOO3PYVnhxfcpNyGt8pxpUVhPfyfL/CZBkkw/KPfuFix5FJ9TnnNYMhACK3DtSaYVVQ==", + "dev": true, + "requires": { + "@types/pug": "^2.0.4", + "@types/sass": "^1.16.0", + "detect-indent": "^6.0.0", + "magic-string": "^0.25.7", + "sorcery": "^0.10.0", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + } + } + }, + "teeny-request": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.2.0.tgz", + "integrity": "sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==", + "dev": true, + "optional": true, + "requires": { + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", + "stream-events": "^1.0.5", + "uuid": "^8.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "requires": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true, + "optional": true + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "optional": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "dev": true + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "optional": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vite": { + "version": "2.9.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.9.tgz", + "integrity": "sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==", + "dev": true, + "requires": { + "esbuild": "^0.14.27", + "fsevents": "~2.3.2", + "postcss": "^8.4.13", + "resolve": "^1.22.0", + "rollup": "^2.59.0" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true, + "optional": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "optional": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "optional": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "optional": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "optional": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "optional": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "optional": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "optional": true + } + } +} diff --git a/web/package.json b/web/package.json new file mode 100644 index 00000000..db447a39 --- /dev/null +++ b/web/package.json @@ -0,0 +1,31 @@ +{ + "name": "web", + "version": "0.0.1", + "scripts": { + "dev": "svelte-kit dev", + "build": "svelte-kit build", + "package": "svelte-kit package", + "preview": "svelte-kit preview", + "prepare": "svelte-kit sync", + "test": "playwright test", + "check": "svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "eslint --ignore-path .gitignore ." + }, + "devDependencies": { + "@playwright/test": "1.22.0", + "@sveltejs/adapter-static": "1.0.0-next.30", + "@sveltejs/kit": "1.0.0-next.330", + "@typescript-eslint/eslint-plugin": "5.10.1", + "@typescript-eslint/parser": "5.10.1", + "eslint": "8.12.0", + "eslint-plugin-svelte3": "4.0.0", + "firebase-admin": "10.2.0", + "svelte": "3.48.0", + "svelte-check": "2.7.1", + "svelte-preprocess": "4.10.6", + "tslib": "2.4.0", + "typescript": "4.6.4" + }, + "type": "module" +} diff --git a/web/playwright.config.ts b/web/playwright.config.ts new file mode 100644 index 00000000..87c293e5 --- /dev/null +++ b/web/playwright.config.ts @@ -0,0 +1,10 @@ +import type { PlaywrightTestConfig } from '@playwright/test'; + +const config: PlaywrightTestConfig = { + webServer: { + command: 'npm run build && npm run preview', + port: 3000 + } +}; + +export default config; diff --git a/web/src/app.css b/web/src/app.css new file mode 100644 index 00000000..0a3f05bc --- /dev/null +++ b/web/src/app.css @@ -0,0 +1,105 @@ +:root { + font-family: Arial, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, + Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + --font-mono: 'Fira Mono', monospace; + --pure-white: #ffffff; + --primary-color: #b9c6d2; + --secondary-color: #d0dde9; + --tertiary-color: #edf0f8; + --accent-color: #ff3e00; + --heading-color: rgba(0, 0, 0, 0.7); + --text-color: #444444; + --background-without-opacity: rgba(255, 255, 255, 0.7); + --column-width: 42rem; + --column-margin-top: 4rem; +} + +body { + min-height: 100vh; + margin: 0; + background-color: var(--primary-color); + background: linear-gradient( + 180deg, + var(--primary-color) 0%, + var(--secondary-color) 10.45%, + var(--tertiary-color) 41.35% + ); +} + +body::before { + content: ''; + width: 80vw; + height: 100vh; + position: absolute; + top: 0; + left: 10vw; + z-index: -1; + background: radial-gradient( + 50% 50% at 50% 50%, + var(--pure-white) 0%, + rgba(255, 255, 255, 0) 100% + ); + opacity: 0.05; +} + +#svelte { + min-height: 100vh; + display: flex; + flex-direction: column; +} + +h1, +h2, +p { + font-weight: 400; + color: var(--heading-color); +} + +p { + line-height: 1.5; +} + +a { + color: var(--accent-color); + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +h1 { + font-size: 2rem; + text-align: center; +} + +h2 { + font-size: 1rem; +} + +pre { + font-size: 16px; + font-family: var(--font-mono); + background-color: rgba(255, 255, 255, 0.45); + border-radius: 3px; + box-shadow: 2px 2px 6px rgb(255 255 255 / 25%); + padding: 0.5em; + overflow-x: auto; + color: var(--text-color); +} + +input, +button { + font-size: inherit; + font-family: inherit; +} + +button:focus:not(:focus-visible) { + outline: none; +} + +@media (min-width: 720px) { + h1 { + font-size: 2.4rem; + } +} diff --git a/web/src/app.d.ts b/web/src/app.d.ts new file mode 100644 index 00000000..f4632009 --- /dev/null +++ b/web/src/app.d.ts @@ -0,0 +1,18 @@ +/// + +// See https://kit.svelte.dev/docs/types#app +// for information about these interfaces +declare namespace App { + interface Locals { + headerLinks: { + link: string; + label: string; + }; + } + + // interface Platform {} + + // interface Session {} + + // interface Stuff {} +} diff --git a/web/src/app.html b/web/src/app.html new file mode 100644 index 00000000..97027429 --- /dev/null +++ b/web/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %svelte.head% + + +
%svelte.body%
+ + diff --git a/web/src/hooks.ts b/web/src/hooks.ts new file mode 100644 index 00000000..33458942 --- /dev/null +++ b/web/src/hooks.ts @@ -0,0 +1,12 @@ +import type {Handle} from '@sveltejs/kit'; +import {getDocument} from './lib/firebase'; + +export const handle: Handle = async ({ event, resolve }) => { + if (!event.locals.headerLinks) { + event.locals.headerLinks = (await getDocument('settings', 'layout') as any).headerLinks + } + + const response = await resolve(event); + + return response; +}; diff --git a/web/src/lib/Page.svelte b/web/src/lib/Page.svelte new file mode 100644 index 00000000..cfab728a --- /dev/null +++ b/web/src/lib/Page.svelte @@ -0,0 +1,12 @@ + + +{@html page.content || ''} + + + {page.meta?.title || page.title} + {#if page.meta?.description} + + {/if} + diff --git a/web/src/lib/firebase.ts b/web/src/lib/firebase.ts new file mode 100644 index 00000000..c3fa35dd --- /dev/null +++ b/web/src/lib/firebase.ts @@ -0,0 +1,43 @@ +import admin from 'firebase-admin'; + +admin.initializeApp({projectId: 'jaspero-jms'}); + +const fs = admin.firestore(); + +export async function getDocument(collection: string, id: string): Promise { + const ref = await fs.collection(collection).doc(id).get(); + + if (ref.exists) { + return ref.data() as T; + } + + return null; +} + +export async function getPage(id: string) { + const page = await getDocument('pages', id); + + if (!page || !page.active) { + return { + status: 404 + } + } + + const {blocks, meta, title, globalStyle} = page; + + let content = blocks.reduce((acc: string, cur: any) => acc + cur.compiled || '', ''); + + if (globalStyle) { + content += ``; + } + + return { + body: { + page: { + content, + meta, + title, + } + } + } +} \ No newline at end of file diff --git a/web/src/lib/form.ts b/web/src/lib/form.ts new file mode 100644 index 00000000..97549077 --- /dev/null +++ b/web/src/lib/form.ts @@ -0,0 +1,84 @@ +import { invalidate } from '$app/navigation'; + +// this action (https://svelte.dev/tutorial/actions) allows us to +// progressively enhance a
that already works without JS +export function enhance( + form: HTMLFormElement, + { + pending, + error, + result + }: { + pending?: ({ data, form }: { data: FormData; form: HTMLFormElement }) => void; + error?: ({ + data, + form, + response, + error + }: { + data: FormData; + form: HTMLFormElement; + response: Response | null; + error: Error | null; + }) => void; + result?: ({ + data, + form, + response + }: { + data: FormData; + response: Response; + form: HTMLFormElement; + }) => void; + } = {} +) { + let current_token: unknown; + + async function handle_submit(e: SubmitEvent) { + const token = (current_token = {}); + + e.preventDefault(); + + const data = new FormData(form); + + if (pending) pending({ data, form }); + + try { + const response = await fetch(form.action, { + method: form.method, + headers: { + accept: 'application/json' + }, + body: data + }); + + if (token !== current_token) return; + + if (response.ok) { + if (result) result({ data, form, response }); + + const url = new URL(form.action); + url.search = url.hash = ''; + invalidate(url.href); + } else if (error) { + error({ data, form, error: null, response }); + } else { + console.error(await response.text()); + } + } catch (e: unknown) { + if (error && e instanceof Error) { + error({ data, form, error: e, response: null }); + } else { + throw e; + } + } + } + + form.addEventListener('submit', handle_submit); + + return { + destroy() { + form.removeEventListener('submit', handle_submit); + } + }; +} diff --git a/web/src/lib/header/Header.svelte b/web/src/lib/header/Header.svelte new file mode 100644 index 00000000..6b967ad8 --- /dev/null +++ b/web/src/lib/header/Header.svelte @@ -0,0 +1,15 @@ + + +
+ +
\ No newline at end of file diff --git a/web/src/lib/header/logo.svg b/web/src/lib/header/logo.svg new file mode 100644 index 00000000..49492a83 --- /dev/null +++ b/web/src/lib/header/logo.svg @@ -0,0 +1 @@ +svelte-logo \ No newline at end of file diff --git a/web/src/routes/[id].svelte b/web/src/routes/[id].svelte new file mode 100644 index 00000000..92ec27d6 --- /dev/null +++ b/web/src/routes/[id].svelte @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/web/src/routes/[id].ts b/web/src/routes/[id].ts new file mode 100644 index 00000000..cac6b08a --- /dev/null +++ b/web/src/routes/[id].ts @@ -0,0 +1,6 @@ +import type {RequestHandler} from '@sveltejs/kit'; +import {getPage} from '$lib/firebase'; + +export const get: RequestHandler<{id: string}> = async ({ params }) => { + return await getPage(params.id); +}; \ No newline at end of file diff --git a/web/src/routes/__layout.svelte b/web/src/routes/__layout.svelte new file mode 100644 index 00000000..9fab9a44 --- /dev/null +++ b/web/src/routes/__layout.svelte @@ -0,0 +1,27 @@ + + + + +
+ +
+ +
+ + diff --git a/web/src/routes/index.svelte b/web/src/routes/index.svelte new file mode 100644 index 00000000..92ec27d6 --- /dev/null +++ b/web/src/routes/index.svelte @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/web/src/routes/index.ts b/web/src/routes/index.ts new file mode 100644 index 00000000..9957d23d --- /dev/null +++ b/web/src/routes/index.ts @@ -0,0 +1,6 @@ +import type {RequestHandler} from '@sveltejs/kit'; +import {getPage} from '$lib/firebase'; + +export const get: RequestHandler = async () => { + return await getPage('home'); +}; \ No newline at end of file diff --git a/web/src/routes/settings.ts b/web/src/routes/settings.ts new file mode 100644 index 00000000..cc1712b0 --- /dev/null +++ b/web/src/routes/settings.ts @@ -0,0 +1,11 @@ +import type {RequestHandler} from '@sveltejs/kit'; +import {getDocument} from '$lib/firebase'; + +export const get: RequestHandler = async () => { + const {headerLinks} = await getDocument('settings', 'layout'); + return { + body: { + headerLinks + } + } +}; \ No newline at end of file diff --git a/web/static/favicon.png b/web/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..825b9e65af7c104cfb07089bb28659393b4f2097 GIT binary patch literal 1571 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≺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

&^J*aUiu104M{mx8-U5N>&r9CB`>Zl+N(MCUP) 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Þ#-z-i?jX^$`f`$t`6r&uImaC{ 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°tq&Gj%2h|q|U3ujd$%MT` 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 YiyIf-GDS};AmER~ai?QtKlvy9e=v*a-2eap literal 0 HcmV?d00001 diff --git a/web/static/svelte-welcome.webp b/web/static/svelte-welcome.webp new file mode 100644 index 0000000000000000000000000000000000000000..6ec1a28d63b49d9288d0bc3bf3a341eb4edf3318 GIT binary patch literal 115470 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�SaZ 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 { + await page.goto('/about'); + expect(await page.textContent('h1')).toBe('About this app'); +}); diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 00000000..0f47472f --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true + } +} From 38aaeeeb806b22257d1ffeafff5a60593489875d Mon Sep 17 00:00:00 2001 From: flauc Date: Thu, 19 May 2022 18:22:44 +0200 Subject: [PATCH 02/55] feat(cms): connected release process --- .github/workflows/update-web.workflow.yml | 34 ++++++++++++++ client/angular.json | 1 + .../cms/src/app/elements/elements.module.ts | 2 + .../release-status.component.html | 3 ++ .../release-status.component.scss | 12 +++++ .../release-status.component.spec.ts | 25 ++++++++++ .../release-status.component.ts | 39 ++++++++++++++++ .../components/layout/layout.component.html | 6 +++ .../components/layout/layout.component.ts | 46 ++++++++++++++++++- .../shared/services/state/state.service.ts | 1 + client/projects/cms/src/assets/i18n/en.json | 10 +++- definitions/consts/shared-config.const.ts | 8 ++++ definitions/modules/pages/pages.module.tsx | 8 +++- definitions/modules/shared/status.tsx | 21 +++++++++ functions/src/consts/env-config.const.ts | 2 + functions/src/index.ts | 2 + functions/src/triggers/status-updated.ts | 31 +++++++++++++ web/update-release.js | 21 +++++++++ 18 files changed, 267 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/update-web.workflow.yml create mode 100644 client/projects/cms/src/app/elements/release-status/release-status.component.html create mode 100644 client/projects/cms/src/app/elements/release-status/release-status.component.scss create mode 100644 client/projects/cms/src/app/elements/release-status/release-status.component.spec.ts create mode 100644 client/projects/cms/src/app/elements/release-status/release-status.component.ts create mode 100644 definitions/modules/shared/status.tsx create mode 100644 functions/src/triggers/status-updated.ts create mode 100644 web/update-release.js diff --git a/.github/workflows/update-web.workflow.yml b/.github/workflows/update-web.workflow.yml new file mode 100644 index 00000000..e5e96b70 --- /dev/null +++ b/.github/workflows/update-web.workflow.yml @@ -0,0 +1,34 @@ +name: Update Web +on: + workflow_dispatch: + inputs: + description: + description: 'Release description' +jobs: + deploy: + name: Deploy + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@master + - name: Build + if: contains(github.ref, 'build') + run: | + echo $SV > web/key.json + npm run copy:web:prod -- true + npm run rebuild:html --prefix web + env: + SV: ${{ secrets.SERVICE_ACCOUNT }} + - name: Deploy to Firebase + if: contains(github.ref, 'build') + uses: w9jds/firebase-action@master + with: + args: deploy --only hosting:website + env: + FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} + PROJECT_ID: glycan-age + - name: Update Firestore + if: contains(github.ref, 'build') + run: | + cd web + node update-release.js diff --git a/client/angular.json b/client/angular.json index 07445e98..87bb7ed5 100644 --- a/client/angular.json +++ b/client/angular.json @@ -78,6 +78,7 @@ "tinymce/plugins/code", "tinymce/plugins/table", "tinymce/plugins/advlist", + "tinymce/plugins/emoticons", "@jaspero/utils", "definitions" ], diff --git a/client/projects/cms/src/app/elements/elements.module.ts b/client/projects/cms/src/app/elements/elements.module.ts index 7778c646..642ae96a 100644 --- a/client/projects/cms/src/app/elements/elements.module.ts +++ b/client/projects/cms/src/app/elements/elements.module.ts @@ -41,6 +41,7 @@ import {ImportComponent} from './import/import.component'; import {LinkComponent} from './link/link.component'; import {NewPrepopulateComponent} from './new-prepopulate/new-prepopulate.component'; import {ParseTemplatePipe} from './pipes/parse-template/parse-template.pipe'; +import {ReleaseStatusComponent} from './release-status/release-status.component'; import {SortDialogComponent} from './sort-dialog/sort-dialog.component'; import {TableComponent} from './table/table.component'; import {TriggerPasswordResetComponent} from './trigger-password-reset/trigger-password-reset.component'; @@ -114,6 +115,7 @@ import {UserAddComponent} from './user-add/user-add.component'; NewPrepopulateComponent, FileManagerSelectComponent, ImpersonateComponent, + ReleaseStatusComponent ], providers: [ { diff --git a/client/projects/cms/src/app/elements/release-status/release-status.component.html b/client/projects/cms/src/app/elements/release-status/release-status.component.html new file mode 100644 index 00000000..fde734d8 --- /dev/null +++ b/client/projects/cms/src/app/elements/release-status/release-status.component.html @@ -0,0 +1,3 @@ + + {{updated | date:'HH:mm M/d/yy'}} + diff --git a/client/projects/cms/src/app/elements/release-status/release-status.component.scss b/client/projects/cms/src/app/elements/release-status/release-status.component.scss new file mode 100644 index 00000000..7c715d63 --- /dev/null +++ b/client/projects/cms/src/app/elements/release-status/release-status.component.scss @@ -0,0 +1,12 @@ +:host { + display: flex; + align-items: center; +} + +.status { + width: 15px; + height: 15px; + display: inline-block; + border-radius: 50%; + margin-right: .5rem; +} diff --git a/client/projects/cms/src/app/elements/release-status/release-status.component.spec.ts b/client/projects/cms/src/app/elements/release-status/release-status.component.spec.ts new file mode 100644 index 00000000..cbe4119a --- /dev/null +++ b/client/projects/cms/src/app/elements/release-status/release-status.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReleaseStatusComponent } from './release-status.component'; + +describe('ReleaseStatusComponent', () => { + let component: ReleaseStatusComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReleaseStatusComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReleaseStatusComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/projects/cms/src/app/elements/release-status/release-status.component.ts b/client/projects/cms/src/app/elements/release-status/release-status.component.ts new file mode 100644 index 00000000..f2eaef64 --- /dev/null +++ b/client/projects/cms/src/app/elements/release-status/release-status.component.ts @@ -0,0 +1,39 @@ +import {ChangeDetectionStrategy, Component, Input, OnInit} from '@angular/core'; +import {Observable} from 'rxjs'; +import {map} from 'rxjs/operators'; +import {StateService} from '../../shared/services/state/state.service'; +import {Element} from '../element.decorator'; + +@Element() +@Component({ + selector: 'jms-release-status', + templateUrl: './release-status.component.html', + styleUrls: ['./release-status.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ReleaseStatusComponent implements OnInit { + constructor( + private state: StateService + ) { } + + @Input() + updated: number; + + status$: Observable<{message: string; color: string;}> + + ngOnInit() { + this.status$ = this.state.lastPublished$ + .pipe( + map(date => { + if (!date || !this.updated) { + return {message: 'NOT_CONFIGURED', color: '#bcaaa4'} + } else if (date > this.updated) { + return {message: 'LIVE', color: '#4caf50'} + } else { + return {message: 'NOT_LIVE', color: '#f44336'} + } + }) + ) + } + +} diff --git a/client/projects/cms/src/app/modules/dashboard/components/layout/layout.component.html b/client/projects/cms/src/app/modules/dashboard/components/layout/layout.component.html index bbbf9914..650b5841 100644 --- a/client/projects/cms/src/app/modules/dashboard/components/layout/layout.component.html +++ b/client/projects/cms/src/app/modules/dashboard/components/layout/layout.component.html @@ -62,6 +62,12 @@ + + + {{'PUBLISH' | transloco}} + + + Drive diff --git a/client/projects/cms/src/app/modules/dashboard/components/layout/layout.component.ts b/client/projects/cms/src/app/modules/dashboard/components/layout/layout.component.ts index 8cd297cb..5a2e0a4d 100644 --- a/client/projects/cms/src/app/modules/dashboard/components/layout/layout.component.ts +++ b/client/projects/cms/src/app/modules/dashboard/components/layout/layout.component.ts @@ -2,14 +2,16 @@ import {ChangeDetectionStrategy, Component, OnInit, TemplateRef, ViewChild} from import {Auth, authState, signOut, updatePassword, User} from '@angular/fire/auth'; import {AbstractControlOptions, FormBuilder, FormGroup, Validators} from '@angular/forms'; import {MatDialog, MatDialogRef} from '@angular/material/dialog'; +import {MatSnackBar} from '@angular/material/snack-bar'; import {NavigationEnd, Router} from '@angular/router'; import {safeEval} from '@jaspero/utils'; +import {TranslocoService} from '@ngneat/transloco'; import {UntilDestroy, untilDestroyed} from '@ngneat/until-destroy'; import {notify} from '@shared/utils/notify.operator'; import {RepeatPasswordValidator} from '@shared/validators/repeat-password.validator'; import {Collections} from 'definitions'; import {BehaviorSubject, from, Observable, throwError} from 'rxjs'; -import {catchError, filter, map, shareReplay, startWith, switchMap, take, tap} from 'rxjs/operators'; +import {catchError, distinctUntilChanged, filter, map, shareReplay, startWith, switchMap, take, tap, skip} from 'rxjs/operators'; import {STATIC_CONFIG} from '../../../../../environments/static-config'; import {NavigationItemType} from '../../../../shared/enums/navigation-item-type.enum'; import {NavigationItemWithActive} from '../../../../shared/interfaces/navigation-item-with-active.interface'; @@ -32,7 +34,9 @@ export class LayoutComponent implements OnInit { private router: Router, private dialog: MatDialog, private fb: FormBuilder, - private dbService: DbService + private dbService: DbService, + private snackBar: MatSnackBar, + private transloco: TranslocoService ) { } @@ -46,6 +50,7 @@ export class LayoutComponent implements OnInit { resetPassword: FormGroup; spotlightDialogRef: MatDialogRef; activeExpand$ = new BehaviorSubject(null); + lastPublishDisabled$ = new BehaviorSubject(false); ngOnInit() { document.addEventListener('keydown', (event) => { @@ -73,6 +78,34 @@ export class LayoutComponent implements OnInit { this.currentUser$ = authState(this.auth); + this.dbService.getDocument('settings', 'status', true) + .pipe( + distinctUntilChanged(), + untilDestroyed(this) + ) + .subscribe(({lastPublished}) => + this.state.lastPublished$.next(lastPublished) + ); + + this.state.lastPublished$ + .pipe( + skip(2), + distinctUntilChanged() + ) + .subscribe(data => { + this.lastPublishDisabled$.next(false); + + if (!data) { + return + } + + this.snackBar.open( + this.transloco.translate('NEW_RELEASE_IS_NOW_LIVE'), + this.transloco.translate('DISMISS'), + {duration: 5000} + ); + }); + if (this.state.user.requireReset) { this.resetPassword = this.fb.group({ @@ -258,4 +291,13 @@ export class LayoutComponent implements OnInit { }) ); } + + publish() { + return () => + this.dbService.setDocument('settings', 'status', {publishStart: Date.now()}, {merge: true}) + .pipe( + notify({success: 'RELEASE_TRIGGERED_SUCCESSFULLY'}), + tap(() => this.lastPublishDisabled$.next(true)) + ) + } } diff --git a/client/projects/cms/src/app/shared/services/state/state.service.ts b/client/projects/cms/src/app/shared/services/state/state.service.ts index a1604269..7fbc72a5 100644 --- a/client/projects/cms/src/app/shared/services/state/state.service.ts +++ b/client/projects/cms/src/app/shared/services/state/state.service.ts @@ -38,6 +38,7 @@ export class StateService { entryPath: string; page$ = new BehaviorSubject<{module?: {id: string, name: string}}>({}); + lastPublished$ = new BehaviorSubject(null); /** * Holds state information for all diff --git a/client/projects/cms/src/assets/i18n/en.json b/client/projects/cms/src/assets/i18n/en.json index 37666426..7f8fb91d 100644 --- a/client/projects/cms/src/assets/i18n/en.json +++ b/client/projects/cms/src/assets/i18n/en.json @@ -200,5 +200,13 @@ "URL": "URL", "ID_HINT": "Created from title if left empty", "GENERAL": "General", - "LINK": "Link" + "LINK": "Link", + "STATUS": "Status", + "LIVE": "Live", + "NOT_LIVE": "Not Live", + "NOT_CONFIGURED": "Not Configured", + "RELEASE_TRIGGERED_SUCCESSFULLY": "Release triggered successfully", + "NEW_RELEASE_IS_NOW_LIVE": "New release is now live!", + "LAST_PUBLISHED_ON": "Last published on", + "PUBLISH": "Publish" } diff --git a/definitions/consts/shared-config.const.ts b/definitions/consts/shared-config.const.ts index 9e9f01d0..859927e5 100644 --- a/definitions/consts/shared-config.const.ts +++ b/definitions/consts/shared-config.const.ts @@ -1,8 +1,16 @@ export const SHARED_CONFIG: { projectId: string, + github: { + organization: string, + repository: string, + }, cloudRegion: 'us-central1' | 'us-east1' | 'us-east4' | 'europe-west1' | 'europe-west2' | 'asia-east2' | 'asia-northeast1'; webUrl: string; } = { + github: { + organization: 'Jaspero', + repository: 'jms', + }, projectId: 'jaspero-jms', cloudRegion: 'us-central1', webUrl: 'https://jaspero-jms.firebaseapp.com', diff --git a/definitions/modules/pages/pages.module.tsx b/definitions/modules/pages/pages.module.tsx index a05f5608..685d5e46 100644 --- a/definitions/modules/pages/pages.module.tsx +++ b/definitions/modules/pages/pages.module.tsx @@ -6,6 +6,7 @@ import {Module} from '../../interfaces/module.interface'; import {PipeType} from '../../enums/pipe-type.enum'; import JSX from '../../jsx.compiler'; import {SHARED_CONFIG} from '../../consts/shared-config.const'; +import {STATUS} from '../shared/status'; export const PAGES_MODULE: Module = { id: 'pages', @@ -48,7 +49,8 @@ export const PAGES_MODULE: Module = { 0: id => JSX({id}) } }, - {key: '/active', label: 'ACTIVE', control: true} + {key: '/active', label: 'ACTIVE', control: true}, + STATUS.column ], actions: [ { @@ -80,6 +82,7 @@ export const PAGES_MODULE: Module = { blocks: {type: 'array'}, ...CREATED_ON.property, ...META.property(), + ...STATUS.property } }, definitions: { @@ -102,6 +105,7 @@ export const PAGES_MODULE: Module = { } }, ...CREATED_ON.definition(), - ...META.definitions() + ...META.definitions(), + ...STATUS.definition } }; \ No newline at end of file diff --git a/definitions/modules/shared/status.tsx b/definitions/modules/shared/status.tsx new file mode 100644 index 00000000..625bc385 --- /dev/null +++ b/definitions/modules/shared/status.tsx @@ -0,0 +1,21 @@ +import {PipeType} from '../../enums/pipe-type.enum'; +import JSX from '../../jsx.compiler'; + +export const STATUS = { + column: { + key: '/lastUpdatedOn', + label: 'STATUS', + pipe: [PipeType.Custom, PipeType.Sanitize], + pipeArguments: { + 0: v => JSX() + } + }, + definition: { + lastUpdatedOn: { + formatOnSave: () => Date.now() + } + }, + property: { + lastUpdatedOn: {type: 'number'} + } +}; diff --git a/functions/src/consts/env-config.const.ts b/functions/src/consts/env-config.const.ts index c4d7055a..eb59f97b 100644 --- a/functions/src/consts/env-config.const.ts +++ b/functions/src/consts/env-config.const.ts @@ -23,4 +23,6 @@ export const ENV_CONFIG = config as { * Secret for email token HMAC */ esecret: string; + + ghtoken: string; }; diff --git a/functions/src/index.ts b/functions/src/index.ts index 4b4c70f4..7f026d84 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -18,6 +18,7 @@ import {userDocumentUpdated} from './triggers/user-document-updated'; import {documentWrite} from './triggers/document-write'; import {proxy} from './rest/proxy'; import {fileMetadataUpdated} from './triggers/file-metadata-updated'; +import {statusUpdated} from './triggers/status-updated'; initializeApp(); @@ -34,6 +35,7 @@ export const cms = { documentDeleted, documentWrite, triggerPasswordReset, + statusUpdated, // Callable createUser, diff --git a/functions/src/triggers/status-updated.ts b/functions/src/triggers/status-updated.ts new file mode 100644 index 00000000..5cf356da --- /dev/null +++ b/functions/src/triggers/status-updated.ts @@ -0,0 +1,31 @@ +import {SHARED_CONFIG} from 'definitions'; +import * as functions from 'firebase-functions'; +import fetch from 'node-fetch'; +import {ENV_CONFIG} from '../consts/env-config.const'; + +interface Status { + lastPublished: number; + publishStart: number; +} + +export const statusUpdated = functions + .region(SHARED_CONFIG.cloudRegion) + .firestore.document(`settings/status`) + .onUpdate(async change => { + const after = change.after.data() as Status; + const before = change.before.data() as Status; + + if (after.publishStart !== before.publishStart && ENV_CONFIG.ghtoken) { + await fetch( + `https://api.github.com/repos/${SHARED_CONFIG.github.organization}/${SHARED_CONFIG.github.organization}/actions/workflows/update-web.workflow.yml/dispatches`, + { + method: 'POST', + headers: { + accept: 'application/vnd.github.v3+json', + authorization: `bearer ${ENV_CONFIG.ghtoken}` + }, + body: JSON.stringify({ref: 'build'}) + } + ); + } + }); diff --git a/web/update-release.js b/web/update-release.js new file mode 100644 index 00000000..80013860 --- /dev/null +++ b/web/update-release.js @@ -0,0 +1,21 @@ +/** + * Intended for updating release status from firestore + */ +const admin = require('firebase-admin'); + +admin.initializeApp({ + credential: admin.credential.cert(require('./key.json')) +}); + +async function exec() { + await admin.firestore().doc('settings/status').set({ + lastPublished: Date.now() + }, {merge: true}) +} + +exec() + .then(() => process.exit(0)) + .catch(e => { + console.error(e); + process.exit(1); + }); From 949fc41337be430649141c8dfcbc3065b7381407 Mon Sep 17 00:00:00 2001 From: flauc Date: Thu, 19 May 2022 21:48:40 +0200 Subject: [PATCH 03/55] feat(web): connected deployment and emulator set up --- .github/workflows/update-web.workflow.yml | 13 ++--- .github/workflows/web.workflow.yml | 65 +++++++++++++++++++++++ package.json | 3 ++ web/emulator.js | 23 ++++++++ web/package.json | 1 + web/svelte.config.js | 4 +- 6 files changed, 102 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/web.workflow.yml create mode 100644 web/emulator.js diff --git a/.github/workflows/update-web.workflow.yml b/.github/workflows/update-web.workflow.yml index e5e96b70..5ba9ca42 100644 --- a/.github/workflows/update-web.workflow.yml +++ b/.github/workflows/update-web.workflow.yml @@ -11,14 +11,15 @@ jobs: steps: - name: Checkout Repo uses: actions/checkout@master - - name: Build - if: contains(github.ref, 'build') + - name: Install Dependencies run: | - echo $SV > web/key.json - npm run copy:web:prod -- true - npm run rebuild:html --prefix web + cd web + echo $SERVICE_ACCOUNT > key.json env: - SV: ${{ secrets.SERVICE_ACCOUNT }} + SERVICE_ACCOUNT: ${{ secrets.SERVICE_ACCOUNT }} + - name: Build + if: contains(github.ref, 'build') + run: npm run build:web - name: Deploy to Firebase if: contains(github.ref, 'build') uses: w9jds/firebase-action@master diff --git a/.github/workflows/web.workflow.yml b/.github/workflows/web.workflow.yml new file mode 100644 index 00000000..5951afde --- /dev/null +++ b/.github/workflows/web.workflow.yml @@ -0,0 +1,65 @@ +name: Deploy Web +on: + workflow_dispatch: + push: + branches: + - main + paths: + - 'web/**/*' + - 'client/projects/shared/**/*' + - '.github/workflows/web.workflow.yml' +jobs: + deploy: + env: + project: 'jaspero-jms' + # Release Branch + # Only when the workflow is being run on this branch + # will it create the build branch + release: 'main' + # Build Branch + # This is the branch that is created on deployment + build: 'build' + name: Deploy + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@master + with: + persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of the personal token + fetch-depth: 0 # otherwise, it fails to push refs to dest repo + - name: Use Node.js 16.x + uses: actions/setup-node@v1 + with: + node-version: 16.x + - name: Install Dependencies + run: | + cd web + npm ci + echo $SERVICE_ACCOUNT > key.json + env: + SERVICE_ACCOUNT: ${{ secrets.SERVICE_ACCOUNT }} + - name: Build + run: npm run build:web + - name: Deploy to Firebase + uses: w9jds/firebase-action@master + with: + args: deploy --only hosting:web + env: + FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} + PROJECT_ID: ${{ env.project }} + - name: Commit + if: contains(github.ref, env.release) + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add -f --all public/ + git add -f --all web/node_modules + git commit -m "BOT - Connected build branch" + - name: Push + if: contains(github.ref, env.release) + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + branch: ${{ env.build }} + force: true + diff --git a/package.json b/package.json index 889d5643..092781bd 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,8 @@ "license": "MIT", "scripts": { "start:emulator": "firebase emulators:start --export-on-exit=.emulator-export --import=.emulator-export", + "start:web": "npm --prefix web run dev:emulator", + "start:web:live": "npm --prefix web run dev", "start:cms": "cd definitions && tsc-watch --onSuccess \"node run-client.js start:cms\"", "start:cms:live": "cd definitions && tsc-watch --onSuccess \"node run-client.js start:cms:live\"", "start:functions": "npm --prefix functions run serve", @@ -12,6 +14,7 @@ "start:setup:prod": "npm --prefix definitions run setup:prod", "start:definitions": "npm --prefix definitions run start", "build:cms": "npm --prefix client run build", + "build:web": "npm --prefix web run build", "build:functions": "npm --prefix functions run build", "build:definitions": "npm --prefix definitions run build", "build": "npm run build:definitions && npm run build:cms && npm run build:functions", diff --git a/web/emulator.js b/web/emulator.js new file mode 100644 index 00000000..00948fed --- /dev/null +++ b/web/emulator.js @@ -0,0 +1,23 @@ +import {exec} from 'child_process'; +import {readFileSync} from 'fs'; + +const {emulators} = JSON.parse(readFileSync('../firebase.json').toString()); + +[ + ['auth', 'FIREBASE_AUTH_EMULATOR_HOST'], + ['firestore', 'FIRESTORE_EMULATOR_HOST'], + ['storage', 'FIREBASE_STORAGE_EMULATOR_HOST'], +] + .forEach(([key, env]) => { + if (!emulators[key]) { + return; + } + + process.env[env] = `localhost:${emulators[key].port}`; + }); + +const proc = exec('npm run dev'); + +if (proc.stdout) { + proc.stdout.on('data', console.log); +} diff --git a/web/package.json b/web/package.json index db447a39..8b1b3b28 100644 --- a/web/package.json +++ b/web/package.json @@ -3,6 +3,7 @@ "version": "0.0.1", "scripts": { "dev": "svelte-kit dev", + "dev:emulator": "node emulator.js", "build": "svelte-kit build", "package": "svelte-kit package", "preview": "svelte-kit preview", diff --git a/web/svelte.config.js b/web/svelte.config.js index c5cda981..02acd0ef 100644 --- a/web/svelte.config.js +++ b/web/svelte.config.js @@ -8,7 +8,9 @@ const config = { preprocess: preprocess(), kit: { - adapter: adapter() + adapter: adapter({ + pages: '../public/web' + }) } }; From a93d9d05dcf7d8a5a8ff833b85f4d6431eb716fa Mon Sep 17 00:00:00 2001 From: flauc Date: Fri, 20 May 2022 09:24:00 +0200 Subject: [PATCH 04/55] fix: missing configuration for web firebase site --- .firebaserc | 3 +++ firebase.json | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/.firebaserc b/.firebaserc index d30b3ac3..6527dca3 100644 --- a/.firebaserc +++ b/.firebaserc @@ -4,6 +4,9 @@ "hosting": { "cms": [ "jaspero-jms" + ], + "web": [ + "jaspero-jms-web" ] } } diff --git a/firebase.json b/firebase.json index f2b9bfd4..8f71dc0a 100644 --- a/firebase.json +++ b/firebase.json @@ -33,6 +33,26 @@ ] } ] + }, + { + "target": "web", + "public": "public/web", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "headers": [ + { + "source": "**", + "headers": [ + { + "key": "x-frame-options", + "value": "DENY" + } + ] + } + ] } ], "storage": { From 5303d1d30d8fb21c1267bd783fe5855505c18f01 Mon Sep 17 00:00:00 2001 From: flauc Date: Fri, 20 May 2022 09:43:03 +0200 Subject: [PATCH 05/55] fix: update-web script referencing wrong project --- .github/workflows/update-web.workflow.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update-web.workflow.yml b/.github/workflows/update-web.workflow.yml index 5ba9ca42..353fa0b0 100644 --- a/.github/workflows/update-web.workflow.yml +++ b/.github/workflows/update-web.workflow.yml @@ -6,6 +6,8 @@ on: description: 'Release description' jobs: deploy: + env: + project: 'jaspero-jms' name: Deploy runs-on: ubuntu-latest steps: @@ -27,7 +29,7 @@ jobs: args: deploy --only hosting:website env: FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} - PROJECT_ID: glycan-age + PROJECT_ID: ${{ env.project }} - name: Update Firestore if: contains(github.ref, 'build') run: | From 846bc343b8251a3202fccaae3f7995b093a9ac53 Mon Sep 17 00:00:00 2001 From: flauc Date: Fri, 20 May 2022 15:03:38 +0200 Subject: [PATCH 06/55] fix: deployment of web app --- web/.gitignore | 1 + web/src/hooks.ts | 6 ------ web/src/lib/firebase.ts | 16 +++++++++++++++- web/src/routes/settings.ts | 4 ++-- web/svelte.config.js | 5 ++++- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/web/.gitignore b/web/.gitignore index 64007bdd..f43640e7 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -8,3 +8,4 @@ node_modules !.env.example .vercel .output +key.json \ No newline at end of file diff --git a/web/src/hooks.ts b/web/src/hooks.ts index 33458942..87e87bfa 100644 --- a/web/src/hooks.ts +++ b/web/src/hooks.ts @@ -1,12 +1,6 @@ import type {Handle} from '@sveltejs/kit'; -import {getDocument} from './lib/firebase'; export const handle: Handle = async ({ event, resolve }) => { - if (!event.locals.headerLinks) { - event.locals.headerLinks = (await getDocument('settings', 'layout') as any).headerLinks - } - const response = await resolve(event); - return response; }; diff --git a/web/src/lib/firebase.ts b/web/src/lib/firebase.ts index c3fa35dd..0f695617 100644 --- a/web/src/lib/firebase.ts +++ b/web/src/lib/firebase.ts @@ -1,6 +1,20 @@ import admin from 'firebase-admin'; +import {join} from 'path'; + +let environment: any; + +if (environment === 'd') { + environment = { + projectId: 'jaspero-jms' + }; +} else { + environment = { + credential: admin.credential.cert(join(process.cwd(), 'key.json')), + databaseURL: `https://jaspero-jms.firebaseio.com` + }; +} -admin.initializeApp({projectId: 'jaspero-jms'}); +admin.initializeApp(environment); const fs = admin.firestore(); diff --git a/web/src/routes/settings.ts b/web/src/routes/settings.ts index cc1712b0..c643e3ff 100644 --- a/web/src/routes/settings.ts +++ b/web/src/routes/settings.ts @@ -2,10 +2,10 @@ import type {RequestHandler} from '@sveltejs/kit'; import {getDocument} from '$lib/firebase'; export const get: RequestHandler = async () => { - const {headerLinks} = await getDocument('settings', 'layout'); + const data = await getDocument('settings', 'layout'); return { body: { - headerLinks + headerLinks: (data || {}).headerLinks || [] } } }; \ No newline at end of file diff --git a/web/svelte.config.js b/web/svelte.config.js index 02acd0ef..aac34df7 100644 --- a/web/svelte.config.js +++ b/web/svelte.config.js @@ -10,7 +10,10 @@ const config = { kit: { adapter: adapter({ pages: '../public/web' - }) + }), + prerender: { + default: true + } } }; From c88d6e92d280e2e612746881190a32296c819c65 Mon Sep 17 00:00:00 2001 From: flauc Date: Fri, 20 May 2022 20:18:56 +0200 Subject: [PATCH 07/55] fix: web deploying --- .github/workflows/update-web.workflow.yml | 2 +- functions/src/triggers/status-updated.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update-web.workflow.yml b/.github/workflows/update-web.workflow.yml index 353fa0b0..8cb15477 100644 --- a/.github/workflows/update-web.workflow.yml +++ b/.github/workflows/update-web.workflow.yml @@ -26,7 +26,7 @@ jobs: if: contains(github.ref, 'build') uses: w9jds/firebase-action@master with: - args: deploy --only hosting:website + args: deploy --only hosting:web env: FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} PROJECT_ID: ${{ env.project }} diff --git a/functions/src/triggers/status-updated.ts b/functions/src/triggers/status-updated.ts index 5cf356da..76821328 100644 --- a/functions/src/triggers/status-updated.ts +++ b/functions/src/triggers/status-updated.ts @@ -17,7 +17,7 @@ export const statusUpdated = functions if (after.publishStart !== before.publishStart && ENV_CONFIG.ghtoken) { await fetch( - `https://api.github.com/repos/${SHARED_CONFIG.github.organization}/${SHARED_CONFIG.github.organization}/actions/workflows/update-web.workflow.yml/dispatches`, + `https://api.github.com/repos/${SHARED_CONFIG.github.organization}/${SHARED_CONFIG.github.repository}/actions/workflows/update-web.workflow.yml/dispatches`, { method: 'POST', headers: { From 8600250804984b56ef8f2fb4bbc70e6deb94cb53 Mon Sep 17 00:00:00 2001 From: flauc Date: Fri, 20 May 2022 20:56:03 +0200 Subject: [PATCH 08/55] fix(web): update-release format --- web/update-release.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/web/update-release.js b/web/update-release.js index 80013860..e81c5d42 100644 --- a/web/update-release.js +++ b/web/update-release.js @@ -1,10 +1,8 @@ -/** - * Intended for updating release status from firestore - */ -const admin = require('firebase-admin'); +import admin from 'firebase-admin'; +import {join} from 'path'; admin.initializeApp({ - credential: admin.credential.cert(require('./key.json')) + credential: admin.credential.cert(admin.credential.cert(join(process.cwd(), 'key.json'))) }); async function exec() { From 5faebc0abd4b1f3966bd0d5c5ec6d3502729cc96 Mon Sep 17 00:00:00 2001 From: flauc Date: Sat, 21 May 2022 10:07:37 +0200 Subject: [PATCH 09/55] feat(web): added meta tags on pages --- web/src/lib/Page.svelte | 22 +++++++++++++++++++++- web/src/lib/consts/title.const.ts | 3 +++ web/src/lib/firebase.ts | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 web/src/lib/consts/title.const.ts diff --git a/web/src/lib/Page.svelte b/web/src/lib/Page.svelte index cfab728a..3d4d5329 100644 --- a/web/src/lib/Page.svelte +++ b/web/src/lib/Page.svelte @@ -1,12 +1,32 @@ {@html page.content || ''} - {page.meta?.title || page.title} + {title} + + + + + + {#if page.meta?.description} + + + {/if} + {#if page.meta?.image} + + {/if} diff --git a/web/src/lib/consts/title.const.ts b/web/src/lib/consts/title.const.ts new file mode 100644 index 00000000..2d52a7db --- /dev/null +++ b/web/src/lib/consts/title.const.ts @@ -0,0 +1,3 @@ +export const BASE_TITLE = 'JMS'; +export const DELIMITER = '-'; +export const URL = 'https://jaspero-jms.web.app/'; \ No newline at end of file diff --git a/web/src/lib/firebase.ts b/web/src/lib/firebase.ts index 0f695617..19ba8941 100644 --- a/web/src/lib/firebase.ts +++ b/web/src/lib/firebase.ts @@ -48,6 +48,7 @@ export async function getPage(id: string) { return { body: { page: { + id, content, meta, title, From 73d97c96379d7656e3069f99aad8922a5c04dcce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Malo=C4=8Da?= Date: Mon, 23 May 2022 08:41:40 +0200 Subject: [PATCH 10/55] fix(definitions): script setup serviceAccountKey path --- definitions/scripts/script-setup.ts | 42 ++++++++++++++--------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/definitions/scripts/script-setup.ts b/definitions/scripts/script-setup.ts index ca6bc14f..084e9d00 100644 --- a/definitions/scripts/script-setup.ts +++ b/definitions/scripts/script-setup.ts @@ -1,21 +1,21 @@ -import * as admin from 'firebase-admin'; -import {SHARED_CONFIG} from '../consts/shared-config.const'; - -export function scriptSetup() { - let environment: any = process.argv[2] || 'd'; - - if (environment === 'd') { - environment = { - projectId: SHARED_CONFIG.projectId - }; - } else { - environment = { - credential: admin.credential.cert('../serviceAccountKey.json'), - databaseURL: `https://${SHARED_CONFIG.projectId}.firebaseio.com` - }; - } - - admin.initializeApp(environment); - - return admin; -}; \ No newline at end of file +import * as admin from 'firebase-admin'; +import {SHARED_CONFIG} from '../consts/shared-config.const'; + +export function scriptSetup() { + let environment: any = process.argv[2] || 'd'; + + if (environment === 'd') { + environment = { + projectId: SHARED_CONFIG.projectId + }; + } else { + environment = { + credential: admin.credential.cert('serviceAccountKey.json'), + databaseURL: `https://${SHARED_CONFIG.projectId}.firebaseio.com` + }; + } + + admin.initializeApp(environment); + + return admin; +} From ab49b7b5716815c8952462de7121fa9f66375639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Malo=C4=8Da?= Date: Mon, 23 May 2022 09:36:51 +0200 Subject: [PATCH 11/55] chore: changed setup script - install web package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 092781bd..af0bfc13 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "semantic-release": "semantic-release", "config:set": "firebase functions:config:set", "dev": "concurrently \"npm run start:emulator\" \"npm run start:cms\"", - "setup": "npm ci && npm --prefix definitions ci && npm --prefix functions ci && npm --prefix client ci && npm --prefix .github/utils ci", + "setup": "npm ci && npm --prefix definitions ci && npm --prefix functions ci && npm --prefix client ci && npm --prefix .github/utils ci && npm --prefix web ci", "write:indexes": "firebase firestore:indexes > firestore.indexes.json" }, "author": { From 0b17db15ad9dc8a568e388af8912ea3e4c2b280b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Malo=C4=8Da?= Date: Mon, 23 May 2022 12:35:28 +0200 Subject: [PATCH 12/55] fix: lastPublished check --- .../dashboard/components/layout/layout.component.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/projects/cms/src/app/modules/dashboard/components/layout/layout.component.ts b/client/projects/cms/src/app/modules/dashboard/components/layout/layout.component.ts index 5a2e0a4d..dfd224b5 100644 --- a/client/projects/cms/src/app/modules/dashboard/components/layout/layout.component.ts +++ b/client/projects/cms/src/app/modules/dashboard/components/layout/layout.component.ts @@ -80,6 +80,7 @@ export class LayoutComponent implements OnInit { this.dbService.getDocument('settings', 'status', true) .pipe( + filter(it => it), distinctUntilChanged(), untilDestroyed(this) ) @@ -96,7 +97,7 @@ export class LayoutComponent implements OnInit { this.lastPublishDisabled$.next(false); if (!data) { - return + return; } this.snackBar.open( @@ -104,7 +105,7 @@ export class LayoutComponent implements OnInit { this.transloco.translate('DISMISS'), {duration: 5000} ); - }); + }); if (this.state.user.requireReset) { @@ -298,6 +299,6 @@ export class LayoutComponent implements OnInit { .pipe( notify({success: 'RELEASE_TRIGGERED_SUCCESSFULLY'}), tap(() => this.lastPublishDisabled$.next(true)) - ) + ); } } From 55f4c9ae612fdf3de940076d64ef026af44f8b9d Mon Sep 17 00:00:00 2001 From: flauc Date: Mon, 23 May 2022 16:37:05 +0200 Subject: [PATCH 13/55] chore(client): form-builder version --- client/package-lock.json | 18 +++++++++--------- client/package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 6d53e920..016afe8a 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -21,9 +21,9 @@ "@angular/platform-browser-dynamic": "13.3.4", "@angular/router": "13.3.4", "@jaspero/fb-fields-mat": "1.12.0", - "@jaspero/fb-page-builder": "3.23.0", + "@jaspero/fb-page-builder": "3.24.3", "@jaspero/fb-segments-mat": "1.3.10", - "@jaspero/fb-tinymce": "^2.8.0", + "@jaspero/fb-tinymce": "2.8.0", "@jaspero/form-builder": "5.7.2", "@jaspero/jmsp-notes": "1.6.4", "@jaspero/ng-helpers": "5.2.0", @@ -3057,15 +3057,15 @@ } }, "node_modules/@jaspero/fb-page-builder": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@jaspero/fb-page-builder/-/fb-page-builder-3.23.0.tgz", - "integrity": "sha512-iWSSg0ACgd4SHlg3WCoghHpoZeNZK7iZIssUI8I/n+3aEjMmSaZNGLhyfJK3hniWw56zb0TFiEzf/OYEW+FyoQ==", + "version": "3.24.3", + "resolved": "https://registry.npmjs.org/@jaspero/fb-page-builder/-/fb-page-builder-3.24.3.tgz", + "integrity": "sha512-uHJOcX9gJeeJe6KiBRK2AlKt6YnkgppSwbnXxMa9C77dv/fX/XdR2PnUnA8yfAsvyQs6e8a/UG3MePMcJTaAmw==", "dependencies": { "@jaspero/utils": "^1.3.1", "tslib": "^2.3.0" }, "peerDependencies": { - "@jaspero/form-builder": "5.7.2", + "@jaspero/form-builder": "5.8.1", "@ngneat/until-destroy": "^8.0.0" } }, @@ -16769,9 +16769,9 @@ } }, "@jaspero/fb-page-builder": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@jaspero/fb-page-builder/-/fb-page-builder-3.23.0.tgz", - "integrity": "sha512-iWSSg0ACgd4SHlg3WCoghHpoZeNZK7iZIssUI8I/n+3aEjMmSaZNGLhyfJK3hniWw56zb0TFiEzf/OYEW+FyoQ==", + "version": "3.24.3", + "resolved": "https://registry.npmjs.org/@jaspero/fb-page-builder/-/fb-page-builder-3.24.3.tgz", + "integrity": "sha512-uHJOcX9gJeeJe6KiBRK2AlKt6YnkgppSwbnXxMa9C77dv/fX/XdR2PnUnA8yfAsvyQs6e8a/UG3MePMcJTaAmw==", "requires": { "@jaspero/utils": "^1.3.1", "tslib": "^2.3.0" diff --git a/client/package.json b/client/package.json index 5252fa3c..45c80f2e 100644 --- a/client/package.json +++ b/client/package.json @@ -28,7 +28,7 @@ "@angular/platform-browser-dynamic": "13.3.4", "@angular/router": "13.3.4", "@jaspero/fb-fields-mat": "1.12.0", - "@jaspero/fb-page-builder": "3.23.0", + "@jaspero/fb-page-builder": "3.24.3", "@jaspero/fb-segments-mat": "1.3.10", "@jaspero/fb-tinymce": "2.8.0", "@jaspero/form-builder": "5.7.2", From 4c5560afebb7f3da3e55601fdf08b5f1cb061670 Mon Sep 17 00:00:00 2001 From: flauc Date: Wed, 25 May 2022 00:18:22 +0200 Subject: [PATCH 14/55] fix(web): styles not compiling --- client/package-lock.json | 14 +++++++------- client/package.json | 2 +- .../blocks/blocks/content/content.component.html | 2 +- .../blocks/blocks/content/content.component.scss | 3 --- package.json | 2 +- web/src/lib/firebase.ts | 6 +++--- 6 files changed, 13 insertions(+), 16 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 016afe8a..ff4387fb 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -21,7 +21,7 @@ "@angular/platform-browser-dynamic": "13.3.4", "@angular/router": "13.3.4", "@jaspero/fb-fields-mat": "1.12.0", - "@jaspero/fb-page-builder": "3.24.3", + "@jaspero/fb-page-builder": "3.24.5", "@jaspero/fb-segments-mat": "1.3.10", "@jaspero/fb-tinymce": "2.8.0", "@jaspero/form-builder": "5.7.2", @@ -3057,9 +3057,9 @@ } }, "node_modules/@jaspero/fb-page-builder": { - "version": "3.24.3", - "resolved": "https://registry.npmjs.org/@jaspero/fb-page-builder/-/fb-page-builder-3.24.3.tgz", - "integrity": "sha512-uHJOcX9gJeeJe6KiBRK2AlKt6YnkgppSwbnXxMa9C77dv/fX/XdR2PnUnA8yfAsvyQs6e8a/UG3MePMcJTaAmw==", + "version": "3.24.5", + "resolved": "https://registry.npmjs.org/@jaspero/fb-page-builder/-/fb-page-builder-3.24.5.tgz", + "integrity": "sha512-xowZV5X3izvD9k8RZSkfVZzq54qYJHLp4X1+B6db7f5Syl5sKc9q+Q08Y/eVtstUibGMu0Obc8Wy3cK35NwSkA==", "dependencies": { "@jaspero/utils": "^1.3.1", "tslib": "^2.3.0" @@ -16769,9 +16769,9 @@ } }, "@jaspero/fb-page-builder": { - "version": "3.24.3", - "resolved": "https://registry.npmjs.org/@jaspero/fb-page-builder/-/fb-page-builder-3.24.3.tgz", - "integrity": "sha512-uHJOcX9gJeeJe6KiBRK2AlKt6YnkgppSwbnXxMa9C77dv/fX/XdR2PnUnA8yfAsvyQs6e8a/UG3MePMcJTaAmw==", + "version": "3.24.5", + "resolved": "https://registry.npmjs.org/@jaspero/fb-page-builder/-/fb-page-builder-3.24.5.tgz", + "integrity": "sha512-xowZV5X3izvD9k8RZSkfVZzq54qYJHLp4X1+B6db7f5Syl5sKc9q+Q08Y/eVtstUibGMu0Obc8Wy3cK35NwSkA==", "requires": { "@jaspero/utils": "^1.3.1", "tslib": "^2.3.0" diff --git a/client/package.json b/client/package.json index 45c80f2e..586ad5a9 100644 --- a/client/package.json +++ b/client/package.json @@ -28,7 +28,7 @@ "@angular/platform-browser-dynamic": "13.3.4", "@angular/router": "13.3.4", "@jaspero/fb-fields-mat": "1.12.0", - "@jaspero/fb-page-builder": "3.24.3", + "@jaspero/fb-page-builder": "3.24.5", "@jaspero/fb-segments-mat": "1.3.10", "@jaspero/fb-tinymce": "2.8.0", "@jaspero/form-builder": "5.7.2", diff --git a/client/projects/shared/blocks/blocks/content/content.component.html b/client/projects/shared/blocks/blocks/content/content.component.html index 428fecda..f04c2fe5 100644 --- a/client/projects/shared/blocks/blocks/content/content.component.html +++ b/client/projects/shared/blocks/blocks/content/content.component.html @@ -1 +1 @@ -

+
\ No newline at end of file diff --git a/client/projects/shared/blocks/blocks/content/content.component.scss b/client/projects/shared/blocks/blocks/content/content.component.scss index 20903a85..e69de29b 100644 --- a/client/projects/shared/blocks/blocks/content/content.component.scss +++ b/client/projects/shared/blocks/blocks/content/content.component.scss @@ -1,3 +0,0 @@ -.example { - color: blue; -} \ No newline at end of file diff --git a/package.json b/package.json index af0bfc13..e8ea7184 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "deploy": "firebase deploy --only storage,firestore,functions:cms,hosting", "semantic-release": "semantic-release", "config:set": "firebase functions:config:set", - "dev": "concurrently \"npm run start:emulator\" \"npm run start:cms\"", + "dev": "concurrently \"npm run start:emulator\" \"npm run start:cms\" \"npm run start:web\"", "setup": "npm ci && npm --prefix definitions ci && npm --prefix functions ci && npm --prefix client ci && npm --prefix .github/utils ci && npm --prefix web ci", "write:indexes": "firebase firestore:indexes > firestore.indexes.json" }, diff --git a/web/src/lib/firebase.ts b/web/src/lib/firebase.ts index 19ba8941..8e18b9c3 100644 --- a/web/src/lib/firebase.ts +++ b/web/src/lib/firebase.ts @@ -37,12 +37,12 @@ export async function getPage(id: string) { } } - const {blocks, meta, title, globalStyle} = page; + const {blocks, meta, title, globalStyles} = page; let content = blocks.reduce((acc: string, cur: any) => acc + cur.compiled || '', ''); - if (globalStyle) { - content += ``; + if (globalStyles) { + content += ``; } return { From 05755d4a1591e2ae61a73b6feeb54966901b9a4b Mon Sep 17 00:00:00 2001 From: flauc Date: Fri, 27 May 2022 10:59:55 +0200 Subject: [PATCH 15/55] feat(client): added elements project --- client/angular.json | 103 ++++++++++++++++++ client/projects/elements/.browserslistrc | 16 +++ client/projects/elements/karma.conf.js | 44 ++++++++ .../projects/elements/src/app/app.module.ts | 12 ++ client/projects/elements/src/assets/.gitkeep | 0 .../src/environments/environment.prod.ts | 3 + .../elements/src/environments/environment.ts | 16 +++ client/projects/elements/src/favicon.ico | Bin 0 -> 948 bytes client/projects/elements/src/index.html | 13 +++ client/projects/elements/src/main.ts | 14 +++ client/projects/elements/src/polyfills.ts | 53 +++++++++ client/projects/elements/src/styles.scss | 1 + client/projects/elements/src/test.ts | 26 +++++ client/projects/elements/tsconfig.app.json | 15 +++ client/projects/elements/tsconfig.spec.json | 18 +++ 15 files changed, 334 insertions(+) create mode 100644 client/projects/elements/.browserslistrc create mode 100644 client/projects/elements/karma.conf.js create mode 100644 client/projects/elements/src/app/app.module.ts create mode 100644 client/projects/elements/src/assets/.gitkeep create mode 100644 client/projects/elements/src/environments/environment.prod.ts create mode 100644 client/projects/elements/src/environments/environment.ts create mode 100644 client/projects/elements/src/favicon.ico create mode 100644 client/projects/elements/src/index.html create mode 100644 client/projects/elements/src/main.ts create mode 100644 client/projects/elements/src/polyfills.ts create mode 100644 client/projects/elements/src/styles.scss create mode 100644 client/projects/elements/src/test.ts create mode 100644 client/projects/elements/tsconfig.app.json create mode 100644 client/projects/elements/tsconfig.spec.json diff --git a/client/angular.json b/client/angular.json index 87bb7ed5..c2c1c933 100644 --- a/client/angular.json +++ b/client/angular.json @@ -199,6 +199,109 @@ } } } + }, + "elements": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + }, + "@schematics/angular:application": { + "strict": true + } + }, + "root": "projects/elements", + "sourceRoot": "projects/elements/src", + "prefix": "jms-el", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/elements", + "index": "projects/elements/src/index.html", + "main": "projects/elements/src/main.ts", + "polyfills": "projects/elements/src/polyfills.ts", + "tsConfig": "projects/elements/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "projects/elements/src/favicon.ico", + "projects/elements/src/assets" + ], + "styles": [ + "projects/elements/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "fileReplacements": [ + { + "replace": "projects/elements/src/environments/environment.ts", + "with": "projects/elements/src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "elements:build:production" + }, + "development": { + "browserTarget": "elements:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "elements:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "projects/elements/src/test.ts", + "polyfills": "projects/elements/src/polyfills.ts", + "tsConfig": "projects/elements/tsconfig.spec.json", + "karmaConfig": "projects/elements/karma.conf.js", + "inlineStyleLanguage": "scss", + "assets": [ + "projects/elements/src/favicon.ico", + "projects/elements/src/assets" + ], + "styles": [ + "projects/elements/src/styles.scss" + ], + "scripts": [] + } + } + } } }, "defaultProject": "cms", diff --git a/client/projects/elements/.browserslistrc b/client/projects/elements/.browserslistrc new file mode 100644 index 00000000..4f9ac269 --- /dev/null +++ b/client/projects/elements/.browserslistrc @@ -0,0 +1,16 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +Firefox ESR diff --git a/client/projects/elements/karma.conf.js b/client/projects/elements/karma.conf.js new file mode 100644 index 00000000..db4f09a6 --- /dev/null +++ b/client/projects/elements/karma.conf.js @@ -0,0 +1,44 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, '../../coverage/elements'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/client/projects/elements/src/app/app.module.ts b/client/projects/elements/src/app/app.module.ts new file mode 100644 index 00000000..62ea819d --- /dev/null +++ b/client/projects/elements/src/app/app.module.ts @@ -0,0 +1,12 @@ +import {NgModule} from '@angular/core'; +import {BrowserModule} from '@angular/platform-browser'; + +@NgModule({ + declarations: [], + imports: [ + BrowserModule + ], + providers: [], + bootstrap: [] +}) +export class AppModule { } diff --git a/client/projects/elements/src/assets/.gitkeep b/client/projects/elements/src/assets/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/client/projects/elements/src/environments/environment.prod.ts b/client/projects/elements/src/environments/environment.prod.ts new file mode 100644 index 00000000..3612073b --- /dev/null +++ b/client/projects/elements/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/client/projects/elements/src/environments/environment.ts b/client/projects/elements/src/environments/environment.ts new file mode 100644 index 00000000..f56ff470 --- /dev/null +++ b/client/projects/elements/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/client/projects/elements/src/favicon.ico b/client/projects/elements/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..997406ad22c29aae95893fb3d666c30258a09537 GIT binary patch literal 948 zcmV;l155mgP)CBYU7IjCFmI-B}4sMJt3^s9NVg!P0 z6hDQy(L`XWMkB@zOLgN$4KYz;j0zZxq9KKdpZE#5@k0crP^5f9KO};h)ZDQ%ybhht z%t9#h|nu0K(bJ ztIkhEr!*UyrZWQ1k2+YkGqDi8Z<|mIN&$kzpKl{cNP=OQzXHz>vn+c)F)zO|Bou>E z2|-d_=qY#Y+yOu1a}XI?cU}%04)zz%anD(XZC{#~WreV!a$7k2Ug`?&CUEc0EtrkZ zL49MB)h!_K{H(*l_93D5tO0;BUnvYlo+;yss%n^&qjt6fZOa+}+FDO(~2>G z2dx@=JZ?DHP^;b7*Y1as5^uphBsh*s*z&MBd?e@I>-9kU>63PjP&^#5YTOb&x^6Cf z?674rmSHB5Fk!{Gv7rv!?qX#ei_L(XtwVqLX3L}$MI|kJ*w(rhx~tc&L&xP#?cQow zX_|gx$wMr3pRZIIr_;;O|8fAjd;1`nOeu5K(pCu7>^3E&D2OBBq?sYa(%S?GwG&_0-s%_v$L@R!5H_fc)lOb9ZoOO#p`Nn`KU z3LTTBtjwo`7(HA6 z7gmO$yTR!5L>Bsg!X8616{JUngg_@&85%>W=mChTR;x4`P=?PJ~oPuy5 zU-L`C@_!34D21{fD~Y8NVnR3t;aqZI3fIhmgmx}$oc-dKDC6Ap$Gy>a!`A*x2L1v0 WcZ@i?LyX}70000 + + + + Elements + + + + + + + + diff --git a/client/projects/elements/src/main.ts b/client/projects/elements/src/main.ts new file mode 100644 index 00000000..b2650be7 --- /dev/null +++ b/client/projects/elements/src/main.ts @@ -0,0 +1,14 @@ +import { enableProdMode, ViewEncapsulation } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule, { + defaultEncapsulation: ViewEncapsulation.ShadowDom +}) + .catch(err => console.error(err)); diff --git a/client/projects/elements/src/polyfills.ts b/client/projects/elements/src/polyfills.ts new file mode 100644 index 00000000..429bb9ef --- /dev/null +++ b/client/projects/elements/src/polyfills.ts @@ -0,0 +1,53 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes recent versions of Safari, Chrome (including + * Opera), Edge on the desktop, and iOS and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/client/projects/elements/src/styles.scss b/client/projects/elements/src/styles.scss new file mode 100644 index 00000000..90d4ee00 --- /dev/null +++ b/client/projects/elements/src/styles.scss @@ -0,0 +1 @@ +/* You can add global styles to this file, and also import other style files */ diff --git a/client/projects/elements/src/test.ts b/client/projects/elements/src/test.ts new file mode 100644 index 00000000..00025daf --- /dev/null +++ b/client/projects/elements/src/test.ts @@ -0,0 +1,26 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + (id: string): T; + keys(): string[]; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), +); + +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/client/projects/elements/tsconfig.app.json b/client/projects/elements/tsconfig.app.json new file mode 100644 index 00000000..fd37f74d --- /dev/null +++ b/client/projects/elements/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/client/projects/elements/tsconfig.spec.json b/client/projects/elements/tsconfig.spec.json new file mode 100644 index 00000000..b66a2f0b --- /dev/null +++ b/client/projects/elements/tsconfig.spec.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} From 115e5ec5abc11562ca9e0cb9b1c891a5bd86f071 Mon Sep 17 00:00:00 2001 From: flauc Date: Fri, 27 May 2022 19:49:25 +0200 Subject: [PATCH 16/55] feat: connected angular element submit form --- client/angular.json | 85 +++--- client/package.json | 1 + client/projects/elements/karma.conf.js | 44 --- .../projects/elements/src/app/app.module.ts | 12 - client/projects/elements/src/favicon.ico | Bin 948 -> 0 bytes client/projects/elements/src/main.ts | 14 - client/projects/elements/src/polyfills.ts | 53 ---- client/projects/elements/src/test.ts | 26 -- client/projects/elements/tsconfig.spec.json | 18 -- .../projects/shared/blocks/blocks.module.ts | 9 +- .../contact-form/contact-form.component.html | 11 + .../contact-form/contact-form.component.scss} | 0 .../contact-form.component.spec.ts | 25 ++ .../contact-form/contact-form.component.ts | 31 +++ .../.browserslistrc | 0 .../src/app/submit-button.component.ts | 51 ++++ .../src/app/submit-button.module.ts | 27 ++ .../submit-button/src/assets/.gitkeep | 0 .../src/environments/environment.prod.ts | 0 .../src/environments/environment.ts | 0 .../src/index.html | 5 +- client/projects/submit-button/src/main.ts | 13 + .../src/styles.css} | 0 .../tsconfig.app.json | 3 +- firestore.rules | 5 + web/package.json | 3 +- web/src/lib/Page.svelte | 4 + web/src/lib/consts/elements.const.ts | 3 + web/src/lib/firebase.ts | 27 +- .../submit-button/3rdpartylicenses.txt | 256 ++++++++++++++++++ web/static/elements/submit-button/index.html | 11 + web/static/elements/submit-button/main.js | 2 + web/static/elements/submit-button/main.js.map | 1 + web/static/elements/submit-button/runtime.js | 2 + .../elements/submit-button/runtime.js.map | 1 + 35 files changed, 525 insertions(+), 218 deletions(-) delete mode 100644 client/projects/elements/karma.conf.js delete mode 100644 client/projects/elements/src/app/app.module.ts delete mode 100644 client/projects/elements/src/favicon.ico delete mode 100644 client/projects/elements/src/main.ts delete mode 100644 client/projects/elements/src/polyfills.ts delete mode 100644 client/projects/elements/src/test.ts delete mode 100644 client/projects/elements/tsconfig.spec.json create mode 100644 client/projects/shared/blocks/blocks/contact-form/contact-form.component.html rename client/projects/{elements/src/assets/.gitkeep => shared/blocks/blocks/contact-form/contact-form.component.scss} (100%) create mode 100644 client/projects/shared/blocks/blocks/contact-form/contact-form.component.spec.ts create mode 100644 client/projects/shared/blocks/blocks/contact-form/contact-form.component.ts rename client/projects/{elements => submit-button}/.browserslistrc (100%) create mode 100644 client/projects/submit-button/src/app/submit-button.component.ts create mode 100644 client/projects/submit-button/src/app/submit-button.module.ts create mode 100644 client/projects/submit-button/src/assets/.gitkeep rename client/projects/{elements => submit-button}/src/environments/environment.prod.ts (100%) rename client/projects/{elements => submit-button}/src/environments/environment.ts (100%) rename client/projects/{elements => submit-button}/src/index.html (61%) create mode 100644 client/projects/submit-button/src/main.ts rename client/projects/{elements/src/styles.scss => submit-button/src/styles.css} (100%) rename client/projects/{elements => submit-button}/tsconfig.app.json (85%) create mode 100644 web/src/lib/consts/elements.const.ts create mode 100644 web/static/elements/submit-button/3rdpartylicenses.txt create mode 100644 web/static/elements/submit-button/index.html create mode 100644 web/static/elements/submit-button/main.js create mode 100644 web/static/elements/submit-button/main.js.map create mode 100644 web/static/elements/submit-button/runtime.js create mode 100644 web/static/elements/submit-button/runtime.js.map diff --git a/client/angular.json b/client/angular.json index c2c1c933..e5a2e0d8 100644 --- a/client/angular.json +++ b/client/angular.json @@ -200,36 +200,54 @@ } } }, - "elements": { + "submit-button": { "projectType": "application", "schematics": { "@schematics/angular:component": { - "style": "scss" + "inlineTemplate": true, + "inlineStyle": true, + "skipTests": true + }, + "@schematics/angular:class": { + "skipTests": true + }, + "@schematics/angular:directive": { + "skipTests": true + }, + "@schematics/angular:guard": { + "skipTests": true + }, + "@schematics/angular:interceptor": { + "skipTests": true + }, + "@schematics/angular:pipe": { + "skipTests": true + }, + "@schematics/angular:resolver": { + "skipTests": true + }, + "@schematics/angular:service": { + "skipTests": true }, "@schematics/angular:application": { "strict": true } }, - "root": "projects/elements", - "sourceRoot": "projects/elements/src", - "prefix": "jms-el", + "root": "projects/submit-button", + "sourceRoot": "projects/submit-button/src", + "prefix": "jpe", "architect": { "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "dist/elements", - "index": "projects/elements/src/index.html", - "main": "projects/elements/src/main.ts", - "polyfills": "projects/elements/src/polyfills.ts", - "tsConfig": "projects/elements/tsconfig.app.json", - "inlineStyleLanguage": "scss", + "outputPath": "dist/submit-button", + "index": "projects/submit-button/src/index.html", + "main": "projects/submit-button/src/main.ts", + "tsConfig": "projects/submit-button/tsconfig.app.json", "assets": [ - "projects/elements/src/favicon.ico", - "projects/elements/src/assets" - ], - "styles": [ - "projects/elements/src/styles.scss" + "projects/submit-button/src/assets" ], + "styles": [], "scripts": [] }, "configurations": { @@ -248,11 +266,14 @@ ], "fileReplacements": [ { - "replace": "projects/elements/src/environments/environment.ts", - "with": "projects/elements/src/environments/environment.prod.ts" + "replace": "projects/submit-button/src/environments/environment.ts", + "with": "projects/submit-button/src/environments/environment.prod.ts" } ], - "outputHashing": "all" + "outputHashing": "none", + "sourceMap": true, + "namedChunks": false, + "vendorChunk": false }, "development": { "buildOptimizer": false, @@ -269,10 +290,10 @@ "builder": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "elements:build:production" + "browserTarget": "submit-button:build:production" }, "development": { - "browserTarget": "elements:build:development" + "browserTarget": "submit-button:build:development" } }, "defaultConfiguration": "development" @@ -280,31 +301,13 @@ "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "elements:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "projects/elements/src/test.ts", - "polyfills": "projects/elements/src/polyfills.ts", - "tsConfig": "projects/elements/tsconfig.spec.json", - "karmaConfig": "projects/elements/karma.conf.js", - "inlineStyleLanguage": "scss", - "assets": [ - "projects/elements/src/favicon.ico", - "projects/elements/src/assets" - ], - "styles": [ - "projects/elements/src/styles.scss" - ], - "scripts": [] + "browserTarget": "submit-button:build" } } } } }, - "defaultProject": "cms", + "defaultProject": "cms", "cli": { "analytics": false } diff --git a/client/package.json b/client/package.json index 586ad5a9..59936899 100644 --- a/client/package.json +++ b/client/package.json @@ -8,6 +8,7 @@ "transloco:optimize": "transloco-optimize ../public/cms/assets/i18n", "transloco:extract-scoped-libs": "transloco-scoped-libs --skip-gitignore", "build": "node timestamp.js && ng build --project=cms --configuration=production && npm run transloco:optimize", + "build:elements": "ng build submit-button", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e", diff --git a/client/projects/elements/karma.conf.js b/client/projects/elements/karma.conf.js deleted file mode 100644 index db4f09a6..00000000 --- a/client/projects/elements/karma.conf.js +++ /dev/null @@ -1,44 +0,0 @@ -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-jasmine-html-reporter'), - require('karma-coverage'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client: { - jasmine: { - // you can add configuration options for Jasmine here - // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html - // for example, you can disable the random execution with `random: false` - // or set a specific seed with `seed: 4321` - }, - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - jasmineHtmlReporter: { - suppressAll: true // removes the duplicated traces - }, - coverageReporter: { - dir: require('path').join(__dirname, '../../coverage/elements'), - subdir: '.', - reporters: [ - { type: 'html' }, - { type: 'text-summary' } - ] - }, - reporters: ['progress', 'kjhtml'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['Chrome'], - singleRun: false, - restartOnFileChange: true - }); -}; diff --git a/client/projects/elements/src/app/app.module.ts b/client/projects/elements/src/app/app.module.ts deleted file mode 100644 index 62ea819d..00000000 --- a/client/projects/elements/src/app/app.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {NgModule} from '@angular/core'; -import {BrowserModule} from '@angular/platform-browser'; - -@NgModule({ - declarations: [], - imports: [ - BrowserModule - ], - providers: [], - bootstrap: [] -}) -export class AppModule { } diff --git a/client/projects/elements/src/favicon.ico b/client/projects/elements/src/favicon.ico deleted file mode 100644 index 997406ad22c29aae95893fb3d666c30258a09537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmV;l155mgP)CBYU7IjCFmI-B}4sMJt3^s9NVg!P0 z6hDQy(L`XWMkB@zOLgN$4KYz;j0zZxq9KKdpZE#5@k0crP^5f9KO};h)ZDQ%ybhht z%t9#h|nu0K(bJ ztIkhEr!*UyrZWQ1k2+YkGqDi8Z<|mIN&$kzpKl{cNP=OQzXHz>vn+c)F)zO|Bou>E z2|-d_=qY#Y+yOu1a}XI?cU}%04)zz%anD(XZC{#~WreV!a$7k2Ug`?&CUEc0EtrkZ zL49MB)h!_K{H(*l_93D5tO0;BUnvYlo+;yss%n^&qjt6fZOa+}+FDO(~2>G z2dx@=JZ?DHP^;b7*Y1as5^uphBsh*s*z&MBd?e@I>-9kU>63PjP&^#5YTOb&x^6Cf z?674rmSHB5Fk!{Gv7rv!?qX#ei_L(XtwVqLX3L}$MI|kJ*w(rhx~tc&L&xP#?cQow zX_|gx$wMr3pRZIIr_;;O|8fAjd;1`nOeu5K(pCu7>^3E&D2OBBq?sYa(%S?GwG&_0-s%_v$L@R!5H_fc)lOb9ZoOO#p`Nn`KU z3LTTBtjwo`7(HA6 z7gmO$yTR!5L>Bsg!X8616{JUngg_@&85%>W=mChTR;x4`P=?PJ~oPuy5 zU-L`C@_!34D21{fD~Y8NVnR3t;aqZI3fIhmgmx}$oc-dKDC6Ap$Gy>a!`A*x2L1v0 WcZ@i?LyX}70000 console.error(err)); diff --git a/client/projects/elements/src/polyfills.ts b/client/projects/elements/src/polyfills.ts deleted file mode 100644 index 429bb9ef..00000000 --- a/client/projects/elements/src/polyfills.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes recent versions of Safari, Chrome (including - * Opera), Edge on the desktop, and iOS and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - * because those flags need to be set before `zone.js` being loaded, and webpack - * will put import in the top of bundle, so user need to create a separate file - * in this directory (for example: zone-flags.ts), and put the following flags - * into that file, and then add the following code before importing zone.js. - * import './zone-flags'; - * - * The flags allowed in zone-flags.ts are listed here. - * - * The following flags will work for all browsers. - * - * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - * - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - * - * (window as any).__Zone_enable_cross_context_check = true; - * - */ - -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ -import 'zone.js'; // Included with Angular CLI. - - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ diff --git a/client/projects/elements/src/test.ts b/client/projects/elements/src/test.ts deleted file mode 100644 index 00025daf..00000000 --- a/client/projects/elements/src/test.ts +++ /dev/null @@ -1,26 +0,0 @@ -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import 'zone.js/testing'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; - -declare const require: { - context(path: string, deep?: boolean, filter?: RegExp): { - (id: string): T; - keys(): string[]; - }; -}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting(), -); - -// Then we find all the tests. -const context = require.context('./', true, /\.spec\.ts$/); -// And load the modules. -context.keys().map(context); diff --git a/client/projects/elements/tsconfig.spec.json b/client/projects/elements/tsconfig.spec.json deleted file mode 100644 index b66a2f0b..00000000 --- a/client/projects/elements/tsconfig.spec.json +++ /dev/null @@ -1,18 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/spec", - "types": [ - "jasmine" - ] - }, - "files": [ - "src/test.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/client/projects/shared/blocks/blocks.module.ts b/client/projects/shared/blocks/blocks.module.ts index 050bfc45..3dc67618 100644 --- a/client/projects/shared/blocks/blocks.module.ts +++ b/client/projects/shared/blocks/blocks.module.ts @@ -1,15 +1,17 @@ import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; +import {CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA} from '@angular/core'; import {ReactiveFormsModule} from '@angular/forms'; import {RouterModule} from '@angular/router'; import {InlineEditorModule} from '@jaspero/fb-page-builder'; import {LoadClickModule, SanitizeModule} from '@jaspero/ng-helpers'; import {CommonBlockComponent} from './blocks/common.block'; +import {ContactFormComponent} from './blocks/contact-form/contact-form.component'; import {ContentComponent} from './blocks/content/content.component'; import {BlockLinkDirective} from './directives/block-link/block-link.directive'; const B_COMPONENTS = [ - ContentComponent + ContentComponent, + ContactFormComponent ]; @NgModule({ @@ -30,6 +32,7 @@ const B_COMPONENTS = [ SanitizeModule, LoadClickModule - ] + ], + schemas: [NO_ERRORS_SCHEMA] }) export class BlocksModule { } diff --git a/client/projects/shared/blocks/blocks/contact-form/contact-form.component.html b/client/projects/shared/blocks/blocks/contact-form/contact-form.component.html new file mode 100644 index 00000000..290fa747 --- /dev/null +++ b/client/projects/shared/blocks/blocks/contact-form/contact-form.component.html @@ -0,0 +1,11 @@ + + + + Submit + \ No newline at end of file diff --git a/client/projects/elements/src/assets/.gitkeep b/client/projects/shared/blocks/blocks/contact-form/contact-form.component.scss similarity index 100% rename from client/projects/elements/src/assets/.gitkeep rename to client/projects/shared/blocks/blocks/contact-form/contact-form.component.scss diff --git a/client/projects/shared/blocks/blocks/contact-form/contact-form.component.spec.ts b/client/projects/shared/blocks/blocks/contact-form/contact-form.component.spec.ts new file mode 100644 index 00000000..4e2c4f75 --- /dev/null +++ b/client/projects/shared/blocks/blocks/contact-form/contact-form.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ContactFormComponent } from './contact-form.component'; + +describe('ContactFormComponent', () => { + let component: ContactFormComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ContactFormComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ContactFormComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/projects/shared/blocks/blocks/contact-form/contact-form.component.ts b/client/projects/shared/blocks/blocks/contact-form/contact-form.component.ts new file mode 100644 index 00000000..14b99c80 --- /dev/null +++ b/client/projects/shared/blocks/blocks/contact-form/contact-form.component.ts @@ -0,0 +1,31 @@ +import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core'; +import {Block} from '@jaspero/fb-page-builder'; +import {COMMON_OPTIONS} from '../common-options.const'; + +@Block({ + label: 'Contact Form', + icon: 'view_agenda', + previewValue: { + ...COMMON_OPTIONS.defaults + }, + form: { + segments: [ + ...COMMON_OPTIONS.segment + ], + schema: { + properties: { + ...COMMON_OPTIONS.properties + } + }, + definitions: { + ...COMMON_OPTIONS.definitions + } + } +}) +@Component({ + selector: 'jms-contact-form', + templateUrl: './contact-form.component.html', + styleUrls: ['./contact-form.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class ContactFormComponent {} diff --git a/client/projects/elements/.browserslistrc b/client/projects/submit-button/.browserslistrc similarity index 100% rename from client/projects/elements/.browserslistrc rename to client/projects/submit-button/.browserslistrc diff --git a/client/projects/submit-button/src/app/submit-button.component.ts b/client/projects/submit-button/src/app/submit-button.component.ts new file mode 100644 index 00000000..85214d69 --- /dev/null +++ b/client/projects/submit-button/src/app/submit-button.component.ts @@ -0,0 +1,51 @@ +import {Component, ElementRef, Input} from '@angular/core'; +import {of, from} from 'rxjs'; + +@Component({ + selector: 'jpe-submit-button', + template: ``, + styles: [``] +}) +export class SubmitButtonComponent { + constructor( + private el: ElementRef + ) {} + + @Input() label = 'Submit'; + + submit() { + return () => { + + const form = this.el.nativeElement.closest('form'); + + if (!form.reportValidity()) { + return of(true); + } + + const data = new FormData(form); + const typeMap = { + string: 'stringValue', + number: 'doubleValue' + }; + const fields = { + createdOn: { + integerValue: Date.now().toString() + } + }; + + data.forEach((value, key) => { + fields[key] = { + [typeMap[typeof value]]: value + }; + }); + + return from(fetch( + `https://firestore.googleapis.com/v1/projects/jaspero-jms/databases/(default)/documents/inquiries`, + { + method: 'POST', + body: JSON.stringify({fields}) + } + )); + }; + } +} diff --git a/client/projects/submit-button/src/app/submit-button.module.ts b/client/projects/submit-button/src/app/submit-button.module.ts new file mode 100644 index 00000000..aa271fd2 --- /dev/null +++ b/client/projects/submit-button/src/app/submit-button.module.ts @@ -0,0 +1,27 @@ +import {DoBootstrap, Injector, NgModule} from '@angular/core'; +import {createCustomElement} from '@angular/elements'; +import {BrowserModule} from '@angular/platform-browser'; +import {LoadClickModule} from '@jaspero/ng-helpers'; +import {SubmitButtonComponent} from './submit-button.component'; + +@NgModule({ + declarations: [ + SubmitButtonComponent + ], + imports: [ + BrowserModule, + LoadClickModule + ], + providers: [], + bootstrap: [SubmitButtonComponent] +}) +export class SubmitButtonModule implements DoBootstrap { + constructor( + private injector: Injector + ) {} + + ngDoBootstrap() { + const el = createCustomElement(SubmitButtonComponent, {injector: this.injector}); + customElements.define('jpe-submit-button', el); + } +} diff --git a/client/projects/submit-button/src/assets/.gitkeep b/client/projects/submit-button/src/assets/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/client/projects/elements/src/environments/environment.prod.ts b/client/projects/submit-button/src/environments/environment.prod.ts similarity index 100% rename from client/projects/elements/src/environments/environment.prod.ts rename to client/projects/submit-button/src/environments/environment.prod.ts diff --git a/client/projects/elements/src/environments/environment.ts b/client/projects/submit-button/src/environments/environment.ts similarity index 100% rename from client/projects/elements/src/environments/environment.ts rename to client/projects/submit-button/src/environments/environment.ts diff --git a/client/projects/elements/src/index.html b/client/projects/submit-button/src/index.html similarity index 61% rename from client/projects/elements/src/index.html rename to client/projects/submit-button/src/index.html index 8cde714a..a2052aea 100644 --- a/client/projects/elements/src/index.html +++ b/client/projects/submit-button/src/index.html @@ -2,12 +2,11 @@ - Elements + SubmitButton - - + diff --git a/client/projects/submit-button/src/main.ts b/client/projects/submit-button/src/main.ts new file mode 100644 index 00000000..1fd19034 --- /dev/null +++ b/client/projects/submit-button/src/main.ts @@ -0,0 +1,13 @@ +import {enableProdMode} from '@angular/core'; +import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; +import {SubmitButtonModule} from './app/submit-button.module'; +import {environment} from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(SubmitButtonModule, { + ngZone: 'noop' +}) + .catch(err => console.error(err)); diff --git a/client/projects/elements/src/styles.scss b/client/projects/submit-button/src/styles.css similarity index 100% rename from client/projects/elements/src/styles.scss rename to client/projects/submit-button/src/styles.css diff --git a/client/projects/elements/tsconfig.app.json b/client/projects/submit-button/tsconfig.app.json similarity index 85% rename from client/projects/elements/tsconfig.app.json rename to client/projects/submit-button/tsconfig.app.json index fd37f74d..e4e0762d 100644 --- a/client/projects/elements/tsconfig.app.json +++ b/client/projects/submit-button/tsconfig.app.json @@ -6,8 +6,7 @@ "types": [] }, "files": [ - "src/main.ts", - "src/polyfills.ts" + "src/main.ts" ], "include": [ "src/**/*.d.ts" diff --git a/firestore.rules b/firestore.rules index b3da45ed..5ef4b3e1 100644 --- a/firestore.rules +++ b/firestore.rules @@ -73,6 +73,11 @@ service cloud.firestore { allow write: if admin(); } + match /inquiries/{item} { + allow read: if admin(); + allow write: if true; + } + match /drive/{item=**} { allow read: if driveItemPublicRead() || driveItemPublicWrite() || driveItemRoleRead() || driveItemRoleWrite() || driveItemUserRead() || driveItemUserWrite(); allow write: if driveItemPublicWrite() || driveItemRoleWrite() || driveItemUserWrite(); diff --git a/web/package.json b/web/package.json index 8b1b3b28..8f428e90 100644 --- a/web/package.json +++ b/web/package.json @@ -11,7 +11,8 @@ "test": "playwright test", "check": "svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "eslint --ignore-path .gitignore ." + "lint": "eslint --ignore-path .gitignore .", + "copy:elements": "rm -rf static/elements && cp -r ../client/dist static/elements" }, "devDependencies": { "@playwright/test": "1.22.0", diff --git a/web/src/lib/Page.svelte b/web/src/lib/Page.svelte index 3d4d5329..b835608b 100644 --- a/web/src/lib/Page.svelte +++ b/web/src/lib/Page.svelte @@ -12,6 +12,10 @@ {@html page.content || ''} +{#each page.scripts as script} + +{/each} + {title} diff --git a/web/src/lib/consts/elements.const.ts b/web/src/lib/consts/elements.const.ts new file mode 100644 index 00000000..97e7d8e0 --- /dev/null +++ b/web/src/lib/consts/elements.const.ts @@ -0,0 +1,3 @@ +export const ELEMENTS = [ + {selector: 'jpe-submit-button', script: 'submit-button'} +]; \ No newline at end of file diff --git a/web/src/lib/firebase.ts b/web/src/lib/firebase.ts index 8e18b9c3..13b15c30 100644 --- a/web/src/lib/firebase.ts +++ b/web/src/lib/firebase.ts @@ -1,5 +1,6 @@ import admin from 'firebase-admin'; import {join} from 'path'; +import {ELEMENTS} from './consts/elements.const'; let environment: any; @@ -38,8 +39,31 @@ export async function getPage(id: string) { } const {blocks, meta, title, globalStyles} = page; + const scripts: string[] = []; - let content = blocks.reduce((acc: string, cur: any) => acc + cur.compiled || '', ''); + let content = blocks.reduce((acc: string, cur: any) => { + + const {compiled = ''} = cur; + + let hasPolyfills = false; + + ELEMENTS.forEach(element => { + if (compiled.includes(element.selector)) { + if (!hasPolyfills) { + + scripts.push( + `/elements/${element.script}/runtime.js` + ); + + hasPolyfills = true; + } + + scripts.push(`/elements/${element.script}/main.js`); + } + }) + + return acc + compiled; + }, ''); if (globalStyles) { content += ``; @@ -52,6 +76,7 @@ export async function getPage(id: string) { content, meta, title, + scripts } } } diff --git a/web/static/elements/submit-button/3rdpartylicenses.txt b/web/static/elements/submit-button/3rdpartylicenses.txt new file mode 100644 index 00000000..4de3ac0e --- /dev/null +++ b/web/static/elements/submit-button/3rdpartylicenses.txt @@ -0,0 +1,256 @@ +@angular/common +MIT + +@angular/core +MIT + +@angular/elements +MIT + +@angular/platform-browser +MIT + +@jaspero/ng-helpers +The MIT License (MIT) + +Copyright (c) 2019 Jaspero co. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +rxjs +Apache-2.0 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + +tslib +0BSD +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/web/static/elements/submit-button/index.html b/web/static/elements/submit-button/index.html new file mode 100644 index 00000000..116bb902 --- /dev/null +++ b/web/static/elements/submit-button/index.html @@ -0,0 +1,11 @@ + + + SubmitButton + + + + + + + + \ No newline at end of file diff --git a/web/static/elements/submit-button/main.js b/web/static/elements/submit-button/main.js new file mode 100644 index 00000000..defe1e9c --- /dev/null +++ b/web/static/elements/submit-button/main.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunksubmit_button=self.webpackChunksubmit_button||[]).push([[179],{998:()=>{function Y(e){return"function"==typeof e}function Lr(e){const n=e(r=>{Error.call(r),r.stack=(new Error).stack});return n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n}const jr=Lr(e=>function(n){e(this),this.message=n?`${n.length} errors occurred during unsubscription:\n${n.map((r,o)=>`${o+1}) ${r.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=n});function qn(e,t){if(e){const n=e.indexOf(t);0<=n&&e.splice(n,1)}}class nt{constructor(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let t;if(!this.closed){this.closed=!0;const{_parentage:n}=this;if(n)if(this._parentage=null,Array.isArray(n))for(const i of n)i.remove(this);else n.remove(this);const{initialTeardown:r}=this;if(Y(r))try{r()}catch(i){t=i instanceof jr?i.errors:[i]}const{_finalizers:o}=this;if(o){this._finalizers=null;for(const i of o)try{Vu(i)}catch(s){t=null!=t?t:[],s instanceof jr?t=[...t,...s.errors]:t.push(s)}}if(t)throw new jr(t)}}add(t){var n;if(t&&t!==this)if(this.closed)Vu(t);else{if(t instanceof nt){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=null!==(n=this._finalizers)&&void 0!==n?n:[]).push(t)}}_hasParent(t){const{_parentage:n}=this;return n===t||Array.isArray(n)&&n.includes(t)}_addParent(t){const{_parentage:n}=this;this._parentage=Array.isArray(n)?(n.push(t),n):n?[n,t]:t}_removeParent(t){const{_parentage:n}=this;n===t?this._parentage=null:Array.isArray(n)&&qn(n,t)}remove(t){const{_finalizers:n}=this;n&&qn(n,t),t instanceof nt&&t._removeParent(this)}}nt.EMPTY=(()=>{const e=new nt;return e.closed=!0,e})();const ju=nt.EMPTY;function Bu(e){return e instanceof nt||e&&"closed"in e&&Y(e.remove)&&Y(e.add)&&Y(e.unsubscribe)}function Vu(e){Y(e)?e():e.unsubscribe()}const jt={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},Br={setTimeout(e,t,...n){const{delegate:r}=Br;return(null==r?void 0:r.setTimeout)?r.setTimeout(e,t,...n):setTimeout(e,t,...n)},clearTimeout(e){const{delegate:t}=Br;return((null==t?void 0:t.clearTimeout)||clearTimeout)(e)},delegate:void 0};function Hu(e){Br.setTimeout(()=>{const{onUnhandledError:t}=jt;if(!t)throw e;t(e)})}function $u(){}const Ag=gi("C",void 0,void 0);function gi(e,t,n){return{kind:e,value:t,error:n}}let Bt=null;function Vr(e){if(jt.useDeprecatedSynchronousErrorHandling){const t=!Bt;if(t&&(Bt={errorThrown:!1,error:null}),e(),t){const{errorThrown:n,error:r}=Bt;if(Bt=null,n)throw r}}else e()}class mi extends nt{constructor(t){super(),this.isStopped=!1,t?(this.destination=t,Bu(t)&&t.add(this)):this.destination=kg}static create(t,n,r){return new Hr(t,n,r)}next(t){this.isStopped?Di(function xg(e){return gi("N",e,void 0)}(t),this):this._next(t)}error(t){this.isStopped?Di(function Fg(e){return gi("E",void 0,e)}(t),this):(this.isStopped=!0,this._error(t))}complete(){this.isStopped?Di(Ag,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(t){this.destination.next(t)}_error(t){try{this.destination.error(t)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const Ng=Function.prototype.bind;function yi(e,t){return Ng.call(e,t)}class Og{constructor(t){this.partialObserver=t}next(t){const{partialObserver:n}=this;if(n.next)try{n.next(t)}catch(r){$r(r)}}error(t){const{partialObserver:n}=this;if(n.error)try{n.error(t)}catch(r){$r(r)}else $r(t)}complete(){const{partialObserver:t}=this;if(t.complete)try{t.complete()}catch(n){$r(n)}}}class Hr extends mi{constructor(t,n,r){let o;if(super(),Y(t)||!t)o={next:null!=t?t:void 0,error:null!=n?n:void 0,complete:null!=r?r:void 0};else{let i;this&&jt.useDeprecatedNextContext?(i=Object.create(t),i.unsubscribe=()=>this.unsubscribe(),o={next:t.next&&yi(t.next,i),error:t.error&&yi(t.error,i),complete:t.complete&&yi(t.complete,i)}):o=t}this.destination=new Og(o)}}function $r(e){jt.useDeprecatedSynchronousErrorHandling?function Pg(e){jt.useDeprecatedSynchronousErrorHandling&&Bt&&(Bt.errorThrown=!0,Bt.error=e)}(e):Hu(e)}function Di(e,t){const{onStoppedNotification:n}=jt;n&&Br.setTimeout(()=>n(e,t))}const kg={closed:!0,next:$u,error:function Rg(e){throw e},complete:$u},vi="function"==typeof Symbol&&Symbol.observable||"@@observable";function Uu(e){return e}let we=(()=>{class e{constructor(n){n&&(this._subscribe=n)}lift(n){const r=new e;return r.source=this,r.operator=n,r}subscribe(n,r,o){const i=function jg(e){return e&&e instanceof mi||function Lg(e){return e&&Y(e.next)&&Y(e.error)&&Y(e.complete)}(e)&&Bu(e)}(n)?n:new Hr(n,r,o);return Vr(()=>{const{operator:s,source:a}=this;i.add(s?s.call(i,a):a?this._subscribe(i):this._trySubscribe(i))}),i}_trySubscribe(n){try{return this._subscribe(n)}catch(r){n.error(r)}}forEach(n,r){return new(r=zu(r))((o,i)=>{const s=new Hr({next:a=>{try{n(a)}catch(u){i(u),s.unsubscribe()}},error:i,complete:o});this.subscribe(s)})}_subscribe(n){var r;return null===(r=this.source)||void 0===r?void 0:r.subscribe(n)}[vi](){return this}pipe(...n){return function Gu(e){return 0===e.length?Uu:1===e.length?e[0]:function(n){return e.reduce((r,o)=>o(r),n)}}(n)(this)}toPromise(n){return new(n=zu(n))((r,o)=>{let i;this.subscribe(s=>i=s,s=>o(s),()=>r(i))})}}return e.create=t=>new e(t),e})();function zu(e){var t;return null!==(t=null!=e?e:jt.Promise)&&void 0!==t?t:Promise}const Bg=Lr(e=>function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});let Ur=(()=>{class e extends we{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(n){const r=new qu(this,this);return r.operator=n,r}_throwIfClosed(){if(this.closed)throw new Bg}next(n){Vr(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const r of this.currentObservers)r.next(n)}})}error(n){Vr(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=n;const{observers:r}=this;for(;r.length;)r.shift().error(n)}})}complete(){Vr(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:n}=this;for(;n.length;)n.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var n;return(null===(n=this.observers)||void 0===n?void 0:n.length)>0}_trySubscribe(n){return this._throwIfClosed(),super._trySubscribe(n)}_subscribe(n){return this._throwIfClosed(),this._checkFinalizedStatuses(n),this._innerSubscribe(n)}_innerSubscribe(n){const{hasError:r,isStopped:o,observers:i}=this;return r||o?ju:(this.currentObservers=null,i.push(n),new nt(()=>{this.currentObservers=null,qn(i,n)}))}_checkFinalizedStatuses(n){const{hasError:r,thrownError:o,isStopped:i}=this;r?n.error(o):i&&n.complete()}asObservable(){const n=new we;return n.source=this,n}}return e.create=(t,n)=>new qu(t,n),e})();class qu extends Ur{constructor(t,n){super(),this.destination=t,this.source=n}next(t){var n,r;null===(r=null===(n=this.destination)||void 0===n?void 0:n.next)||void 0===r||r.call(n,t)}error(t){var n,r;null===(r=null===(n=this.destination)||void 0===n?void 0:n.error)||void 0===r||r.call(n,t)}complete(){var t,n;null===(n=null===(t=this.destination)||void 0===t?void 0:t.complete)||void 0===n||n.call(t)}_subscribe(t){var n,r;return null!==(r=null===(n=this.source)||void 0===n?void 0:n.subscribe(t))&&void 0!==r?r:ju}}function bt(e){return t=>{if(function Vg(e){return Y(null==e?void 0:e.lift)}(t))return t.lift(function(n){try{return e(n,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}function Vt(e,t,n,r,o){return new Hg(e,t,n,r,o)}class Hg extends mi{constructor(t,n,r,o,i,s){super(t),this.onFinalize=i,this.shouldUnsubscribe=s,this._next=n?function(a){try{n(a)}catch(u){t.error(u)}}:super._next,this._error=o?function(a){try{o(a)}catch(u){t.error(u)}finally{this.unsubscribe()}}:super._error,this._complete=r?function(){try{r()}catch(a){t.error(a)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:n}=this;super.unsubscribe(),!n&&(null===(t=this.onFinalize)||void 0===t||t.call(this))}}}function Wu(e,t){return bt((n,r)=>{let o=0;n.subscribe(Vt(r,i=>{r.next(e.call(t,i,o++))}))})}function Ht(e){return this instanceof Ht?(this.v=e,this):new Ht(e)}function Gg(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,r=n.apply(e,t||[]),i=[];return o={},s("next"),s("throw"),s("return"),o[Symbol.asyncIterator]=function(){return this},o;function s(f){r[f]&&(o[f]=function(p){return new Promise(function(h,m){i.push([f,p,h,m])>1||a(f,p)})})}function a(f,p){try{!function u(f){f.value instanceof Ht?Promise.resolve(f.value.v).then(l,c):d(i[0][2],f)}(r[f](p))}catch(h){d(i[0][3],h)}}function l(f){a("next",f)}function c(f){a("throw",f)}function d(f,p){f(p),i.shift(),i.length&&a(i[0][0],i[0][1])}}function zg(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,t=e[Symbol.asyncIterator];return t?t.call(e):(e=function Ku(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(e),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(i){n[i]=e[i]&&function(s){return new Promise(function(a,u){!function o(i,s,a,u){Promise.resolve(u).then(function(l){i({value:l,done:a})},s)}(a,u,(s=e[i](s)).done,s.value)})}}}const Yu=e=>e&&"number"==typeof e.length&&"function"!=typeof e;function Ju(e){return Y(null==e?void 0:e.then)}function Xu(e){return Y(e[vi])}function el(e){return Symbol.asyncIterator&&Y(null==e?void 0:e[Symbol.asyncIterator])}function tl(e){return new TypeError(`You provided ${null!==e&&"object"==typeof e?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}const nl=function Wg(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}();function rl(e){return Y(null==e?void 0:e[nl])}function ol(e){return Gg(this,arguments,function*(){const n=e.getReader();try{for(;;){const{value:r,done:o}=yield Ht(n.read());if(o)return yield Ht(void 0);yield yield Ht(r)}}finally{n.releaseLock()}})}function il(e){return Y(null==e?void 0:e.getReader)}function $t(e){if(e instanceof we)return e;if(null!=e){if(Xu(e))return function Zg(e){return new we(t=>{const n=e[vi]();if(Y(n.subscribe))return n.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(e);if(Yu(e))return function Qg(e){return new we(t=>{for(let n=0;n{e.then(n=>{t.closed||(t.next(n),t.complete())},n=>t.error(n)).then(null,Hu)})}(e);if(el(e))return sl(e);if(rl(e))return function Yg(e){return new we(t=>{for(const n of e)if(t.next(n),t.closed)return;t.complete()})}(e);if(il(e))return function Jg(e){return sl(ol(e))}(e)}throw tl(e)}function sl(e){return new we(t=>{(function Xg(e,t){var n,r,o,i;return function $g(e,t,n,r){return new(n||(n=Promise))(function(i,s){function a(c){try{l(r.next(c))}catch(d){s(d)}}function u(c){try{l(r.throw(c))}catch(d){s(d)}}function l(c){c.done?i(c.value):function o(i){return i instanceof n?i:new n(function(s){s(i)})}(c.value).then(a,u)}l((r=r.apply(e,t||[])).next())})}(this,void 0,void 0,function*(){try{for(n=zg(e);!(r=yield n.next()).done;)if(t.next(r.value),t.closed)return}catch(s){o={error:s}}finally{try{r&&!r.done&&(i=n.return)&&(yield i.call(n))}finally{if(o)throw o.error}}t.complete()})})(e,t).catch(n=>t.error(n))})}function Mt(e,t,n,r=0,o=!1){const i=t.schedule(function(){n(),o?e.add(this.schedule(null,r)):this.unsubscribe()},r);if(e.add(i),!o)return i}function al(e,t,n=1/0){return Y(t)?al((r,o)=>Wu((i,s)=>t(r,i,o,s))($t(e(r,o))),n):("number"==typeof t&&(n=t),bt((r,o)=>function em(e,t,n,r,o,i,s,a){const u=[];let l=0,c=0,d=!1;const f=()=>{d&&!u.length&&!l&&t.complete()},p=m=>l{i&&t.next(m),l++;let D=!1;$t(n(m,c++)).subscribe(Vt(t,v=>{null==o||o(v),i?p(v):t.next(v)},()=>{D=!0},void 0,()=>{if(D)try{for(l--;u.length&&lh(v)):h(v)}f()}catch(v){t.error(v)}}))};return e.subscribe(Vt(t,p,()=>{d=!0,f()})),()=>{null==a||a()}}(r,o,e,n)))}const Ci=new we(e=>e.complete());function Ei(e){return e[e.length-1]}function ul(e){return function rm(e){return e&&Y(e.schedule)}(Ei(e))?e.pop():void 0}function ll(e,t=0){return bt((n,r)=>{n.subscribe(Vt(r,o=>Mt(r,e,()=>r.next(o),t),()=>Mt(r,e,()=>r.complete(),t),o=>Mt(r,e,()=>r.error(o),t)))})}function cl(e,t=0){return bt((n,r)=>{r.add(e.schedule(()=>n.subscribe(r),t))})}function dl(e,t){if(!e)throw new Error("Iterable cannot be null");return new we(n=>{Mt(n,t,()=>{const r=e[Symbol.asyncIterator]();Mt(n,t,()=>{r.next().then(o=>{o.done?n.complete():n.next(o.value)})},0,!0)})})}function Gr(e,t){return t?function cm(e,t){if(null!=e){if(Xu(e))return function im(e,t){return $t(e).pipe(cl(t),ll(t))}(e,t);if(Yu(e))return function am(e,t){return new we(n=>{let r=0;return t.schedule(function(){r===e.length?n.complete():(n.next(e[r++]),n.closed||this.schedule())})})}(e,t);if(Ju(e))return function sm(e,t){return $t(e).pipe(cl(t),ll(t))}(e,t);if(el(e))return dl(e,t);if(rl(e))return function um(e,t){return new we(n=>{let r;return Mt(n,t,()=>{r=e[nl](),Mt(n,t,()=>{let o,i;try{({value:o,done:i}=r.next())}catch(s){return void n.error(s)}i?n.complete():n.next(o)},0,!0)}),()=>Y(null==r?void 0:r.return)&&r.return()})}(e,t);if(il(e))return function lm(e,t){return dl(ol(e),t)}(e,t)}throw tl(e)}(e,t):$t(e)}function fl(...e){const t=ul(e),n=function om(e,t){return"number"==typeof Ei(e)?e.pop():t}(e,1/0),r=e;return r.length?1===r.length?$t(r[0]):function tm(e=1/0){return al(Uu,e)}(n)(Gr(r,t)):Ci}function wi(e,t,...n){return!0===t?(e(),null):!1===t?null:t(...n).pipe(function dm(e){return e<=0?()=>Ci:bt((t,n)=>{let r=0;t.subscribe(Vt(n,o=>{++r<=e&&(n.next(o),e<=r&&n.complete())}))})}(1)).subscribe(()=>e())}function U(e){for(let t in e)if(e[t]===U)return t;throw Error("Could not find renamed property on target object.")}function V(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(V).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const t=e.toString();if(null==t)return""+t;const n=t.indexOf("\n");return-1===n?t:t.substring(0,n)}function Mi(e,t){return null==e||""===e?null===t?"":t:null==t||""===t?e:e+" "+t}const pm=U({__forward_ref__:U});function Ii(e){return e.__forward_ref__=Ii,e.toString=function(){return V(this())},e}function A(e){return function pl(e){return"function"==typeof e&&e.hasOwnProperty(pm)&&e.__forward_ref__===Ii}(e)?e():e}class j extends Error{constructor(t,n){super(function Ti(e,t){return`NG0${Math.abs(e)}${t?": "+t:""}`}(t,n)),this.code=t}}function I(e){return"string"==typeof e?e:null==e?"":String(e)}function fe(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():I(e)}function zr(e,t){const n=t?` in ${t}`:"";throw new j(-201,`No provider for ${fe(e)} found${n}`)}function Se(e,t){null==e&&function W(e,t,n,r){throw new Error(`ASSERTION ERROR: ${e}`+(null==r?"":` [Expected=> ${n} ${r} ${t} <=Actual]`))}(t,e,null,"!=")}function Q(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Ut(e){return{providers:e.providers||[],imports:e.imports||[]}}function Si(e){return hl(e,qr)||hl(e,ml)}function hl(e,t){return e.hasOwnProperty(t)?e[t]:null}function gl(e){return e&&(e.hasOwnProperty(Ai)||e.hasOwnProperty(_m))?e[Ai]:null}const qr=U({\u0275prov:U}),Ai=U({\u0275inj:U}),ml=U({ngInjectableDef:U}),_m=U({ngInjectorDef:U});var S=(()=>((S=S||{})[S.Default=0]="Default",S[S.Host=1]="Host",S[S.Self=2]="Self",S[S.SkipSelf=4]="SkipSelf",S[S.Optional=8]="Optional",S))();let Fi;function It(e){const t=Fi;return Fi=e,t}function yl(e,t,n){const r=Si(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:n&S.Optional?null:void 0!==t?t:void zr(V(e),"Injector")}function Tt(e){return{toString:e}.toString()}var ze=(()=>((ze=ze||{})[ze.OnPush=0]="OnPush",ze[ze.Default=1]="Default",ze))(),rt=(()=>{return(e=rt||(rt={}))[e.Emulated=0]="Emulated",e[e.None=2]="None",e[e.ShadowDom=3]="ShadowDom",rt;var e})();const Em="undefined"!=typeof globalThis&&globalThis,wm="undefined"!=typeof window&&window,bm="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,H=Em||"undefined"!=typeof global&&global||wm||bm,tn={},G=[],Wr=U({\u0275cmp:U}),xi=U({\u0275dir:U}),Pi=U({\u0275pipe:U}),Dl=U({\u0275mod:U}),mt=U({\u0275fac:U}),Wn=U({__NG_ELEMENT_ID__:U});let Mm=0;function Ni(e){return Tt(()=>{const n={},r={type:e.type,providersResolver:null,decls:e.decls,vars:e.vars,factory:null,template:e.template||null,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:n,inputs:null,outputs:null,exportAs:e.exportAs||null,onPush:e.changeDetection===ze.OnPush,directiveDefs:null,pipeDefs:null,selectors:e.selectors||G,viewQuery:e.viewQuery||null,features:e.features||null,data:e.data||{},encapsulation:e.encapsulation||rt.Emulated,id:"c",styles:e.styles||G,_:null,setInput:null,schemas:e.schemas||null,tView:null},o=e.directives,i=e.features,s=e.pipes;return r.id+=Mm++,r.inputs=El(e.inputs,n),r.outputs=El(e.outputs),i&&i.forEach(a=>a(r)),r.directiveDefs=o?()=>("function"==typeof o?o():o).map(vl):null,r.pipeDefs=s?()=>("function"==typeof s?s():s).map(_l):null,r})}function vl(e){return pe(e)||function St(e){return e[xi]||null}(e)}function _l(e){return function Gt(e){return e[Pi]||null}(e)}const Cl={};function nn(e){return Tt(()=>{const t={type:e.type,bootstrap:e.bootstrap||G,declarations:e.declarations||G,imports:e.imports||G,exports:e.exports||G,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null};return null!=e.id&&(Cl[e.id]=e.type),t})}function El(e,t){if(null==e)return tn;const n={};for(const r in e)if(e.hasOwnProperty(r)){let o=e[r],i=o;Array.isArray(o)&&(i=o[1],o=o[0]),n[o]=r,t&&(t[o]=i)}return n}const Ae=Ni;function pe(e){return e[Wr]||null}function ke(e,t){const n=e[Dl]||null;if(!n&&!0===t)throw new Error(`Type ${V(e)} does not have '\u0275mod' property.`);return n}const F=11,z=20;function ot(e){return Array.isArray(e)&&"object"==typeof e[1]}function We(e){return Array.isArray(e)&&!0===e[1]}function ki(e){return 0!=(8&e.flags)}function Yr(e){return 2==(2&e.flags)}function Ze(e){return null!==e.template}function xm(e){return 0!=(512&e[2])}function Zt(e,t){return e.hasOwnProperty(mt)?e[mt]:null}class bl{constructor(t,n,r){this.previousValue=t,this.currentValue=n,this.firstChange=r}isFirstChange(){return this.firstChange}}function Ml(e){return e.type.prototype.ngOnChanges&&(e.setInput=Rm),Om}function Om(){const e=Tl(this),t=null==e?void 0:e.current;if(t){const n=e.previous;if(n===tn)e.previous=t;else for(let r in t)n[r]=t[r];e.current=null,this.ngOnChanges(t)}}function Rm(e,t,n,r){const o=Tl(e)||function km(e,t){return e[Il]=t}(e,{previous:tn,current:null}),i=o.current||(o.current={}),s=o.previous,a=this.declaredInputs[n],u=s[a];i[a]=new bl(u&&u.currentValue,t,s===tn),e[r]=t}const Il="__ngSimpleChanges__";function Tl(e){return e[Il]||null}let Hi;function J(e){return!!e.listen}const Sl={createRenderer:(e,t)=>function $i(){return void 0!==Hi?Hi:"undefined"!=typeof document?document:void 0}()};function re(e){for(;Array.isArray(e);)e=e[0];return e}function Be(e,t){return re(t[e.index])}function Ui(e,t){return e.data[t]}function xe(e,t){const n=t[e];return ot(n)?n:n[0]}function Gi(e){return 128==(128&e[2])}function At(e,t){return null==t?null:e[t]}function Fl(e){e[18]=0}function zi(e,t){e[5]+=t;let n=e,r=e[3];for(;null!==r&&(1===t&&1===n[5]||-1===t&&0===n[5]);)r[5]+=t,n=r,r=r[3]}const M={lFrame:jl(null),bindingsEnabled:!0,isInCheckNoChangesMode:!1};function xl(){return M.bindingsEnabled}function y(){return M.lFrame.lView}function k(){return M.lFrame.tView}function ae(){let e=Pl();for(;null!==e&&64===e.type;)e=e.parent;return e}function Pl(){return M.lFrame.currentTNode}function it(e,t){const n=M.lFrame;n.currentTNode=e,n.isParent=t}function qi(){return M.lFrame.isParent}function to(){return M.isInCheckNoChangesMode}function no(e){M.isInCheckNoChangesMode=e}function ln(){return M.lFrame.bindingIndex++}function ey(e,t){const n=M.lFrame;n.bindingIndex=n.bindingRootIndex=e,Zi(t)}function Zi(e){M.lFrame.currentDirectiveIndex=e}function Ki(e){M.lFrame.currentQueryIndex=e}function ny(e){const t=e[1];return 2===t.type?t.declTNode:1===t.type?e[6]:null}function kl(e,t,n){if(n&S.SkipSelf){let o=t,i=e;for(;!(o=o.parent,null!==o||n&S.Host||(o=ny(i),null===o||(i=i[15],10&o.type))););if(null===o)return!1;t=o,e=i}const r=M.lFrame=Ll();return r.currentTNode=t,r.lView=e,!0}function ro(e){const t=Ll(),n=e[1];M.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function Ll(){const e=M.lFrame,t=null===e?null:e.child;return null===t?jl(e):t}function jl(e){const t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=t),t}function Bl(){const e=M.lFrame;return M.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const Vl=Bl;function oo(){const e=Bl();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function De(){return M.lFrame.selectedIndex}function Ft(e){M.lFrame.selectedIndex=e}function io(e,t){for(let n=t.directiveStart,r=t.directiveEnd;n=r)break}else t[u]<0&&(e[18]+=65536),(a>11>16&&(3&e[2])===t){e[2]+=2048;try{i.call(a)}finally{}}}else try{i.call(a)}finally{}}class Jn{constructor(t,n,r){this.factory=t,this.resolving=!1,this.canSeeViewProviders=n,this.injectImpl=r}}function uo(e,t,n){const r=J(e);let o=0;for(;ot){s=i-1;break}}}for(;i>16}(e),r=t;for(;n>0;)r=r[15],n--;return r}let es=!0;function co(e){const t=es;return es=e,t}let yy=0;function er(e,t){const n=ns(e,t);if(-1!==n)return n;const r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,ts(r.data,e),ts(t,null),ts(r.blueprint,null));const o=fo(e,t),i=e.injectorIndex;if(function Gl(e){return-1!==e}(o)){const s=cn(o),a=dn(o,t),u=a[1].data;for(let l=0;l<8;l++)t[i+l]=a[s+l]|u[s+l]}return t[i+8]=o,i}function ts(e,t){e.push(0,0,0,0,0,0,0,0,t)}function ns(e,t){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===t[e.injectorIndex+8]?-1:e.injectorIndex}function fo(e,t){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let n=0,r=null,o=t;for(;null!==o;){const i=o[1],s=i.type;if(r=2===s?i.declTNode:1===s?o[6]:null,null===r)return-1;if(n++,o=o[15],-1!==r.injectorIndex)return r.injectorIndex|n<<16}return-1}function po(e,t,n){!function Dy(e,t,n){let r;"string"==typeof n?r=n.charCodeAt(0)||0:n.hasOwnProperty(Wn)&&(r=n[Wn]),null==r&&(r=n[Wn]=yy++);const o=255&r;t.data[e+(o>>5)]|=1<=0?255&t:_y:t}(n);if("function"==typeof i){if(!kl(t,e,r))return r&S.Host?Wl(o,n,r):Zl(t,n,r,o);try{const s=i(r);if(null!=s||r&S.Optional)return s;zr(n)}finally{Vl()}}else if("number"==typeof i){let s=null,a=ns(e,t),u=-1,l=r&S.Host?t[16][6]:null;for((-1===a||r&S.SkipSelf)&&(u=-1===a?fo(e,t):t[a+8],-1!==u&&Jl(r,!1)?(s=t[1],a=cn(u),t=dn(u,t)):a=-1);-1!==a;){const c=t[1];if(Yl(i,a,c.data)){const d=Cy(a,t,n,s,r,l);if(d!==Kl)return d}u=t[a+8],-1!==u&&Jl(r,t[1].data[a+8]===l)&&Yl(i,a,t)?(s=c,a=cn(u),t=dn(u,t)):a=-1}}}return Zl(t,n,r,o)}const Kl={};function _y(){return new fn(ae(),y())}function Cy(e,t,n,r,o,i){const s=t[1],a=s.data[e+8],c=function ho(e,t,n,r,o){const i=e.providerIndexes,s=t.data,a=1048575&i,u=e.directiveStart,c=i>>20,f=o?a+c:e.directiveEnd;for(let p=r?a:a+c;p=u&&h.type===n)return p}if(o){const p=s[u];if(p&&Ze(p)&&p.type===n)return u}return null}(a,s,n,null==r?Yr(a)&&es:r!=s&&0!=(3&a.type),o&S.Host&&i===a);return null!==c?tr(t,s,c,a):Kl}function tr(e,t,n,r){let o=e[n];const i=t.data;if(function fy(e){return e instanceof Jn}(o)){const s=o;s.resolving&&function hm(e,t){const n=t?`. Dependency path: ${t.join(" > ")} > ${e}`:"";throw new j(-200,`Circular dependency in DI detected for ${e}${n}`)}(fe(i[n]));const a=co(s.canSeeViewProviders);s.resolving=!0;const u=s.injectImpl?It(s.injectImpl):null;kl(e,r,S.Default);try{o=e[n]=s.factory(void 0,i,e,r),t.firstCreatePass&&n>=r.directiveStart&&function cy(e,t,n){const{ngOnChanges:r,ngOnInit:o,ngDoCheck:i}=t.type.prototype;if(r){const s=Ml(t);(n.preOrderHooks||(n.preOrderHooks=[])).push(e,s),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,s)}o&&(n.preOrderHooks||(n.preOrderHooks=[])).push(0-e,o),i&&((n.preOrderHooks||(n.preOrderHooks=[])).push(e,i),(n.preOrderCheckHooks||(n.preOrderCheckHooks=[])).push(e,i))}(n,i[n],t)}finally{null!==u&&It(u),co(a),s.resolving=!1,Vl()}}return o}function Yl(e,t,n){return!!(n[t+(e>>5)]&1<Array.isArray(n)?st(n,t):t(n))}function go(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}const ir={},yo="ngTempTokenPath",Oy=/\n/gm,ic="__source",ky=U({provide:String,useValue:U});let sr;function sc(e){const t=sr;return sr=e,t}function Ly(e,t=S.Default){if(void 0===sr)throw new j(203,"");return null===sr?yl(e,void 0,t):sr.get(e,t&S.Optional?null:void 0,t)}function $(e,t=S.Default){return(function Cm(){return Fi}()||Ly)(A(e),t)}const jy=$;function cs(e){const t=[];for(let n=0;n("undefined"!=typeof requestAnimationFrame&&requestAnimationFrame||setTimeout).bind(H))();function ut(e){return e instanceof Function?e():e}var Ne=(()=>((Ne=Ne||{})[Ne.Important=1]="Important",Ne[Ne.DashCase=2]="DashCase",Ne))();function bs(e,t){return undefined(e,t)}function hr(e){const t=e[3];return We(t)?t[3]:t}function Ms(e){return Rc(e[13])}function Is(e){return Rc(e[4])}function Rc(e){for(;null!==e&&!We(e);)e=e[4];return e}function Cn(e,t,n,r,o){if(null!=r){let i,s=!1;We(r)?i=r:ot(r)&&(s=!0,r=r[0]);const a=re(r);0===e&&null!==n?null==o?Hc(t,n,a):Qt(t,n,a,o||null,!0):1===e&&null!==n?Qt(t,n,a,o||null,!0):2===e?function Zc(e,t,n){const r=function Mo(e,t){return J(e)?e.parentNode(t):t.parentNode}(e,t);r&&function tv(e,t,n,r){J(e)?e.removeChild(t,n,r):t.removeChild(n)}(e,r,t,n)}(t,a,s):3===e&&t.destroyNode(a),null!=i&&function ov(e,t,n,r,o){const i=n[7];i!==re(n)&&Cn(t,e,r,i,o);for(let a=10;a=0?r[o=l]():r[o=-l].unsubscribe(),i+=2}else{const s=r[o=n[i+1]];n[i].call(s)}if(null!==r){for(let i=o+1;ii?"":o[d+1].toLowerCase();const p=8&r?f:null;if(p&&-1!==Yc(p,l,0)||2&r&&l!==f){if(Qe(r))return!1;s=!0}}}}else{if(!s&&!Qe(r)&&!Qe(u))return!1;if(s&&Qe(u))continue;s=!1,r=u|1&r}}return Qe(r)||s}function Qe(e){return 0==(1&e)}function lv(e,t,n,r){if(null===t)return-1;let o=0;if(r||!n){let i=!1;for(;o-1)for(n++;n0?'="'+a+'"':"")+"]"}else 8&r?o+="."+s:4&r&&(o+=" "+s);else""!==o&&!Qe(s)&&(t+=td(i,o),o=""),r=s,i=i||!Qe(r);n++}return""!==o&&(t+=td(i,o)),t}const T={};function rd(e,t,n,r){if(!r)if(3==(3&t[2])){const i=e.preOrderCheckHooks;null!==i&&so(t,i,n)}else{const i=e.preOrderHooks;null!==i&&ao(t,i,0,n)}Ft(n)}function hd(e,t){const n=e.contentQueries;if(null!==n)for(let r=0;rz&&rd(e,t,z,to()),n(r,o)}finally{Ft(i)}}function yd(e){const t=e.tView;return null===t||t.incompleteFirstPass?e.tView=xo(1,null,e.template,e.decls,e.vars,e.directiveDefs,e.pipeDefs,e.viewQuery,e.schemas,e.consts):t}function xo(e,t,n,r,o,i,s,a,u,l){const c=z+r,d=c+o,f=function xv(e,t){const n=[];for(let r=0;r0;){const n=e[--t];if("number"==typeof n&&n<0)return n}return 0})(a)!=u&&a.push(u),a.push(r,o,s)}}function bd(e,t){null!==e.hostBindings&&e.hostBindings(1,t)}function Md(e,t){t.flags|=2,(e.components||(e.components=[])).push(t.index)}function Uv(e,t,n){if(n){if(t.exportAs)for(let r=0;r0&&Ys(n)}}function Ys(e){for(let r=Ms(e);null!==r;r=Is(r))for(let o=10;o0&&Ys(i)}const n=e[1].components;if(null!==n)for(let r=0;r0&&Ys(o)}}function Kv(e,t){const n=xe(t,e),r=n[1];(function Yv(e,t){for(let n=t.length;nPromise.resolve(null))();function Od(e,t,n,r,o){for(let i=0;ithis.processProvider(a,t,n)),st([t],a=>this.processInjectorType(a,[],i)),this.records.set(na,Mn(void 0,this));const s=this.records.get(ra);this.scope=null!=s?s.value:null,this.source=o||("object"==typeof t?null:V(t))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{this.onDestroy.forEach(t=>t.ngOnDestroy())}finally{this.records.clear(),this.onDestroy.clear(),this.injectorDefTypes.clear()}}get(t,n=ir,r=S.Default){this.assertNotDestroyed();const o=sc(this),i=It(void 0);try{if(!(r&S.SkipSelf)){let a=this.records.get(t);if(void 0===a){const u=function p_(e){return"function"==typeof e||"object"==typeof e&&e instanceof B}(t)&&Si(t);a=u&&this.injectableDefInScope(u)?Mn(ia(t),Dr):null,this.records.set(t,a)}if(null!=a)return this.hydrate(t,a)}return(r&S.Self?kd():this.parent).get(t,n=r&S.Optional&&n===ir?null:n)}catch(s){if("NullInjectorError"===s.name){if((s[yo]=s[yo]||[]).unshift(V(t)),o)throw s;return function Vy(e,t,n,r){const o=e[yo];throw t[ic]&&o.unshift(t[ic]),e.message=function Hy(e,t,n,r=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.substr(2):e;let o=V(t);if(Array.isArray(t))o=t.map(V).join(" -> ");else if("object"==typeof t){let i=[];for(let s in t)if(t.hasOwnProperty(s)){let a=t[s];i.push(s+":"+("string"==typeof a?JSON.stringify(a):V(a)))}o=`{${i.join(", ")}}`}return`${n}${r?"("+r+")":""}[${o}]: ${e.replace(Oy,"\n ")}`}("\n"+e.message,o,n,r),e.ngTokenPath=o,e[yo]=null,e}(s,t,"R3InjectorError",this.source)}throw s}finally{It(i),sc(o)}}_resolveInjectorDefTypes(){this.injectorDefTypes.forEach(t=>this.get(t))}toString(){const t=[];return this.records.forEach((r,o)=>t.push(V(o))),`R3Injector[${t.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new j(205,!1)}processInjectorType(t,n,r){if(!(t=A(t)))return!1;let o=gl(t);const i=null==o&&t.ngModule||void 0,s=void 0===i?t:i,a=-1!==r.indexOf(s);if(void 0!==i&&(o=gl(i)),null==o)return!1;if(null!=o.imports&&!a){let c;r.push(s);try{st(o.imports,d=>{this.processInjectorType(d,n,r)&&(void 0===c&&(c=[]),c.push(d))})}finally{}if(void 0!==c)for(let d=0;dthis.processProvider(h,f,p||G))}}this.injectorDefTypes.add(s);const u=Zt(s)||(()=>new s);this.records.set(s,Mn(u,Dr));const l=o.providers;if(null!=l&&!a){const c=t;st(l,d=>this.processProvider(d,c,l))}return void 0!==i&&void 0!==t.providers}processProvider(t,n,r){let o=In(t=A(t))?t:A(t&&t.provide);const i=function a_(e,t,n){return Vd(e)?Mn(void 0,e.useValue):Mn(function Bd(e,t,n){let r;if(In(e)){const o=A(e);return Zt(o)||ia(o)}if(Vd(e))r=()=>A(e.useValue);else if(function l_(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...cs(e.deps||[]));else if(function u_(e){return!(!e||!e.useExisting)}(e))r=()=>$(A(e.useExisting));else{const o=A(e&&(e.useClass||e.provide));if(!function d_(e){return!!e.deps}(e))return Zt(o)||ia(o);r=()=>new o(...cs(e.deps))}return r}(e),Dr)}(t);if(In(t)||!0!==t.multi)this.records.get(o);else{let s=this.records.get(o);s||(s=Mn(void 0,Dr,!0),s.factory=()=>cs(s.multi),this.records.set(o,s)),o=t,s.multi.push(t)}this.records.set(o,i)}hydrate(t,n){return n.value===Dr&&(n.value=o_,n.value=n.factory()),"object"==typeof n.value&&n.value&&function f_(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(n.value)&&this.onDestroy.add(n.value),n.value}injectableDefInScope(t){if(!t.providedIn)return!1;const n=A(t.providedIn);return"string"==typeof n?"any"===n||n===this.scope:this.injectorDefTypes.has(n)}}function ia(e){const t=Si(e),n=null!==t?t.factory:Zt(e);if(null!==n)return n;if(e instanceof B)throw new j(204,!1);if(e instanceof Function)return function s_(e){const t=e.length;if(t>0)throw function or(e,t){const n=[];for(let r=0;rn.factory(e):()=>new e}(e);throw new j(204,!1)}function Mn(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function Vd(e){return null!==e&&"object"==typeof e&&ky in e}function In(e){return"function"==typeof e}let He=(()=>{class e{static create(n,r){var o;if(Array.isArray(n))return Ld({name:""},r,n,"");{const i=null!==(o=n.name)&&void 0!==o?o:"";return Ld({name:i},n.parent,n.providers,i)}}}return e.THROW_IF_NOT_FOUND=ir,e.NULL=new Rd,e.\u0275prov=Q({token:e,providedIn:"any",factory:()=>$(na)}),e.__NG_ELEMENT_ID__=-1,e})();function C_(e,t){io(_s(e)[1],ae())}function me(e,t,n){return!Object.is(e[t],n)&&(e[t]=n,!0)}function x(e,t=S.Default){const n=y();return null===n?$(e,t):Ql(ae(),n,A(e),t)}function ha(e,t,n){const r=y();return me(r,ln(),t)&&function Oe(e,t,n,r,o,i,s,a){const u=Be(t,n);let c,l=t.inputs;!a&&null!=l&&(c=l[r])?(Od(e,n,c,r,o),Yr(t)&&function Rv(e,t){const n=xe(t,e);16&n[2]||(n[2]|=64)}(n,t.index)):3&t.type&&(r=function Ov(e){return"class"===e?"className":"for"===e?"htmlFor":"formaction"===e?"formAction":"innerHtml"===e?"innerHTML":"readonly"===e?"readOnly":"tabindex"===e?"tabIndex":e}(r),o=null!=s?s(o,t.value||"",r):o,J(i)?i.setProperty(u,r,o):Xi(r)||(u.setProperty?u.setProperty(r,o):u[r]=o))}(k(),function X(){const e=M.lFrame;return Ui(e.tView,e.selectedIndex)}(),r,e,t,r[F],n,!1),ha}function ga(e,t,n,r,o){const s=o?"class":"style";Od(e,n,t.inputs[s],s,r)}function Lo(e,t,n,r){const o=y(),i=k(),s=z+e,a=o[F],u=o[s]=Ss(a,t,function ly(){return M.lFrame.currentNamespace}()),l=i.firstCreatePass?function nC(e,t,n,r,o,i,s){const a=t.consts,l=En(t,e,2,o,At(a,i));return function Qs(e,t,n,r){let o=!1;if(xl()){const i=function Hv(e,t,n){const r=e.directiveRegistry;let o=null;if(r)for(let i=0;i{class e{}return e.NULL=new YE,e})();function JE(){return $n(ae(),y())}function $n(e,t){return new Rt(Be(e,t))}let Rt=(()=>{class e{constructor(n){this.nativeElement=n}}return e.__NG_ELEMENT_ID__=JE,e})();class Wp{}let Fa=(()=>{class e{}return e.__NG_ELEMENT_ID__=()=>function tw(){const e=y(),n=xe(ae().index,e);return function ew(e){return e[F]}(ot(n)?n:e)}(),e})(),nw=(()=>{class e{}return e.\u0275prov=Q({token:e,providedIn:"root",factory:()=>null}),e})();class zo{constructor(t){this.full=t,this.major=t.split(".")[0],this.minor=t.split(".")[1],this.patch=t.split(".").slice(2).join(".")}}const rw=new zo("13.3.4"),xa={};function qo(e,t,n,r,o=!1){for(;null!==n;){const i=t[n.index];if(null!==i&&r.push(re(i)),We(i))for(let a=10;a-1&&(function As(e,t){if(e.length<=10)return;const n=10+t,r=e[n];if(r){const o=r[17];null!==o&&o!==e&&Lc(o,r),t>0&&(e[n-1][4]=r[4]);const i=go(e,10+t);!function WD(e,t){gr(e,t,t[F],2,null,null),t[0]=null,t[6]=null}(r[1],r);const s=i[19];null!==s&&s.detachView(i[1]),r[3]=null,r[4]=null,r[2]&=-129}return r}(t,r),go(n,r))}this._attachedToViewContainer=!1}!function jc(e,t){if(!(256&t[2])){const n=t[F];J(n)&&n.destroyNode&&gr(e,t,n,3,null,null),function KD(e){let t=e[13];if(!t)return Fs(e[1],e);for(;t;){let n=null;if(ot(t))n=t[13];else{const r=t[10];r&&(n=r)}if(!n){for(;t&&!t[4]&&t!==e;)ot(t)&&Fs(t[1],t),t=t[3];null===t&&(t=e),ot(t)&&Fs(t[1],t),n=t&&t[4]}t=n}}(t)}}(this._lView[1],this._lView)}onDestroy(t){!function _d(e,t,n,r){const o=function Fd(e){return e[7]||(e[7]=[])}(t);null===n?o.push(r):(o.push(n),e.firstCreatePass&&function xd(e){return e.cleanup||(e.cleanup=[])}(e).push(r,o.length-1))}(this._lView[1],this._lView,null,t)}markForCheck(){!function Js(e){for(;e;){e[2]|=64;const t=hr(e);if(xm(e)&&!t)return e;e=t}return null}(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-129}reattach(){this._lView[2]|=128}detectChanges(){ea(this._lView[1],this._lView,this.context)}checkNoChanges(){!function Xv(e,t,n){no(!0);try{ea(e,t,n)}finally{no(!1)}}(this._lView[1],this._lView,this.context)}attachToViewContainerRef(){if(this._appRef)throw new j(902,"");this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function QD(e,t){gr(e,t,t[F],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(t){if(this._attachedToViewContainer)throw new j(902,"");this._appRef=t}}class ow extends Ir{constructor(t){super(t),this._view=t}detectChanges(){Ad(this._view)}checkNoChanges(){!function e_(e){no(!0);try{Ad(e)}finally{no(!1)}}(this._view)}get context(){return null}}class Zp extends Hn{constructor(t){super(),this.ngModule=t}resolveComponentFactory(t){const n=pe(t);return new Pa(n,this.ngModule)}}function Qp(e){const t=[];for(let n in e)e.hasOwnProperty(n)&&t.push({propName:e[n],templateName:n});return t}class Pa extends zp{constructor(t,n){super(),this.componentDef=t,this.ngModule=n,this.componentType=t.type,this.selector=function gv(e){return e.map(hv).join(",")}(t.selectors),this.ngContentSelectors=t.ngContentSelectors?t.ngContentSelectors:[],this.isBoundToModule=!!n}get inputs(){return Qp(this.componentDef.inputs)}get outputs(){return Qp(this.componentDef.outputs)}create(t,n,r,o){const i=(o=o||this.ngModule)?function sw(e,t){return{get:(n,r,o)=>{const i=e.get(n,xa,o);return i!==xa||r===xa?i:t.get(n,r,o)}}}(t,o.injector):t,s=i.get(Wp,Sl),a=i.get(nw,null),u=s.createRenderer(null,this.componentDef),l=this.componentDef.selectors[0][0]||"div",c=r?function vd(e,t,n){if(J(e))return e.selectRootElement(t,n===rt.ShadowDom);let r="string"==typeof t?e.querySelector(t):t;return r.textContent="",r}(u,r,this.componentDef.encapsulation):Ss(s.createRenderer(null,this.componentDef),l,function iw(e){const t=e.toLowerCase();return"svg"===t?"svg":"math"===t?"math":null}(l)),d=this.componentDef.onPush?576:528,f=function Yd(e,t){return{components:[],scheduler:e||HD,clean:t_,playerHandler:t||null,flags:0}}(),p=xo(0,null,null,1,0,null,null,null,null,null),h=mr(null,p,f,d,null,null,s,u,a,i);let m,D;ro(h);try{const v=function Qd(e,t,n,r,o,i){const s=n[1];n[20]=e;const u=En(s,20,2,"#host",null),l=u.mergedAttrs=t.hostAttrs;null!==l&&(No(u,l,!0),null!==e&&(uo(o,e,l),null!==u.classes&&Os(o,e,u.classes),null!==u.styles&&Kc(o,e,u.styles)));const c=r.createRenderer(e,t),d=mr(n,yd(t),null,t.onPush?64:16,n[20],u,r,c,i||null,null);return s.firstCreatePass&&(po(er(u,n),s,t.type),Md(s,u),Id(u,n.length,1)),Po(n,d),n[20]=d}(c,this.componentDef,h,s,u);if(c)if(r)uo(u,c,["ng-version",rw.full]);else{const{attrs:g,classes:E}=function mv(e){const t=[],n=[];let r=1,o=2;for(;r0&&Os(u,c,E.join(" "))}if(D=Ui(p,z),void 0!==n){const g=D.projection=[];for(let E=0;Eu(s,t)),t.contentQueries){const u=ae();t.contentQueries(1,s,u.directiveStart)}const a=ae();return!i.firstCreatePass||null===t.hostBindings&&null===t.hostAttrs||(Ft(a.index),wd(n[1],a,0,a.directiveStart,a.directiveEnd,t),bd(t,s)),s}(v,this.componentDef,h,f,[C_]),yr(p,h,null)}finally{oo()}return new uw(this.componentType,m,$n(D,h),h,D)}}class uw extends class QE{}{constructor(t,n,r,o,i){super(),this.location=r,this._rootLView=o,this._tNode=i,this.instance=n,this.hostView=this.changeDetectorRef=new ow(o),this.componentType=t}get injector(){return new fn(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(t){this.hostView.onDestroy(t)}}class Un{}const Gn=new Map;class Jp extends Un{constructor(t,n){super(),this._parent=n,this._bootstrapComponents=[],this.injector=this,this.destroyCbs=[],this.componentFactoryResolver=new Zp(this);const r=ke(t);this._bootstrapComponents=ut(r.bootstrap),this._r3Injector=jd(t,n,[{provide:Un,useValue:this},{provide:Hn,useValue:this.componentFactoryResolver}],V(t)),this._r3Injector._resolveInjectorDefTypes(),this.instance=this.get(t)}get(t,n=He.THROW_IF_NOT_FOUND,r=S.Default){return t===He||t===Un||t===na?this:this._r3Injector.get(t,n,r)}destroy(){const t=this._r3Injector;!t.destroyed&&t.destroy(),this.destroyCbs.forEach(n=>n()),this.destroyCbs=null}onDestroy(t){this.destroyCbs.push(t)}}class Na extends class cw{}{constructor(t){super(),this.moduleType=t,null!==ke(t)&&function dw(e){const t=new Set;!function n(r){const o=ke(r,!0),i=o.id;null!==i&&(function Kp(e,t,n){if(t&&t!==n)throw new Error(`Duplicate module registered for ${e} - ${V(t)} vs ${V(t.name)}`)}(i,Gn.get(i),r),Gn.set(i,r));const s=ut(o.imports);for(const a of s)t.has(a)||(t.add(a),n(a))}(e)}(t)}create(t){return new Jp(this.moduleType,t)}}function Oa(e){return t=>{setTimeout(e,void 0,t)}}const Ct=class Aw extends Ur{constructor(t=!1){super(),this.__isAsync=t}emit(t){super.next(t)}subscribe(t,n,r){var o,i,s;let a=t,u=n||(()=>null),l=r;if(t&&"object"==typeof t){const d=t;a=null===(o=d.next)||void 0===o?void 0:o.bind(d),u=null===(i=d.error)||void 0===i?void 0:i.bind(d),l=null===(s=d.complete)||void 0===s?void 0:s.bind(d)}this.__isAsync&&(u=Oa(u),a&&(a=Oa(a)),l&&(l=Oa(l)));const c=super.subscribe({next:a,error:u,complete:l});return t instanceof nt&&t.add(c),c}};function Ko(...e){}Symbol;const Sh=new B("Application Initializer");let Wa=(()=>{class e{constructor(n){this.appInits=n,this.resolve=Ko,this.reject=Ko,this.initialized=!1,this.done=!1,this.donePromise=new Promise((r,o)=>{this.resolve=r,this.reject=o})}runInitializers(){if(this.initialized)return;const n=[],r=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let o=0;o{i.subscribe({complete:a,error:u})});n.push(s)}}Promise.all(n).then(()=>{r()}).catch(o=>{this.reject(o)}),0===n.length&&r(),this.initialized=!0}}return e.\u0275fac=function(n){return new(n||e)($(Sh,8))},e.\u0275prov=Q({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();const Fr=new B("AppId",{providedIn:"root",factory:function Ah(){return`${Za()}${Za()}${Za()}`}});function Za(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const Fh=new B("Platform Initializer"),xh=new B("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),f0=new B("appBootstrapListener"),kt=new B("LocaleId",{providedIn:"root",factory:()=>jy(kt,S.Optional|S.SkipSelf)||function p0(){return"undefined"!=typeof $localize&&$localize.locale||Vo}()}),y0=(()=>Promise.resolve(0))();function Qa(e){"undefined"==typeof Zone?y0.then(()=>{e&&e.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",e)}class Ee{constructor({enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new Ct(!1),this.onMicrotaskEmpty=new Ct(!1),this.onStable=new Ct(!1),this.onError=new Ct(!1),"undefined"==typeof Zone)throw new Error("In this configuration Angular requires Zone.js");Zone.assertZonePatched();const o=this;o._nesting=0,o._outer=o._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(o._inner=o._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(o._inner=o._inner.fork(Zone.longStackTraceZoneSpec)),o.shouldCoalesceEventChangeDetection=!r&&n,o.shouldCoalesceRunChangeDetection=r,o.lastRequestAnimationFrameId=-1,o.nativeRequestAnimationFrame=function D0(){let e=H.requestAnimationFrame,t=H.cancelAnimationFrame;if("undefined"!=typeof Zone&&e&&t){const n=e[Zone.__symbol__("OriginalDelegate")];n&&(e=n);const r=t[Zone.__symbol__("OriginalDelegate")];r&&(t=r)}return{nativeRequestAnimationFrame:e,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function C0(e){const t=()=>{!function _0(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(H,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,Ya(e),e.isCheckStableRunning=!0,Ka(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),Ya(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(n,r,o,i,s,a)=>{try{return Ph(e),n.invokeTask(o,i,s,a)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===i.type||e.shouldCoalesceRunChangeDetection)&&t(),Nh(e)}},onInvoke:(n,r,o,i,s,a,u)=>{try{return Ph(e),n.invoke(o,i,s,a,u)}finally{e.shouldCoalesceRunChangeDetection&&t(),Nh(e)}},onHasTask:(n,r,o,i)=>{n.hasTask(o,i),r===o&&("microTask"==i.change?(e._hasPendingMicrotasks=i.microTask,Ya(e),Ka(e)):"macroTask"==i.change&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(n,r,o,i)=>(n.handleError(o,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}(o)}static isInAngularZone(){return"undefined"!=typeof Zone&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!Ee.isInAngularZone())throw new Error("Expected to be in Angular Zone, but it is not!")}static assertNotInAngularZone(){if(Ee.isInAngularZone())throw new Error("Expected to not be in Angular Zone, but it is!")}run(t,n,r){return this._inner.run(t,n,r)}runTask(t,n,r,o){const i=this._inner,s=i.scheduleEventTask("NgZoneEvent: "+o,t,v0,Ko,Ko);try{return i.runTask(s,n,r)}finally{i.cancelTask(s)}}runGuarded(t,n,r){return this._inner.runGuarded(t,n,r)}runOutsideAngular(t){return this._outer.run(t)}}const v0={};function Ka(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function Ya(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function Ph(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Nh(e){e._nesting--,Ka(e)}class E0{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new Ct,this.onMicrotaskEmpty=new Ct,this.onStable=new Ct,this.onError=new Ct}run(t,n,r){return t.apply(n,r)}runGuarded(t,n,r){return t.apply(n,r)}runOutsideAngular(t){return t()}runTask(t,n,r,o){return t.apply(n,r)}}let Ja=(()=>{class e{constructor(n){this._ngZone=n,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,this._watchAngularEvents(),n.run(()=>{this.taskTrackingZone="undefined"==typeof Zone?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{Ee.assertNotInAngularZone(),Qa(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())Qa(()=>{for(;0!==this._callbacks.length;){let n=this._callbacks.pop();clearTimeout(n.timeoutId),n.doneCb(this._didWork)}this._didWork=!1});else{let n=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(n)||(clearTimeout(r.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(n=>({source:n.source,creationLocation:n.creationLocation,data:n.data})):[]}addCallback(n,r,o){let i=-1;r&&r>0&&(i=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==i),n(this._didWork,this.getPendingTasks())},r)),this._callbacks.push({doneCb:n,timeoutId:i,updateCb:o})}whenStable(n,r,o){if(o&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(n,r,o),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}findProviders(n,r,o){return[]}}return e.\u0275fac=function(n){return new(n||e)($(Ee))},e.\u0275prov=Q({token:e,factory:e.\u0275fac}),e})(),w0=(()=>{class e{constructor(){this._applications=new Map,Xa.addToWindow(this)}registerApplication(n,r){this._applications.set(n,r)}unregisterApplication(n){this._applications.delete(n)}unregisterAllApplications(){this._applications.clear()}getTestability(n){return this._applications.get(n)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(n,r=!0){return Xa.findTestabilityInTree(this,n,r)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=Q({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();class b0{addToWindow(t){}findTestabilityInTree(t,n,r){return null}}let Xa=new b0,Jt=null;const Oh=new B("AllowMultipleToken"),Rh=new B("PlatformOnDestroy");function kh(e,t,n=[]){const r=`Platform: ${t}`,o=new B(r);return(i=[])=>{let s=eu();if(!s||s.injector.get(Oh,!1)){const a=[...n,...i,{provide:o,useValue:!0}];e?e(a):function S0(e){if(Jt&&!Jt.get(Oh,!1))throw new j(400,"");Jt=e;const t=e.get(Lh),n=e.get(Fh,null);n&&n.forEach(r=>r())}(function F0(e=[],t){return He.create({name:t,providers:[{provide:ra,useValue:"platform"},{provide:Rh,useValue:()=>Jt=null},...e]})}(a,r))}return function A0(e){const t=eu();if(!t)throw new j(401,"");return t}()}}function eu(){var e;return null!==(e=null==Jt?void 0:Jt.get(Lh))&&void 0!==e?e:null}let Lh=(()=>{class e{constructor(n){this._injector=n,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(n,r){const a=function x0(e,t){let n;return n="noop"===e?new E0:("zone.js"===e?void 0:e)||new Ee({enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!!(null==t?void 0:t.ngZoneEventCoalescing),shouldCoalesceRunChangeDetection:!!(null==t?void 0:t.ngZoneRunCoalescing)}),n}(r?r.ngZone:void 0,{ngZoneEventCoalescing:r&&r.ngZoneEventCoalescing||!1,ngZoneRunCoalescing:r&&r.ngZoneRunCoalescing||!1}),u=[{provide:Ee,useValue:a}];return a.run(()=>{const l=He.create({providers:u,parent:this.injector,name:n.moduleType.name}),c=n.create(l),d=c.injector.get(pr,null);if(!d)throw new j(402,"");return a.runOutsideAngular(()=>{const f=a.onError.subscribe({next:p=>{d.handleError(p)}});c.onDestroy(()=>{nu(this._modules,c),f.unsubscribe()})}),function P0(e,t,n){try{const r=n();return Da(r)?r.catch(o=>{throw t.runOutsideAngular(()=>e.handleError(o)),o}):r}catch(r){throw t.runOutsideAngular(()=>e.handleError(r)),r}}(d,a,()=>{const f=c.injector.get(Wa);return f.runInitializers(),f.donePromise.then(()=>(function XC(e){Se(e,"Expected localeId to be defined"),"string"==typeof e&&(_p=e.toLowerCase().replace(/_/g,"-"))}(c.injector.get(kt,Vo)||Vo),this._moduleDoBootstrap(c),c))})})}bootstrapModule(n,r=[]){const o=jh({},r);return function I0(e,t,n){const r=new Na(n);return Promise.resolve(r)}(0,0,n).then(i=>this.bootstrapModuleFactory(i,o))}_moduleDoBootstrap(n){const r=n.injector.get(tu);if(n._bootstrapComponents.length>0)n._bootstrapComponents.forEach(o=>r.bootstrap(o));else{if(!n.instance.ngDoBootstrap)throw new j(403,"");n.instance.ngDoBootstrap(r)}this._modules.push(n)}onDestroy(n){this._destroyListeners.push(n)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new j(404,"");this._modules.slice().forEach(r=>r.destroy()),this._destroyListeners.forEach(r=>r());const n=this._injector.get(Rh,null);null==n||n(),this._destroyed=!0}get destroyed(){return this._destroyed}}return e.\u0275fac=function(n){return new(n||e)($(He))},e.\u0275prov=Q({token:e,factory:e.\u0275fac,providedIn:"platform"}),e})();function jh(e,t){return Array.isArray(t)?t.reduce(jh,e):Object.assign(Object.assign({},e),t)}let tu=(()=>{class e{constructor(n,r,o,i){this._zone=n,this._injector=r,this._exceptionHandler=o,this._initStatus=i,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const s=new we(u=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{u.next(this._stable),u.complete()})}),a=new we(u=>{let l;this._zone.runOutsideAngular(()=>{l=this._zone.onStable.subscribe(()=>{Ee.assertNotInAngularZone(),Qa(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,u.next(!0))})})});const c=this._zone.onUnstable.subscribe(()=>{Ee.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{u.next(!1)}))});return()=>{l.unsubscribe(),c.unsubscribe()}});this.isStable=fl(s,a.pipe(function fm(e={}){const{connector:t=(()=>new Ur),resetOnError:n=!0,resetOnComplete:r=!0,resetOnRefCountZero:o=!0}=e;return i=>{let s=null,a=null,u=null,l=0,c=!1,d=!1;const f=()=>{null==a||a.unsubscribe(),a=null},p=()=>{f(),s=u=null,c=d=!1},h=()=>{const m=s;p(),null==m||m.unsubscribe()};return bt((m,D)=>{l++,!d&&!c&&f();const v=u=null!=u?u:t();D.add(()=>{l--,0===l&&!d&&!c&&(a=wi(h,o))}),v.subscribe(D),s||(s=new Hr({next:g=>v.next(g),error:g=>{d=!0,f(),a=wi(p,n,g),v.error(g)},complete:()=>{c=!0,f(),a=wi(p,r),v.complete()}}),Gr(m).subscribe(s))})(i)}}()))}bootstrap(n,r){if(!this._initStatus.done)throw new j(405,"");let o;o=n instanceof zp?n:this._injector.get(Hn).resolveComponentFactory(n),this.componentTypes.push(o.componentType);const i=function T0(e){return e.isBoundToModule}(o)?void 0:this._injector.get(Un),a=o.create(He.NULL,[],r||o.selector,i),u=a.location.nativeElement,l=a.injector.get(Ja,null),c=l&&a.injector.get(w0);return l&&c&&c.registerApplication(u,l),a.onDestroy(()=>{this.detachView(a.hostView),nu(this.components,a),c&&c.unregisterApplication(u)}),this._loadComponent(a),a}tick(){if(this._runningTick)throw new j(101,"");try{this._runningTick=!0;for(let n of this._views)n.detectChanges()}catch(n){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(n))}finally{this._runningTick=!1}}attachView(n){const r=n;this._views.push(r),r.attachToAppRef(this)}detachView(n){const r=n;nu(this._views,r),r.detachFromAppRef()}_loadComponent(n){this.attachView(n.hostView),this.tick(),this.components.push(n),this._injector.get(f0,[]).concat(this._bootstrapListeners).forEach(o=>o(n))}ngOnDestroy(){this._views.slice().forEach(n=>n.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}get viewCount(){return this._views.length}}return e.\u0275fac=function(n){return new(n||e)($(Ee),$(He),$(pr),$(Wa))},e.\u0275prov=Q({token:e,factory:e.\u0275fac,providedIn:"root"}),e})();function nu(e,t){const n=e.indexOf(t);n>-1&&e.splice(n,1)}let Vh=!0,Uh=(()=>{class e{}return e.__NG_ELEMENT_ID__=R0,e})();function R0(e){return function k0(e,t,n){if(Yr(e)&&!n){const r=xe(e.index,t);return new Ir(r,r)}return 47&e.type?new Ir(t[16],t):null}(ae(),y(),16==(16&e))}const Q0=kh(null,"core",[]);let K0=(()=>{class e{constructor(n){}}return e.\u0275fac=function(n){return new(n||e)($(tu))},e.\u0275mod=nn({type:e}),e.\u0275inj=Ut({}),e})(),ei=null;function Pr(){return ei}const ht=new B("DocumentToken");let fg=(()=>{class e{}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=nn({type:e}),e.\u0275inj=Ut({}),e})();class _u extends class wM extends class X0{}{constructor(){super(...arguments),this.supportsDOMEvents=!0}}{static makeCurrent(){!function J0(e){ei||(ei=e)}(new _u)}onAndCancel(t,n,r){return t.addEventListener(n,r,!1),()=>{t.removeEventListener(n,r,!1)}}dispatchEvent(t,n){t.dispatchEvent(n)}remove(t){t.parentNode&&t.parentNode.removeChild(t)}createElement(t,n){return(n=n||this.getDefaultDocument()).createElement(t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(t){return t.nodeType===Node.ELEMENT_NODE}isShadowRoot(t){return t instanceof DocumentFragment}getGlobalEventTarget(t,n){return"window"===n?window:"document"===n?t:"body"===n?t.body:null}getBaseHref(t){const n=function bM(){return Rr=Rr||document.querySelector("base"),Rr?Rr.getAttribute("href"):null}();return null==n?null:function MM(e){ci=ci||document.createElement("a"),ci.setAttribute("href",e);const t=ci.pathname;return"/"===t.charAt(0)?t:`/${t}`}(n)}resetBaseElement(){Rr=null}getUserAgent(){return window.navigator.userAgent}getCookie(t){return function Bb(e,t){t=encodeURIComponent(t);for(const n of e.split(";")){const r=n.indexOf("="),[o,i]=-1==r?[n,""]:[n.slice(0,r),n.slice(r+1)];if(o.trim()===t)return decodeURIComponent(i)}return null}(document.cookie,t)}}let ci,Rr=null;const gg=new B("TRANSITION_ID"),TM=[{provide:Sh,useFactory:function IM(e,t,n){return()=>{n.get(Wa).donePromise.then(()=>{const r=Pr(),o=t.querySelectorAll(`style[ng-transition="${e}"]`);for(let i=0;i{const i=t.findTestabilityInTree(r,o);if(null==i)throw new Error("Could not find testability for element.");return i},H.getAllAngularTestabilities=()=>t.getAllTestabilities(),H.getAllAngularRootElements=()=>t.getAllRootElements(),H.frameworkStabilizers||(H.frameworkStabilizers=[]),H.frameworkStabilizers.push(r=>{const o=H.getAllAngularTestabilities();let i=o.length,s=!1;const a=function(u){s=s||u,i--,0==i&&r(s)};o.forEach(function(u){u.whenStable(a)})})}findTestabilityInTree(t,n,r){if(null==n)return null;const o=t.getTestability(n);return null!=o?o:r?Pr().isShadowRoot(n)?this.findTestabilityInTree(t,n.host,!0):this.findTestabilityInTree(t,n.parentElement,!0):null}}let SM=(()=>{class e{build(){return new XMLHttpRequest}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=Q({token:e,factory:e.\u0275fac}),e})();const di=new B("EventManagerPlugins");let fi=(()=>{class e{constructor(n,r){this._zone=r,this._eventNameToPlugin=new Map,n.forEach(o=>o.manager=this),this._plugins=n.slice().reverse()}addEventListener(n,r,o){return this._findPluginFor(r).addEventListener(n,r,o)}addGlobalEventListener(n,r,o){return this._findPluginFor(r).addGlobalEventListener(n,r,o)}getZone(){return this._zone}_findPluginFor(n){const r=this._eventNameToPlugin.get(n);if(r)return r;const o=this._plugins;for(let i=0;i{class e{constructor(){this._stylesSet=new Set}addStyles(n){const r=new Set;n.forEach(o=>{this._stylesSet.has(o)||(this._stylesSet.add(o),r.add(o))}),this.onStylesAdded(r)}onStylesAdded(n){}getAllStyles(){return Array.from(this._stylesSet)}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275prov=Q({token:e,factory:e.\u0275fac}),e})(),kr=(()=>{class e extends yg{constructor(n){super(),this._doc=n,this._hostNodes=new Map,this._hostNodes.set(n.head,[])}_addStylesToHost(n,r,o){n.forEach(i=>{const s=this._doc.createElement("style");s.textContent=i,o.push(r.appendChild(s))})}addHost(n){const r=[];this._addStylesToHost(this._stylesSet,n,r),this._hostNodes.set(n,r)}removeHost(n){const r=this._hostNodes.get(n);r&&r.forEach(Dg),this._hostNodes.delete(n)}onStylesAdded(n){this._hostNodes.forEach((r,o)=>{this._addStylesToHost(n,o,r)})}ngOnDestroy(){this._hostNodes.forEach(n=>n.forEach(Dg))}}return e.\u0275fac=function(n){return new(n||e)($(ht))},e.\u0275prov=Q({token:e,factory:e.\u0275fac}),e})();function Dg(e){Pr().remove(e)}const Eu={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},wu=/%COMP%/g;function pi(e,t,n){for(let r=0;r{if("__ngUnwrap__"===t)return e;!1===e(t)&&(t.preventDefault(),t.returnValue=!1)}}let bu=(()=>{class e{constructor(n,r,o){this.eventManager=n,this.sharedStylesHost=r,this.appId=o,this.rendererByCompId=new Map,this.defaultRenderer=new Mu(n)}createRenderer(n,r){if(!n||!r)return this.defaultRenderer;switch(r.encapsulation){case rt.Emulated:{let o=this.rendererByCompId.get(r.id);return o||(o=new OM(this.eventManager,this.sharedStylesHost,r,this.appId),this.rendererByCompId.set(r.id,o)),o.applyToHost(n),o}case 1:case rt.ShadowDom:return new RM(this.eventManager,this.sharedStylesHost,n,r);default:if(!this.rendererByCompId.has(r.id)){const o=pi(r.id,r.styles,[]);this.sharedStylesHost.addStyles(o),this.rendererByCompId.set(r.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return e.\u0275fac=function(n){return new(n||e)($(fi),$(kr),$(Fr))},e.\u0275prov=Q({token:e,factory:e.\u0275fac}),e})();class Mu{constructor(t){this.eventManager=t,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(t,n){return n?document.createElementNS(Eu[n]||n,t):document.createElement(t)}createComment(t){return document.createComment(t)}createText(t){return document.createTextNode(t)}appendChild(t,n){t.appendChild(n)}insertBefore(t,n,r){t&&t.insertBefore(n,r)}removeChild(t,n){t&&t.removeChild(n)}selectRootElement(t,n){let r="string"==typeof t?document.querySelector(t):t;if(!r)throw new Error(`The selector "${t}" did not match any elements`);return n||(r.textContent=""),r}parentNode(t){return t.parentNode}nextSibling(t){return t.nextSibling}setAttribute(t,n,r,o){if(o){n=o+":"+n;const i=Eu[o];i?t.setAttributeNS(i,n,r):t.setAttribute(n,r)}else t.setAttribute(n,r)}removeAttribute(t,n,r){if(r){const o=Eu[r];o?t.removeAttributeNS(o,n):t.removeAttribute(`${r}:${n}`)}else t.removeAttribute(n)}addClass(t,n){t.classList.add(n)}removeClass(t,n){t.classList.remove(n)}setStyle(t,n,r,o){o&(Ne.DashCase|Ne.Important)?t.style.setProperty(n,r,o&Ne.Important?"important":""):t.style[n]=r}removeStyle(t,n,r){r&Ne.DashCase?t.style.removeProperty(n):t.style[n]=""}setProperty(t,n,r){t[n]=r}setValue(t,n){t.nodeValue=n}listen(t,n,r){return"string"==typeof t?this.eventManager.addGlobalEventListener(t,n,Cg(r)):this.eventManager.addEventListener(t,n,Cg(r))}}class OM extends Mu{constructor(t,n,r,o){super(t),this.component=r;const i=pi(o+"-"+r.id,r.styles,[]);n.addStyles(i),this.contentAttr=function xM(e){return"_ngcontent-%COMP%".replace(wu,e)}(o+"-"+r.id),this.hostAttr=function PM(e){return"_nghost-%COMP%".replace(wu,e)}(o+"-"+r.id)}applyToHost(t){super.setAttribute(t,this.hostAttr,"")}createElement(t,n){const r=super.createElement(t,n);return super.setAttribute(r,this.contentAttr,""),r}}class RM extends Mu{constructor(t,n,r,o){super(t),this.sharedStylesHost=n,this.hostEl=r,this.shadowRoot=r.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const i=pi(o.id,o.styles,[]);for(let s=0;s{class e extends mg{constructor(n){super(n)}supports(n){return!0}addEventListener(n,r,o){return n.addEventListener(r,o,!1),()=>this.removeEventListener(n,r,o)}removeEventListener(n,r,o){return n.removeEventListener(r,o)}}return e.\u0275fac=function(n){return new(n||e)($(ht))},e.\u0275prov=Q({token:e,factory:e.\u0275fac}),e})();const wg=["alt","control","meta","shift"],jM={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},bg={A:"1",B:"2",C:"3",D:"4",E:"5",F:"6",G:"7",H:"8",I:"9",J:"*",K:"+",M:"-",N:".",O:"/","`":"0","\x90":"NumLock"},BM={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey};let VM=(()=>{class e extends mg{constructor(n){super(n)}supports(n){return null!=e.parseEventName(n)}addEventListener(n,r,o){const i=e.parseEventName(r),s=e.eventCallback(i.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Pr().onAndCancel(n,i.domEventName,s))}static parseEventName(n){const r=n.toLowerCase().split("."),o=r.shift();if(0===r.length||"keydown"!==o&&"keyup"!==o)return null;const i=e._normalizeKey(r.pop());let s="";if(wg.forEach(u=>{const l=r.indexOf(u);l>-1&&(r.splice(l,1),s+=u+".")}),s+=i,0!=r.length||0===i.length)return null;const a={};return a.domEventName=o,a.fullKey=s,a}static getEventFullKey(n){let r="",o=function HM(e){let t=e.key;if(null==t){if(t=e.keyIdentifier,null==t)return"Unidentified";t.startsWith("U+")&&(t=String.fromCharCode(parseInt(t.substring(2),16)),3===e.location&&bg.hasOwnProperty(t)&&(t=bg[t]))}return jM[t]||t}(n);return o=o.toLowerCase()," "===o?o="space":"."===o&&(o="dot"),wg.forEach(i=>{i!=o&&BM[i](n)&&(r+=i+".")}),r+=o,r}static eventCallback(n,r,o){return i=>{e.getEventFullKey(i)===n&&o.runGuarded(()=>r(i))}}static _normalizeKey(n){return"esc"===n?"escape":n}}return e.\u0275fac=function(n){return new(n||e)($(ht))},e.\u0275prov=Q({token:e,factory:e.\u0275fac}),e})();const zM=kh(Q0,"browser",[{provide:xh,useValue:"browser"},{provide:Fh,useValue:function $M(){_u.makeCurrent(),Cu.init()},multi:!0},{provide:ht,useFactory:function GM(){return function Hm(e){Hi=e}(document),document},deps:[]}]),qM=[{provide:ra,useValue:"root"},{provide:pr,useFactory:function UM(){return new pr},deps:[]},{provide:di,useClass:kM,multi:!0,deps:[ht,Ee,xh]},{provide:di,useClass:VM,multi:!0,deps:[ht]},{provide:bu,useClass:bu,deps:[fi,kr,Fr]},{provide:Wp,useExisting:bu},{provide:yg,useExisting:kr},{provide:kr,useClass:kr,deps:[ht]},{provide:Ja,useClass:Ja,deps:[Ee]},{provide:fi,useClass:fi,deps:[di,Ee]},{provide:class EM{},useClass:SM,deps:[]}];let WM=(()=>{class e{constructor(n){if(n)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}static withServerTransition(n){return{ngModule:e,providers:[{provide:Fr,useValue:n.appId},{provide:gg,useExisting:Fr},TM]}}}return e.\u0275fac=function(n){return new(n||e)($(e,12))},e.\u0275mod=nn({type:e}),e.\u0275inj=Ut({providers:qM,imports:[fg,K0]}),e})();"undefined"!=typeof window&&window;const Tg={now:()=>(Tg.delegate||Date).now(),delegate:void 0};class oI extends Ur{constructor(t=1/0,n=1/0,r=Tg){super(),this._bufferSize=t,this._windowTime=n,this._timestampProvider=r,this._buffer=[],this._infiniteTimeWindow=!0,this._infiniteTimeWindow=n===1/0,this._bufferSize=Math.max(1,t),this._windowTime=Math.max(1,n)}next(t){const{isStopped:n,_buffer:r,_infiniteTimeWindow:o,_timestampProvider:i,_windowTime:s}=this;n||(r.push(t),!o&&r.push(i.now()+s)),this._trimBuffer(),super.next(t)}_subscribe(t){this._throwIfClosed(),this._trimBuffer();const n=this._innerSubscribe(t),{_infiniteTimeWindow:r,_buffer:o}=this,i=o.slice();for(let s=0;sclearTimeout(n)},scheduleBeforeRender(e){if("undefined"==typeof window)return hi.schedule(e,0);if(void 0===window.requestAnimationFrame)return hi.schedule(e,16);const t=window.requestAnimationFrame(e);return()=>window.cancelAnimationFrame(t)}};let Tu;function hI(e,t,n){let r=n;return function aI(e){return!!e&&e.nodeType===Node.ELEMENT_NODE}(e)&&t.some((o,i)=>!("*"===o||!function lI(e,t){if(!Tu){const n=Element.prototype;Tu=n.matches||n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}return e.nodeType===Node.ELEMENT_NODE&&Tu.call(e,t)}(e,o)||(r=i,0))),r}class mI{constructor(t,n){this.componentFactory=n.get(Hn).resolveComponentFactory(t)}create(t){return new yI(this.componentFactory,t)}}class yI{constructor(t,n){this.componentFactory=t,this.injector=n,this.eventEmitters=new oI(1),this.events=this.eventEmitters.pipe(function iI(e,t){return bt((n,r)=>{let o=null,i=0,s=!1;const a=()=>s&&!o&&r.complete();n.subscribe(Vt(r,u=>{null==o||o.unsubscribe();let l=0;const c=i++;$t(e(u,c)).subscribe(o=Vt(r,d=>r.next(t?t(u,d,c,l++):d),()=>{o=null,a()}))},()=>{s=!0,a()}))})}(r=>fl(...r))),this.componentRef=null,this.viewChangeDetectorRef=null,this.inputChanges=null,this.hasInputChanges=!1,this.implementsOnChanges=!1,this.scheduledChangeDetectionFn=null,this.scheduledDestroyFn=null,this.initialInputValues=new Map,this.unchangedInputs=new Set(this.componentFactory.inputs.map(({propName:r})=>r)),this.ngZone=this.injector.get(Ee),this.elementZone="undefined"==typeof Zone?null:this.ngZone.run(()=>Zone.current)}connect(t){this.runInZone(()=>{if(null!==this.scheduledDestroyFn)return this.scheduledDestroyFn(),void(this.scheduledDestroyFn=null);null===this.componentRef&&this.initializeComponent(t)})}disconnect(){this.runInZone(()=>{null===this.componentRef||null!==this.scheduledDestroyFn||(this.scheduledDestroyFn=hi.schedule(()=>{null!==this.componentRef&&(this.componentRef.destroy(),this.componentRef=null,this.viewChangeDetectorRef=null)},10))})}getInputValue(t){return this.runInZone(()=>null===this.componentRef?this.initialInputValues.get(t):this.componentRef.instance[t])}setInputValue(t,n){this.runInZone(()=>{null!==this.componentRef?function cI(e,t){return e===t||e!=e&&t!=t}(n,this.getInputValue(t))&&(void 0!==n||!this.unchangedInputs.has(t))||(this.recordInputChange(t,n),this.unchangedInputs.delete(t),this.hasInputChanges=!0,this.componentRef.instance[t]=n,this.scheduleDetectChanges()):this.initialInputValues.set(t,n)})}initializeComponent(t){const n=He.create({providers:[],parent:this.injector}),r=function pI(e,t){const n=e.childNodes,r=t.map(()=>[]);let o=-1;t.some((i,s)=>"*"===i&&(o=s,!0));for(let i=0,s=n.length;i{this.initialInputValues.has(t)&&this.setInputValue(t,this.initialInputValues.get(t))}),this.initialInputValues.clear()}initializeOutputs(t){const n=this.componentFactory.outputs.map(({propName:r,templateName:o})=>t.instance[r].pipe(Wu(s=>({name:o,value:s}))));this.eventEmitters.next(n)}callNgOnChanges(t){if(!this.implementsOnChanges||null===this.inputChanges)return;const n=this.inputChanges;this.inputChanges=null,t.instance.ngOnChanges(n)}markViewForCheck(t){this.hasInputChanges&&(this.hasInputChanges=!1,t.markForCheck())}scheduleDetectChanges(){this.scheduledChangeDetectionFn||(this.scheduledChangeDetectionFn=hi.scheduleBeforeRender(()=>{this.scheduledChangeDetectionFn=null,this.detectChanges()}))}recordInputChange(t,n){if(!this.implementsOnChanges)return;null===this.inputChanges&&(this.inputChanges={});const r=this.inputChanges[t];if(r)return void(r.currentValue=n);const o=this.unchangedInputs.has(t),i=o?void 0:this.getInputValue(t);this.inputChanges[t]=new bl(i,n,o)}detectChanges(){null!==this.componentRef&&(this.callNgOnChanges(this.componentRef),this.markViewForCheck(this.viewChangeDetectorRef),this.componentRef.changeDetectorRef.detectChanges())}runInZone(t){return this.elementZone&&Zone.current!==this.elementZone?this.ngZone.run(t):t()}}class DI extends HTMLElement{constructor(){super(...arguments),this.ngElementEventsSubscription=null}}new B("DEBOUNCE_TIME");const Su=new B("LOAD_CLICK_CLASS");let CI=(()=>{class e{constructor(n,r,o){this._el=n,this._renderer=r,this._defaultLoadClickClass=o,this.loadClickEventType="click",this.loadClickStopPropagation=!1,this.loadClickPreventDefault=!1,this.disableAttribute=!0}ngOnInit(){this._renderer.listen(this._el.nativeElement,this.loadClickEventType,n=>{const r=this.loadClickClass||this._defaultLoadClickClass;this.loadClickStopPropagation&&n.stopPropagation(),this.loadClickPreventDefault&&n.preventDefault(),this._renderer.addClass(this._el.nativeElement,r),this.disableAttribute&&this._renderer.setAttribute(this._el.nativeElement,"disabled",""),this.subscription=this.jpLoadClick().pipe(function _I(e){return bt((t,n)=>{try{t.subscribe(n)}finally{n.add(e)}})}(()=>{this._renderer.removeClass(this._el.nativeElement,r),this.disableAttribute&&this._renderer.removeAttribute(this._el.nativeElement,"disabled")})).subscribe()})}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}}return e.\u0275fac=function(n){return new(n||e)(x(Rt),x(Fa),x(Su))},e.\u0275dir=Ae({type:e,selectors:[["","jpLoadClick",""]],inputs:{jpLoadClick:"jpLoadClick",loadClickEventType:"loadClickEventType",loadClickStopPropagation:"loadClickStopPropagation",loadClickPreventDefault:"loadClickPreventDefault",loadClickClass:"loadClickClass",disableAttribute:"disableAttribute"}}),e})(),EI=(()=>{class e{static defaultLoadingClass(n){return{ngModule:e,providers:[{provide:Su,useValue:n}]}}}return e.\u0275fac=function(n){return new(n||e)},e.\u0275mod=nn({type:e}),e.\u0275inj=Ut({providers:[{provide:Su,useValue:"loading"}],imports:[[fg]]}),e})(),Sg=(()=>{class e{constructor(n){this.el=n,this.label="Submit"}submit(){return()=>{const n=this.el.nativeElement.closest("form");if(!n.reportValidity())return function wI(...e){return Gr(e,ul(e))}(!0);const r=new FormData(n),o={string:"stringValue",number:"doubleValue"},i={createdOn:{integerValue:Date.now().toString()}};return r.forEach((s,a)=>{i[a]={[o[typeof s]]:s}}),Gr(fetch("https://firestore.googleapis.com/v1/projects/jaspero-jms/databases/(default)/documents/inquiries",{method:"POST",body:JSON.stringify({fields:i})}))}}}return e.\u0275fac=function(n){return new(n||e)(x(Rt))},e.\u0275cmp=Ni({type:e,selectors:[["jpe-submit-button"]],inputs:{label:"label"},decls:2,vars:2,consts:[["type","submit",3,"jpLoadClick"]],template:function(n,r){1&n&&(Lo(0,"button",0),Jf(1),jo()),2&n&&(ha("jpLoadClick",r.submit()),function nd(e){rd(k(),y(),De()+e,to())}(1),Ea(r.label))},directives:[CI],styles:[""]}),e})(),bI=(()=>{class e{constructor(n){this.injector=n}ngDoBootstrap(){const n=function vI(e,t){const n=function fI(e,t){return t.get(Hn).resolveComponentFactory(e).inputs}(e,t.injector),r=t.strategyFactory||new mI(e,t.injector),o=function dI(e){const t={};return e.forEach(({propName:n,templateName:r})=>{t[function sI(e){return e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}(r)]=n}),t}(n);class i extends DI{constructor(a){super(),this.injector=a}get ngElementStrategy(){if(!this._ngElementStrategy){const a=this._ngElementStrategy=r.create(this.injector||t.injector);n.forEach(({propName:u})=>{if(!this.hasOwnProperty(u))return;const l=this[u];delete this[u],a.setInputValue(u,l)})}return this._ngElementStrategy}attributeChangedCallback(a,u,l,c){this.ngElementStrategy.setInputValue(o[a],l)}connectedCallback(){let a=!1;this.ngElementStrategy.events&&(this.subscribeToEvents(),a=!0),this.ngElementStrategy.connect(this),a||this.subscribeToEvents()}disconnectedCallback(){this._ngElementStrategy&&this._ngElementStrategy.disconnect(),this.ngElementEventsSubscription&&(this.ngElementEventsSubscription.unsubscribe(),this.ngElementEventsSubscription=null)}subscribeToEvents(){this.ngElementEventsSubscription=this.ngElementStrategy.events.subscribe(a=>{const u=new CustomEvent(a.name,{detail:a.value});this.dispatchEvent(u)})}}return i.observedAttributes=Object.keys(o),n.forEach(({propName:s})=>{Object.defineProperty(i.prototype,s,{get(){return this.ngElementStrategy.getInputValue(s)},set(a){this.ngElementStrategy.setInputValue(s,a)},configurable:!0,enumerable:!0})}),i}(Sg,{injector:this.injector});customElements.define("jpe-submit-button",n)}}return e.\u0275fac=function(n){return new(n||e)($(He))},e.\u0275mod=nn({type:e,bootstrap:[Sg]}),e.\u0275inj=Ut({providers:[],imports:[[WM,EI]]}),e})();(function O0(){Vh=!1})(),zM().bootstrapModule(bI,{ngZone:"noop"}).catch(e=>console.error(e))}},Y=>{Y(Y.s=998)}]); +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/web/static/elements/submit-button/main.js.map b/web/static/elements/submit-button/main.js.map new file mode 100644 index 00000000..b2c92f12 --- /dev/null +++ b/web/static/elements/submit-button/main.js.map @@ -0,0 +1 @@ +{"version":3,"mappings":"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","names":["value","createImpl","ctorFunc","instance","Error","call","stack","prototype","Object","create","constructor","UnsubscriptionError","createErrorClass","_super","errors","this","message","length","map","err","i","toString","join","name","arr","item","index","indexOf","splice","initialTeardown","closed","_parentage","_finalizers","unsubscribe","Array","isArray","parent","remove","initialFinalizer","isFunction","e","finalizer","execFinalizer","push","add","teardown","_a","Subscription","_hasParent","_addParent","includes","_removeParent","arrRemove","EMPTY","empty","EMPTY_SUBSCRIPTION","config","onUnhandledError","onStoppedNotification","Promise","undefined","useDeprecatedSynchronousErrorHandling","useDeprecatedNextContext","timeoutProvider","setTimeout","handler","timeout","args","delegate","clearTimeout","handle","COMPLETE_NOTIFICATION","createNotification","kind","error","context","cb","isRoot","errorThrown","destination","super","isStopped","isSubscription","EMPTY_OBSERVER","next","complete","SafeSubscriber","handleStoppedNotification","nextNotification","_next","errorNotification","_error","_complete","_bind","Function","bind","fn","thisArg","partialObserver","handleUnhandledError","Subscriber","observerOrNext","ConsumerObserver","captureError","reportUnhandledError","notification","subscriber","noop","observable","Symbol","x","Observable","subscribe","_subscribe","lift","operator","source","isObserver","isSubscriber","errorContext","_trySubscribe","sink","forEach","promiseCtor","getPromiseCtor","resolve","reject","Symbol_observable","pipe","operations","fns","identity","input","reduce","prev","pipeFromArray","toPromise","ObjectUnsubscribedError","Subject","currentObservers","observers","hasError","thrownError","subject","AnonymousSubject","_throwIfClosed","from","observer","shift","observed","_checkFinalizedStatuses","_innerSubscribe","asObservable","_b","init","hasLift","liftedSource","TypeError","onNext","onComplete","onError","onFinalize","OperatorSubscriber","shouldUnsubscribe","project","operate","createOperatorSubscriber","s","o","r","f","u","h","d","a","Ku","n","isArrayLike","then","obj","asyncIterator","iterator","getSymbolIterator","Symbol_iterator","readableStream","__asyncGenerator","arguments","reader","getReader","done","__await","read","releaseLock","isInteropObservable","obs","fromInteropObservable","array","fromArrayLike","isPromise","promise","fromPromise","isAsyncIterable","fromAsyncIterable","isIterable","iterable","fromIterable","isReadableStreamLike","readableStreamLikeToAsyncGenerator","fromReadableStreamLike","createInvalidObservableTypeError","asyncIterable","asyncIterable_1","asyncIterable_1_1","e_1","l","c","__awaiter","__asyncValues","e_1_1","return","process","catch","parentSubscription","scheduler","work","delay","repeat","scheduleSubscription","schedule","resultSelector","concurrent","Infinity","mergeMap","b","ii","innerFrom","onBeforeNext","expand","innerSubScheduler","additionalFinalizer","buffer","active","isComplete","checkComplete","outerNext","doInnerSub","innerComplete","innerValue","bufferedValue","executeSchedule","mergeInternals","isScheduler","last","pop","result","subscribeOn","observeOn","scheduleObservable","scheduleArray","schedulePromise","scheduleAsyncIterable","scheduleIterable","scheduleReadableStreamLike","scheduled","popScheduler","defaultValue","popNumber","sources","mergeAll","reset","on","count","seen","take","objWithPropertyToExtract","key","getClosureSafeProperty","token","stringify","overriddenName","res","newLineIndex","substring","before","after","__forward_ref__","forwardRefFn","forwardRef","type","hasOwnProperty","isForwardRef","code","Math","abs","formatRuntimeError","String","renderStringify","injectorName","injectorDetails","RuntimeError","stringifyForError","actual","msg","expected","comparison","throwError","opts","providedIn","factory","options","providers","imports","getOwnDefinition","NG_PROV_DEF","NG_INJECTABLE_DEF","field","NG_INJ_DEF","NG_INJECTOR_DEF","ɵprov","ɵinj","ngInjectableDef","ngInjectorDef","InjectFlags","Default","Host","Self","SkipSelf","Optional","_injectImplementation","impl","previous","notFoundValue","flags","injectableDef","getInjectableDef","throwProviderNotFoundError","ChangeDetectionStrategy","OnPush","ViewEncapsulation$1","ViewEncapsulation","Emulated","None","ShadowDom","__globalThis","globalThis","__window","window","__self","self","WorkerGlobalScope","_global","global","EMPTY_OBJ","EMPTY_ARRAY","NG_COMP_DEF","ɵcmp","NG_DIR_DEF","ɵdir","NG_PIPE_DEF","ɵpipe","NG_MOD_DEF","ɵmod","NG_FACTORY_DEF","ɵfac","NG_ELEMENT_ID","__NG_ELEMENT_ID__","_renderCompCount","componentDefinition","noSideEffects","declaredInputs","def","providersResolver","decls","vars","template","consts","ngContentSelectors","hostBindings","hostVars","hostAttrs","contentQueries","inputs","outputs","exportAs","onPush","changeDetection","directiveDefs","pipeDefs","selectors","viewQuery","features","data","encapsulation","id","styles","_","setInput","schemas","tView","directiveTypes","directives","feature","pipeTypes","pipes","invertObject","extractDirectiveDef","extractPipeDef","getComponentDef","getDirectiveDef","getPipeDef$1","autoRegisterModuleById","bootstrap","declarations","exports","transitiveCompileScopes","secondary","newLookup","minifiedKey","publicName","declaredName","ɵɵdefineDirective","ɵɵdefineComponent","throwNotFound","ngModuleDef","RENDERER","HEADER_OFFSET","tNode","target","previousValue","currentValue","firstChange","isFirstChange","definition","ngOnChanges","ngOnChangesSetInput","rememberChangeHistoryAndInvokeOnChangesHook","simpleChangesStore","getSimpleChangesStore","current","privateName","store","SIMPLE_CHANGES_STORE","setSimpleChangesStore","previousChange","SimpleChange","DOCUMENT","renderer","listen","domRendererFactory3","createRenderer","hostElement","rendererType","document","getDocument","lView","unwrapRNode","nodeIndex","hostView","slotValue","isLView","view","lContainer","amount","viewOrContainer","instructionState","lFrame","createLFrame","bindingsEnabled","isInCheckNoChangesMode","currentTNode","getCurrentTNodePlaceholderOk","isParent","mode","bindingIndex","bindingRootIndex","currentDirectiveIndex","setCurrentDirectiveIndex","currentQueryIndex","declTNode","parentTNode","parentLView","getDeclarationTNode","allocLFrame","newView","newLFrame","firstChild","contextLView","bindingStartIndex","inI18n","currentLFrame","childLFrame","child","selectedIndex","elementDepthCount","currentNamespace","oldLFrame","leaveDI","leaveViewLight","directiveStart","end","directiveEnd","lifecycleHooks","directiveDef","ngAfterContentInit","ngAfterContentChecked","ngAfterViewInit","ngAfterViewChecked","ngOnDestroy","contentHooks","contentCheckHooks","viewHooks","viewCheckHooks","destroyHooks","hooks","callHooks","initPhase","currentView","currentNodeIndex","nodeIndexLimit","max","lastNodeIndexFound","callHook","isInitHook","hook","directive","isViewProvider","injectImplementation","resolving","canSeeViewProviders","injectImpl","native","attrs","isProc","isProceduralRenderer","namespaceURI","attrName","attrVal","setAttribute","setAttributeNS","isAnimationProp","setProperty","marker","charCodeAt","dst","src","slice","srcMarker","mergeHostAttribute","key1","key2","markerInsertPosition","dstValue","parentLocation","location","startView","viewOffset","getParentInjectorViewOffset","parentView","includeViewProviders","v","oldValue","nextNgElementId","existingInjectorIndex","getInjectorIndex","firstCreatePass","injectorIndex","insertBloom","blueprint","parentLoc","getParentInjectorLocation","hasParentInjector","parentIndex","getParentInjectorIndex","getParentInjectorView","parentData","footer","declarationViewOffset","lViewCursor","tViewType","bloomHash","bloomAdd","moduleInjector","previousInjectImplementation","setInjectImplementation","get","injectRootLimpMode","notFoundValueOrThrow","tokenId","createNodeInjector","bloomHashBitOrFactory","enterDI","lookupTokenUsingModuleInjector","previousTView","hostTElementNode","shouldSearchParent","bloomHasToken","searchTokensOnInjector","NOT_FOUND","NodeInjector","getCurrentTNode","getLView","currentTView","injectableIdx","canAccessViewProviders","isHostSpecialCase","nodeProviderIndexes","providerIndexes","tInjectables","injectablesStart","directivesStart","cptViewProvidersCount","endIndex","providerTokenOrDef","dirDef","isComponentDef","locateDirectiveOrProvider","isComponentHost","getNodeInjectable","tData","NodeInjectorFactory","isFactory","path","depPath","throwCyclicDependencyError","previousIncludeViewProviders","setIncludeViewProviders","directiveIndex","ngOnInit","ngDoCheck","wrappedOnChanges","NgOnChangesFeatureImpl","preOrderHooks","preOrderCheckHooks","registerPreOrderHooks","injectorView","isFirstHostTNode","_tNode","_lView","getOrCreateInjectable","_desc","ngMetadataName","ɵɵdefineInjectable","deepForEach","THROW_IF_NOT_FOUND","NG_TEMP_TOKEN_PATH","NEW_LINE","SOURCE","USE_VALUE$1","provide","useValue","_currentInjector","injector","former","getInjectImplementation","injectInjectorOnly","resolveForwardRef","inject","ɵɵinject","types","arg","j","meta","flag","getInjectFlag","DI_DECORATOR_FLAG","MONKEY_PATCH_KEY_NAME","readPatchedData","ERROR_ORIGINAL_ERROR","console","values","_console","handleError","originalError","_findOriginalError","errorLogger","ERROR_LOGGER","defaultErrorLogger","getErrorLogger","getOriginalError","defaultScheduler","requestAnimationFrame","RendererStyleFlags2","Important","DashCase","tIcuContainerNode","_icuContainerIterate","isLContainer","getNearestLContainer","container","action","lNodeToHandle","beforeNode","isComponent","rNode","nativeAppendChild","nativeInsertBefore","isHostElement","nativeParent","node","parentNode","nativeParentNode","removeChild","nativeRemoveChild","nativeRemoveNode","destroyNode","parentRElement","anchor","applyToElementOrContainer","applyView","applyContainer","namespace","createElement","namespaceUri","toLowerCase","getNamespaceUri","createElementNS","declarationContainer","movedViews","declarationViewIndex","insertionLContainer","updateTransplantedViewCount","toCall","callContext","executeOnDestroys","tCleanup","cleanup","lCleanup","lastLCleanupIndex","idxOrTargetGetter","listener","useCaptureOrSubIdx","removeEventListener","processCleanups","destroy","detachMovedView","lQueries","detachView","getNativeByTNode","getClosestRElement","isMove","insertBefore","appendChild","_getInsertInFrontOfRNodeWithI18n","childRNode","childTNode","parentRNode","getParentRElement","anchorNode","getInsertInFrontOfRNode","nativeAppendOrInsertBefore","componentView","projection","isProjection","rawSlotValue","tNodeType","attachPatchData","applyNodes","nextRNode","icuContainerIterate","applyProjectionRecursive","projectionNext","tProjectionNode","componentLView","nodeToProjectOrRNodes","componentNode","element","newValue","style","cssText","removeAttribute","className","classToSearch","startingIndex","foundIndex","NG_TEMPLATE_SELECTOR","cssClassToMatch","isProjectionMode","classIndexOf","currentSelector","selector","nodeAttrs","nameOnlyMarkerIdx","isNameOnlyAttributeMarker","getNameOnlyMarkerIndex","skipToNextSelector","hasTagAndTypeMatch","isPositive","selectorAttrValue","isCssClassMatching","attrIndexInNode","findAttrIndexInNode","isInlineTemplate","nodeAttrValue","compareAgainstClassName","bindingsMode","maybeAttrName","attr","matchTemplateAttribute","isNodeMatchingSelector","isNegativeMode","chunk","trim","currentChunk","valueOrMarker","attrValue","maybeWrapInNotSelector","NO_CHANGE","checkNoChangesMode","executeCheckHooks","executeInitAndCheckHooks","setSelectedIndex","queryStartIdx","directiveDefIdx","setCurrentQueryIndex","host","tHostNode","rendererFactory","sanitizer","resetPreOrderHookFlags","isCurrentTNodeParent","tParent","insertBeforeIndex","directiveStylingLast","propertyBindings","mergedAttrs","localNames","initialInputs","tViews","stylesWithoutHost","residualStyles","classes","classesWithoutHost","residualClasses","classBindings","styleBindings","createTNode","createTNodeAtIndex","isInI18nBlock","getCurrentParentTNode","setCurrentTNode","numSlotsToAlloc","initialValue","allocIdx","enterView","executeViewQueryFn","templateFn","executeTemplate","staticContentQueries","refreshContentQueries","staticViewQueries","components","hostLView","renderComponent$1","renderChildComponents","incompleteFirstPass","leaveView","isInCheckNoChangesPass","setBindingIndex","hooksInitPhaseCompleted","incrementInitPhaseFlags","getFirstLContainer","getNextLContainer","movedLView","markTransplantedViewsForRefresh","embeddedLView","embeddedTView","viewAttachedToChangeDetector","refreshView","refreshEmbeddedViews","hostBindingOpCodes","opCode","directiveIdx","bindingRootIndx","hostBindingFn","setBindingRootForHostBindings","processHostBindingOpCodes","refreshComponent","refreshChildComponents","firstUpdatePass","normalExecutionPath","creationModeIsActive","isCreationMode","begin","renderView","rf","prevSelectedIndex","getSelectedIndex","isUpdatePhase","selectIndexInternal","createTView","constsOrFactory","initialViewLength","createViewBlueprint","queries","fill","expandoStartIndex","directiveRegistry","pipeRegistry","inputAliasMap","propStore","internalName","directiveVarsIdx","elementIndx","lastSelectedElementIdx","hostTNode","exportsMap","numberOfDirectives","directiveFactory","getFactoryDef","nodeInjectorFactory","registerHostBindingOpCodes","allocExpando","getOrCreateTComponentView","addToViewTree","createLView","initialInputData","inputsToStore","componentHostIdx","getComponentLViewByIndex","refreshContainsDirtyView","componentTView","syncViewWithBlueprint","lViewOrLContainer","errorHandler","ErrorHandler","rootContext","rootComponent","readPatchedLView","renderComponentOrTemplate","tickRootContext","viewQueryFn","component","CLEAN_PROMISE","getNativeByIndex","setValue","textContent","updateTextNode","writeToHost","concatStringsWithSpace","INJECTOR","InjectionToken","INJECTOR_SCOPE","NOT_YET","CIRCULAR","NULL_INJECTOR$1","NullInjector","defType","additionalProviders","createInjectorWithoutInjectorInstances","_resolveInjectorDefTypes","R3Injector","getNullInjector","records","Map","injectorDefTypes","Set","onDestroy","_destroyed","dedupStack","provider","processProvider","injectorDef","processInjectorType","set","makeRecord","record","scope","destroyed","assertNotDestroyed","service","clear","previousInjector","setCurrentInjector","couldBeInjectableType","injectableDefInScope","injectableDefOrInjectorDefFactory","hydrate","unshift","injectorErrorName","tokenPath","text","charAt","substr","parts","JSON","replace","formatError","NG_TOKEN_PATH","catchInjectorError","tokens","ngDevMode","defOrWrappedDef","parents","getInjectorDef","ngModule","isDuplicate","importTypesWithProviders","imported","defProviders","injectorType","ngModuleType","isTypeProvider","isValueProvider","unwrappedProvider","useFactory","isFactoryProvider","injectArgs","deps","useExisting","isExistingProvider","classRef","useClass","hasDeps","providerToFactory","providerToRecord","multi","multiRecord","hasOnDestroy","has","paramLength","size","list","newArray","inheritedInjectableDef","typeName","match","getTypeName","warn","getInheritedInjectableDef","getUndecoratedInjectableFactory","Injector","static","createInjector","NULL","registerPostOrderHooks","is","propName","bindingUpdated","nextBindingIndex","nativeOnly","dataValue","inputData","setInputsForProperty","viewIndex","childComponentLView","markDirtyIfOnPush","t","mapPropName","elementPropertyInternal","getTView","getTNode","getSelectedTNode","ɵɵproperty","isClassBased","property","attrsIndex","localRefsIndex","adjustedIndex","createElementNode","getNamespace$1","tViewConsts","getOrCreateTNode","getConstant","localRefs","hasDirectives","getBindingsEnabled","viewData","registry","matches","isNodeMatchingSelectorList","diPublicInInjector","getOrCreateNodeInjectorForNode","markAsComponentHost","findDirectiveDefMatches","initTNodeFlags","preOrderHooksFound","preOrderCheckHooksFound","mergeHostAttrs","configureViewWithDirective","saveNameToExportMap","lifeCycleHooks","tViewData","tNodeAttrs","inputsFromAttrs","inputsStore","outputsStore","directiveInputs","generateInitialInputs","generatePropertyAliases","initializeInputAndOutputAliases","cacheMatchingLocalNames","resolveDirectives","computeStaticStyling","elementStart","elementStartFirstCreatePass","setUpAttributes","writeDirectClass","writeDirectStyle","getElementDepthCount","increaseElementDepthCount","isDirectiveHost","start","addComponentLogic","setInputsFromAttrs","instantiateAllDirectives","elementIndex","getCurrentDirectiveIndex","dirIndex","invokeHostBindingsInCreationMode","invokeDirectivesHostBindings","createDirectivesInstances","isContentQueryHost","executeContentQueries","localRefExtractor","localIndex","saveResolvedLocalsInData","ɵɵelementStart","setCurrentTNodeAsNotParent","decreaseElementDepthCount","elementEnd","hasClassInput","setDirectiveInputsWhichShadowsStyling","hasStyleInput","ɵɵelementEnd","isObservable","textNative","createText","createTextNode","v0","ɵɵtextInterpolate1","ɵɵtextInterpolate","prefix","suffix","interpolated","interpolation1","textBindingInternal","DEFAULT_LOCALE_ID","LOCALE_ID$1","resolveComponentFactory","ERROR_COMPONENT","noComponentFactoryError","ComponentFactoryResolver$1","_NullComponentFactoryResolver","createElementRef","ElementRef","nativeElement","injectElementRef","Renderer2","nodeAtIndex","getOrCreateRenderer2","injectRenderer2","Sanitizer","full","major","split","minor","patch","VERSION","Version","NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR","lNode","lViewInAContainer","lViewFirstChildTNode","collectNativeNodes","nodesInSlot","getProjectionNodes","getLViewParent","_cdRefInjectingView","_appRef","_attachedToViewContainer","rootNodes","viewRefs","removeIndex","indexInContainer","viewToDetach","declarationLContainer","removedLView","removeFromArray","removeViewFromContainer","rootView","cleanUpView","firstView","destroyViewTree","destroyLView","callback","cleanupFn","getOrCreateLViewCleanup","getOrCreateTViewCleanup","storeCleanupWithContext","markForCheck","isRootView","markViewDirty","detach","reattach","detectChanges","detectChangesInternal","checkNoChanges","setIsInCheckNoChangesMode","checkNoChangesInternal","attachToViewContainerRef","detachFromAppRef","renderDetachView","attachToAppRef","appRef","ViewRef$1","_view","detectChangesInRootView","checkNoChangesInRootView","componentDef","ComponentFactory","nonMinified","templateName","ComponentFactory$1","componentType","selectorList","stringifyCSSSelector","stringifyCSSSelectorList","isBoundToModule","toRefArray","projectableNodes","rootSelectorOrNode","rootViewInjector","createChainedInjector","RendererFactory2","hostRenderer","elementName","hostRNode","elementOrSelector","selectRootElement","rElement","querySelector","locateHostElement","getNamespace","rootFlags","playerHandler","clean","createRootContext","rootTView","rootLView","tElementNode","viewRenderer","createRootComponentView","extractAttrsAndClassesFromSelector","nodesforSlot","hostFeatures","rootTNode","instantiateRootComponent","createRootComponent","LifecycleHooksFeature","ComponentRef","_rootLView","changeDetectorRef","RootViewRef","modules","NgModuleRef$1","_parent","_bootstrapComponents","destroyCbs","componentFactoryResolver","ComponentFactoryResolver","getNgModuleDef","maybeUnwrapFn","_r3Injector","injectFlags","moduleType","visited","incoming","assertSameOrNotExisting","recurse","registerNgModuleType","parentInjector","NgModuleRef","EventEmitter","isAsync","__isAsync","emit","_c","nextFn","errorFn","completeFn","_wrapInTimeout","APP_INITIALIZER","ApplicationInitStatus","appInits","initialized","donePromise","rej","runInitializers","asyncInitPromises","initResult","observableAsPromise","all","APP_ID","_randomChar","fromCharCode","floor","random","PLATFORM_INITIALIZER","PLATFORM_ID","APP_BOOTSTRAP_LISTENER","LOCALE_ID","$localize","locale","getGlobalLocale","Zone","apply","scheduleMicroTask","enableLongStackTrace","shouldCoalesceEventChangeDetection","shouldCoalesceRunChangeDetection","hasPendingMacrotasks","hasPendingMicrotasks","isStable","onUnstable","onMicrotaskEmpty","onStable","assertZonePatched","_nesting","_outer","_inner","TaskTrackingZoneSpec","fork","longStackTraceZoneSpec","lastRequestAnimationFrameId","nativeRequestAnimationFrame","nativeCancelAnimationFrame","cancelAnimationFrame","unpatchedRequestAnimationFrame","__symbol__","unpatchedCancelAnimationFrame","getNativeRequestAnimationFrame","zone","delayChangeDetectionForEventsDelegate","isCheckStableRunning","fakeTopEventTask","root","scheduleEventTask","updateMicroTaskStatus","checkStable","invoke","delayChangeDetectionForEvents","properties","isAngularZone","onInvokeTask","task","applyThis","applyArgs","onEnter","invokeTask","onLeave","onInvoke","onHasTask","hasTaskState","hasTask","change","_hasPendingMicrotasks","microTask","macroTask","onHandleError","runOutsideAngular","forkInnerZoneWithAngularBehavior","NgZone","isInAngularZone","run","runTask","EMPTY_PAYLOAD","cancelTask","runGuarded","Testability","_ngZone","_pendingCount","_isZoneStable","_didWork","_callbacks","taskTrackingZone","_watchAngularEvents","assertNotInAngularZone","_runCallbacksIfReady","increasePendingRequestCount","decreasePendingRequestCount","timeoutId","doneCb","pending","getPendingTasks","filter","updateCb","macroTasks","creationLocation","addCallback","whenStable","getPendingRequestCount","findProviders","using","exactMatch","TestabilityRegistry","_applications","_testabilityGetter","addToWindow","registerApplication","testability","unregisterApplication","delete","unregisterAllApplications","getTestability","elem","getAllTestabilities","getAllRootElements","keys","findTestabilityInTree","findInAncestors","_NoopGetTestability","_platformInjector","ALLOW_MULTIPLE_PLATFORMS","PLATFORM_ON_DESTROY","parentPlatformFactory","desc","extraProviders","platform","getPlatform","platformProviders","PlatformRef","inits","initFn","createPlatform","createPlatformInjector","requiredToken","assertPlatform","_injector","_modules","_destroyListeners","bootstrapModuleFactory","moduleFactory","ngZone","ngZoneOption","extra","NoopNgZone","ngZoneEventCoalescing","ngZoneRunCoalescing","getNgZone","ngZoneInjector","moduleRef","exceptionHandler","subscription","_callAndReportToErrorHandler","initStatus","localeId","assertDefined","setLocaleId","_moduleDoBootstrap","bootstrapModule","compilerOptions","optionsReducer","NgModuleFactory","compileNgModuleFactory","ApplicationRef","ngDoBootstrap","module","destroyListener","objs","assign","_zone","_exceptionHandler","_initStatus","_bootstrapListeners","_views","_runningTick","_stable","componentTypes","_onMicrotaskEmptySubscription","tick","isCurrentlyStable","stableSub","unstableSub","assertInAngularZone","merge$1","connector","resetOnError","resetOnComplete","resetOnRefCountZero","wrapperSource","connection","resetConnection","refCount","hasCompleted","hasErrored","cancelReset","resetAndUnsubscribe","conn","dest","handleReset","share","componentOrFactory","componentFactory","resolver","cf","compRef","testabilityRegistry","_loadComponent","attachView","viewRef","componentRef","concat","viewCount","el","_devMode","ChangeDetectorRef","injectChangeDetectorRef","isPipe","createViewRef","platformCore","createPlatformFactory","ApplicationModule","ɵɵdefineNgModule","ɵɵdefineInjector","_DOM","CommonModule","i0","supportsDOMEvents","adapter","ɵsetRootDomAdapter","BrowserDomAdapter","onAndCancel","evt","addEventListener","dispatchEvent","tagName","doc","getDefaultDocument","createHtmlDocument","implementation","createHTMLDocument","isElementNode","nodeType","Node","ELEMENT_NODE","isShadowRoot","DocumentFragment","getGlobalEventTarget","body","getBaseHref","href","baseElement","getAttribute","getBaseElementHref","url","urlParsingNode","pathName","pathname","relativePath","resetBaseElement","getUserAgent","navigator","userAgent","getCookie","cookieStr","encodeURIComponent","cookie","eqIndex","cookieName","cookieValue","decodeURIComponent","ɵparseCookieValue","TRANSITION_ID","SERVER_TRANSITION_PROVIDERS","transitionId","dom","ɵgetDOM","querySelectorAll","getter","setTestabilityGetter","BrowserGetTestability","ɵglobal","testabilities","didWork","decrement","didWork_","parentElement","BrowserXhr","build","XMLHttpRequest","EVENT_MANAGER_PLUGINS","EventManager","plugins","_eventNameToPlugin","p","manager","_plugins","reverse","eventName","plugin","_findPluginFor","addGlobalEventListener","getZone","supports","_doc","SharedStylesHost","_stylesSet","addStyles","additions","onStylesAdded","getAllStyles","DomSharedStylesHost","_hostNodes","head","_addStylesToHost","styleNodes","styleEl","addHost","hostNode","removeHost","removeStyle","styleNode","NAMESPACE_URIS","svg","xhtml","xlink","xml","xmlns","math","COMPONENT_REGEX","compId","flattenStyles","eventHandler","event","preventDefault","returnValue","DomRendererFactory2","eventManager","sharedStylesHost","appId","rendererByCompId","defaultRenderer","DefaultDomRenderer2","EmulatedEncapsulationDomRenderer2","applyToHost","ShadowDomRenderer","createComment","newChild","refChild","oldChild","selectorOrNode","preserveContent","nextSibling","removeAttributeNS","addClass","classList","removeClass","setStyle","removeProperty","nodeValue","decoratePreventDefault","contentAttr","componentShortId","shimContentAttribute","hostAttr","shimHostAttribute","hostEl","shadowRoot","attachShadow","nodeOrShadowRoot","DomEventsPlugin","EventManagerPlugin","MODIFIER_KEYS","_keyMap","Del","Esc","Left","Right","Up","Down","Menu","Scroll","Win","_chromeNumKeyPadMap","A","B","C","D","E","F","G","H","I","J","K","M","N","O","MODIFIER_KEY_GETTERS","alt","altKey","control","ctrlKey","metaKey","shiftKey","KeyEventsPlugin","parseEventName","parsedEvent","outsideHandler","eventCallback","fullKey","domEventName","_normalizeKey","modifierName","keyIdentifier","startsWith","parseInt","getEventKey","modifierGetter","getEventFullKey","keyName","platformBrowser","makeCurrent","ɵsetDocument","BROWSER_MODULE_PROVIDERS","ɵINJECTOR_SCOPE","BrowserModule","parentModule","params","dateTimestampProvider","now","Date","_bufferSize","_windowTime","_timestampProvider","_buffer","_infiniteTimeWindow","_trimBuffer","copy","adjustedBufferSize","taskFn","scheduleBeforeRender","frameMs","_matches","defaultIndex","matchingIndex","isElement","some","elProto","Element","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","ComponentNgElementStrategy","eventEmitters","ReplaySubject","events","innerSubscriber","innerIndex","outerIndex","switchMap","emitters","merge","viewChangeDetectorRef","inputChanges","hasInputChanges","implementsOnChanges","scheduledChangeDetectionFn","scheduledDestroyFn","initialInputValues","unchangedInputs","elementZone","connect","runInZone","initializeComponent","disconnect","getInputValue","setInputValue","value1","value2","strictEquals","recordInputChange","scheduleDetectChanges","childInjector","nodes","childNodes","wildcardIndex","ngContentIndex","findMatchingIndex","extractProjectableNodes","initializeInputs","initializeOutputs","applicationRef","emitter","callNgOnChanges","markViewForCheck","pendingChange","HTMLElement","ngElementEventsSubscription","LOAD_CLICK_CLASS","LoadClickDirective","_el","_renderer","_defaultLoadClickClass","loadClickEventType","loadClickStopPropagation","loadClickPreventDefault","disableAttribute","defaultClass","loadClickClass","stopPropagation","jpLoadClick","finalize","LoadClickModule","SubmitButtonComponent","submit","form","closest","reportValidity","of","FormData","typeMap","string","number","fields","createdOn","integerValue","fetch","method","delta","SubmitButtonModule","getComponentInputs","strategyFactory","ComponentNgElementStrategyFactory","attributeToPropertyInputs","char","camelToDashCase","getDefaultAttributeToPropertyInputs","NgElement","ngElementStrategy","_ngElementStrategy","strategy","attributeChangedCallback","connectedCallback","subscribedToEvents","subscribeToEvents","disconnectedCallback","customEvent","CustomEvent","detail","NgElementImpl","observedAttributes","defineProperty","configurable","enumerable","createCustomElement","customElements","define","enableProdMode","__NgCli_bootstrap_1"],"sources":["./node_modules/rxjs/dist/esm/internal/util/isFunction.js","./node_modules/rxjs/dist/esm/internal/util/createErrorClass.js","./node_modules/rxjs/dist/esm/internal/util/UnsubscriptionError.js","./node_modules/rxjs/dist/esm/internal/util/arrRemove.js","./node_modules/rxjs/dist/esm/internal/Subscription.js","./node_modules/rxjs/dist/esm/internal/config.js","./node_modules/rxjs/dist/esm/internal/scheduler/timeoutProvider.js","./node_modules/rxjs/dist/esm/internal/util/reportUnhandledError.js","./node_modules/rxjs/dist/esm/internal/util/noop.js","./node_modules/rxjs/dist/esm/internal/NotificationFactories.js","./node_modules/rxjs/dist/esm/internal/util/errorContext.js","./node_modules/rxjs/dist/esm/internal/Subscriber.js","./node_modules/rxjs/dist/esm/internal/symbol/observable.js","./node_modules/rxjs/dist/esm/internal/util/identity.js","./node_modules/rxjs/dist/esm/internal/Observable.js","./node_modules/rxjs/dist/esm/internal/util/pipe.js","./node_modules/rxjs/dist/esm/internal/util/ObjectUnsubscribedError.js","./node_modules/rxjs/dist/esm/internal/Subject.js","./node_modules/rxjs/dist/esm/internal/util/lift.js","./node_modules/rxjs/dist/esm/internal/operators/OperatorSubscriber.js","./node_modules/rxjs/dist/esm/internal/operators/map.js","./node_modules/source-map-loader/dist/cjs.js","./node_modules/rxjs/dist/esm/internal/util/isArrayLike.js","./node_modules/rxjs/dist/esm/internal/util/isPromise.js","./node_modules/rxjs/dist/esm/internal/util/isInteropObservable.js","./node_modules/rxjs/dist/esm/internal/util/isAsyncIterable.js","./node_modules/rxjs/dist/esm/internal/util/throwUnobservableError.js","./node_modules/rxjs/dist/esm/internal/symbol/iterator.js","./node_modules/rxjs/dist/esm/internal/util/isIterable.js","./node_modules/rxjs/dist/esm/internal/util/isReadableStreamLike.js","./node_modules/rxjs/dist/esm/internal/observable/innerFrom.js","./node_modules/rxjs/dist/esm/internal/util/executeSchedule.js","./node_modules/rxjs/dist/esm/internal/operators/mergeMap.js","./node_modules/rxjs/dist/esm/internal/operators/mergeInternals.js","./node_modules/rxjs/dist/esm/internal/observable/empty.js","./node_modules/rxjs/dist/esm/internal/util/args.js","./node_modules/rxjs/dist/esm/internal/util/isScheduler.js","./node_modules/rxjs/dist/esm/internal/operators/observeOn.js","./node_modules/rxjs/dist/esm/internal/operators/subscribeOn.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleAsyncIterable.js","./node_modules/rxjs/dist/esm/internal/observable/from.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduled.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleObservable.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleArray.js","./node_modules/rxjs/dist/esm/internal/scheduled/schedulePromise.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleIterable.js","./node_modules/rxjs/dist/esm/internal/scheduled/scheduleReadableStreamLike.js","./node_modules/rxjs/dist/esm/internal/observable/merge.js","./node_modules/rxjs/dist/esm/internal/operators/mergeAll.js","./node_modules/rxjs/dist/esm/internal/operators/share.js","./node_modules/rxjs/dist/esm/internal/operators/take.js","./node_modules/@angular/core/fesm2015/core.mjs","./node_modules/@angular/common/fesm2015/common.mjs","./node_modules/@angular/platform-browser/fesm2015/platform-browser.mjs","./node_modules/rxjs/dist/esm/internal/scheduler/dateTimestampProvider.js","./node_modules/rxjs/dist/esm/internal/ReplaySubject.js","./node_modules/@angular/elements/fesm2015/elements.mjs","./node_modules/rxjs/dist/esm/internal/operators/switchMap.js","./node_modules/@jaspero/ng-helpers/fesm2015/jaspero-ng-helpers.mjs","./node_modules/rxjs/dist/esm/internal/operators/finalize.js","./projects/submit-button/src/app/submit-button.component.ts","./node_modules/rxjs/dist/esm/internal/observable/of.js","./projects/submit-button/src/app/submit-button.module.ts","./projects/submit-button/src/main.ts"],"sourcesContent":["export function isFunction(value) {\n return typeof value === 'function';\n}\n","export function createErrorClass(createImpl) {\n const _super = (instance) => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n","import { createErrorClass } from './createErrorClass';\nexport const UnsubscriptionError = createErrorClass((_super) => function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors\n ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}`\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n});\n","export function arrRemove(arr, item) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n","import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nexport class Subscription {\n constructor(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n unsubscribe() {\n let errors;\n if (!this.closed) {\n this.closed = true;\n const { _parentage } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n }\n else {\n _parentage.remove(this);\n }\n }\n const { initialTeardown: initialFinalizer } = this;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n const { _finalizers } = this;\n if (_finalizers) {\n this._finalizers = null;\n for (const finalizer of _finalizers) {\n try {\n execFinalizer(finalizer);\n }\n catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n add(teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n }\n else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n }\n _hasParent(parent) {\n const { _parentage } = this;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n }\n _addParent(parent) {\n const { _parentage } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n _removeParent(parent) {\n const { _parentage } = this;\n if (_parentage === parent) {\n this._parentage = null;\n }\n else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n remove(teardown) {\n const { _finalizers } = this;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\nSubscription.EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n})();\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return (value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n }\n else {\n finalizer.unsubscribe();\n }\n}\n","export const config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n","export const timeoutProvider = {\n setTimeout(handler, timeout, ...args) {\n const { delegate } = timeoutProvider;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout(handler, timeout, ...args);\n }\n return setTimeout(handler, timeout, ...args);\n },\n clearTimeout(handle) {\n const { delegate } = timeoutProvider;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(() => {\n const { onUnhandledError } = config;\n if (onUnhandledError) {\n onUnhandledError(err);\n }\n else {\n throw err;\n }\n });\n}\n","export function noop() { }\n","export const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined))();\nexport function errorNotification(error) {\n return createNotification('E', undefined, error);\n}\nexport function nextNotification(value) {\n return createNotification('N', value, undefined);\n}\nexport function createNotification(kind, value, error) {\n return {\n kind,\n value,\n error,\n };\n}\n","import { config } from '../config';\nlet context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n const { errorThrown, error } = context;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n","import { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nexport class Subscriber extends Subscription {\n constructor(destination) {\n super();\n this.isStopped = false;\n if (destination) {\n this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(this);\n }\n }\n else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n static create(next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n }\n next(value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n }\n else {\n this._next(value);\n }\n }\n error(err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n }\n else {\n this.isStopped = true;\n this._error(err);\n }\n }\n complete() {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n }\n else {\n this.isStopped = true;\n this._complete();\n }\n }\n unsubscribe() {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null;\n }\n }\n _next(value) {\n this.destination.next(value);\n }\n _error(err) {\n try {\n this.destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n _complete() {\n try {\n this.destination.complete();\n }\n finally {\n this.unsubscribe();\n }\n }\n}\nconst _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nclass ConsumerObserver {\n constructor(partialObserver) {\n this.partialObserver = partialObserver;\n }\n next(value) {\n const { partialObserver } = this;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n error(err) {\n const { partialObserver } = this;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n else {\n handleUnhandledError(err);\n }\n }\n complete() {\n const { partialObserver } = this;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n }\n}\nexport class SafeSubscriber extends Subscriber {\n constructor(observerOrNext, error, complete) {\n super();\n let partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined,\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined,\n };\n }\n else {\n let context;\n if (this && config.useDeprecatedNextContext) {\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context),\n error: observerOrNext.error && bind(observerOrNext.error, context),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context),\n };\n }\n else {\n partialObserver = observerOrNext;\n }\n }\n this.destination = new ConsumerObserver(partialObserver);\n }\n}\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n }\n else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n const { onStoppedNotification } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\nexport const EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n","export const observable = (() => (typeof Symbol === 'function' && Symbol.observable) || '@@observable')();\n","export function identity(x) {\n return x;\n}\n","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nexport class Observable {\n constructor(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n lift(operator) {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n subscribe(observerOrNext, error, complete) {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(() => {\n const { operator, source } = this;\n subscriber.add(operator\n ?\n operator.call(subscriber, source)\n : source\n ?\n this._subscribe(subscriber)\n :\n this._trySubscribe(subscriber));\n });\n return subscriber;\n }\n _trySubscribe(sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.error(err);\n }\n }\n forEach(next, promiseCtor) {\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: (value) => {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n this.subscribe(subscriber);\n });\n }\n _subscribe(subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n }\n [Symbol_observable]() {\n return this;\n }\n pipe(...operations) {\n return pipeFromArray(operations)(this);\n }\n toPromise(promiseCtor) {\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor((resolve, reject) => {\n let value;\n this.subscribe((x) => (value = x), (err) => reject(err), () => resolve(value));\n });\n }\n}\nObservable.create = (subscribe) => {\n return new Observable(subscribe);\n};\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n","import { identity } from './identity';\nexport function pipe(...fns) {\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce((prev, fn) => fn(prev), input);\n };\n}\n","import { createErrorClass } from './createErrorClass';\nexport const ObjectUnsubscribedError = createErrorClass((_super) => function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n});\n","import { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nexport class Subject extends Observable {\n constructor() {\n super();\n this.closed = false;\n this.currentObservers = null;\n this.observers = [];\n this.isStopped = false;\n this.hasError = false;\n this.thrownError = null;\n }\n lift(operator) {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n }\n _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n next(value) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n if (!this.currentObservers) {\n this.currentObservers = Array.from(this.observers);\n }\n for (const observer of this.currentObservers) {\n observer.next(value);\n }\n }\n });\n }\n error(err) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const { observers } = this;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n }\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const { observers } = this;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n }\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n }\n get observed() {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n }\n _trySubscribe(subscriber) {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n _subscribe(subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n _innerSubscribe(subscriber) {\n const { hasError, isStopped, observers } = this;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(() => {\n this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n }\n _checkFinalizedStatuses(subscriber) {\n const { hasError, thrownError, isStopped } = this;\n if (hasError) {\n subscriber.error(thrownError);\n }\n else if (isStopped) {\n subscriber.complete();\n }\n }\n asObservable() {\n const observable = new Observable();\n observable.source = this;\n return observable;\n }\n}\nSubject.create = (destination, source) => {\n return new AnonymousSubject(destination, source);\n};\nexport class AnonymousSubject extends Subject {\n constructor(destination, source) {\n super();\n this.destination = destination;\n this.source = source;\n }\n next(value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n }\n error(err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n }\n complete() {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n _subscribe(subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n }\n}\n","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n return (source) => {\n if (hasLift(source)) {\n return source.lift(function (liftedSource) {\n try {\n return init(liftedSource, this);\n }\n catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n","import { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nexport class OperatorSubscriber extends Subscriber {\n constructor(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n super(destination);\n this.onFinalize = onFinalize;\n this.shouldUnsubscribe = shouldUnsubscribe;\n this._next = onNext\n ? function (value) {\n try {\n onNext(value);\n }\n catch (err) {\n destination.error(err);\n }\n }\n : super._next;\n this._error = onError\n ? function (err) {\n try {\n onError(err);\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : super._error;\n this._complete = onComplete\n ? function () {\n try {\n onComplete();\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : super._complete;\n }\n unsubscribe() {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n const { closed } = this;\n super.unsubscribe();\n !closed && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n }\n}\n","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n return operate((source, subscriber) => {\n let index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, (value) => {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","export const isArrayLike = ((x) => x && typeof x.length === 'number' && typeof x !== 'function');\n","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n return isFunction(input[Symbol_observable]);\n}\n","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n","export function createInvalidObservableTypeError(input) {\n return new TypeError(`You provided ${input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`);\n}\n","export function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport const iterator = getSymbolIterator();\n","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n","import { __asyncGenerator, __await } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function* readableStreamLikeToAsyncGenerator_1() {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { value, done } = yield __await(reader.read());\n if (done) {\n return yield __await(void 0);\n }\n yield yield __await(value);\n }\n }\n finally {\n reader.releaseLock();\n }\n });\n}\nexport function isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n","import { __asyncValues, __awaiter } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n return new Observable((subscriber) => {\n const obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\nexport function fromArrayLike(array) {\n return new Observable((subscriber) => {\n for (let i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nexport function fromPromise(promise) {\n return new Observable((subscriber) => {\n promise\n .then((value) => {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, (err) => subscriber.error(err))\n .then(null, reportUnhandledError);\n });\n}\nexport function fromIterable(iterable) {\n return new Observable((subscriber) => {\n for (const value of iterable) {\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n subscriber.complete();\n });\n}\nexport function fromAsyncIterable(asyncIterable) {\n return new Observable((subscriber) => {\n process(asyncIterable, subscriber).catch((err) => subscriber.error(err));\n });\n}\nexport function fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_1, _a;\n return __awaiter(this, void 0, void 0, function* () {\n try {\n for (asyncIterable_1 = __asyncValues(asyncIterable); asyncIterable_1_1 = yield asyncIterable_1.next(), !asyncIterable_1_1.done;) {\n const value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return)) yield _a.call(asyncIterable_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriber.complete();\n });\n}\n","export function executeSchedule(parentSubscription, scheduler, work, delay = 0, repeat = false) {\n const scheduleSubscription = scheduler.schedule(function () {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n }\n else {\n this.unsubscribe();\n }\n }, delay);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent = Infinity) {\n if (isFunction(resultSelector)) {\n return mergeMap((a, i) => map((b, ii) => resultSelector(a, b, i, ii))(innerFrom(project(a, i))), concurrent);\n }\n else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return operate((source, subscriber) => mergeInternals(source, subscriber, project, concurrent));\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n const buffer = [];\n let active = 0;\n let index = 0;\n let isComplete = false;\n const checkComplete = () => {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n const outerNext = (value) => (active < concurrent ? doInnerSub(value) : buffer.push(value));\n const doInnerSub = (value) => {\n expand && subscriber.next(value);\n active++;\n let innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, (innerValue) => {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n }\n else {\n subscriber.next(innerValue);\n }\n }, () => {\n innerComplete = true;\n }, undefined, () => {\n if (innerComplete) {\n try {\n active--;\n while (buffer.length && active < concurrent) {\n const bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, () => doInnerSub(bufferedValue));\n }\n else {\n doInnerSub(bufferedValue);\n }\n }\n checkComplete();\n }\n catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, () => {\n isComplete = true;\n checkComplete();\n }));\n return () => {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n","import { Observable } from '../Observable';\nexport const EMPTY = new Observable((subscriber) => subscriber.complete());\nexport function empty(scheduler) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n return new Observable((subscriber) => scheduler.schedule(() => subscriber.complete()));\n}\n","import { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nexport function popResultSelector(args) {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\nexport function popScheduler(args) {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\nexport function popNumber(args, defaultValue) {\n return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\n","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay = 0) {\n return operate((source, subscriber) => {\n source.subscribe(createOperatorSubscriber(subscriber, (value) => executeSchedule(subscriber, scheduler, () => subscriber.next(value), delay), () => executeSchedule(subscriber, scheduler, () => subscriber.complete(), delay), (err) => executeSchedule(subscriber, scheduler, () => subscriber.error(err), delay)));\n });\n}\n","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay = 0) {\n return operate((source, subscriber) => {\n subscriber.add(scheduler.schedule(() => source.subscribe(subscriber), delay));\n });\n}\n","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable((subscriber) => {\n executeSchedule(subscriber, scheduler, () => {\n const iterator = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, () => {\n iterator.next().then((result) => {\n if (result.done) {\n subscriber.complete();\n }\n else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n return new Observable((subscriber) => {\n let i = 0;\n return scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n }\n else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n return new Observable((subscriber) => {\n let iterator;\n executeSchedule(subscriber, scheduler, () => {\n iterator = input[Symbol_iterator]();\n executeSchedule(subscriber, scheduler, () => {\n let value;\n let done;\n try {\n ({ value, done } = iterator.next());\n }\n catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n }\n else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return () => isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return();\n });\n}\n","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n","import { mergeAll } from '../operators/mergeAll';\nimport { innerFrom } from './innerFrom';\nimport { EMPTY } from './empty';\nimport { popNumber, popScheduler } from '../util/args';\nimport { from } from './from';\nexport function merge(...args) {\n const scheduler = popScheduler(args);\n const concurrent = popNumber(args, Infinity);\n const sources = args;\n return !sources.length\n ?\n EMPTY\n : sources.length === 1\n ?\n innerFrom(sources[0])\n :\n mergeAll(concurrent)(from(sources, scheduler));\n}\n","import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nexport function mergeAll(concurrent = Infinity) {\n return mergeMap(identity, concurrent);\n}\n","import { from } from '../observable/from';\nimport { take } from '../operators/take';\nimport { Subject } from '../Subject';\nimport { SafeSubscriber } from '../Subscriber';\nimport { operate } from '../util/lift';\nexport function share(options = {}) {\n const { connector = () => new Subject(), resetOnError = true, resetOnComplete = true, resetOnRefCountZero = true } = options;\n return (wrapperSource) => {\n let connection = null;\n let resetConnection = null;\n let subject = null;\n let refCount = 0;\n let hasCompleted = false;\n let hasErrored = false;\n const cancelReset = () => {\n resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe();\n resetConnection = null;\n };\n const reset = () => {\n cancelReset();\n connection = subject = null;\n hasCompleted = hasErrored = false;\n };\n const resetAndUnsubscribe = () => {\n const conn = connection;\n reset();\n conn === null || conn === void 0 ? void 0 : conn.unsubscribe();\n };\n return operate((source, subscriber) => {\n refCount++;\n if (!hasErrored && !hasCompleted) {\n cancelReset();\n }\n const dest = (subject = subject !== null && subject !== void 0 ? subject : connector());\n subscriber.add(() => {\n refCount--;\n if (refCount === 0 && !hasErrored && !hasCompleted) {\n resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);\n }\n });\n dest.subscribe(subscriber);\n if (!connection) {\n connection = new SafeSubscriber({\n next: (value) => dest.next(value),\n error: (err) => {\n hasErrored = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnError, err);\n dest.error(err);\n },\n complete: () => {\n hasCompleted = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnComplete);\n dest.complete();\n },\n });\n from(source).subscribe(connection);\n }\n })(wrapperSource);\n };\n}\nfunction handleReset(reset, on, ...args) {\n if (on === true) {\n reset();\n return null;\n }\n if (on === false) {\n return null;\n }\n return on(...args)\n .pipe(take(1))\n .subscribe(() => reset());\n}\n","import { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function take(count) {\n return count <= 0\n ?\n () => EMPTY\n : operate((source, subscriber) => {\n let seen = 0;\n source.subscribe(createOperatorSubscriber(subscriber, (value) => {\n if (++seen <= count) {\n subscriber.next(value);\n if (count <= seen) {\n subscriber.complete();\n }\n }\n }));\n });\n}\n","/**\n * @license Angular v13.3.4\n * (c) 2010-2022 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { Subject, Subscription, Observable, merge as merge$1 } from 'rxjs';\nimport { share } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction getClosureSafeProperty(objWithPropertyToExtract) {\n for (let key in objWithPropertyToExtract) {\n if (objWithPropertyToExtract[key] === getClosureSafeProperty) {\n return key;\n }\n }\n throw Error('Could not find renamed property on target object.');\n}\n/**\n * Sets properties on a target object from a source object, but only if\n * the property doesn't already exist on the target object.\n * @param target The target to set properties on\n * @param source The source of the property keys and values to set\n */\nfunction fillProperties(target, source) {\n for (const key in source) {\n if (source.hasOwnProperty(key) && !target.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction stringify(token) {\n if (typeof token === 'string') {\n return token;\n }\n if (Array.isArray(token)) {\n return '[' + token.map(stringify).join(', ') + ']';\n }\n if (token == null) {\n return '' + token;\n }\n if (token.overriddenName) {\n return `${token.overriddenName}`;\n }\n if (token.name) {\n return `${token.name}`;\n }\n const res = token.toString();\n if (res == null) {\n return '' + res;\n }\n const newLineIndex = res.indexOf('\\n');\n return newLineIndex === -1 ? res : res.substring(0, newLineIndex);\n}\n/**\n * Concatenates two strings with separator, allocating new strings only when necessary.\n *\n * @param before before string.\n * @param separator separator string.\n * @param after after string.\n * @returns concatenated string.\n */\nfunction concatStringsWithSpace(before, after) {\n return (before == null || before === '') ?\n (after === null ? '' : after) :\n ((after == null || after === '') ? before : before + ' ' + after);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst __forward_ref__ = getClosureSafeProperty({ __forward_ref__: getClosureSafeProperty });\n/**\n * Allows to refer to references which are not yet defined.\n *\n * For instance, `forwardRef` is used when the `token` which we need to refer to for the purposes of\n * DI is declared, but not yet defined. It is also used when the `token` which we use when creating\n * a query is not yet defined.\n *\n * @usageNotes\n * ### Example\n * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref'}\n * @publicApi\n */\nfunction forwardRef(forwardRefFn) {\n forwardRefFn.__forward_ref__ = forwardRef;\n forwardRefFn.toString = function () {\n return stringify(this());\n };\n return forwardRefFn;\n}\n/**\n * Lazily retrieves the reference value from a forwardRef.\n *\n * Acts as the identity function when given a non-forward-ref value.\n *\n * @usageNotes\n * ### Example\n *\n * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='resolve_forward_ref'}\n *\n * @see `forwardRef`\n * @publicApi\n */\nfunction resolveForwardRef(type) {\n return isForwardRef(type) ? type() : type;\n}\n/** Checks whether a function is wrapped by a `forwardRef`. */\nfunction isForwardRef(fn) {\n return typeof fn === 'function' && fn.hasOwnProperty(__forward_ref__) &&\n fn.__forward_ref__ === forwardRef;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Base URL for the error details page.\n *\n * Keep the files below in full sync:\n * - packages/compiler-cli/src/ngtsc/diagnostics/src/error_details_base_url.ts\n * - packages/core/src/error_details_base_url.ts\n */\nconst ERROR_DETAILS_PAGE_BASE_URL = 'https://angular.io/errors';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Class that represents a runtime error.\n * Formats and outputs the error message in a consistent way.\n *\n * Example:\n * ```\n * throw new RuntimeError(\n * RuntimeErrorCode.INJECTOR_ALREADY_DESTROYED,\n * ngDevMode && 'Injector has already been destroyed.');\n * ```\n *\n * Note: the `message` argument contains a descriptive error message as a string in development\n * mode (when the `ngDevMode` is defined). In production mode (after tree-shaking pass), the\n * `message` argument becomes `false`, thus we account for it in the typings and the runtime logic.\n */\nclass RuntimeError extends Error {\n constructor(code, message) {\n super(formatRuntimeError(code, message));\n this.code = code;\n }\n}\n/**\n * Called to format a runtime error.\n * See additional info on the `message` argument type in the `RuntimeError` class description.\n */\nfunction formatRuntimeError(code, message) {\n // Error code might be a negative number, which is a special marker that instructs the logic to\n // generate a link to the error details page on angular.io.\n const fullCode = `NG0${Math.abs(code)}`;\n let errorMessage = `${fullCode}${message ? ': ' + message : ''}`;\n if (ngDevMode && code < 0) {\n errorMessage = `${errorMessage}. Find more at ${ERROR_DETAILS_PAGE_BASE_URL}/${fullCode}`;\n }\n return errorMessage;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Used for stringify render output in Ivy.\n * Important! This function is very performance-sensitive and we should\n * be extra careful not to introduce megamorphic reads in it.\n * Check `core/test/render3/perf/render_stringify` for benchmarks and alternate implementations.\n */\nfunction renderStringify(value) {\n if (typeof value === 'string')\n return value;\n if (value == null)\n return '';\n // Use `String` so that it invokes the `toString` method of the value. Note that this\n // appears to be faster than calling `value.toString` (see `render_stringify` benchmark).\n return String(value);\n}\n/**\n * Used to stringify a value so that it can be displayed in an error message.\n * Important! This function contains a megamorphic read and should only be\n * used for error messages.\n */\nfunction stringifyForError(value) {\n if (typeof value === 'function')\n return value.name || value.toString();\n if (typeof value === 'object' && value != null && typeof value.type === 'function') {\n return value.type.name || value.type.toString();\n }\n return renderStringify(value);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Called when directives inject each other (creating a circular dependency) */\nfunction throwCyclicDependencyError(token, path) {\n const depPath = path ? `. Dependency path: ${path.join(' > ')} > ${token}` : '';\n throw new RuntimeError(-200 /* CYCLIC_DI_DEPENDENCY */, `Circular dependency in DI detected for ${token}${depPath}`);\n}\nfunction throwMixedMultiProviderError() {\n throw new Error(`Cannot mix multi providers and regular providers`);\n}\nfunction throwInvalidProviderError(ngModuleType, providers, provider) {\n let ngModuleDetail = '';\n if (ngModuleType && providers) {\n const providerDetail = providers.map(v => v == provider ? '?' + provider + '?' : '...');\n ngModuleDetail =\n ` - only instances of Provider and Type are allowed, got: [${providerDetail.join(', ')}]`;\n }\n throw new Error(`Invalid provider for the NgModule '${stringify(ngModuleType)}'` + ngModuleDetail);\n}\n/** Throws an error when a token is not found in DI. */\nfunction throwProviderNotFoundError(token, injectorName) {\n const injectorDetails = injectorName ? ` in ${injectorName}` : '';\n throw new RuntimeError(-201 /* PROVIDER_NOT_FOUND */, `No provider for ${stringifyForError(token)} found${injectorDetails}`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction assertNumber(actual, msg) {\n if (!(typeof actual === 'number')) {\n throwError(msg, typeof actual, 'number', '===');\n }\n}\nfunction assertNumberInRange(actual, minInclusive, maxInclusive) {\n assertNumber(actual, 'Expected a number');\n assertLessThanOrEqual(actual, maxInclusive, 'Expected number to be less than or equal to');\n assertGreaterThanOrEqual(actual, minInclusive, 'Expected number to be greater than or equal to');\n}\nfunction assertString(actual, msg) {\n if (!(typeof actual === 'string')) {\n throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');\n }\n}\nfunction assertFunction(actual, msg) {\n if (!(typeof actual === 'function')) {\n throwError(msg, actual === null ? 'null' : typeof actual, 'function', '===');\n }\n}\nfunction assertEqual(actual, expected, msg) {\n if (!(actual == expected)) {\n throwError(msg, actual, expected, '==');\n }\n}\nfunction assertNotEqual(actual, expected, msg) {\n if (!(actual != expected)) {\n throwError(msg, actual, expected, '!=');\n }\n}\nfunction assertSame(actual, expected, msg) {\n if (!(actual === expected)) {\n throwError(msg, actual, expected, '===');\n }\n}\nfunction assertNotSame(actual, expected, msg) {\n if (!(actual !== expected)) {\n throwError(msg, actual, expected, '!==');\n }\n}\nfunction assertLessThan(actual, expected, msg) {\n if (!(actual < expected)) {\n throwError(msg, actual, expected, '<');\n }\n}\nfunction assertLessThanOrEqual(actual, expected, msg) {\n if (!(actual <= expected)) {\n throwError(msg, actual, expected, '<=');\n }\n}\nfunction assertGreaterThan(actual, expected, msg) {\n if (!(actual > expected)) {\n throwError(msg, actual, expected, '>');\n }\n}\nfunction assertGreaterThanOrEqual(actual, expected, msg) {\n if (!(actual >= expected)) {\n throwError(msg, actual, expected, '>=');\n }\n}\nfunction assertNotDefined(actual, msg) {\n if (actual != null) {\n throwError(msg, actual, null, '==');\n }\n}\nfunction assertDefined(actual, msg) {\n if (actual == null) {\n throwError(msg, actual, null, '!=');\n }\n}\nfunction throwError(msg, actual, expected, comparison) {\n throw new Error(`ASSERTION ERROR: ${msg}` +\n (comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`));\n}\nfunction assertDomNode(node) {\n // If we're in a worker, `Node` will not be defined.\n if (!(typeof Node !== 'undefined' && node instanceof Node) &&\n !(typeof node === 'object' && node != null &&\n node.constructor.name === 'WebWorkerRenderNode')) {\n throwError(`The provided value must be an instance of a DOM Node but got ${stringify(node)}`);\n }\n}\nfunction assertIndexInRange(arr, index) {\n assertDefined(arr, 'Array must be defined.');\n const maxLen = arr.length;\n if (index < 0 || index >= maxLen) {\n throwError(`Index expected to be less than ${maxLen} but got ${index}`);\n }\n}\nfunction assertOneOf(value, ...validValues) {\n if (validValues.indexOf(value) !== -1)\n return true;\n throwError(`Expected value to be one of ${JSON.stringify(validValues)} but was ${JSON.stringify(value)}.`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Construct an injectable definition which defines how a token will be constructed by the DI\n * system, and in which injectors (if any) it will be available.\n *\n * This should be assigned to a static `ɵprov` field on a type, which will then be an\n * `InjectableType`.\n *\n * Options:\n * * `providedIn` determines which injectors will include the injectable, by either associating it\n * with an `@NgModule` or other `InjectorType`, or by specifying that this injectable should be\n * provided in the `'root'` injector, which will be the application-level injector in most apps.\n * * `factory` gives the zero argument function which will create an instance of the injectable.\n * The factory can call `inject` to access the `Injector` and request injection of dependencies.\n *\n * @codeGenApi\n * @publicApi This instruction has been emitted by ViewEngine for some time and is deployed to npm.\n */\nfunction ɵɵdefineInjectable(opts) {\n return {\n token: opts.token,\n providedIn: opts.providedIn || null,\n factory: opts.factory,\n value: undefined,\n };\n}\n/**\n * @deprecated in v8, delete after v10. This API should be used only by generated code, and that\n * code should now use ɵɵdefineInjectable instead.\n * @publicApi\n */\nconst defineInjectable = ɵɵdefineInjectable;\n/**\n * Construct an `InjectorDef` which configures an injector.\n *\n * This should be assigned to a static injector def (`ɵinj`) field on a type, which will then be an\n * `InjectorType`.\n *\n * Options:\n *\n * * `providers`: an optional array of providers to add to the injector. Each provider must\n * either have a factory or point to a type which has a `ɵprov` static property (the\n * type must be an `InjectableType`).\n * * `imports`: an optional array of imports of other `InjectorType`s or `InjectorTypeWithModule`s\n * whose providers will also be added to the injector. Locally provided types will override\n * providers from imports.\n *\n * @codeGenApi\n */\nfunction ɵɵdefineInjector(options) {\n return { providers: options.providers || [], imports: options.imports || [] };\n}\n/**\n * Read the injectable def (`ɵprov`) for `type` in a way which is immune to accidentally reading\n * inherited value.\n *\n * @param type A type which may have its own (non-inherited) `ɵprov`.\n */\nfunction getInjectableDef(type) {\n return getOwnDefinition(type, NG_PROV_DEF) || getOwnDefinition(type, NG_INJECTABLE_DEF);\n}\n/**\n * Return definition only if it is defined directly on `type` and is not inherited from a base\n * class of `type`.\n */\nfunction getOwnDefinition(type, field) {\n return type.hasOwnProperty(field) ? type[field] : null;\n}\n/**\n * Read the injectable def (`ɵprov`) for `type` or read the `ɵprov` from one of its ancestors.\n *\n * @param type A type which may have `ɵprov`, via inheritance.\n *\n * @deprecated Will be removed in a future version of Angular, where an error will occur in the\n * scenario if we find the `ɵprov` on an ancestor only.\n */\nfunction getInheritedInjectableDef(type) {\n const def = type && (type[NG_PROV_DEF] || type[NG_INJECTABLE_DEF]);\n if (def) {\n const typeName = getTypeName(type);\n // TODO(FW-1307): Re-add ngDevMode when closure can handle it\n // ngDevMode &&\n console.warn(`DEPRECATED: DI is instantiating a token \"${typeName}\" that inherits its @Injectable decorator but does not provide one itself.\\n` +\n `This will become an error in a future version of Angular. Please add @Injectable() to the \"${typeName}\" class.`);\n return def;\n }\n else {\n return null;\n }\n}\n/** Gets the name of a type, accounting for some cross-browser differences. */\nfunction getTypeName(type) {\n // `Function.prototype.name` behaves differently between IE and other browsers. In most browsers\n // it'll always return the name of the function itself, no matter how many other functions it\n // inherits from. On IE the function doesn't have its own `name` property, but it takes it from\n // the lowest level in the prototype chain. E.g. if we have `class Foo extends Parent` most\n // browsers will evaluate `Foo.name` to `Foo` while IE will return `Parent`. We work around\n // the issue by converting the function to a string and parsing its name out that way via a regex.\n if (type.hasOwnProperty('name')) {\n return type.name;\n }\n const match = ('' + type).match(/^function\\s*([^\\s(]+)/);\n return match === null ? '' : match[1];\n}\n/**\n * Read the injector def type in a way which is immune to accidentally reading inherited value.\n *\n * @param type type which may have an injector def (`ɵinj`)\n */\nfunction getInjectorDef(type) {\n return type && (type.hasOwnProperty(NG_INJ_DEF) || type.hasOwnProperty(NG_INJECTOR_DEF)) ?\n type[NG_INJ_DEF] :\n null;\n}\nconst NG_PROV_DEF = getClosureSafeProperty({ ɵprov: getClosureSafeProperty });\nconst NG_INJ_DEF = getClosureSafeProperty({ ɵinj: getClosureSafeProperty });\n// We need to keep these around so we can read off old defs if new defs are unavailable\nconst NG_INJECTABLE_DEF = getClosureSafeProperty({ ngInjectableDef: getClosureSafeProperty });\nconst NG_INJECTOR_DEF = getClosureSafeProperty({ ngInjectorDef: getClosureSafeProperty });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection flags for DI.\n *\n * @publicApi\n */\nvar InjectFlags;\n(function (InjectFlags) {\n // TODO(alxhub): make this 'const' (and remove `InternalInjectFlags` enum) when ngc no longer\n // writes exports of it into ngfactory files.\n /** Check self and check parent injector if needed */\n InjectFlags[InjectFlags[\"Default\"] = 0] = \"Default\";\n /**\n * Specifies that an injector should retrieve a dependency from any injector until reaching the\n * host element of the current component. (Only used with Element Injector)\n */\n InjectFlags[InjectFlags[\"Host\"] = 1] = \"Host\";\n /** Don't ascend to ancestors of the node requesting injection. */\n InjectFlags[InjectFlags[\"Self\"] = 2] = \"Self\";\n /** Skip the node that is requesting injection. */\n InjectFlags[InjectFlags[\"SkipSelf\"] = 4] = \"SkipSelf\";\n /** Inject `defaultValue` instead if token not found. */\n InjectFlags[InjectFlags[\"Optional\"] = 8] = \"Optional\";\n})(InjectFlags || (InjectFlags = {}));\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Current implementation of inject.\n *\n * By default, it is `injectInjectorOnly`, which makes it `Injector`-only aware. It can be changed\n * to `directiveInject`, which brings in the `NodeInjector` system of ivy. It is designed this\n * way for two reasons:\n * 1. `Injector` should not depend on ivy logic.\n * 2. To maintain tree shake-ability we don't want to bring in unnecessary code.\n */\nlet _injectImplementation;\nfunction getInjectImplementation() {\n return _injectImplementation;\n}\n/**\n * Sets the current inject implementation.\n */\nfunction setInjectImplementation(impl) {\n const previous = _injectImplementation;\n _injectImplementation = impl;\n return previous;\n}\n/**\n * Injects `root` tokens in limp mode.\n *\n * If no injector exists, we can still inject tree-shakable providers which have `providedIn` set to\n * `\"root\"`. This is known as the limp mode injection. In such case the value is stored in the\n * injectable definition.\n */\nfunction injectRootLimpMode(token, notFoundValue, flags) {\n const injectableDef = getInjectableDef(token);\n if (injectableDef && injectableDef.providedIn == 'root') {\n return injectableDef.value === undefined ? injectableDef.value = injectableDef.factory() :\n injectableDef.value;\n }\n if (flags & InjectFlags.Optional)\n return null;\n if (notFoundValue !== undefined)\n return notFoundValue;\n throwProviderNotFoundError(stringify(token), 'Injector');\n}\n/**\n * Assert that `_injectImplementation` is not `fn`.\n *\n * This is useful, to prevent infinite recursion.\n *\n * @param fn Function which it should not equal to\n */\nfunction assertInjectImplementationNotEqual(fn) {\n ngDevMode &&\n assertNotEqual(_injectImplementation, fn, 'Calling ɵɵinject would cause infinite recursion');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Convince closure compiler that the wrapped function has no side-effects.\n *\n * Closure compiler always assumes that `toString` has no side-effects. We use this quirk to\n * allow us to execute a function but have closure compiler mark the call as no-side-effects.\n * It is important that the return value for the `noSideEffects` function be assigned\n * to something which is retained otherwise the call to `noSideEffects` will be removed by closure\n * compiler.\n */\nfunction noSideEffects(fn) {\n return { toString: fn }.toString();\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The strategy that the default change detector uses to detect changes.\n * When set, takes effect the next time change detection is triggered.\n *\n * @see {@link ChangeDetectorRef#usage-notes Change detection usage}\n *\n * @publicApi\n */\nvar ChangeDetectionStrategy;\n(function (ChangeDetectionStrategy) {\n /**\n * Use the `CheckOnce` strategy, meaning that automatic change detection is deactivated\n * until reactivated by setting the strategy to `Default` (`CheckAlways`).\n * Change detection can still be explicitly invoked.\n * This strategy applies to all child directives and cannot be overridden.\n */\n ChangeDetectionStrategy[ChangeDetectionStrategy[\"OnPush\"] = 0] = \"OnPush\";\n /**\n * Use the default `CheckAlways` strategy, in which change detection is automatic until\n * explicitly deactivated.\n */\n ChangeDetectionStrategy[ChangeDetectionStrategy[\"Default\"] = 1] = \"Default\";\n})(ChangeDetectionStrategy || (ChangeDetectionStrategy = {}));\n/**\n * Defines the possible states of the default change detector.\n * @see `ChangeDetectorRef`\n */\nvar ChangeDetectorStatus;\n(function (ChangeDetectorStatus) {\n /**\n * A state in which, after calling `detectChanges()`, the change detector\n * state becomes `Checked`, and must be explicitly invoked or reactivated.\n */\n ChangeDetectorStatus[ChangeDetectorStatus[\"CheckOnce\"] = 0] = \"CheckOnce\";\n /**\n * A state in which change detection is skipped until the change detector mode\n * becomes `CheckOnce`.\n */\n ChangeDetectorStatus[ChangeDetectorStatus[\"Checked\"] = 1] = \"Checked\";\n /**\n * A state in which change detection continues automatically until explicitly\n * deactivated.\n */\n ChangeDetectorStatus[ChangeDetectorStatus[\"CheckAlways\"] = 2] = \"CheckAlways\";\n /**\n * A state in which a change detector sub tree is not a part of the main tree and\n * should be skipped.\n */\n ChangeDetectorStatus[ChangeDetectorStatus[\"Detached\"] = 3] = \"Detached\";\n /**\n * Indicates that the change detector encountered an error checking a binding\n * or calling a directive lifecycle method and is now in an inconsistent state. Change\n * detectors in this state do not detect changes.\n */\n ChangeDetectorStatus[ChangeDetectorStatus[\"Errored\"] = 4] = \"Errored\";\n /**\n * Indicates that the change detector has been destroyed.\n */\n ChangeDetectorStatus[ChangeDetectorStatus[\"Destroyed\"] = 5] = \"Destroyed\";\n})(ChangeDetectorStatus || (ChangeDetectorStatus = {}));\n/**\n * Reports whether a given strategy is currently the default for change detection.\n * @param changeDetectionStrategy The strategy to check.\n * @returns True if the given strategy is the current default, false otherwise.\n * @see `ChangeDetectorStatus`\n * @see `ChangeDetectorRef`\n */\nfunction isDefaultChangeDetectionStrategy(changeDetectionStrategy) {\n return changeDetectionStrategy == null ||\n changeDetectionStrategy === ChangeDetectionStrategy.Default;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Defines the CSS styles encapsulation policies for the {@link Component} decorator's\n * `encapsulation` option.\n *\n * See {@link Component#encapsulation encapsulation}.\n *\n * @usageNotes\n * ### Example\n *\n * {@example core/ts/metadata/encapsulation.ts region='longform'}\n *\n * @publicApi\n */\nvar ViewEncapsulation$1;\n(function (ViewEncapsulation) {\n // TODO: consider making `ViewEncapsulation` a `const enum` instead. See\n // https://github.com/angular/angular/issues/44119 for additional information.\n /**\n * Emulates a native Shadow DOM encapsulation behavior by adding a specific attribute to the\n * component's host element and applying the same attribute to all the CSS selectors provided\n * via {@link Component#styles styles} or {@link Component#styleUrls styleUrls}.\n *\n * This is the default option.\n */\n ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.\n /**\n * Doesn't provide any sort of CSS style encapsulation, meaning that all the styles provided\n * via {@link Component#styles styles} or {@link Component#styleUrls styleUrls} are applicable\n * to any HTML element of the application regardless of their host Component.\n */\n ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n /**\n * Uses the browser's native Shadow DOM API to encapsulate CSS styles, meaning that it creates\n * a ShadowRoot for the component's host element which is then used to encapsulate\n * all the Component's styling.\n */\n ViewEncapsulation[ViewEncapsulation[\"ShadowDom\"] = 3] = \"ShadowDom\";\n})(ViewEncapsulation$1 || (ViewEncapsulation$1 = {}));\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst __globalThis = typeof globalThis !== 'undefined' && globalThis;\nconst __window = typeof window !== 'undefined' && window;\nconst __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&\n self instanceof WorkerGlobalScope && self;\nconst __global = typeof global !== 'undefined' && global;\n// Always use __globalThis if available, which is the spec-defined global variable across all\n// environments, then fallback to __global first, because in Node tests both __global and\n// __window may be defined and _global should be __global in that case.\nconst _global = __globalThis || __global || __window || __self;\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction ngDevModeResetPerfCounters() {\n const locationString = typeof location !== 'undefined' ? location.toString() : '';\n const newCounters = {\n namedConstructors: locationString.indexOf('ngDevMode=namedConstructors') != -1,\n firstCreatePass: 0,\n tNode: 0,\n tView: 0,\n rendererCreateTextNode: 0,\n rendererSetText: 0,\n rendererCreateElement: 0,\n rendererAddEventListener: 0,\n rendererSetAttribute: 0,\n rendererRemoveAttribute: 0,\n rendererSetProperty: 0,\n rendererSetClassName: 0,\n rendererAddClass: 0,\n rendererRemoveClass: 0,\n rendererSetStyle: 0,\n rendererRemoveStyle: 0,\n rendererDestroy: 0,\n rendererDestroyNode: 0,\n rendererMoveNode: 0,\n rendererRemoveNode: 0,\n rendererAppendChild: 0,\n rendererInsertBefore: 0,\n rendererCreateComment: 0,\n };\n // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.\n const allowNgDevModeTrue = locationString.indexOf('ngDevMode=false') === -1;\n _global['ngDevMode'] = allowNgDevModeTrue && newCounters;\n return newCounters;\n}\n/**\n * This function checks to see if the `ngDevMode` has been set. If yes,\n * then we honor it, otherwise we default to dev mode with additional checks.\n *\n * The idea is that unless we are doing production build where we explicitly\n * set `ngDevMode == false` we should be helping the developer by providing\n * as much early warning and errors as possible.\n *\n * `ɵɵdefineComponent` is guaranteed to have been called before any component template functions\n * (and thus Ivy instructions), so a single initialization there is sufficient to ensure ngDevMode\n * is defined for the entire instruction set.\n *\n * When checking `ngDevMode` on toplevel, always init it before referencing it\n * (e.g. `((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode())`), otherwise you can\n * get a `ReferenceError` like in https://github.com/angular/angular/issues/31595.\n *\n * Details on possible values for `ngDevMode` can be found on its docstring.\n *\n * NOTE:\n * - changes to the `ngDevMode` name must be synced with `compiler-cli/src/tooling.ts`.\n */\nfunction initNgDevMode() {\n // The below checks are to ensure that calling `initNgDevMode` multiple times does not\n // reset the counters.\n // If the `ngDevMode` is not an object, then it means we have not created the perf counters\n // yet.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (typeof ngDevMode !== 'object') {\n ngDevModeResetPerfCounters();\n }\n return typeof ngDevMode !== 'undefined' && !!ngDevMode;\n }\n return false;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * This file contains reuseable \"empty\" symbols that can be used as default return values\n * in different parts of the rendering code. Because the same symbols are returned, this\n * allows for identity checks against these values to be consistently used by the framework\n * code.\n */\nconst EMPTY_OBJ = {};\nconst EMPTY_ARRAY = [];\n// freezing the values prevents any code from accidentally inserting new values in\nif ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) {\n // These property accesses can be ignored because ngDevMode will be set to false\n // when optimizing code and the whole if statement will be dropped.\n // tslint:disable-next-line:no-toplevel-property-access\n Object.freeze(EMPTY_OBJ);\n // tslint:disable-next-line:no-toplevel-property-access\n Object.freeze(EMPTY_ARRAY);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst NG_COMP_DEF = getClosureSafeProperty({ ɵcmp: getClosureSafeProperty });\nconst NG_DIR_DEF = getClosureSafeProperty({ ɵdir: getClosureSafeProperty });\nconst NG_PIPE_DEF = getClosureSafeProperty({ ɵpipe: getClosureSafeProperty });\nconst NG_MOD_DEF = getClosureSafeProperty({ ɵmod: getClosureSafeProperty });\nconst NG_FACTORY_DEF = getClosureSafeProperty({ ɵfac: getClosureSafeProperty });\n/**\n * If a directive is diPublic, bloomAdd sets a property on the type with this constant as\n * the key and the directive's unique ID as the value. This allows us to map directives to their\n * bloom filter bit for DI.\n */\n// TODO(misko): This is wrong. The NG_ELEMENT_ID should never be minified.\nconst NG_ELEMENT_ID = getClosureSafeProperty({ __NG_ELEMENT_ID__: getClosureSafeProperty });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet _renderCompCount = 0;\n/**\n * Create a component definition object.\n *\n *\n * # Example\n * ```\n * class MyDirective {\n * // Generated by Angular Template Compiler\n * // [Symbol] syntax will not be supported by TypeScript until v2.7\n * static ɵcmp = defineComponent({\n * ...\n * });\n * }\n * ```\n * @codeGenApi\n */\nfunction ɵɵdefineComponent(componentDefinition) {\n return noSideEffects(() => {\n // Initialize ngDevMode. This must be the first statement in ɵɵdefineComponent.\n // See the `initNgDevMode` docstring for more information.\n (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();\n const type = componentDefinition.type;\n const declaredInputs = {};\n const def = {\n type: type,\n providersResolver: null,\n decls: componentDefinition.decls,\n vars: componentDefinition.vars,\n factory: null,\n template: componentDefinition.template || null,\n consts: componentDefinition.consts || null,\n ngContentSelectors: componentDefinition.ngContentSelectors,\n hostBindings: componentDefinition.hostBindings || null,\n hostVars: componentDefinition.hostVars || 0,\n hostAttrs: componentDefinition.hostAttrs || null,\n contentQueries: componentDefinition.contentQueries || null,\n declaredInputs: declaredInputs,\n inputs: null,\n outputs: null,\n exportAs: componentDefinition.exportAs || null,\n onPush: componentDefinition.changeDetection === ChangeDetectionStrategy.OnPush,\n directiveDefs: null,\n pipeDefs: null,\n selectors: componentDefinition.selectors || EMPTY_ARRAY,\n viewQuery: componentDefinition.viewQuery || null,\n features: componentDefinition.features || null,\n data: componentDefinition.data || {},\n encapsulation: componentDefinition.encapsulation || ViewEncapsulation$1.Emulated,\n id: 'c',\n styles: componentDefinition.styles || EMPTY_ARRAY,\n _: null,\n setInput: null,\n schemas: componentDefinition.schemas || null,\n tView: null,\n };\n const directiveTypes = componentDefinition.directives;\n const feature = componentDefinition.features;\n const pipeTypes = componentDefinition.pipes;\n def.id += _renderCompCount++;\n def.inputs = invertObject(componentDefinition.inputs, declaredInputs),\n def.outputs = invertObject(componentDefinition.outputs),\n feature && feature.forEach((fn) => fn(def));\n def.directiveDefs = directiveTypes ?\n () => (typeof directiveTypes === 'function' ? directiveTypes() : directiveTypes)\n .map(extractDirectiveDef) :\n null;\n def.pipeDefs = pipeTypes ?\n () => (typeof pipeTypes === 'function' ? pipeTypes() : pipeTypes).map(extractPipeDef) :\n null;\n return def;\n });\n}\n/**\n * Generated next to NgModules to monkey-patch directive and pipe references onto a component's\n * definition, when generating a direct reference in the component file would otherwise create an\n * import cycle.\n *\n * See [this explanation](https://hackmd.io/Odw80D0pR6yfsOjg_7XCJg?view) for more details.\n *\n * @codeGenApi\n */\nfunction ɵɵsetComponentScope(type, directives, pipes) {\n const def = type.ɵcmp;\n def.directiveDefs = () => directives.map(extractDirectiveDef);\n def.pipeDefs = () => pipes.map(extractPipeDef);\n}\nfunction extractDirectiveDef(type) {\n const def = getComponentDef(type) || getDirectiveDef(type);\n if (ngDevMode && !def) {\n throw new Error(`'${type.name}' is neither 'ComponentType' or 'DirectiveType'.`);\n }\n return def;\n}\nfunction extractPipeDef(type) {\n const def = getPipeDef$1(type);\n if (ngDevMode && !def) {\n throw new Error(`'${type.name}' is not a 'PipeType'.`);\n }\n return def;\n}\nconst autoRegisterModuleById = {};\n/**\n * @codeGenApi\n */\nfunction ɵɵdefineNgModule(def) {\n return noSideEffects(() => {\n const res = {\n type: def.type,\n bootstrap: def.bootstrap || EMPTY_ARRAY,\n declarations: def.declarations || EMPTY_ARRAY,\n imports: def.imports || EMPTY_ARRAY,\n exports: def.exports || EMPTY_ARRAY,\n transitiveCompileScopes: null,\n schemas: def.schemas || null,\n id: def.id || null,\n };\n if (def.id != null) {\n autoRegisterModuleById[def.id] = def.type;\n }\n return res;\n });\n}\n/**\n * Adds the module metadata that is necessary to compute the module's transitive scope to an\n * existing module definition.\n *\n * Scope metadata of modules is not used in production builds, so calls to this function can be\n * marked pure to tree-shake it from the bundle, allowing for all referenced declarations\n * to become eligible for tree-shaking as well.\n *\n * @codeGenApi\n */\nfunction ɵɵsetNgModuleScope(type, scope) {\n return noSideEffects(() => {\n const ngModuleDef = getNgModuleDef(type, true);\n ngModuleDef.declarations = scope.declarations || EMPTY_ARRAY;\n ngModuleDef.imports = scope.imports || EMPTY_ARRAY;\n ngModuleDef.exports = scope.exports || EMPTY_ARRAY;\n });\n}\n/**\n * Inverts an inputs or outputs lookup such that the keys, which were the\n * minified keys, are part of the values, and the values are parsed so that\n * the publicName of the property is the new key\n *\n * e.g. for\n *\n * ```\n * class Comp {\n * @Input()\n * propName1: string;\n *\n * @Input('publicName2')\n * declaredPropName2: number;\n * }\n * ```\n *\n * will be serialized as\n *\n * ```\n * {\n * propName1: 'propName1',\n * declaredPropName2: ['publicName2', 'declaredPropName2'],\n * }\n * ```\n *\n * which is than translated by the minifier as:\n *\n * ```\n * {\n * minifiedPropName1: 'propName1',\n * minifiedPropName2: ['publicName2', 'declaredPropName2'],\n * }\n * ```\n *\n * becomes: (public name => minifiedName)\n *\n * ```\n * {\n * 'propName1': 'minifiedPropName1',\n * 'publicName2': 'minifiedPropName2',\n * }\n * ```\n *\n * Optionally the function can take `secondary` which will result in: (public name => declared name)\n *\n * ```\n * {\n * 'propName1': 'propName1',\n * 'publicName2': 'declaredPropName2',\n * }\n * ```\n *\n\n */\nfunction invertObject(obj, secondary) {\n if (obj == null)\n return EMPTY_OBJ;\n const newLookup = {};\n for (const minifiedKey in obj) {\n if (obj.hasOwnProperty(minifiedKey)) {\n let publicName = obj[minifiedKey];\n let declaredName = publicName;\n if (Array.isArray(publicName)) {\n declaredName = publicName[1];\n publicName = publicName[0];\n }\n newLookup[publicName] = minifiedKey;\n if (secondary) {\n (secondary[publicName] = declaredName);\n }\n }\n }\n return newLookup;\n}\n/**\n * Create a directive definition object.\n *\n * # Example\n * ```ts\n * class MyDirective {\n * // Generated by Angular Template Compiler\n * // [Symbol] syntax will not be supported by TypeScript until v2.7\n * static ɵdir = ɵɵdefineDirective({\n * ...\n * });\n * }\n * ```\n *\n * @codeGenApi\n */\nconst ɵɵdefineDirective = ɵɵdefineComponent;\n/**\n * Create a pipe definition object.\n *\n * # Example\n * ```\n * class MyPipe implements PipeTransform {\n * // Generated by Angular Template Compiler\n * static ɵpipe = definePipe({\n * ...\n * });\n * }\n * ```\n * @param pipeDef Pipe definition generated by the compiler\n *\n * @codeGenApi\n */\nfunction ɵɵdefinePipe(pipeDef) {\n return {\n type: pipeDef.type,\n name: pipeDef.name,\n factory: null,\n pure: pipeDef.pure !== false,\n onDestroy: pipeDef.type.prototype.ngOnDestroy || null\n };\n}\n/**\n * The following getter methods retrieve the definition from the type. Currently the retrieval\n * honors inheritance, but in the future we may change the rule to require that definitions are\n * explicit. This would require some sort of migration strategy.\n */\nfunction getComponentDef(type) {\n return type[NG_COMP_DEF] || null;\n}\nfunction getDirectiveDef(type) {\n return type[NG_DIR_DEF] || null;\n}\nfunction getPipeDef$1(type) {\n return type[NG_PIPE_DEF] || null;\n}\nfunction getNgModuleDef(type, throwNotFound) {\n const ngModuleDef = type[NG_MOD_DEF] || null;\n if (!ngModuleDef && throwNotFound === true) {\n throw new Error(`Type ${stringify(type)} does not have 'ɵmod' property.`);\n }\n return ngModuleDef;\n}\n\n/**\n * Special location which allows easy identification of type. If we have an array which was\n * retrieved from the `LView` and that array has `true` at `TYPE` location, we know it is\n * `LContainer`.\n */\nconst TYPE = 1;\n/**\n * Below are constants for LContainer indices to help us look up LContainer members\n * without having to remember the specific indices.\n * Uglify will inline these when minifying so there shouldn't be a cost.\n */\n/**\n * Flag to signify that this `LContainer` may have transplanted views which need to be change\n * detected. (see: `LView[DECLARATION_COMPONENT_VIEW])`.\n *\n * This flag, once set, is never unset for the `LContainer`. This means that when unset we can skip\n * a lot of work in `refreshEmbeddedViews`. But when set we still need to verify\n * that the `MOVED_VIEWS` are transplanted and on-push.\n */\nconst HAS_TRANSPLANTED_VIEWS = 2;\n// PARENT, NEXT, TRANSPLANTED_VIEWS_TO_REFRESH are indices 3, 4, and 5\n// As we already have these constants in LView, we don't need to re-create them.\n// T_HOST is index 6\n// We already have this constants in LView, we don't need to re-create it.\nconst NATIVE = 7;\nconst VIEW_REFS = 8;\nconst MOVED_VIEWS = 9;\n/**\n * Size of LContainer's header. Represents the index after which all views in the\n * container will be inserted. We need to keep a record of current views so we know\n * which views are already in the DOM (and don't need to be re-added) and so we can\n * remove views from the DOM when they are no longer required.\n */\nconst CONTAINER_HEADER_OFFSET = 10;\n// Note: This hack is necessary so we don't erroneously get a circular dependency\n// failure based on types.\nconst unusedValueExportToPlacateAjd$8 = 1;\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Below are constants for LView indices to help us look up LView members\n// without having to remember the specific indices.\n// Uglify will inline these when minifying so there shouldn't be a cost.\nconst HOST = 0;\nconst TVIEW = 1;\nconst FLAGS = 2;\nconst PARENT = 3;\nconst NEXT = 4;\nconst TRANSPLANTED_VIEWS_TO_REFRESH = 5;\nconst T_HOST = 6;\nconst CLEANUP = 7;\nconst CONTEXT = 8;\nconst INJECTOR$1 = 9;\nconst RENDERER_FACTORY = 10;\nconst RENDERER = 11;\nconst SANITIZER = 12;\nconst CHILD_HEAD = 13;\nconst CHILD_TAIL = 14;\n// FIXME(misko): Investigate if the three declarations aren't all same thing.\nconst DECLARATION_VIEW = 15;\nconst DECLARATION_COMPONENT_VIEW = 16;\nconst DECLARATION_LCONTAINER = 17;\nconst PREORDER_HOOK_FLAGS = 18;\nconst QUERIES = 19;\n/**\n * Size of LView's header. Necessary to adjust for it when setting slots.\n *\n * IMPORTANT: `HEADER_OFFSET` should only be referred to the in the `ɵɵ*` instructions to translate\n * instruction index into `LView` index. All other indexes should be in the `LView` index space and\n * there should be no need to refer to `HEADER_OFFSET` anywhere else.\n */\nconst HEADER_OFFSET = 20;\n/**\n * Converts `TViewType` into human readable text.\n * Make sure this matches with `TViewType`\n */\nconst TViewTypeAsString = [\n 'Root',\n 'Component',\n 'Embedded', // 2\n];\n// Note: This hack is necessary so we don't erroneously get a circular dependency\n// failure based on types.\nconst unusedValueExportToPlacateAjd$7 = 1;\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * True if `value` is `LView`.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction isLView(value) {\n return Array.isArray(value) && typeof value[TYPE] === 'object';\n}\n/**\n * True if `value` is `LContainer`.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction isLContainer(value) {\n return Array.isArray(value) && value[TYPE] === true;\n}\nfunction isContentQueryHost(tNode) {\n return (tNode.flags & 8 /* hasContentQuery */) !== 0;\n}\nfunction isComponentHost(tNode) {\n return (tNode.flags & 2 /* isComponentHost */) === 2 /* isComponentHost */;\n}\nfunction isDirectiveHost(tNode) {\n return (tNode.flags & 1 /* isDirectiveHost */) === 1 /* isDirectiveHost */;\n}\nfunction isComponentDef(def) {\n return def.template !== null;\n}\nfunction isRootView(target) {\n return (target[FLAGS] & 512 /* IsRoot */) !== 0;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// [Assert functions do not constraint type when they are guarded by a truthy\n// expression.](https://github.com/microsoft/TypeScript/issues/37295)\nfunction assertTNodeForLView(tNode, lView) {\n assertTNodeForTView(tNode, lView[TVIEW]);\n}\nfunction assertTNodeForTView(tNode, tView) {\n assertTNode(tNode);\n tNode.hasOwnProperty('tView_') &&\n assertEqual(tNode.tView_, tView, 'This TNode does not belong to this TView.');\n}\nfunction assertTNode(tNode) {\n assertDefined(tNode, 'TNode must be defined');\n if (!(tNode && typeof tNode === 'object' && tNode.hasOwnProperty('directiveStylingLast'))) {\n throwError('Not of type TNode, got: ' + tNode);\n }\n}\nfunction assertTIcu(tIcu) {\n assertDefined(tIcu, 'Expected TIcu to be defined');\n if (!(typeof tIcu.currentCaseLViewIndex === 'number')) {\n throwError('Object is not of TIcu type.');\n }\n}\nfunction assertComponentType(actual, msg = 'Type passed in is not ComponentType, it does not have \\'ɵcmp\\' property.') {\n if (!getComponentDef(actual)) {\n throwError(msg);\n }\n}\nfunction assertNgModuleType(actual, msg = 'Type passed in is not NgModuleType, it does not have \\'ɵmod\\' property.') {\n if (!getNgModuleDef(actual)) {\n throwError(msg);\n }\n}\nfunction assertCurrentTNodeIsParent(isParent) {\n assertEqual(isParent, true, 'currentTNode should be a parent');\n}\nfunction assertHasParent(tNode) {\n assertDefined(tNode, 'currentTNode should exist!');\n assertDefined(tNode.parent, 'currentTNode should have a parent');\n}\nfunction assertDataNext(lView, index, arr) {\n if (arr == null)\n arr = lView;\n assertEqual(arr.length, index, `index ${index} expected to be at the end of arr (length ${arr.length})`);\n}\nfunction assertLContainer(value) {\n assertDefined(value, 'LContainer must be defined');\n assertEqual(isLContainer(value), true, 'Expecting LContainer');\n}\nfunction assertLViewOrUndefined(value) {\n value && assertEqual(isLView(value), true, 'Expecting LView or undefined or null');\n}\nfunction assertLView(value) {\n assertDefined(value, 'LView must be defined');\n assertEqual(isLView(value), true, 'Expecting LView');\n}\nfunction assertFirstCreatePass(tView, errMessage) {\n assertEqual(tView.firstCreatePass, true, errMessage || 'Should only be called in first create pass.');\n}\nfunction assertFirstUpdatePass(tView, errMessage) {\n assertEqual(tView.firstUpdatePass, true, errMessage || 'Should only be called in first update pass.');\n}\n/**\n * This is a basic sanity check that an object is probably a directive def. DirectiveDef is\n * an interface, so we can't do a direct instanceof check.\n */\nfunction assertDirectiveDef(obj) {\n if (obj.type === undefined || obj.selectors == undefined || obj.inputs === undefined) {\n throwError(`Expected a DirectiveDef/ComponentDef and this object does not seem to have the expected shape.`);\n }\n}\nfunction assertIndexInDeclRange(lView, index) {\n const tView = lView[1];\n assertBetween(HEADER_OFFSET, tView.bindingStartIndex, index);\n}\nfunction assertIndexInVarsRange(lView, index) {\n const tView = lView[1];\n assertBetween(tView.bindingStartIndex, tView.expandoStartIndex, index);\n}\nfunction assertIndexInExpandoRange(lView, index) {\n const tView = lView[1];\n assertBetween(tView.expandoStartIndex, lView.length, index);\n}\nfunction assertBetween(lower, upper, index) {\n if (!(lower <= index && index < upper)) {\n throwError(`Index out of range (expecting ${lower} <= ${index} < ${upper})`);\n }\n}\nfunction assertProjectionSlots(lView, errMessage) {\n assertDefined(lView[DECLARATION_COMPONENT_VIEW], 'Component views should exist.');\n assertDefined(lView[DECLARATION_COMPONENT_VIEW][T_HOST].projection, errMessage ||\n 'Components with projection nodes () must have projection slots defined.');\n}\nfunction assertParentView(lView, errMessage) {\n assertDefined(lView, errMessage || 'Component views should always have a parent view (component\\'s host view)');\n}\n/**\n * This is a basic sanity check that the `injectorIndex` seems to point to what looks like a\n * NodeInjector data structure.\n *\n * @param lView `LView` which should be checked.\n * @param injectorIndex index into the `LView` where the `NodeInjector` is expected.\n */\nfunction assertNodeInjector(lView, injectorIndex) {\n assertIndexInExpandoRange(lView, injectorIndex);\n assertIndexInExpandoRange(lView, injectorIndex + 8 /* PARENT */);\n assertNumber(lView[injectorIndex + 0], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 1], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 2], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 3], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 4], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 5], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 6], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 7], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 8 /* PARENT */], 'injectorIndex should point to parent injector');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction getFactoryDef(type, throwNotFound) {\n const hasFactoryDef = type.hasOwnProperty(NG_FACTORY_DEF);\n if (!hasFactoryDef && throwNotFound === true && ngDevMode) {\n throw new Error(`Type ${stringify(type)} does not have 'ɵfac' property.`);\n }\n return hasFactoryDef ? type[NG_FACTORY_DEF] : null;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Represents a basic change from a previous to a new value for a single\n * property on a directive instance. Passed as a value in a\n * {@link SimpleChanges} object to the `ngOnChanges` hook.\n *\n * @see `OnChanges`\n *\n * @publicApi\n */\nclass SimpleChange {\n constructor(previousValue, currentValue, firstChange) {\n this.previousValue = previousValue;\n this.currentValue = currentValue;\n this.firstChange = firstChange;\n }\n /**\n * Check whether the new value is the first value assigned.\n */\n isFirstChange() {\n return this.firstChange;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The NgOnChangesFeature decorates a component with support for the ngOnChanges\n * lifecycle hook, so it should be included in any component that implements\n * that hook.\n *\n * If the component or directive uses inheritance, the NgOnChangesFeature MUST\n * be included as a feature AFTER {@link InheritDefinitionFeature}, otherwise\n * inherited properties will not be propagated to the ngOnChanges lifecycle\n * hook.\n *\n * Example usage:\n *\n * ```\n * static ɵcmp = defineComponent({\n * ...\n * inputs: {name: 'publicName'},\n * features: [NgOnChangesFeature]\n * });\n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵNgOnChangesFeature() {\n return NgOnChangesFeatureImpl;\n}\nfunction NgOnChangesFeatureImpl(definition) {\n if (definition.type.prototype.ngOnChanges) {\n definition.setInput = ngOnChangesSetInput;\n }\n return rememberChangeHistoryAndInvokeOnChangesHook;\n}\n// This option ensures that the ngOnChanges lifecycle hook will be inherited\n// from superclasses (in InheritDefinitionFeature).\n/** @nocollapse */\n// tslint:disable-next-line:no-toplevel-property-access\nɵɵNgOnChangesFeature.ngInherit = true;\n/**\n * This is a synthetic lifecycle hook which gets inserted into `TView.preOrderHooks` to simulate\n * `ngOnChanges`.\n *\n * The hook reads the `NgSimpleChangesStore` data from the component instance and if changes are\n * found it invokes `ngOnChanges` on the component instance.\n *\n * @param this Component instance. Because this function gets inserted into `TView.preOrderHooks`,\n * it is guaranteed to be called with component instance.\n */\nfunction rememberChangeHistoryAndInvokeOnChangesHook() {\n const simpleChangesStore = getSimpleChangesStore(this);\n const current = simpleChangesStore === null || simpleChangesStore === void 0 ? void 0 : simpleChangesStore.current;\n if (current) {\n const previous = simpleChangesStore.previous;\n if (previous === EMPTY_OBJ) {\n simpleChangesStore.previous = current;\n }\n else {\n // New changes are copied to the previous store, so that we don't lose history for inputs\n // which were not changed this time\n for (let key in current) {\n previous[key] = current[key];\n }\n }\n simpleChangesStore.current = null;\n this.ngOnChanges(current);\n }\n}\nfunction ngOnChangesSetInput(instance, value, publicName, privateName) {\n const simpleChangesStore = getSimpleChangesStore(instance) ||\n setSimpleChangesStore(instance, { previous: EMPTY_OBJ, current: null });\n const current = simpleChangesStore.current || (simpleChangesStore.current = {});\n const previous = simpleChangesStore.previous;\n const declaredName = this.declaredInputs[publicName];\n const previousChange = previous[declaredName];\n current[declaredName] = new SimpleChange(previousChange && previousChange.currentValue, value, previous === EMPTY_OBJ);\n instance[privateName] = value;\n}\nconst SIMPLE_CHANGES_STORE = '__ngSimpleChanges__';\nfunction getSimpleChangesStore(instance) {\n return instance[SIMPLE_CHANGES_STORE] || null;\n}\nfunction setSimpleChangesStore(instance, store) {\n return instance[SIMPLE_CHANGES_STORE] = store;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet profilerCallback = null;\n/**\n * Sets the callback function which will be invoked before and after performing certain actions at\n * runtime (for example, before and after running change detection).\n *\n * Warning: this function is *INTERNAL* and should not be relied upon in application's code.\n * The contract of the function might be changed in any release and/or the function can be removed\n * completely.\n *\n * @param profiler function provided by the caller or null value to disable profiling.\n */\nconst setProfiler = (profiler) => {\n profilerCallback = profiler;\n};\n/**\n * Profiler function which wraps user code executed by the runtime.\n *\n * @param event ProfilerEvent corresponding to the execution context\n * @param instance component instance\n * @param hookOrListener lifecycle hook function or output listener. The value depends on the\n * execution context\n * @returns\n */\nconst profiler = function (event, instance, hookOrListener) {\n if (profilerCallback != null /* both `null` and `undefined` */) {\n profilerCallback(event, instance, hookOrListener);\n }\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst SVG_NAMESPACE = 'svg';\nconst SVG_NAMESPACE_URI = 'http://www.w3.org/2000/svg';\nconst MATH_ML_NAMESPACE = 'math';\nconst MATH_ML_NAMESPACE_URI = 'http://www.w3.org/1998/MathML/';\nfunction getNamespaceUri(namespace) {\n const name = namespace.toLowerCase();\n return name === SVG_NAMESPACE ? SVG_NAMESPACE_URI :\n (name === MATH_ML_NAMESPACE ? MATH_ML_NAMESPACE_URI : null);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Most of the use of `document` in Angular is from within the DI system so it is possible to simply\n * inject the `DOCUMENT` token and are done.\n *\n * Ivy is special because it does not rely upon the DI and must get hold of the document some other\n * way.\n *\n * The solution is to define `getDocument()` and `setDocument()` top-level functions for ivy.\n * Wherever ivy needs the global document, it calls `getDocument()` instead.\n *\n * When running ivy outside of a browser environment, it is necessary to call `setDocument()` to\n * tell ivy what the global `document` is.\n *\n * Angular does this for us in each of the standard platforms (`Browser`, `Server`, and `WebWorker`)\n * by calling `setDocument()` when providing the `DOCUMENT` token.\n */\nlet DOCUMENT = undefined;\n/**\n * Tell ivy what the `document` is for this platform.\n *\n * It is only necessary to call this if the current platform is not a browser.\n *\n * @param document The object representing the global `document` in this environment.\n */\nfunction setDocument(document) {\n DOCUMENT = document;\n}\n/**\n * Access the object that represents the `document` for this platform.\n *\n * Ivy calls this whenever it needs to access the `document` object.\n * For example to create the renderer or to do sanitization.\n */\nfunction getDocument() {\n if (DOCUMENT !== undefined) {\n return DOCUMENT;\n }\n else if (typeof document !== 'undefined') {\n return document;\n }\n // No \"document\" can be found. This should only happen if we are running ivy outside Angular and\n // the current platform is not a browser. Since this is not a supported scenario at the moment\n // this should not happen in Angular apps.\n // Once we support running ivy outside of Angular we will need to publish `setDocument()` as a\n // public API. Meanwhile we just return `undefined` and let the application fail.\n return undefined;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// TODO: cleanup once the code is merged in angular/angular\nvar RendererStyleFlags3;\n(function (RendererStyleFlags3) {\n RendererStyleFlags3[RendererStyleFlags3[\"Important\"] = 1] = \"Important\";\n RendererStyleFlags3[RendererStyleFlags3[\"DashCase\"] = 2] = \"DashCase\";\n})(RendererStyleFlags3 || (RendererStyleFlags3 = {}));\n/** Returns whether the `renderer` is a `ProceduralRenderer3` */\nfunction isProceduralRenderer(renderer) {\n return !!(renderer.listen);\n}\nconst domRendererFactory3 = {\n createRenderer: (hostElement, rendererType) => {\n return getDocument();\n }\n};\n// Note: This hack is necessary so we don't erroneously get a circular dependency\n// failure based on types.\nconst unusedValueExportToPlacateAjd$6 = 1;\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * For efficiency reasons we often put several different data types (`RNode`, `LView`, `LContainer`)\n * in same location in `LView`. This is because we don't want to pre-allocate space for it\n * because the storage is sparse. This file contains utilities for dealing with such data types.\n *\n * How do we know what is stored at a given location in `LView`.\n * - `Array.isArray(value) === false` => `RNode` (The normal storage value)\n * - `Array.isArray(value) === true` => then the `value[0]` represents the wrapped value.\n * - `typeof value[TYPE] === 'object'` => `LView`\n * - This happens when we have a component at a given location\n * - `typeof value[TYPE] === true` => `LContainer`\n * - This happens when we have `LContainer` binding at a given location.\n *\n *\n * NOTE: it is assumed that `Array.isArray` and `typeof` operations are very efficient.\n */\n/**\n * Returns `RNode`.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction unwrapRNode(value) {\n while (Array.isArray(value)) {\n value = value[HOST];\n }\n return value;\n}\n/**\n * Returns `LView` or `null` if not found.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction unwrapLView(value) {\n while (Array.isArray(value)) {\n // This check is same as `isLView()` but we don't call at as we don't want to call\n // `Array.isArray()` twice and give JITer more work for inlining.\n if (typeof value[TYPE] === 'object')\n return value;\n value = value[HOST];\n }\n return null;\n}\n/**\n * Returns `LContainer` or `null` if not found.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction unwrapLContainer(value) {\n while (Array.isArray(value)) {\n // This check is same as `isLContainer()` but we don't call at as we don't want to call\n // `Array.isArray()` twice and give JITer more work for inlining.\n if (value[TYPE] === true)\n return value;\n value = value[HOST];\n }\n return null;\n}\n/**\n * Retrieves an element value from the provided `viewData`, by unwrapping\n * from any containers, component views, or style contexts.\n */\nfunction getNativeByIndex(index, lView) {\n ngDevMode && assertIndexInRange(lView, index);\n ngDevMode && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Expected to be past HEADER_OFFSET');\n return unwrapRNode(lView[index]);\n}\n/**\n * Retrieve an `RNode` for a given `TNode` and `LView`.\n *\n * This function guarantees in dev mode to retrieve a non-null `RNode`.\n *\n * @param tNode\n * @param lView\n */\nfunction getNativeByTNode(tNode, lView) {\n ngDevMode && assertTNodeForLView(tNode, lView);\n ngDevMode && assertIndexInRange(lView, tNode.index);\n const node = unwrapRNode(lView[tNode.index]);\n ngDevMode && !isProceduralRenderer(lView[RENDERER]) && assertDomNode(node);\n return node;\n}\n/**\n * Retrieve an `RNode` or `null` for a given `TNode` and `LView`.\n *\n * Some `TNode`s don't have associated `RNode`s. For example `Projection`\n *\n * @param tNode\n * @param lView\n */\nfunction getNativeByTNodeOrNull(tNode, lView) {\n const index = tNode === null ? -1 : tNode.index;\n if (index !== -1) {\n ngDevMode && assertTNodeForLView(tNode, lView);\n const node = unwrapRNode(lView[index]);\n ngDevMode && node !== null && !isProceduralRenderer(lView[RENDERER]) && assertDomNode(node);\n return node;\n }\n return null;\n}\n// fixme(misko): The return Type should be `TNode|null`\nfunction getTNode(tView, index) {\n ngDevMode && assertGreaterThan(index, -1, 'wrong index for TNode');\n ngDevMode && assertLessThan(index, tView.data.length, 'wrong index for TNode');\n const tNode = tView.data[index];\n ngDevMode && tNode !== null && assertTNode(tNode);\n return tNode;\n}\n/** Retrieves a value from any `LView` or `TData`. */\nfunction load(view, index) {\n ngDevMode && assertIndexInRange(view, index);\n return view[index];\n}\nfunction getComponentLViewByIndex(nodeIndex, hostView) {\n // Could be an LView or an LContainer. If LContainer, unwrap to find LView.\n ngDevMode && assertIndexInRange(hostView, nodeIndex);\n const slotValue = hostView[nodeIndex];\n const lView = isLView(slotValue) ? slotValue : slotValue[HOST];\n return lView;\n}\n/** Checks whether a given view is in creation mode */\nfunction isCreationMode(view) {\n return (view[FLAGS] & 4 /* CreationMode */) === 4 /* CreationMode */;\n}\n/**\n * Returns a boolean for whether the view is attached to the change detection tree.\n *\n * Note: This determines whether a view should be checked, not whether it's inserted\n * into a container. For that, you'll want `viewAttachedToContainer` below.\n */\nfunction viewAttachedToChangeDetector(view) {\n return (view[FLAGS] & 128 /* Attached */) === 128 /* Attached */;\n}\n/** Returns a boolean for whether the view is attached to a container. */\nfunction viewAttachedToContainer(view) {\n return isLContainer(view[PARENT]);\n}\nfunction getConstant(consts, index) {\n if (index === null || index === undefined)\n return null;\n ngDevMode && assertIndexInRange(consts, index);\n return consts[index];\n}\n/**\n * Resets the pre-order hook flags of the view.\n * @param lView the LView on which the flags are reset\n */\nfunction resetPreOrderHookFlags(lView) {\n lView[PREORDER_HOOK_FLAGS] = 0;\n}\n/**\n * Updates the `TRANSPLANTED_VIEWS_TO_REFRESH` counter on the `LContainer` as well as the parents\n * whose\n * 1. counter goes from 0 to 1, indicating that there is a new child that has a view to refresh\n * or\n * 2. counter goes from 1 to 0, indicating there are no more descendant views to refresh\n */\nfunction updateTransplantedViewCount(lContainer, amount) {\n lContainer[TRANSPLANTED_VIEWS_TO_REFRESH] += amount;\n let viewOrContainer = lContainer;\n let parent = lContainer[PARENT];\n while (parent !== null &&\n ((amount === 1 && viewOrContainer[TRANSPLANTED_VIEWS_TO_REFRESH] === 1) ||\n (amount === -1 && viewOrContainer[TRANSPLANTED_VIEWS_TO_REFRESH] === 0))) {\n parent[TRANSPLANTED_VIEWS_TO_REFRESH] += amount;\n viewOrContainer = parent;\n parent = parent[PARENT];\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst instructionState = {\n lFrame: createLFrame(null),\n bindingsEnabled: true,\n isInCheckNoChangesMode: false,\n};\n/**\n * Returns true if the instruction state stack is empty.\n *\n * Intended to be called from tests only (tree shaken otherwise).\n */\nfunction specOnlyIsInstructionStateEmpty() {\n return instructionState.lFrame.parent === null;\n}\nfunction getElementDepthCount() {\n return instructionState.lFrame.elementDepthCount;\n}\nfunction increaseElementDepthCount() {\n instructionState.lFrame.elementDepthCount++;\n}\nfunction decreaseElementDepthCount() {\n instructionState.lFrame.elementDepthCount--;\n}\nfunction getBindingsEnabled() {\n return instructionState.bindingsEnabled;\n}\n/**\n * Enables directive matching on elements.\n *\n * * Example:\n * ```\n * \n * Should match component / directive.\n * \n *
\n * \n * \n * Should not match component / directive because we are in ngNonBindable.\n * \n * \n *
\n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵenableBindings() {\n instructionState.bindingsEnabled = true;\n}\n/**\n * Disables directive matching on element.\n *\n * * Example:\n * ```\n * \n * Should match component / directive.\n * \n *
\n * \n * \n * Should not match component / directive because we are in ngNonBindable.\n * \n * \n *
\n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵdisableBindings() {\n instructionState.bindingsEnabled = false;\n}\n/**\n * Return the current `LView`.\n */\nfunction getLView() {\n return instructionState.lFrame.lView;\n}\n/**\n * Return the current `TView`.\n */\nfunction getTView() {\n return instructionState.lFrame.tView;\n}\n/**\n * Restores `contextViewData` to the given OpaqueViewState instance.\n *\n * Used in conjunction with the getCurrentView() instruction to save a snapshot\n * of the current view and restore it when listeners are invoked. This allows\n * walking the declaration view tree in listeners to get vars from parent views.\n *\n * @param viewToRestore The OpaqueViewState instance to restore.\n * @returns Context of the restored OpaqueViewState instance.\n *\n * @codeGenApi\n */\nfunction ɵɵrestoreView(viewToRestore) {\n instructionState.lFrame.contextLView = viewToRestore;\n return viewToRestore[CONTEXT];\n}\nfunction getCurrentTNode() {\n let currentTNode = getCurrentTNodePlaceholderOk();\n while (currentTNode !== null && currentTNode.type === 64 /* Placeholder */) {\n currentTNode = currentTNode.parent;\n }\n return currentTNode;\n}\nfunction getCurrentTNodePlaceholderOk() {\n return instructionState.lFrame.currentTNode;\n}\nfunction getCurrentParentTNode() {\n const lFrame = instructionState.lFrame;\n const currentTNode = lFrame.currentTNode;\n return lFrame.isParent ? currentTNode : currentTNode.parent;\n}\nfunction setCurrentTNode(tNode, isParent) {\n ngDevMode && tNode && assertTNodeForTView(tNode, instructionState.lFrame.tView);\n const lFrame = instructionState.lFrame;\n lFrame.currentTNode = tNode;\n lFrame.isParent = isParent;\n}\nfunction isCurrentTNodeParent() {\n return instructionState.lFrame.isParent;\n}\nfunction setCurrentTNodeAsNotParent() {\n instructionState.lFrame.isParent = false;\n}\nfunction setCurrentTNodeAsParent() {\n instructionState.lFrame.isParent = true;\n}\nfunction getContextLView() {\n return instructionState.lFrame.contextLView;\n}\nfunction isInCheckNoChangesMode() {\n // TODO(misko): remove this from the LView since it is ngDevMode=true mode only.\n return instructionState.isInCheckNoChangesMode;\n}\nfunction setIsInCheckNoChangesMode(mode) {\n instructionState.isInCheckNoChangesMode = mode;\n}\n// top level variables should not be exported for performance reasons (PERF_NOTES.md)\nfunction getBindingRoot() {\n const lFrame = instructionState.lFrame;\n let index = lFrame.bindingRootIndex;\n if (index === -1) {\n index = lFrame.bindingRootIndex = lFrame.tView.bindingStartIndex;\n }\n return index;\n}\nfunction getBindingIndex() {\n return instructionState.lFrame.bindingIndex;\n}\nfunction setBindingIndex(value) {\n return instructionState.lFrame.bindingIndex = value;\n}\nfunction nextBindingIndex() {\n return instructionState.lFrame.bindingIndex++;\n}\nfunction incrementBindingIndex(count) {\n const lFrame = instructionState.lFrame;\n const index = lFrame.bindingIndex;\n lFrame.bindingIndex = lFrame.bindingIndex + count;\n return index;\n}\nfunction isInI18nBlock() {\n return instructionState.lFrame.inI18n;\n}\nfunction setInI18nBlock(isInI18nBlock) {\n instructionState.lFrame.inI18n = isInI18nBlock;\n}\n/**\n * Set a new binding root index so that host template functions can execute.\n *\n * Bindings inside the host template are 0 index. But because we don't know ahead of time\n * how many host bindings we have we can't pre-compute them. For this reason they are all\n * 0 index and we just shift the root so that they match next available location in the LView.\n *\n * @param bindingRootIndex Root index for `hostBindings`\n * @param currentDirectiveIndex `TData[currentDirectiveIndex]` will point to the current directive\n * whose `hostBindings` are being processed.\n */\nfunction setBindingRootForHostBindings(bindingRootIndex, currentDirectiveIndex) {\n const lFrame = instructionState.lFrame;\n lFrame.bindingIndex = lFrame.bindingRootIndex = bindingRootIndex;\n setCurrentDirectiveIndex(currentDirectiveIndex);\n}\n/**\n * When host binding is executing this points to the directive index.\n * `TView.data[getCurrentDirectiveIndex()]` is `DirectiveDef`\n * `LView[getCurrentDirectiveIndex()]` is directive instance.\n */\nfunction getCurrentDirectiveIndex() {\n return instructionState.lFrame.currentDirectiveIndex;\n}\n/**\n * Sets an index of a directive whose `hostBindings` are being processed.\n *\n * @param currentDirectiveIndex `TData` index where current directive instance can be found.\n */\nfunction setCurrentDirectiveIndex(currentDirectiveIndex) {\n instructionState.lFrame.currentDirectiveIndex = currentDirectiveIndex;\n}\n/**\n * Retrieve the current `DirectiveDef` which is active when `hostBindings` instruction is being\n * executed.\n *\n * @param tData Current `TData` where the `DirectiveDef` will be looked up at.\n */\nfunction getCurrentDirectiveDef(tData) {\n const currentDirectiveIndex = instructionState.lFrame.currentDirectiveIndex;\n return currentDirectiveIndex === -1 ? null : tData[currentDirectiveIndex];\n}\nfunction getCurrentQueryIndex() {\n return instructionState.lFrame.currentQueryIndex;\n}\nfunction setCurrentQueryIndex(value) {\n instructionState.lFrame.currentQueryIndex = value;\n}\n/**\n * Returns a `TNode` of the location where the current `LView` is declared at.\n *\n * @param lView an `LView` that we want to find parent `TNode` for.\n */\nfunction getDeclarationTNode(lView) {\n const tView = lView[TVIEW];\n // Return the declaration parent for embedded views\n if (tView.type === 2 /* Embedded */) {\n ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');\n return tView.declTNode;\n }\n // Components don't have `TView.declTNode` because each instance of component could be\n // inserted in different location, hence `TView.declTNode` is meaningless.\n // Falling back to `T_HOST` in case we cross component boundary.\n if (tView.type === 1 /* Component */) {\n return lView[T_HOST];\n }\n // Remaining TNode type is `TViewType.Root` which doesn't have a parent TNode.\n return null;\n}\n/**\n * This is a light weight version of the `enterView` which is needed by the DI system.\n *\n * @param lView `LView` location of the DI context.\n * @param tNode `TNode` for DI context\n * @param flags DI context flags. if `SkipSelf` flag is set than we walk up the declaration\n * tree from `tNode` until we find parent declared `TElementNode`.\n * @returns `true` if we have successfully entered DI associated with `tNode` (or with declared\n * `TNode` if `flags` has `SkipSelf`). Failing to enter DI implies that no associated\n * `NodeInjector` can be found and we should instead use `ModuleInjector`.\n * - If `true` than this call must be fallowed by `leaveDI`\n * - If `false` than this call failed and we should NOT call `leaveDI`\n */\nfunction enterDI(lView, tNode, flags) {\n ngDevMode && assertLViewOrUndefined(lView);\n if (flags & InjectFlags.SkipSelf) {\n ngDevMode && assertTNodeForTView(tNode, lView[TVIEW]);\n let parentTNode = tNode;\n let parentLView = lView;\n while (true) {\n ngDevMode && assertDefined(parentTNode, 'Parent TNode should be defined');\n parentTNode = parentTNode.parent;\n if (parentTNode === null && !(flags & InjectFlags.Host)) {\n parentTNode = getDeclarationTNode(parentLView);\n if (parentTNode === null)\n break;\n // In this case, a parent exists and is definitely an element. So it will definitely\n // have an existing lView as the declaration view, which is why we can assume it's defined.\n ngDevMode && assertDefined(parentLView, 'Parent LView should be defined');\n parentLView = parentLView[DECLARATION_VIEW];\n // In Ivy there are Comment nodes that correspond to ngIf and NgFor embedded directives\n // We want to skip those and look only at Elements and ElementContainers to ensure\n // we're looking at true parent nodes, and not content or other types.\n if (parentTNode.type & (2 /* Element */ | 8 /* ElementContainer */)) {\n break;\n }\n }\n else {\n break;\n }\n }\n if (parentTNode === null) {\n // If we failed to find a parent TNode this means that we should use module injector.\n return false;\n }\n else {\n tNode = parentTNode;\n lView = parentLView;\n }\n }\n ngDevMode && assertTNodeForLView(tNode, lView);\n const lFrame = instructionState.lFrame = allocLFrame();\n lFrame.currentTNode = tNode;\n lFrame.lView = lView;\n return true;\n}\n/**\n * Swap the current lView with a new lView.\n *\n * For performance reasons we store the lView in the top level of the module.\n * This way we minimize the number of properties to read. Whenever a new view\n * is entered we have to store the lView for later, and when the view is\n * exited the state has to be restored\n *\n * @param newView New lView to become active\n * @returns the previously active lView;\n */\nfunction enterView(newView) {\n ngDevMode && assertNotEqual(newView[0], newView[1], '????');\n ngDevMode && assertLViewOrUndefined(newView);\n const newLFrame = allocLFrame();\n if (ngDevMode) {\n assertEqual(newLFrame.isParent, true, 'Expected clean LFrame');\n assertEqual(newLFrame.lView, null, 'Expected clean LFrame');\n assertEqual(newLFrame.tView, null, 'Expected clean LFrame');\n assertEqual(newLFrame.selectedIndex, -1, 'Expected clean LFrame');\n assertEqual(newLFrame.elementDepthCount, 0, 'Expected clean LFrame');\n assertEqual(newLFrame.currentDirectiveIndex, -1, 'Expected clean LFrame');\n assertEqual(newLFrame.currentNamespace, null, 'Expected clean LFrame');\n assertEqual(newLFrame.bindingRootIndex, -1, 'Expected clean LFrame');\n assertEqual(newLFrame.currentQueryIndex, 0, 'Expected clean LFrame');\n }\n const tView = newView[TVIEW];\n instructionState.lFrame = newLFrame;\n ngDevMode && tView.firstChild && assertTNodeForTView(tView.firstChild, tView);\n newLFrame.currentTNode = tView.firstChild;\n newLFrame.lView = newView;\n newLFrame.tView = tView;\n newLFrame.contextLView = newView;\n newLFrame.bindingIndex = tView.bindingStartIndex;\n newLFrame.inI18n = false;\n}\n/**\n * Allocates next free LFrame. This function tries to reuse the `LFrame`s to lower memory pressure.\n */\nfunction allocLFrame() {\n const currentLFrame = instructionState.lFrame;\n const childLFrame = currentLFrame === null ? null : currentLFrame.child;\n const newLFrame = childLFrame === null ? createLFrame(currentLFrame) : childLFrame;\n return newLFrame;\n}\nfunction createLFrame(parent) {\n const lFrame = {\n currentTNode: null,\n isParent: true,\n lView: null,\n tView: null,\n selectedIndex: -1,\n contextLView: null,\n elementDepthCount: 0,\n currentNamespace: null,\n currentDirectiveIndex: -1,\n bindingRootIndex: -1,\n bindingIndex: -1,\n currentQueryIndex: 0,\n parent: parent,\n child: null,\n inI18n: false,\n };\n parent !== null && (parent.child = lFrame); // link the new LFrame for reuse.\n return lFrame;\n}\n/**\n * A lightweight version of leave which is used with DI.\n *\n * This function only resets `currentTNode` and `LView` as those are the only properties\n * used with DI (`enterDI()`).\n *\n * NOTE: This function is reexported as `leaveDI`. However `leaveDI` has return type of `void` where\n * as `leaveViewLight` has `LFrame`. This is so that `leaveViewLight` can be used in `leaveView`.\n */\nfunction leaveViewLight() {\n const oldLFrame = instructionState.lFrame;\n instructionState.lFrame = oldLFrame.parent;\n oldLFrame.currentTNode = null;\n oldLFrame.lView = null;\n return oldLFrame;\n}\n/**\n * This is a lightweight version of the `leaveView` which is needed by the DI system.\n *\n * NOTE: this function is an alias so that we can change the type of the function to have `void`\n * return type.\n */\nconst leaveDI = leaveViewLight;\n/**\n * Leave the current `LView`\n *\n * This pops the `LFrame` with the associated `LView` from the stack.\n *\n * IMPORTANT: We must zero out the `LFrame` values here otherwise they will be retained. This is\n * because for performance reasons we don't release `LFrame` but rather keep it for next use.\n */\nfunction leaveView() {\n const oldLFrame = leaveViewLight();\n oldLFrame.isParent = true;\n oldLFrame.tView = null;\n oldLFrame.selectedIndex = -1;\n oldLFrame.contextLView = null;\n oldLFrame.elementDepthCount = 0;\n oldLFrame.currentDirectiveIndex = -1;\n oldLFrame.currentNamespace = null;\n oldLFrame.bindingRootIndex = -1;\n oldLFrame.bindingIndex = -1;\n oldLFrame.currentQueryIndex = 0;\n}\nfunction nextContextImpl(level) {\n const contextLView = instructionState.lFrame.contextLView =\n walkUpViews(level, instructionState.lFrame.contextLView);\n return contextLView[CONTEXT];\n}\nfunction walkUpViews(nestingLevel, currentView) {\n while (nestingLevel > 0) {\n ngDevMode &&\n assertDefined(currentView[DECLARATION_VIEW], 'Declaration view should be defined if nesting level is greater than 0.');\n currentView = currentView[DECLARATION_VIEW];\n nestingLevel--;\n }\n return currentView;\n}\n/**\n * Gets the currently selected element index.\n *\n * Used with {@link property} instruction (and more in the future) to identify the index in the\n * current `LView` to act on.\n */\nfunction getSelectedIndex() {\n return instructionState.lFrame.selectedIndex;\n}\n/**\n * Sets the most recent index passed to {@link select}\n *\n * Used with {@link property} instruction (and more in the future) to identify the index in the\n * current `LView` to act on.\n *\n * (Note that if an \"exit function\" was set earlier (via `setElementExitFn()`) then that will be\n * run if and when the provided `index` value is different from the current selected index value.)\n */\nfunction setSelectedIndex(index) {\n ngDevMode && index !== -1 &&\n assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Index must be past HEADER_OFFSET (or -1).');\n ngDevMode &&\n assertLessThan(index, instructionState.lFrame.lView.length, 'Can\\'t set index passed end of LView');\n instructionState.lFrame.selectedIndex = index;\n}\n/**\n * Gets the `tNode` that represents currently selected element.\n */\nfunction getSelectedTNode() {\n const lFrame = instructionState.lFrame;\n return getTNode(lFrame.tView, lFrame.selectedIndex);\n}\n/**\n * Sets the namespace used to create elements to `'http://www.w3.org/2000/svg'` in global state.\n *\n * @codeGenApi\n */\nfunction ɵɵnamespaceSVG() {\n instructionState.lFrame.currentNamespace = SVG_NAMESPACE;\n}\n/**\n * Sets the namespace used to create elements to `'http://www.w3.org/1998/MathML/'` in global state.\n *\n * @codeGenApi\n */\nfunction ɵɵnamespaceMathML() {\n instructionState.lFrame.currentNamespace = MATH_ML_NAMESPACE;\n}\n/**\n * Sets the namespace used to create elements to `null`, which forces element creation to use\n * `createElement` rather than `createElementNS`.\n *\n * @codeGenApi\n */\nfunction ɵɵnamespaceHTML() {\n namespaceHTMLInternal();\n}\n/**\n * Sets the namespace used to create elements to `null`, which forces element creation to use\n * `createElement` rather than `createElementNS`.\n */\nfunction namespaceHTMLInternal() {\n instructionState.lFrame.currentNamespace = null;\n}\nfunction getNamespace$1() {\n return instructionState.lFrame.currentNamespace;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Adds all directive lifecycle hooks from the given `DirectiveDef` to the given `TView`.\n *\n * Must be run *only* on the first template pass.\n *\n * Sets up the pre-order hooks on the provided `tView`,\n * see {@link HookData} for details about the data structure.\n *\n * @param directiveIndex The index of the directive in LView\n * @param directiveDef The definition containing the hooks to setup in tView\n * @param tView The current TView\n */\nfunction registerPreOrderHooks(directiveIndex, directiveDef, tView) {\n ngDevMode && assertFirstCreatePass(tView);\n const { ngOnChanges, ngOnInit, ngDoCheck } = directiveDef.type.prototype;\n if (ngOnChanges) {\n const wrappedOnChanges = NgOnChangesFeatureImpl(directiveDef);\n (tView.preOrderHooks || (tView.preOrderHooks = [])).push(directiveIndex, wrappedOnChanges);\n (tView.preOrderCheckHooks || (tView.preOrderCheckHooks = []))\n .push(directiveIndex, wrappedOnChanges);\n }\n if (ngOnInit) {\n (tView.preOrderHooks || (tView.preOrderHooks = [])).push(0 - directiveIndex, ngOnInit);\n }\n if (ngDoCheck) {\n (tView.preOrderHooks || (tView.preOrderHooks = [])).push(directiveIndex, ngDoCheck);\n (tView.preOrderCheckHooks || (tView.preOrderCheckHooks = [])).push(directiveIndex, ngDoCheck);\n }\n}\n/**\n *\n * Loops through the directives on the provided `tNode` and queues hooks to be\n * run that are not initialization hooks.\n *\n * Should be executed during `elementEnd()` and similar to\n * preserve hook execution order. Content, view, and destroy hooks for projected\n * components and directives must be called *before* their hosts.\n *\n * Sets up the content, view, and destroy hooks on the provided `tView`,\n * see {@link HookData} for details about the data structure.\n *\n * NOTE: This does not set up `onChanges`, `onInit` or `doCheck`, those are set up\n * separately at `elementStart`.\n *\n * @param tView The current TView\n * @param tNode The TNode whose directives are to be searched for hooks to queue\n */\nfunction registerPostOrderHooks(tView, tNode) {\n ngDevMode && assertFirstCreatePass(tView);\n // It's necessary to loop through the directives at elementEnd() (rather than processing in\n // directiveCreate) so we can preserve the current hook order. Content, view, and destroy\n // hooks for projected components and directives must be called *before* their hosts.\n for (let i = tNode.directiveStart, end = tNode.directiveEnd; i < end; i++) {\n const directiveDef = tView.data[i];\n ngDevMode && assertDefined(directiveDef, 'Expecting DirectiveDef');\n const lifecycleHooks = directiveDef.type.prototype;\n const { ngAfterContentInit, ngAfterContentChecked, ngAfterViewInit, ngAfterViewChecked, ngOnDestroy } = lifecycleHooks;\n if (ngAfterContentInit) {\n (tView.contentHooks || (tView.contentHooks = [])).push(-i, ngAfterContentInit);\n }\n if (ngAfterContentChecked) {\n (tView.contentHooks || (tView.contentHooks = [])).push(i, ngAfterContentChecked);\n (tView.contentCheckHooks || (tView.contentCheckHooks = [])).push(i, ngAfterContentChecked);\n }\n if (ngAfterViewInit) {\n (tView.viewHooks || (tView.viewHooks = [])).push(-i, ngAfterViewInit);\n }\n if (ngAfterViewChecked) {\n (tView.viewHooks || (tView.viewHooks = [])).push(i, ngAfterViewChecked);\n (tView.viewCheckHooks || (tView.viewCheckHooks = [])).push(i, ngAfterViewChecked);\n }\n if (ngOnDestroy != null) {\n (tView.destroyHooks || (tView.destroyHooks = [])).push(i, ngOnDestroy);\n }\n }\n}\n/**\n * Executing hooks requires complex logic as we need to deal with 2 constraints.\n *\n * 1. Init hooks (ngOnInit, ngAfterContentInit, ngAfterViewInit) must all be executed once and only\n * once, across many change detection cycles. This must be true even if some hooks throw, or if\n * some recursively trigger a change detection cycle.\n * To solve that, it is required to track the state of the execution of these init hooks.\n * This is done by storing and maintaining flags in the view: the {@link InitPhaseState},\n * and the index within that phase. They can be seen as a cursor in the following structure:\n * [[onInit1, onInit2], [afterContentInit1], [afterViewInit1, afterViewInit2, afterViewInit3]]\n * They are are stored as flags in LView[FLAGS].\n *\n * 2. Pre-order hooks can be executed in batches, because of the select instruction.\n * To be able to pause and resume their execution, we also need some state about the hook's array\n * that is being processed:\n * - the index of the next hook to be executed\n * - the number of init hooks already found in the processed part of the array\n * They are are stored as flags in LView[PREORDER_HOOK_FLAGS].\n */\n/**\n * Executes pre-order check hooks ( OnChanges, DoChanges) given a view where all the init hooks were\n * executed once. This is a light version of executeInitAndCheckPreOrderHooks where we can skip read\n * / write of the init-hooks related flags.\n * @param lView The LView where hooks are defined\n * @param hooks Hooks to be run\n * @param nodeIndex 3 cases depending on the value:\n * - undefined: all hooks from the array should be executed (post-order case)\n * - null: execute hooks only from the saved index until the end of the array (pre-order case, when\n * flushing the remaining hooks)\n * - number: execute hooks only from the saved index until that node index exclusive (pre-order\n * case, when executing select(number))\n */\nfunction executeCheckHooks(lView, hooks, nodeIndex) {\n callHooks(lView, hooks, 3 /* InitPhaseCompleted */, nodeIndex);\n}\n/**\n * Executes post-order init and check hooks (one of AfterContentInit, AfterContentChecked,\n * AfterViewInit, AfterViewChecked) given a view where there are pending init hooks to be executed.\n * @param lView The LView where hooks are defined\n * @param hooks Hooks to be run\n * @param initPhase A phase for which hooks should be run\n * @param nodeIndex 3 cases depending on the value:\n * - undefined: all hooks from the array should be executed (post-order case)\n * - null: execute hooks only from the saved index until the end of the array (pre-order case, when\n * flushing the remaining hooks)\n * - number: execute hooks only from the saved index until that node index exclusive (pre-order\n * case, when executing select(number))\n */\nfunction executeInitAndCheckHooks(lView, hooks, initPhase, nodeIndex) {\n ngDevMode &&\n assertNotEqual(initPhase, 3 /* InitPhaseCompleted */, 'Init pre-order hooks should not be called more than once');\n if ((lView[FLAGS] & 3 /* InitPhaseStateMask */) === initPhase) {\n callHooks(lView, hooks, initPhase, nodeIndex);\n }\n}\nfunction incrementInitPhaseFlags(lView, initPhase) {\n ngDevMode &&\n assertNotEqual(initPhase, 3 /* InitPhaseCompleted */, 'Init hooks phase should not be incremented after all init hooks have been run.');\n let flags = lView[FLAGS];\n if ((flags & 3 /* InitPhaseStateMask */) === initPhase) {\n flags &= 2047 /* IndexWithinInitPhaseReset */;\n flags += 1 /* InitPhaseStateIncrementer */;\n lView[FLAGS] = flags;\n }\n}\n/**\n * Calls lifecycle hooks with their contexts, skipping init hooks if it's not\n * the first LView pass\n *\n * @param currentView The current view\n * @param arr The array in which the hooks are found\n * @param initPhaseState the current state of the init phase\n * @param currentNodeIndex 3 cases depending on the value:\n * - undefined: all hooks from the array should be executed (post-order case)\n * - null: execute hooks only from the saved index until the end of the array (pre-order case, when\n * flushing the remaining hooks)\n * - number: execute hooks only from the saved index until that node index exclusive (pre-order\n * case, when executing select(number))\n */\nfunction callHooks(currentView, arr, initPhase, currentNodeIndex) {\n ngDevMode &&\n assertEqual(isInCheckNoChangesMode(), false, 'Hooks should never be run when in check no changes mode.');\n const startIndex = currentNodeIndex !== undefined ?\n (currentView[PREORDER_HOOK_FLAGS] & 65535 /* IndexOfTheNextPreOrderHookMaskMask */) :\n 0;\n const nodeIndexLimit = currentNodeIndex != null ? currentNodeIndex : -1;\n const max = arr.length - 1; // Stop the loop at length - 1, because we look for the hook at i + 1\n let lastNodeIndexFound = 0;\n for (let i = startIndex; i < max; i++) {\n const hook = arr[i + 1];\n if (typeof hook === 'number') {\n lastNodeIndexFound = arr[i];\n if (currentNodeIndex != null && lastNodeIndexFound >= currentNodeIndex) {\n break;\n }\n }\n else {\n const isInitHook = arr[i] < 0;\n if (isInitHook)\n currentView[PREORDER_HOOK_FLAGS] += 65536 /* NumberOfInitHooksCalledIncrementer */;\n if (lastNodeIndexFound < nodeIndexLimit || nodeIndexLimit == -1) {\n callHook(currentView, initPhase, arr, i);\n currentView[PREORDER_HOOK_FLAGS] =\n (currentView[PREORDER_HOOK_FLAGS] & 4294901760 /* NumberOfInitHooksCalledMask */) + i +\n 2;\n }\n i++;\n }\n }\n}\n/**\n * Execute one hook against the current `LView`.\n *\n * @param currentView The current view\n * @param initPhaseState the current state of the init phase\n * @param arr The array in which the hooks are found\n * @param i The current index within the hook data array\n */\nfunction callHook(currentView, initPhase, arr, i) {\n const isInitHook = arr[i] < 0;\n const hook = arr[i + 1];\n const directiveIndex = isInitHook ? -arr[i] : arr[i];\n const directive = currentView[directiveIndex];\n if (isInitHook) {\n const indexWithintInitPhase = currentView[FLAGS] >> 11 /* IndexWithinInitPhaseShift */;\n // The init phase state must be always checked here as it may have been recursively updated.\n if (indexWithintInitPhase <\n (currentView[PREORDER_HOOK_FLAGS] >> 16 /* NumberOfInitHooksCalledShift */) &&\n (currentView[FLAGS] & 3 /* InitPhaseStateMask */) === initPhase) {\n currentView[FLAGS] += 2048 /* IndexWithinInitPhaseIncrementer */;\n profiler(4 /* LifecycleHookStart */, directive, hook);\n try {\n hook.call(directive);\n }\n finally {\n profiler(5 /* LifecycleHookEnd */, directive, hook);\n }\n }\n }\n else {\n profiler(4 /* LifecycleHookStart */, directive, hook);\n try {\n hook.call(directive);\n }\n finally {\n profiler(5 /* LifecycleHookEnd */, directive, hook);\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst NO_PARENT_INJECTOR = -1;\n/**\n * Each injector is saved in 9 contiguous slots in `LView` and 9 contiguous slots in\n * `TView.data`. This allows us to store information about the current node's tokens (which\n * can be shared in `TView`) as well as the tokens of its ancestor nodes (which cannot be\n * shared, so they live in `LView`).\n *\n * Each of these slots (aside from the last slot) contains a bloom filter. This bloom filter\n * determines whether a directive is available on the associated node or not. This prevents us\n * from searching the directives array at this level unless it's probable the directive is in it.\n *\n * See: https://en.wikipedia.org/wiki/Bloom_filter for more about bloom filters.\n *\n * Because all injectors have been flattened into `LView` and `TViewData`, they cannot typed\n * using interfaces as they were previously. The start index of each `LInjector` and `TInjector`\n * will differ based on where it is flattened into the main array, so it's not possible to know\n * the indices ahead of time and save their types here. The interfaces are still included here\n * for documentation purposes.\n *\n * export interface LInjector extends Array {\n *\n * // Cumulative bloom for directive IDs 0-31 (IDs are % BLOOM_SIZE)\n * [0]: number;\n *\n * // Cumulative bloom for directive IDs 32-63\n * [1]: number;\n *\n * // Cumulative bloom for directive IDs 64-95\n * [2]: number;\n *\n * // Cumulative bloom for directive IDs 96-127\n * [3]: number;\n *\n * // Cumulative bloom for directive IDs 128-159\n * [4]: number;\n *\n * // Cumulative bloom for directive IDs 160 - 191\n * [5]: number;\n *\n * // Cumulative bloom for directive IDs 192 - 223\n * [6]: number;\n *\n * // Cumulative bloom for directive IDs 224 - 255\n * [7]: number;\n *\n * // We need to store a reference to the injector's parent so DI can keep looking up\n * // the injector tree until it finds the dependency it's looking for.\n * [PARENT_INJECTOR]: number;\n * }\n *\n * export interface TInjector extends Array {\n *\n * // Shared node bloom for directive IDs 0-31 (IDs are % BLOOM_SIZE)\n * [0]: number;\n *\n * // Shared node bloom for directive IDs 32-63\n * [1]: number;\n *\n * // Shared node bloom for directive IDs 64-95\n * [2]: number;\n *\n * // Shared node bloom for directive IDs 96-127\n * [3]: number;\n *\n * // Shared node bloom for directive IDs 128-159\n * [4]: number;\n *\n * // Shared node bloom for directive IDs 160 - 191\n * [5]: number;\n *\n * // Shared node bloom for directive IDs 192 - 223\n * [6]: number;\n *\n * // Shared node bloom for directive IDs 224 - 255\n * [7]: number;\n *\n * // Necessary to find directive indices for a particular node.\n * [TNODE]: TElementNode|TElementContainerNode|TContainerNode;\n * }\n */\n/**\n * Factory for creating instances of injectors in the NodeInjector.\n *\n * This factory is complicated by the fact that it can resolve `multi` factories as well.\n *\n * NOTE: Some of the fields are optional which means that this class has two hidden classes.\n * - One without `multi` support (most common)\n * - One with `multi` values, (rare).\n *\n * Since VMs can cache up to 4 inline hidden classes this is OK.\n *\n * - Single factory: Only `resolving` and `factory` is defined.\n * - `providers` factory: `componentProviders` is a number and `index = -1`.\n * - `viewProviders` factory: `componentProviders` is a number and `index` points to `providers`.\n */\nclass NodeInjectorFactory {\n constructor(\n /**\n * Factory to invoke in order to create a new instance.\n */\n factory, \n /**\n * Set to `true` if the token is declared in `viewProviders` (or if it is component).\n */\n isViewProvider, injectImplementation) {\n this.factory = factory;\n /**\n * Marker set to true during factory invocation to see if we get into recursive loop.\n * Recursive loop causes an error to be displayed.\n */\n this.resolving = false;\n ngDevMode && assertDefined(factory, 'Factory not specified');\n ngDevMode && assertEqual(typeof factory, 'function', 'Expected factory function.');\n this.canSeeViewProviders = isViewProvider;\n this.injectImpl = injectImplementation;\n }\n}\nfunction isFactory(obj) {\n return obj instanceof NodeInjectorFactory;\n}\n// Note: This hack is necessary so we don't erroneously get a circular dependency\n// failure based on types.\nconst unusedValueExportToPlacateAjd$5 = 1;\n\n/**\n * Converts `TNodeType` into human readable text.\n * Make sure this matches with `TNodeType`\n */\nfunction toTNodeTypeAsString(tNodeType) {\n let text = '';\n (tNodeType & 1 /* Text */) && (text += '|Text');\n (tNodeType & 2 /* Element */) && (text += '|Element');\n (tNodeType & 4 /* Container */) && (text += '|Container');\n (tNodeType & 8 /* ElementContainer */) && (text += '|ElementContainer');\n (tNodeType & 16 /* Projection */) && (text += '|Projection');\n (tNodeType & 32 /* Icu */) && (text += '|IcuContainer');\n (tNodeType & 64 /* Placeholder */) && (text += '|Placeholder');\n return text.length > 0 ? text.substring(1) : text;\n}\n// Note: This hack is necessary so we don't erroneously get a circular dependency\n// failure based on types.\nconst unusedValueExportToPlacateAjd$4 = 1;\n/**\n * Returns `true` if the `TNode` has a directive which has `@Input()` for `class` binding.\n *\n * ```\n *
\n * ```\n * and\n * ```\n * @Directive({\n * })\n * class MyDirective {\n * @Input()\n * class: string;\n * }\n * ```\n *\n * In the above case it is necessary to write the reconciled styling information into the\n * directive's input.\n *\n * @param tNode\n */\nfunction hasClassInput(tNode) {\n return (tNode.flags & 16 /* hasClassInput */) !== 0;\n}\n/**\n * Returns `true` if the `TNode` has a directive which has `@Input()` for `style` binding.\n *\n * ```\n *
\n * ```\n * and\n * ```\n * @Directive({\n * })\n * class MyDirective {\n * @Input()\n * class: string;\n * }\n * ```\n *\n * In the above case it is necessary to write the reconciled styling information into the\n * directive's input.\n *\n * @param tNode\n */\nfunction hasStyleInput(tNode) {\n return (tNode.flags & 32 /* hasStyleInput */) !== 0;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction assertTNodeType(tNode, expectedTypes, message) {\n assertDefined(tNode, 'should be called with a TNode');\n if ((tNode.type & expectedTypes) === 0) {\n throwError(message ||\n `Expected [${toTNodeTypeAsString(expectedTypes)}] but got ${toTNodeTypeAsString(tNode.type)}.`);\n }\n}\nfunction assertPureTNodeType(type) {\n if (!(type === 2 /* Element */ || //\n type === 1 /* Text */ || //\n type === 4 /* Container */ || //\n type === 8 /* ElementContainer */ || //\n type === 32 /* Icu */ || //\n type === 16 /* Projection */ || //\n type === 64 /* Placeholder */)) {\n throwError(`Expected TNodeType to have only a single type selected, but got ${toTNodeTypeAsString(type)}.`);\n }\n}\n\n/**\n * Assigns all attribute values to the provided element via the inferred renderer.\n *\n * This function accepts two forms of attribute entries:\n *\n * default: (key, value):\n * attrs = [key1, value1, key2, value2]\n *\n * namespaced: (NAMESPACE_MARKER, uri, name, value)\n * attrs = [NAMESPACE_MARKER, uri, name, value, NAMESPACE_MARKER, uri, name, value]\n *\n * The `attrs` array can contain a mix of both the default and namespaced entries.\n * The \"default\" values are set without a marker, but if the function comes across\n * a marker value then it will attempt to set a namespaced value. If the marker is\n * not of a namespaced value then the function will quit and return the index value\n * where it stopped during the iteration of the attrs array.\n *\n * See [AttributeMarker] to understand what the namespace marker value is.\n *\n * Note that this instruction does not support assigning style and class values to\n * an element. See `elementStart` and `elementHostAttrs` to learn how styling values\n * are applied to an element.\n * @param renderer The renderer to be used\n * @param native The element that the attributes will be assigned to\n * @param attrs The attribute array of values that will be assigned to the element\n * @returns the index value that was last accessed in the attributes array\n */\nfunction setUpAttributes(renderer, native, attrs) {\n const isProc = isProceduralRenderer(renderer);\n let i = 0;\n while (i < attrs.length) {\n const value = attrs[i];\n if (typeof value === 'number') {\n // only namespaces are supported. Other value types (such as style/class\n // entries) are not supported in this function.\n if (value !== 0 /* NamespaceURI */) {\n break;\n }\n // we just landed on the marker value ... therefore\n // we should skip to the next entry\n i++;\n const namespaceURI = attrs[i++];\n const attrName = attrs[i++];\n const attrVal = attrs[i++];\n ngDevMode && ngDevMode.rendererSetAttribute++;\n isProc ?\n renderer.setAttribute(native, attrName, attrVal, namespaceURI) :\n native.setAttributeNS(namespaceURI, attrName, attrVal);\n }\n else {\n // attrName is string;\n const attrName = value;\n const attrVal = attrs[++i];\n // Standard attributes\n ngDevMode && ngDevMode.rendererSetAttribute++;\n if (isAnimationProp(attrName)) {\n if (isProc) {\n renderer.setProperty(native, attrName, attrVal);\n }\n }\n else {\n isProc ?\n renderer.setAttribute(native, attrName, attrVal) :\n native.setAttribute(attrName, attrVal);\n }\n i++;\n }\n }\n // another piece of code may iterate over the same attributes array. Therefore\n // it may be helpful to return the exact spot where the attributes array exited\n // whether by running into an unsupported marker or if all the static values were\n // iterated over.\n return i;\n}\n/**\n * Test whether the given value is a marker that indicates that the following\n * attribute values in a `TAttributes` array are only the names of attributes,\n * and not name-value pairs.\n * @param marker The attribute marker to test.\n * @returns true if the marker is a \"name-only\" marker (e.g. `Bindings`, `Template` or `I18n`).\n */\nfunction isNameOnlyAttributeMarker(marker) {\n return marker === 3 /* Bindings */ || marker === 4 /* Template */ ||\n marker === 6 /* I18n */;\n}\nfunction isAnimationProp(name) {\n // Perf note: accessing charCodeAt to check for the first character of a string is faster as\n // compared to accessing a character at index 0 (ex. name[0]). The main reason for this is that\n // charCodeAt doesn't allocate memory to return a substring.\n return name.charCodeAt(0) === 64 /* AT_SIGN */;\n}\n/**\n * Merges `src` `TAttributes` into `dst` `TAttributes` removing any duplicates in the process.\n *\n * This merge function keeps the order of attrs same.\n *\n * @param dst Location of where the merged `TAttributes` should end up.\n * @param src `TAttributes` which should be appended to `dst`\n */\nfunction mergeHostAttrs(dst, src) {\n if (src === null || src.length === 0) {\n // do nothing\n }\n else if (dst === null || dst.length === 0) {\n // We have source, but dst is empty, just make a copy.\n dst = src.slice();\n }\n else {\n let srcMarker = -1 /* ImplicitAttributes */;\n for (let i = 0; i < src.length; i++) {\n const item = src[i];\n if (typeof item === 'number') {\n srcMarker = item;\n }\n else {\n if (srcMarker === 0 /* NamespaceURI */) {\n // Case where we need to consume `key1`, `key2`, `value` items.\n }\n else if (srcMarker === -1 /* ImplicitAttributes */ ||\n srcMarker === 2 /* Styles */) {\n // Case where we have to consume `key1` and `value` only.\n mergeHostAttribute(dst, srcMarker, item, null, src[++i]);\n }\n else {\n // Case where we have to consume `key1` only.\n mergeHostAttribute(dst, srcMarker, item, null, null);\n }\n }\n }\n }\n return dst;\n}\n/**\n * Append `key`/`value` to existing `TAttributes` taking region marker and duplicates into account.\n *\n * @param dst `TAttributes` to append to.\n * @param marker Region where the `key`/`value` should be added.\n * @param key1 Key to add to `TAttributes`\n * @param key2 Key to add to `TAttributes` (in case of `AttributeMarker.NamespaceURI`)\n * @param value Value to add or to overwrite to `TAttributes` Only used if `marker` is not Class.\n */\nfunction mergeHostAttribute(dst, marker, key1, key2, value) {\n let i = 0;\n // Assume that new markers will be inserted at the end.\n let markerInsertPosition = dst.length;\n // scan until correct type.\n if (marker === -1 /* ImplicitAttributes */) {\n markerInsertPosition = -1;\n }\n else {\n while (i < dst.length) {\n const dstValue = dst[i++];\n if (typeof dstValue === 'number') {\n if (dstValue === marker) {\n markerInsertPosition = -1;\n break;\n }\n else if (dstValue > marker) {\n // We need to save this as we want the markers to be inserted in specific order.\n markerInsertPosition = i - 1;\n break;\n }\n }\n }\n }\n // search until you find place of insertion\n while (i < dst.length) {\n const item = dst[i];\n if (typeof item === 'number') {\n // since `i` started as the index after the marker, we did not find it if we are at the next\n // marker\n break;\n }\n else if (item === key1) {\n // We already have same token\n if (key2 === null) {\n if (value !== null) {\n dst[i + 1] = value;\n }\n return;\n }\n else if (key2 === dst[i + 1]) {\n dst[i + 2] = value;\n return;\n }\n }\n // Increment counter.\n i++;\n if (key2 !== null)\n i++;\n if (value !== null)\n i++;\n }\n // insert at location.\n if (markerInsertPosition !== -1) {\n dst.splice(markerInsertPosition, 0, marker);\n i = markerInsertPosition + 1;\n }\n dst.splice(i++, 0, key1);\n if (key2 !== null) {\n dst.splice(i++, 0, key2);\n }\n if (value !== null) {\n dst.splice(i++, 0, value);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/// Parent Injector Utils ///////////////////////////////////////////////////////////////\nfunction hasParentInjector(parentLocation) {\n return parentLocation !== NO_PARENT_INJECTOR;\n}\nfunction getParentInjectorIndex(parentLocation) {\n ngDevMode && assertNumber(parentLocation, 'Number expected');\n ngDevMode && assertNotEqual(parentLocation, -1, 'Not a valid state.');\n const parentInjectorIndex = parentLocation & 32767 /* InjectorIndexMask */;\n ngDevMode &&\n assertGreaterThan(parentInjectorIndex, HEADER_OFFSET, 'Parent injector must be pointing past HEADER_OFFSET.');\n return parentLocation & 32767 /* InjectorIndexMask */;\n}\nfunction getParentInjectorViewOffset(parentLocation) {\n return parentLocation >> 16 /* ViewOffsetShift */;\n}\n/**\n * Unwraps a parent injector location number to find the view offset from the current injector,\n * then walks up the declaration view tree until the view is found that contains the parent\n * injector.\n *\n * @param location The location of the parent injector, which contains the view offset\n * @param startView The LView instance from which to start walking up the view tree\n * @returns The LView instance that contains the parent injector\n */\nfunction getParentInjectorView(location, startView) {\n let viewOffset = getParentInjectorViewOffset(location);\n let parentView = startView;\n // For most cases, the parent injector can be found on the host node (e.g. for component\n // or container), but we must keep the loop here to support the rarer case of deeply nested\n // tags or inline views, where the parent injector might live many views\n // above the child injector.\n while (viewOffset > 0) {\n parentView = parentView[DECLARATION_VIEW];\n viewOffset--;\n }\n return parentView;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Defines if the call to `inject` should include `viewProviders` in its resolution.\n *\n * This is set to true when we try to instantiate a component. This value is reset in\n * `getNodeInjectable` to a value which matches the declaration location of the token about to be\n * instantiated. This is done so that if we are injecting a token which was declared outside of\n * `viewProviders` we don't accidentally pull `viewProviders` in.\n *\n * Example:\n *\n * ```\n * @Injectable()\n * class MyService {\n * constructor(public value: String) {}\n * }\n *\n * @Component({\n * providers: [\n * MyService,\n * {provide: String, value: 'providers' }\n * ]\n * viewProviders: [\n * {provide: String, value: 'viewProviders'}\n * ]\n * })\n * class MyComponent {\n * constructor(myService: MyService, value: String) {\n * // We expect that Component can see into `viewProviders`.\n * expect(value).toEqual('viewProviders');\n * // `MyService` was not declared in `viewProviders` hence it can't see it.\n * expect(myService.value).toEqual('providers');\n * }\n * }\n *\n * ```\n */\nlet includeViewProviders = true;\nfunction setIncludeViewProviders(v) {\n const oldValue = includeViewProviders;\n includeViewProviders = v;\n return oldValue;\n}\n/**\n * The number of slots in each bloom filter (used by DI). The larger this number, the fewer\n * directives that will share slots, and thus, the fewer false positives when checking for\n * the existence of a directive.\n */\nconst BLOOM_SIZE = 256;\nconst BLOOM_MASK = BLOOM_SIZE - 1;\n/**\n * The number of bits that is represented by a single bloom bucket. JS bit operations are 32 bits,\n * so each bucket represents 32 distinct tokens which accounts for log2(32) = 5 bits of a bloom hash\n * number.\n */\nconst BLOOM_BUCKET_BITS = 5;\n/** Counter used to generate unique IDs for directives. */\nlet nextNgElementId = 0;\n/**\n * Registers this directive as present in its node's injector by flipping the directive's\n * corresponding bit in the injector's bloom filter.\n *\n * @param injectorIndex The index of the node injector where this token should be registered\n * @param tView The TView for the injector's bloom filters\n * @param type The directive token to register\n */\nfunction bloomAdd(injectorIndex, tView, type) {\n ngDevMode && assertEqual(tView.firstCreatePass, true, 'expected firstCreatePass to be true');\n let id;\n if (typeof type === 'string') {\n id = type.charCodeAt(0) || 0;\n }\n else if (type.hasOwnProperty(NG_ELEMENT_ID)) {\n id = type[NG_ELEMENT_ID];\n }\n // Set a unique ID on the directive type, so if something tries to inject the directive,\n // we can easily retrieve the ID and hash it into the bloom bit that should be checked.\n if (id == null) {\n id = type[NG_ELEMENT_ID] = nextNgElementId++;\n }\n // We only have BLOOM_SIZE (256) slots in our bloom filter (8 buckets * 32 bits each),\n // so all unique IDs must be modulo-ed into a number from 0 - 255 to fit into the filter.\n const bloomHash = id & BLOOM_MASK;\n // Create a mask that targets the specific bit associated with the directive.\n // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding\n // to bit positions 0 - 31 in a 32 bit integer.\n const mask = 1 << bloomHash;\n // Each bloom bucket in `tData` represents `BLOOM_BUCKET_BITS` number of bits of `bloomHash`.\n // Any bits in `bloomHash` beyond `BLOOM_BUCKET_BITS` indicate the bucket offset that the mask\n // should be written to.\n tView.data[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)] |= mask;\n}\n/**\n * Creates (or gets an existing) injector for a given element or container.\n *\n * @param tNode for which an injector should be retrieved / created.\n * @param lView View where the node is stored\n * @returns Node injector\n */\nfunction getOrCreateNodeInjectorForNode(tNode, lView) {\n const existingInjectorIndex = getInjectorIndex(tNode, lView);\n if (existingInjectorIndex !== -1) {\n return existingInjectorIndex;\n }\n const tView = lView[TVIEW];\n if (tView.firstCreatePass) {\n tNode.injectorIndex = lView.length;\n insertBloom(tView.data, tNode); // foundation for node bloom\n insertBloom(lView, null); // foundation for cumulative bloom\n insertBloom(tView.blueprint, null);\n }\n const parentLoc = getParentInjectorLocation(tNode, lView);\n const injectorIndex = tNode.injectorIndex;\n // If a parent injector can't be found, its location is set to -1.\n // In that case, we don't need to set up a cumulative bloom\n if (hasParentInjector(parentLoc)) {\n const parentIndex = getParentInjectorIndex(parentLoc);\n const parentLView = getParentInjectorView(parentLoc, lView);\n const parentData = parentLView[TVIEW].data;\n // Creates a cumulative bloom filter that merges the parent's bloom filter\n // and its own cumulative bloom (which contains tokens for all ancestors)\n for (let i = 0; i < 8 /* BLOOM_SIZE */; i++) {\n lView[injectorIndex + i] = parentLView[parentIndex + i] | parentData[parentIndex + i];\n }\n }\n lView[injectorIndex + 8 /* PARENT */] = parentLoc;\n return injectorIndex;\n}\nfunction insertBloom(arr, footer) {\n arr.push(0, 0, 0, 0, 0, 0, 0, 0, footer);\n}\nfunction getInjectorIndex(tNode, lView) {\n if (tNode.injectorIndex === -1 ||\n // If the injector index is the same as its parent's injector index, then the index has been\n // copied down from the parent node. No injector has been created yet on this node.\n (tNode.parent && tNode.parent.injectorIndex === tNode.injectorIndex) ||\n // After the first template pass, the injector index might exist but the parent values\n // might not have been calculated yet for this instance\n lView[tNode.injectorIndex + 8 /* PARENT */] === null) {\n return -1;\n }\n else {\n ngDevMode && assertIndexInRange(lView, tNode.injectorIndex);\n return tNode.injectorIndex;\n }\n}\n/**\n * Finds the index of the parent injector, with a view offset if applicable. Used to set the\n * parent injector initially.\n *\n * @returns Returns a number that is the combination of the number of LViews that we have to go up\n * to find the LView containing the parent inject AND the index of the injector within that LView.\n */\nfunction getParentInjectorLocation(tNode, lView) {\n if (tNode.parent && tNode.parent.injectorIndex !== -1) {\n // If we have a parent `TNode` and there is an injector associated with it we are done, because\n // the parent injector is within the current `LView`.\n return tNode.parent.injectorIndex; // ViewOffset is 0\n }\n // When parent injector location is computed it may be outside of the current view. (ie it could\n // be pointing to a declared parent location). This variable stores number of declaration parents\n // we need to walk up in order to find the parent injector location.\n let declarationViewOffset = 0;\n let parentTNode = null;\n let lViewCursor = lView;\n // The parent injector is not in the current `LView`. We will have to walk the declared parent\n // `LView` hierarchy and look for it. If we walk of the top, that means that there is no parent\n // `NodeInjector`.\n while (lViewCursor !== null) {\n // First determine the `parentTNode` location. The parent pointer differs based on `TView.type`.\n const tView = lViewCursor[TVIEW];\n const tViewType = tView.type;\n if (tViewType === 2 /* Embedded */) {\n ngDevMode &&\n assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');\n parentTNode = tView.declTNode;\n }\n else if (tViewType === 1 /* Component */) {\n // Components don't have `TView.declTNode` because each instance of component could be\n // inserted in different location, hence `TView.declTNode` is meaningless.\n parentTNode = lViewCursor[T_HOST];\n }\n else {\n ngDevMode && assertEqual(tView.type, 0 /* Root */, 'Root type expected');\n parentTNode = null;\n }\n if (parentTNode === null) {\n // If we have no parent, than we are done.\n return NO_PARENT_INJECTOR;\n }\n ngDevMode && parentTNode && assertTNodeForLView(parentTNode, lViewCursor[DECLARATION_VIEW]);\n // Every iteration of the loop requires that we go to the declared parent.\n declarationViewOffset++;\n lViewCursor = lViewCursor[DECLARATION_VIEW];\n if (parentTNode.injectorIndex !== -1) {\n // We found a NodeInjector which points to something.\n return (parentTNode.injectorIndex |\n (declarationViewOffset << 16 /* ViewOffsetShift */));\n }\n }\n return NO_PARENT_INJECTOR;\n}\n/**\n * Makes a type or an injection token public to the DI system by adding it to an\n * injector's bloom filter.\n *\n * @param di The node injector in which a directive will be added\n * @param token The type or the injection token to be made public\n */\nfunction diPublicInInjector(injectorIndex, tView, token) {\n bloomAdd(injectorIndex, tView, token);\n}\n/**\n * Inject static attribute value into directive constructor.\n *\n * This method is used with `factory` functions which are generated as part of\n * `defineDirective` or `defineComponent`. The method retrieves the static value\n * of an attribute. (Dynamic attributes are not supported since they are not resolved\n * at the time of injection and can change over time.)\n *\n * # Example\n * Given:\n * ```\n * @Component(...)\n * class MyComponent {\n * constructor(@Attribute('title') title: string) { ... }\n * }\n * ```\n * When instantiated with\n * ```\n * \n * ```\n *\n * Then factory method generated is:\n * ```\n * MyComponent.ɵcmp = defineComponent({\n * factory: () => new MyComponent(injectAttribute('title'))\n * ...\n * })\n * ```\n *\n * @publicApi\n */\nfunction injectAttributeImpl(tNode, attrNameToInject) {\n ngDevMode && assertTNodeType(tNode, 12 /* AnyContainer */ | 3 /* AnyRNode */);\n ngDevMode && assertDefined(tNode, 'expecting tNode');\n if (attrNameToInject === 'class') {\n return tNode.classes;\n }\n if (attrNameToInject === 'style') {\n return tNode.styles;\n }\n const attrs = tNode.attrs;\n if (attrs) {\n const attrsLength = attrs.length;\n let i = 0;\n while (i < attrsLength) {\n const value = attrs[i];\n // If we hit a `Bindings` or `Template` marker then we are done.\n if (isNameOnlyAttributeMarker(value))\n break;\n // Skip namespaced attributes\n if (value === 0 /* NamespaceURI */) {\n // we skip the next two values\n // as namespaced attributes looks like\n // [..., AttributeMarker.NamespaceURI, 'http://someuri.com/test', 'test:exist',\n // 'existValue', ...]\n i = i + 2;\n }\n else if (typeof value === 'number') {\n // Skip to the first value of the marked attribute.\n i++;\n while (i < attrsLength && typeof attrs[i] === 'string') {\n i++;\n }\n }\n else if (value === attrNameToInject) {\n return attrs[i + 1];\n }\n else {\n i = i + 2;\n }\n }\n }\n return null;\n}\nfunction notFoundValueOrThrow(notFoundValue, token, flags) {\n if (flags & InjectFlags.Optional) {\n return notFoundValue;\n }\n else {\n throwProviderNotFoundError(token, 'NodeInjector');\n }\n}\n/**\n * Returns the value associated to the given token from the ModuleInjector or throws exception\n *\n * @param lView The `LView` that contains the `tNode`\n * @param token The token to look for\n * @param flags Injection flags\n * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`\n * @returns the value from the injector or throws an exception\n */\nfunction lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {\n if (flags & InjectFlags.Optional && notFoundValue === undefined) {\n // This must be set or the NullInjector will throw for optional deps\n notFoundValue = null;\n }\n if ((flags & (InjectFlags.Self | InjectFlags.Host)) === 0) {\n const moduleInjector = lView[INJECTOR$1];\n // switch to `injectInjectorOnly` implementation for module injector, since module injector\n // should not have access to Component/Directive DI scope (that may happen through\n // `directiveInject` implementation)\n const previousInjectImplementation = setInjectImplementation(undefined);\n try {\n if (moduleInjector) {\n return moduleInjector.get(token, notFoundValue, flags & InjectFlags.Optional);\n }\n else {\n return injectRootLimpMode(token, notFoundValue, flags & InjectFlags.Optional);\n }\n }\n finally {\n setInjectImplementation(previousInjectImplementation);\n }\n }\n return notFoundValueOrThrow(notFoundValue, token, flags);\n}\n/**\n * Returns the value associated to the given token from the NodeInjectors => ModuleInjector.\n *\n * Look for the injector providing the token by walking up the node injector tree and then\n * the module injector tree.\n *\n * This function patches `token` with `__NG_ELEMENT_ID__` which contains the id for the bloom\n * filter. `-1` is reserved for injecting `Injector` (implemented by `NodeInjector`)\n *\n * @param tNode The Node where the search for the injector should start\n * @param lView The `LView` that contains the `tNode`\n * @param token The token to look for\n * @param flags Injection flags\n * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`\n * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided\n */\nfunction getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default, notFoundValue) {\n if (tNode !== null) {\n const bloomHash = bloomHashBitOrFactory(token);\n // If the ID stored here is a function, this is a special object like ElementRef or TemplateRef\n // so just call the factory function to create it.\n if (typeof bloomHash === 'function') {\n if (!enterDI(lView, tNode, flags)) {\n // Failed to enter DI, try module injector instead. If a token is injected with the @Host\n // flag, the module injector is not searched for that token in Ivy.\n return (flags & InjectFlags.Host) ?\n notFoundValueOrThrow(notFoundValue, token, flags) :\n lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);\n }\n try {\n const value = bloomHash(flags);\n if (value == null && !(flags & InjectFlags.Optional)) {\n throwProviderNotFoundError(token);\n }\n else {\n return value;\n }\n }\n finally {\n leaveDI();\n }\n }\n else if (typeof bloomHash === 'number') {\n // A reference to the previous injector TView that was found while climbing the element\n // injector tree. This is used to know if viewProviders can be accessed on the current\n // injector.\n let previousTView = null;\n let injectorIndex = getInjectorIndex(tNode, lView);\n let parentLocation = NO_PARENT_INJECTOR;\n let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;\n // If we should skip this injector, or if there is no injector on this node, start by\n // searching the parent injector.\n if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {\n parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) :\n lView[injectorIndex + 8 /* PARENT */];\n if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {\n injectorIndex = -1;\n }\n else {\n previousTView = lView[TVIEW];\n injectorIndex = getParentInjectorIndex(parentLocation);\n lView = getParentInjectorView(parentLocation, lView);\n }\n }\n // Traverse up the injector tree until we find a potential match or until we know there\n // *isn't* a match.\n while (injectorIndex !== -1) {\n ngDevMode && assertNodeInjector(lView, injectorIndex);\n // Check the current injector. If it matches, see if it contains token.\n const tView = lView[TVIEW];\n ngDevMode &&\n assertTNodeForLView(tView.data[injectorIndex + 8 /* TNODE */], lView);\n if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {\n // At this point, we have an injector which *may* contain the token, so we step through\n // the providers and directives associated with the injector's corresponding node to get\n // the instance.\n const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);\n if (instance !== NOT_FOUND) {\n return instance;\n }\n }\n parentLocation = lView[injectorIndex + 8 /* PARENT */];\n if (parentLocation !== NO_PARENT_INJECTOR &&\n shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8 /* TNODE */] === hostTElementNode) &&\n bloomHasToken(bloomHash, injectorIndex, lView)) {\n // The def wasn't found anywhere on this node, so it was a false positive.\n // Traverse up the tree and continue searching.\n previousTView = tView;\n injectorIndex = getParentInjectorIndex(parentLocation);\n lView = getParentInjectorView(parentLocation, lView);\n }\n else {\n // If we should not search parent OR If the ancestor bloom filter value does not have the\n // bit corresponding to the directive we can give up on traversing up to find the specific\n // injector.\n injectorIndex = -1;\n }\n }\n }\n }\n return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);\n}\nconst NOT_FOUND = {};\nfunction createNodeInjector() {\n return new NodeInjector(getCurrentTNode(), getLView());\n}\nfunction searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {\n const currentTView = lView[TVIEW];\n const tNode = currentTView.data[injectorIndex + 8 /* TNODE */];\n // First, we need to determine if view providers can be accessed by the starting element.\n // There are two possibilities\n const canAccessViewProviders = previousTView == null ?\n // 1) This is the first invocation `previousTView == null` which means that we are at the\n // `TNode` of where injector is starting to look. In such a case the only time we are allowed\n // to look into the ViewProviders is if:\n // - we are on a component\n // - AND the injector set `includeViewProviders` to true (implying that the token can see\n // ViewProviders because it is the Component or a Service which itself was declared in\n // ViewProviders)\n (isComponentHost(tNode) && includeViewProviders) :\n // 2) `previousTView != null` which means that we are now walking across the parent nodes.\n // In such a case we are only allowed to look into the ViewProviders if:\n // - We just crossed from child View to Parent View `previousTView != currentTView`\n // - AND the parent TNode is an Element.\n // This means that we just came from the Component's View and therefore are allowed to see\n // into the ViewProviders.\n (previousTView != currentTView && ((tNode.type & 3 /* AnyRNode */) !== 0));\n // This special case happens when there is a @host on the inject and when we are searching\n // on the host element node.\n const isHostSpecialCase = (flags & InjectFlags.Host) && hostTElementNode === tNode;\n const injectableIdx = locateDirectiveOrProvider(tNode, currentTView, token, canAccessViewProviders, isHostSpecialCase);\n if (injectableIdx !== null) {\n return getNodeInjectable(lView, currentTView, injectableIdx, tNode);\n }\n else {\n return NOT_FOUND;\n }\n}\n/**\n * Searches for the given token among the node's directives and providers.\n *\n * @param tNode TNode on which directives are present.\n * @param tView The tView we are currently processing\n * @param token Provider token or type of a directive to look for.\n * @param canAccessViewProviders Whether view providers should be considered.\n * @param isHostSpecialCase Whether the host special case applies.\n * @returns Index of a found directive or provider, or null when none found.\n */\nfunction locateDirectiveOrProvider(tNode, tView, token, canAccessViewProviders, isHostSpecialCase) {\n const nodeProviderIndexes = tNode.providerIndexes;\n const tInjectables = tView.data;\n const injectablesStart = nodeProviderIndexes & 1048575 /* ProvidersStartIndexMask */;\n const directivesStart = tNode.directiveStart;\n const directiveEnd = tNode.directiveEnd;\n const cptViewProvidersCount = nodeProviderIndexes >> 20 /* CptViewProvidersCountShift */;\n const startingIndex = canAccessViewProviders ? injectablesStart : injectablesStart + cptViewProvidersCount;\n // When the host special case applies, only the viewProviders and the component are visible\n const endIndex = isHostSpecialCase ? injectablesStart + cptViewProvidersCount : directiveEnd;\n for (let i = startingIndex; i < endIndex; i++) {\n const providerTokenOrDef = tInjectables[i];\n if (i < directivesStart && token === providerTokenOrDef ||\n i >= directivesStart && providerTokenOrDef.type === token) {\n return i;\n }\n }\n if (isHostSpecialCase) {\n const dirDef = tInjectables[directivesStart];\n if (dirDef && isComponentDef(dirDef) && dirDef.type === token) {\n return directivesStart;\n }\n }\n return null;\n}\n/**\n * Retrieve or instantiate the injectable from the `LView` at particular `index`.\n *\n * This function checks to see if the value has already been instantiated and if so returns the\n * cached `injectable`. Otherwise if it detects that the value is still a factory it\n * instantiates the `injectable` and caches the value.\n */\nfunction getNodeInjectable(lView, tView, index, tNode) {\n let value = lView[index];\n const tData = tView.data;\n if (isFactory(value)) {\n const factory = value;\n if (factory.resolving) {\n throwCyclicDependencyError(stringifyForError(tData[index]));\n }\n const previousIncludeViewProviders = setIncludeViewProviders(factory.canSeeViewProviders);\n factory.resolving = true;\n const previousInjectImplementation = factory.injectImpl ? setInjectImplementation(factory.injectImpl) : null;\n const success = enterDI(lView, tNode, InjectFlags.Default);\n ngDevMode &&\n assertEqual(success, true, 'Because flags do not contain \\`SkipSelf\\' we expect this to always succeed.');\n try {\n value = lView[index] = factory.factory(undefined, tData, lView, tNode);\n // This code path is hit for both directives and providers.\n // For perf reasons, we want to avoid searching for hooks on providers.\n // It does no harm to try (the hooks just won't exist), but the extra\n // checks are unnecessary and this is a hot path. So we check to see\n // if the index of the dependency is in the directive range for this\n // tNode. If it's not, we know it's a provider and skip hook registration.\n if (tView.firstCreatePass && index >= tNode.directiveStart) {\n ngDevMode && assertDirectiveDef(tData[index]);\n registerPreOrderHooks(index, tData[index], tView);\n }\n }\n finally {\n previousInjectImplementation !== null &&\n setInjectImplementation(previousInjectImplementation);\n setIncludeViewProviders(previousIncludeViewProviders);\n factory.resolving = false;\n leaveDI();\n }\n }\n return value;\n}\n/**\n * Returns the bit in an injector's bloom filter that should be used to determine whether or not\n * the directive might be provided by the injector.\n *\n * When a directive is public, it is added to the bloom filter and given a unique ID that can be\n * retrieved on the Type. When the directive isn't public or the token is not a directive `null`\n * is returned as the node injector can not possibly provide that token.\n *\n * @param token the injection token\n * @returns the matching bit to check in the bloom filter or `null` if the token is not known.\n * When the returned value is negative then it represents special values such as `Injector`.\n */\nfunction bloomHashBitOrFactory(token) {\n ngDevMode && assertDefined(token, 'token must be defined');\n if (typeof token === 'string') {\n return token.charCodeAt(0) || 0;\n }\n const tokenId = \n // First check with `hasOwnProperty` so we don't get an inherited ID.\n token.hasOwnProperty(NG_ELEMENT_ID) ? token[NG_ELEMENT_ID] : undefined;\n // Negative token IDs are used for special objects such as `Injector`\n if (typeof tokenId === 'number') {\n if (tokenId >= 0) {\n return tokenId & BLOOM_MASK;\n }\n else {\n ngDevMode &&\n assertEqual(tokenId, -1 /* Injector */, 'Expecting to get Special Injector Id');\n return createNodeInjector;\n }\n }\n else {\n return tokenId;\n }\n}\nfunction bloomHasToken(bloomHash, injectorIndex, injectorView) {\n // Create a mask that targets the specific bit associated with the directive we're looking for.\n // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding\n // to bit positions 0 - 31 in a 32 bit integer.\n const mask = 1 << bloomHash;\n // Each bloom bucket in `injectorView` represents `BLOOM_BUCKET_BITS` number of bits of\n // `bloomHash`. Any bits in `bloomHash` beyond `BLOOM_BUCKET_BITS` indicate the bucket offset\n // that should be used.\n const value = injectorView[injectorIndex + (bloomHash >> BLOOM_BUCKET_BITS)];\n // If the bloom filter value has the bit corresponding to the directive's bloomBit flipped on,\n // this injector is a potential match.\n return !!(value & mask);\n}\n/** Returns true if flags prevent parent injector from being searched for tokens */\nfunction shouldSearchParent(flags, isFirstHostTNode) {\n return !(flags & InjectFlags.Self) && !(flags & InjectFlags.Host && isFirstHostTNode);\n}\nclass NodeInjector {\n constructor(_tNode, _lView) {\n this._tNode = _tNode;\n this._lView = _lView;\n }\n get(token, notFoundValue, flags) {\n return getOrCreateInjectable(this._tNode, this._lView, token, flags, notFoundValue);\n }\n}\n/**\n * @codeGenApi\n */\nfunction ɵɵgetInheritedFactory(type) {\n return noSideEffects(() => {\n const ownConstructor = type.prototype.constructor;\n const ownFactory = ownConstructor[NG_FACTORY_DEF] || getFactoryOf(ownConstructor);\n const objectPrototype = Object.prototype;\n let parent = Object.getPrototypeOf(type.prototype).constructor;\n // Go up the prototype until we hit `Object`.\n while (parent && parent !== objectPrototype) {\n const factory = parent[NG_FACTORY_DEF] || getFactoryOf(parent);\n // If we hit something that has a factory and the factory isn't the same as the type,\n // we've found the inherited factory. Note the check that the factory isn't the type's\n // own factory is redundant in most cases, but if the user has custom decorators on the\n // class, this lookup will start one level down in the prototype chain, causing us to\n // find the own factory first and potentially triggering an infinite loop downstream.\n if (factory && factory !== ownFactory) {\n return factory;\n }\n parent = Object.getPrototypeOf(parent);\n }\n // There is no factory defined. Either this was improper usage of inheritance\n // (no Angular decorator on the superclass) or there is no constructor at all\n // in the inheritance chain. Since the two cases cannot be distinguished, the\n // latter has to be assumed.\n return t => new t();\n });\n}\nfunction getFactoryOf(type) {\n if (isForwardRef(type)) {\n return () => {\n const factory = getFactoryOf(resolveForwardRef(type));\n return factory && factory();\n };\n }\n return getFactoryDef(type);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Facade for the attribute injection from DI.\n *\n * @codeGenApi\n */\nfunction ɵɵinjectAttribute(attrNameToInject) {\n return injectAttributeImpl(getCurrentTNode(), attrNameToInject);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst ANNOTATIONS = '__annotations__';\nconst PARAMETERS = '__parameters__';\nconst PROP_METADATA = '__prop__metadata__';\n/**\n * @suppress {globalThis}\n */\nfunction makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {\n return noSideEffects(() => {\n const metaCtor = makeMetadataCtor(props);\n function DecoratorFactory(...args) {\n if (this instanceof DecoratorFactory) {\n metaCtor.call(this, ...args);\n return this;\n }\n const annotationInstance = new DecoratorFactory(...args);\n return function TypeDecorator(cls) {\n if (typeFn)\n typeFn(cls, ...args);\n // Use of Object.defineProperty is important since it creates non-enumerable property which\n // prevents the property is copied during subclassing.\n const annotations = cls.hasOwnProperty(ANNOTATIONS) ?\n cls[ANNOTATIONS] :\n Object.defineProperty(cls, ANNOTATIONS, { value: [] })[ANNOTATIONS];\n annotations.push(annotationInstance);\n if (additionalProcessing)\n additionalProcessing(cls);\n return cls;\n };\n }\n if (parentClass) {\n DecoratorFactory.prototype = Object.create(parentClass.prototype);\n }\n DecoratorFactory.prototype.ngMetadataName = name;\n DecoratorFactory.annotationCls = DecoratorFactory;\n return DecoratorFactory;\n });\n}\nfunction makeMetadataCtor(props) {\n return function ctor(...args) {\n if (props) {\n const values = props(...args);\n for (const propName in values) {\n this[propName] = values[propName];\n }\n }\n };\n}\nfunction makeParamDecorator(name, props, parentClass) {\n return noSideEffects(() => {\n const metaCtor = makeMetadataCtor(props);\n function ParamDecoratorFactory(...args) {\n if (this instanceof ParamDecoratorFactory) {\n metaCtor.apply(this, args);\n return this;\n }\n const annotationInstance = new ParamDecoratorFactory(...args);\n ParamDecorator.annotation = annotationInstance;\n return ParamDecorator;\n function ParamDecorator(cls, unusedKey, index) {\n // Use of Object.defineProperty is important since it creates non-enumerable property which\n // prevents the property is copied during subclassing.\n const parameters = cls.hasOwnProperty(PARAMETERS) ?\n cls[PARAMETERS] :\n Object.defineProperty(cls, PARAMETERS, { value: [] })[PARAMETERS];\n // there might be gaps if some in between parameters do not have annotations.\n // we pad with nulls.\n while (parameters.length <= index) {\n parameters.push(null);\n }\n (parameters[index] = parameters[index] || []).push(annotationInstance);\n return cls;\n }\n }\n if (parentClass) {\n ParamDecoratorFactory.prototype = Object.create(parentClass.prototype);\n }\n ParamDecoratorFactory.prototype.ngMetadataName = name;\n ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;\n return ParamDecoratorFactory;\n });\n}\nfunction makePropDecorator(name, props, parentClass, additionalProcessing) {\n return noSideEffects(() => {\n const metaCtor = makeMetadataCtor(props);\n function PropDecoratorFactory(...args) {\n if (this instanceof PropDecoratorFactory) {\n metaCtor.apply(this, args);\n return this;\n }\n const decoratorInstance = new PropDecoratorFactory(...args);\n function PropDecorator(target, name) {\n const constructor = target.constructor;\n // Use of Object.defineProperty is important because it creates a non-enumerable property\n // which prevents the property from being copied during subclassing.\n const meta = constructor.hasOwnProperty(PROP_METADATA) ?\n constructor[PROP_METADATA] :\n Object.defineProperty(constructor, PROP_METADATA, { value: {} })[PROP_METADATA];\n meta[name] = meta.hasOwnProperty(name) && meta[name] || [];\n meta[name].unshift(decoratorInstance);\n if (additionalProcessing)\n additionalProcessing(target, name, ...args);\n }\n return PropDecorator;\n }\n if (parentClass) {\n PropDecoratorFactory.prototype = Object.create(parentClass.prototype);\n }\n PropDecoratorFactory.prototype.ngMetadataName = name;\n PropDecoratorFactory.annotationCls = PropDecoratorFactory;\n return PropDecoratorFactory;\n });\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Attribute decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Attribute = makeParamDecorator('Attribute', (attributeName) => ({ attributeName, __NG_ELEMENT_ID__: () => ɵɵinjectAttribute(attributeName) }));\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Creates a token that can be used in a DI Provider.\n *\n * Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a\n * runtime representation) such as when injecting an interface, callable type, array or\n * parameterized type.\n *\n * `InjectionToken` is parameterized on `T` which is the type of object which will be returned by\n * the `Injector`. This provides an additional level of type safety.\n *\n * ```\n * interface MyInterface {...}\n * const myInterface = injector.get(new InjectionToken('SomeToken'));\n * // myInterface is inferred to be MyInterface.\n * ```\n *\n * When creating an `InjectionToken`, you can optionally specify a factory function which returns\n * (possibly by creating) a default value of the parameterized type `T`. This sets up the\n * `InjectionToken` using this factory as a provider as if it was defined explicitly in the\n * application's root injector. If the factory function, which takes zero arguments, needs to inject\n * dependencies, it can do so using the `inject` function.\n * As you can see in the Tree-shakable InjectionToken example below.\n *\n * Additionally, if a `factory` is specified you can also specify the `providedIn` option, which\n * overrides the above behavior and marks the token as belonging to a particular `@NgModule`. As\n * mentioned above, `'root'` is the default value for `providedIn`.\n *\n * @usageNotes\n * ### Basic Examples\n *\n * ### Plain InjectionToken\n *\n * {@example core/di/ts/injector_spec.ts region='InjectionToken'}\n *\n * ### Tree-shakable InjectionToken\n *\n * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}\n *\n *\n * @publicApi\n */\nclass InjectionToken {\n /**\n * @param _desc Description for the token,\n * used only for debugging purposes,\n * it should but does not need to be unique\n * @param options Options for the token's usage, as described above\n */\n constructor(_desc, options) {\n this._desc = _desc;\n /** @internal */\n this.ngMetadataName = 'InjectionToken';\n this.ɵprov = undefined;\n if (typeof options == 'number') {\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n assertLessThan(options, 0, 'Only negative numbers are supported here');\n // This is a special hack to assign __NG_ELEMENT_ID__ to this instance.\n // See `InjectorMarkers`\n this.__NG_ELEMENT_ID__ = options;\n }\n else if (options !== undefined) {\n this.ɵprov = ɵɵdefineInjectable({\n token: this,\n providedIn: options.providedIn || 'root',\n factory: options.factory,\n });\n }\n }\n toString() {\n return `InjectionToken ${this._desc}`;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A DI token that you can use to create a virtual [provider](guide/glossary#provider)\n * that will populate the `entryComponents` field of components and NgModules\n * based on its `useValue` property value.\n * All components that are referenced in the `useValue` value (either directly\n * or in a nested array or map) are added to the `entryComponents` property.\n *\n * @usageNotes\n *\n * The following example shows how the router can populate the `entryComponents`\n * field of an NgModule based on a router configuration that refers\n * to components.\n *\n * ```typescript\n * // helper function inside the router\n * function provideRoutes(routes) {\n * return [\n * {provide: ROUTES, useValue: routes},\n * {provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: routes, multi: true}\n * ];\n * }\n *\n * // user code\n * let routes = [\n * {path: '/root', component: RootComp},\n * {path: '/teams', component: TeamsComp}\n * ];\n *\n * @NgModule({\n * providers: [provideRoutes(routes)]\n * })\n * class ModuleWithRoutes {}\n * ```\n *\n * @publicApi\n * @deprecated Since 9.0.0. With Ivy, this property is no longer necessary.\n */\nconst ANALYZE_FOR_ENTRY_COMPONENTS = new InjectionToken('AnalyzeForEntryComponents');\n// Stores the default value of `emitDistinctChangesOnly` when the `emitDistinctChangesOnly` is not\n// explicitly set.\nconst emitDistinctChangesOnlyDefaultValue = true;\n/**\n * Base class for query metadata.\n *\n * @see `ContentChildren`.\n * @see `ContentChild`.\n * @see `ViewChildren`.\n * @see `ViewChild`.\n *\n * @publicApi\n */\nclass Query {\n}\n/**\n * ContentChildren decorator and metadata.\n *\n *\n * @Annotation\n * @publicApi\n */\nconst ContentChildren = makePropDecorator('ContentChildren', (selector, data = {}) => (Object.assign({ selector, first: false, isViewQuery: false, descendants: false, emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue }, data)), Query);\n/**\n * ContentChild decorator and metadata.\n *\n *\n * @Annotation\n *\n * @publicApi\n */\nconst ContentChild = makePropDecorator('ContentChild', (selector, data = {}) => (Object.assign({ selector, first: true, isViewQuery: false, descendants: true }, data)), Query);\n/**\n * ViewChildren decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst ViewChildren = makePropDecorator('ViewChildren', (selector, data = {}) => (Object.assign({ selector, first: false, isViewQuery: true, descendants: true, emitDistinctChangesOnly: emitDistinctChangesOnlyDefaultValue }, data)), Query);\n/**\n * ViewChild decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst ViewChild = makePropDecorator('ViewChild', (selector, data) => (Object.assign({ selector, first: true, isViewQuery: true, descendants: true }, data)), Query);\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar FactoryTarget;\n(function (FactoryTarget) {\n FactoryTarget[FactoryTarget[\"Directive\"] = 0] = \"Directive\";\n FactoryTarget[FactoryTarget[\"Component\"] = 1] = \"Component\";\n FactoryTarget[FactoryTarget[\"Injectable\"] = 2] = \"Injectable\";\n FactoryTarget[FactoryTarget[\"Pipe\"] = 3] = \"Pipe\";\n FactoryTarget[FactoryTarget[\"NgModule\"] = 4] = \"NgModule\";\n})(FactoryTarget || (FactoryTarget = {}));\nvar ViewEncapsulation;\n(function (ViewEncapsulation) {\n ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.\n ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n ViewEncapsulation[ViewEncapsulation[\"ShadowDom\"] = 3] = \"ShadowDom\";\n})(ViewEncapsulation || (ViewEncapsulation = {}));\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction getCompilerFacade(request) {\n const globalNg = _global['ng'];\n if (globalNg && globalNg.ɵcompilerFacade) {\n return globalNg.ɵcompilerFacade;\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n // Log the type as an error so that a developer can easily navigate to the type from the\n // console.\n console.error(`JIT compilation failed for ${request.kind}`, request.type);\n let message = `The ${request.kind} '${request\n .type.name}' needs to be compiled using the JIT compiler, but '@angular/compiler' is not available.\\n\\n`;\n if (request.usage === 1 /* PartialDeclaration */) {\n message += `The ${request.kind} is part of a library that has been partially compiled.\\n`;\n message +=\n `However, the Angular Linker has not processed the library such that JIT compilation is used as fallback.\\n`;\n message += '\\n';\n message +=\n `Ideally, the library is processed using the Angular Linker to become fully AOT compiled.\\n`;\n }\n else {\n message +=\n `JIT compilation is discouraged for production use-cases! Consider using AOT mode instead.\\n`;\n }\n message +=\n `Alternatively, the JIT compiler should be loaded by bootstrapping using '@angular/platform-browser-dynamic' or '@angular/platform-server',\\n`;\n message +=\n `or manually provide the compiler with 'import \"@angular/compiler\";' before bootstrapping.`;\n throw new Error(message);\n }\n else {\n throw new Error('JIT compiler unavailable');\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Represents a type that a Component or other object is instances of.\n *\n * An example of a `Type` is `MyCustomComponent` class, which in JavaScript is represented by\n * the `MyCustomComponent` constructor function.\n *\n * @publicApi\n */\nconst Type = Function;\nfunction isType(v) {\n return typeof v === 'function';\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Equivalent to ES6 spread, add each item to an array.\n *\n * @param items The items to add\n * @param arr The array to which you want to add the items\n */\nfunction addAllToArray(items, arr) {\n for (let i = 0; i < items.length; i++) {\n arr.push(items[i]);\n }\n}\n/**\n * Determines if the contents of two arrays is identical\n *\n * @param a first array\n * @param b second array\n * @param identityAccessor Optional function for extracting stable object identity from a value in\n * the array.\n */\nfunction arrayEquals(a, b, identityAccessor) {\n if (a.length !== b.length)\n return false;\n for (let i = 0; i < a.length; i++) {\n let valueA = a[i];\n let valueB = b[i];\n if (identityAccessor) {\n valueA = identityAccessor(valueA);\n valueB = identityAccessor(valueB);\n }\n if (valueB !== valueA) {\n return false;\n }\n }\n return true;\n}\n/**\n * Flattens an array.\n */\nfunction flatten(list, dst) {\n if (dst === undefined)\n dst = list;\n for (let i = 0; i < list.length; i++) {\n let item = list[i];\n if (Array.isArray(item)) {\n // we need to inline it.\n if (dst === list) {\n // Our assumption that the list was already flat was wrong and\n // we need to clone flat since we need to write to it.\n dst = list.slice(0, i);\n }\n flatten(item, dst);\n }\n else if (dst !== list) {\n dst.push(item);\n }\n }\n return dst;\n}\nfunction deepForEach(input, fn) {\n input.forEach(value => Array.isArray(value) ? deepForEach(value, fn) : fn(value));\n}\nfunction addToArray(arr, index, value) {\n // perf: array.push is faster than array.splice!\n if (index >= arr.length) {\n arr.push(value);\n }\n else {\n arr.splice(index, 0, value);\n }\n}\nfunction removeFromArray(arr, index) {\n // perf: array.pop is faster than array.splice!\n if (index >= arr.length - 1) {\n return arr.pop();\n }\n else {\n return arr.splice(index, 1)[0];\n }\n}\nfunction newArray(size, value) {\n const list = [];\n for (let i = 0; i < size; i++) {\n list.push(value);\n }\n return list;\n}\n/**\n * Remove item from array (Same as `Array.splice()` but faster.)\n *\n * `Array.splice()` is not as fast because it has to allocate an array for the elements which were\n * removed. This causes memory pressure and slows down code when most of the time we don't\n * care about the deleted items array.\n *\n * https://jsperf.com/fast-array-splice (About 20x faster)\n *\n * @param array Array to splice\n * @param index Index of element in array to remove.\n * @param count Number of items to remove.\n */\nfunction arraySplice(array, index, count) {\n const length = array.length - count;\n while (index < length) {\n array[index] = array[index + count];\n index++;\n }\n while (count--) {\n array.pop(); // shrink the array\n }\n}\n/**\n * Same as `Array.splice(index, 0, value)` but faster.\n *\n * `Array.splice()` is not fast because it has to allocate an array for the elements which were\n * removed. This causes memory pressure and slows down code when most of the time we don't\n * care about the deleted items array.\n *\n * @param array Array to splice.\n * @param index Index in array where the `value` should be added.\n * @param value Value to add to array.\n */\nfunction arrayInsert(array, index, value) {\n ngDevMode && assertLessThanOrEqual(index, array.length, 'Can\\'t insert past array end.');\n let end = array.length;\n while (end > index) {\n const previousEnd = end - 1;\n array[end] = array[previousEnd];\n end = previousEnd;\n }\n array[index] = value;\n}\n/**\n * Same as `Array.splice2(index, 0, value1, value2)` but faster.\n *\n * `Array.splice()` is not fast because it has to allocate an array for the elements which were\n * removed. This causes memory pressure and slows down code when most of the time we don't\n * care about the deleted items array.\n *\n * @param array Array to splice.\n * @param index Index in array where the `value` should be added.\n * @param value1 Value to add to array.\n * @param value2 Value to add to array.\n */\nfunction arrayInsert2(array, index, value1, value2) {\n ngDevMode && assertLessThanOrEqual(index, array.length, 'Can\\'t insert past array end.');\n let end = array.length;\n if (end == index) {\n // inserting at the end.\n array.push(value1, value2);\n }\n else if (end === 1) {\n // corner case when we have less items in array than we have items to insert.\n array.push(value2, array[0]);\n array[0] = value1;\n }\n else {\n end--;\n array.push(array[end - 1], array[end]);\n while (end > index) {\n const previousEnd = end - 2;\n array[end] = array[previousEnd];\n end--;\n }\n array[index] = value1;\n array[index + 1] = value2;\n }\n}\n/**\n * Insert a `value` into an `array` so that the array remains sorted.\n *\n * NOTE:\n * - Duplicates are not allowed, and are ignored.\n * - This uses binary search algorithm for fast inserts.\n *\n * @param array A sorted array to insert into.\n * @param value The value to insert.\n * @returns index of the inserted value.\n */\nfunction arrayInsertSorted(array, value) {\n let index = arrayIndexOfSorted(array, value);\n if (index < 0) {\n // if we did not find it insert it.\n index = ~index;\n arrayInsert(array, index, value);\n }\n return index;\n}\n/**\n * Remove `value` from a sorted `array`.\n *\n * NOTE:\n * - This uses binary search algorithm for fast removals.\n *\n * @param array A sorted array to remove from.\n * @param value The value to remove.\n * @returns index of the removed value.\n * - positive index if value found and removed.\n * - negative index if value not found. (`~index` to get the value where it should have been\n * inserted)\n */\nfunction arrayRemoveSorted(array, value) {\n const index = arrayIndexOfSorted(array, value);\n if (index >= 0) {\n arraySplice(array, index, 1);\n }\n return index;\n}\n/**\n * Get an index of an `value` in a sorted `array`.\n *\n * NOTE:\n * - This uses binary search algorithm for fast removals.\n *\n * @param array A sorted array to binary search.\n * @param value The value to look for.\n * @returns index of the value.\n * - positive index if value found.\n * - negative index if value not found. (`~index` to get the value where it should have been\n * located)\n */\nfunction arrayIndexOfSorted(array, value) {\n return _arrayIndexOfSorted(array, value, 0);\n}\n/**\n * Set a `value` for a `key`.\n *\n * @param keyValueArray to modify.\n * @param key The key to locate or create.\n * @param value The value to set for a `key`.\n * @returns index (always even) of where the value vas set.\n */\nfunction keyValueArraySet(keyValueArray, key, value) {\n let index = keyValueArrayIndexOf(keyValueArray, key);\n if (index >= 0) {\n // if we found it set it.\n keyValueArray[index | 1] = value;\n }\n else {\n index = ~index;\n arrayInsert2(keyValueArray, index, key, value);\n }\n return index;\n}\n/**\n * Retrieve a `value` for a `key` (on `undefined` if not found.)\n *\n * @param keyValueArray to search.\n * @param key The key to locate.\n * @return The `value` stored at the `key` location or `undefined if not found.\n */\nfunction keyValueArrayGet(keyValueArray, key) {\n const index = keyValueArrayIndexOf(keyValueArray, key);\n if (index >= 0) {\n // if we found it retrieve it.\n return keyValueArray[index | 1];\n }\n return undefined;\n}\n/**\n * Retrieve a `key` index value in the array or `-1` if not found.\n *\n * @param keyValueArray to search.\n * @param key The key to locate.\n * @returns index of where the key is (or should have been.)\n * - positive (even) index if key found.\n * - negative index if key not found. (`~index` (even) to get the index where it should have\n * been inserted.)\n */\nfunction keyValueArrayIndexOf(keyValueArray, key) {\n return _arrayIndexOfSorted(keyValueArray, key, 1);\n}\n/**\n * Delete a `key` (and `value`) from the `KeyValueArray`.\n *\n * @param keyValueArray to modify.\n * @param key The key to locate or delete (if exist).\n * @returns index of where the key was (or should have been.)\n * - positive (even) index if key found and deleted.\n * - negative index if key not found. (`~index` (even) to get the index where it should have\n * been.)\n */\nfunction keyValueArrayDelete(keyValueArray, key) {\n const index = keyValueArrayIndexOf(keyValueArray, key);\n if (index >= 0) {\n // if we found it remove it.\n arraySplice(keyValueArray, index, 2);\n }\n return index;\n}\n/**\n * INTERNAL: Get an index of an `value` in a sorted `array` by grouping search by `shift`.\n *\n * NOTE:\n * - This uses binary search algorithm for fast removals.\n *\n * @param array A sorted array to binary search.\n * @param value The value to look for.\n * @param shift grouping shift.\n * - `0` means look at every location\n * - `1` means only look at every other (even) location (the odd locations are to be ignored as\n * they are values.)\n * @returns index of the value.\n * - positive index if value found.\n * - negative index if value not found. (`~index` to get the value where it should have been\n * inserted)\n */\nfunction _arrayIndexOfSorted(array, value, shift) {\n ngDevMode && assertEqual(Array.isArray(array), true, 'Expecting an array');\n let start = 0;\n let end = array.length >> shift;\n while (end !== start) {\n const middle = start + ((end - start) >> 1); // find the middle.\n const current = array[middle << shift];\n if (value === current) {\n return (middle << shift);\n }\n else if (current > value) {\n end = middle;\n }\n else {\n start = middle + 1; // We already searched middle so make it non-inclusive by adding 1\n }\n }\n return ~(end << shift);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/*\n * #########################\n * Attention: These Regular expressions have to hold even if the code is minified!\n * ##########################\n */\n/**\n * Regular expression that detects pass-through constructors for ES5 output. This Regex\n * intends to capture the common delegation pattern emitted by TypeScript and Babel. Also\n * it intends to capture the pattern where existing constructors have been downleveled from\n * ES2015 to ES5 using TypeScript w/ downlevel iteration. e.g.\n *\n * ```\n * function MyClass() {\n * var _this = _super.apply(this, arguments) || this;\n * ```\n *\n * downleveled to ES5 with `downlevelIteration` for TypeScript < 4.2:\n * ```\n * function MyClass() {\n * var _this = _super.apply(this, __spread(arguments)) || this;\n * ```\n *\n * or downleveled to ES5 with `downlevelIteration` for TypeScript >= 4.2:\n * ```\n * function MyClass() {\n * var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;\n * ```\n *\n * More details can be found in: https://github.com/angular/angular/issues/38453.\n */\nconst ES5_DELEGATE_CTOR = /^function\\s+\\S+\\(\\)\\s*{[\\s\\S]+\\.apply\\(this,\\s*(arguments|(?:[^()]+\\(\\[\\],)?[^()]+\\(arguments\\).*)\\)/;\n/** Regular expression that detects ES2015 classes which extend from other classes. */\nconst ES2015_INHERITED_CLASS = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{/;\n/**\n * Regular expression that detects ES2015 classes which extend from other classes and\n * have an explicit constructor defined.\n */\nconst ES2015_INHERITED_CLASS_WITH_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(/;\n/**\n * Regular expression that detects ES2015 classes which extend from other classes\n * and inherit a constructor.\n */\nconst ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(\\)\\s*{[^}]*super\\(\\.\\.\\.arguments\\)/;\n/**\n * Determine whether a stringified type is a class which delegates its constructor\n * to its parent.\n *\n * This is not trivial since compiled code can actually contain a constructor function\n * even if the original source code did not. For instance, when the child class contains\n * an initialized instance property.\n */\nfunction isDelegateCtor(typeStr) {\n return ES5_DELEGATE_CTOR.test(typeStr) ||\n ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR.test(typeStr) ||\n (ES2015_INHERITED_CLASS.test(typeStr) && !ES2015_INHERITED_CLASS_WITH_CTOR.test(typeStr));\n}\nclass ReflectionCapabilities {\n constructor(reflect) {\n this._reflect = reflect || _global['Reflect'];\n }\n isReflectionEnabled() {\n return true;\n }\n factory(t) {\n return (...args) => new t(...args);\n }\n /** @internal */\n _zipTypesAndAnnotations(paramTypes, paramAnnotations) {\n let result;\n if (typeof paramTypes === 'undefined') {\n result = newArray(paramAnnotations.length);\n }\n else {\n result = newArray(paramTypes.length);\n }\n for (let i = 0; i < result.length; i++) {\n // TS outputs Object for parameters without types, while Traceur omits\n // the annotations. For now we preserve the Traceur behavior to aid\n // migration, but this can be revisited.\n if (typeof paramTypes === 'undefined') {\n result[i] = [];\n }\n else if (paramTypes[i] && paramTypes[i] != Object) {\n result[i] = [paramTypes[i]];\n }\n else {\n result[i] = [];\n }\n if (paramAnnotations && paramAnnotations[i] != null) {\n result[i] = result[i].concat(paramAnnotations[i]);\n }\n }\n return result;\n }\n _ownParameters(type, parentCtor) {\n const typeStr = type.toString();\n // If we have no decorators, we only have function.length as metadata.\n // In that case, to detect whether a child class declared an own constructor or not,\n // we need to look inside of that constructor to check whether it is\n // just calling the parent.\n // This also helps to work around for https://github.com/Microsoft/TypeScript/issues/12439\n // that sets 'design:paramtypes' to []\n // if a class inherits from another class but has no ctor declared itself.\n if (isDelegateCtor(typeStr)) {\n return null;\n }\n // Prefer the direct API.\n if (type.parameters && type.parameters !== parentCtor.parameters) {\n return type.parameters;\n }\n // API of tsickle for lowering decorators to properties on the class.\n const tsickleCtorParams = type.ctorParameters;\n if (tsickleCtorParams && tsickleCtorParams !== parentCtor.ctorParameters) {\n // Newer tsickle uses a function closure\n // Retain the non-function case for compatibility with older tsickle\n const ctorParameters = typeof tsickleCtorParams === 'function' ? tsickleCtorParams() : tsickleCtorParams;\n const paramTypes = ctorParameters.map((ctorParam) => ctorParam && ctorParam.type);\n const paramAnnotations = ctorParameters.map((ctorParam) => ctorParam && convertTsickleDecoratorIntoMetadata(ctorParam.decorators));\n return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n }\n // API for metadata created by invoking the decorators.\n const paramAnnotations = type.hasOwnProperty(PARAMETERS) && type[PARAMETERS];\n const paramTypes = this._reflect && this._reflect.getOwnMetadata &&\n this._reflect.getOwnMetadata('design:paramtypes', type);\n if (paramTypes || paramAnnotations) {\n return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n }\n // If a class has no decorators, at least create metadata\n // based on function.length.\n // Note: We know that this is a real constructor as we checked\n // the content of the constructor above.\n return newArray(type.length);\n }\n parameters(type) {\n // Note: only report metadata if we have at least one class decorator\n // to stay in sync with the static reflector.\n if (!isType(type)) {\n return [];\n }\n const parentCtor = getParentCtor(type);\n let parameters = this._ownParameters(type, parentCtor);\n if (!parameters && parentCtor !== Object) {\n parameters = this.parameters(parentCtor);\n }\n return parameters || [];\n }\n _ownAnnotations(typeOrFunc, parentCtor) {\n // Prefer the direct API.\n if (typeOrFunc.annotations && typeOrFunc.annotations !== parentCtor.annotations) {\n let annotations = typeOrFunc.annotations;\n if (typeof annotations === 'function' && annotations.annotations) {\n annotations = annotations.annotations;\n }\n return annotations;\n }\n // API of tsickle for lowering decorators to properties on the class.\n if (typeOrFunc.decorators && typeOrFunc.decorators !== parentCtor.decorators) {\n return convertTsickleDecoratorIntoMetadata(typeOrFunc.decorators);\n }\n // API for metadata created by invoking the decorators.\n if (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {\n return typeOrFunc[ANNOTATIONS];\n }\n return null;\n }\n annotations(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return [];\n }\n const parentCtor = getParentCtor(typeOrFunc);\n const ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];\n const parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];\n return parentAnnotations.concat(ownAnnotations);\n }\n _ownPropMetadata(typeOrFunc, parentCtor) {\n // Prefer the direct API.\n if (typeOrFunc.propMetadata &&\n typeOrFunc.propMetadata !== parentCtor.propMetadata) {\n let propMetadata = typeOrFunc.propMetadata;\n if (typeof propMetadata === 'function' && propMetadata.propMetadata) {\n propMetadata = propMetadata.propMetadata;\n }\n return propMetadata;\n }\n // API of tsickle for lowering decorators to properties on the class.\n if (typeOrFunc.propDecorators &&\n typeOrFunc.propDecorators !== parentCtor.propDecorators) {\n const propDecorators = typeOrFunc.propDecorators;\n const propMetadata = {};\n Object.keys(propDecorators).forEach(prop => {\n propMetadata[prop] = convertTsickleDecoratorIntoMetadata(propDecorators[prop]);\n });\n return propMetadata;\n }\n // API for metadata created by invoking the decorators.\n if (typeOrFunc.hasOwnProperty(PROP_METADATA)) {\n return typeOrFunc[PROP_METADATA];\n }\n return null;\n }\n propMetadata(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return {};\n }\n const parentCtor = getParentCtor(typeOrFunc);\n const propMetadata = {};\n if (parentCtor !== Object) {\n const parentPropMetadata = this.propMetadata(parentCtor);\n Object.keys(parentPropMetadata).forEach((propName) => {\n propMetadata[propName] = parentPropMetadata[propName];\n });\n }\n const ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);\n if (ownPropMetadata) {\n Object.keys(ownPropMetadata).forEach((propName) => {\n const decorators = [];\n if (propMetadata.hasOwnProperty(propName)) {\n decorators.push(...propMetadata[propName]);\n }\n decorators.push(...ownPropMetadata[propName]);\n propMetadata[propName] = decorators;\n });\n }\n return propMetadata;\n }\n ownPropMetadata(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return {};\n }\n return this._ownPropMetadata(typeOrFunc, getParentCtor(typeOrFunc)) || {};\n }\n hasLifecycleHook(type, lcProperty) {\n return type instanceof Type && lcProperty in type.prototype;\n }\n guards(type) {\n return {};\n }\n getter(name) {\n return new Function('o', 'return o.' + name + ';');\n }\n setter(name) {\n return new Function('o', 'v', 'return o.' + name + ' = v;');\n }\n method(name) {\n const functionBody = `if (!o.${name}) throw new Error('\"${name}\" is undefined');\n return o.${name}.apply(o, args);`;\n return new Function('o', 'args', functionBody);\n }\n // There is not a concept of import uri in Js, but this is useful in developing Dart applications.\n importUri(type) {\n // StaticSymbol\n if (typeof type === 'object' && type['filePath']) {\n return type['filePath'];\n }\n // Runtime type\n return `./${stringify(type)}`;\n }\n resourceUri(type) {\n return `./${stringify(type)}`;\n }\n resolveIdentifier(name, moduleUrl, members, runtime) {\n return runtime;\n }\n resolveEnum(enumIdentifier, name) {\n return enumIdentifier[name];\n }\n}\nfunction convertTsickleDecoratorIntoMetadata(decoratorInvocations) {\n if (!decoratorInvocations) {\n return [];\n }\n return decoratorInvocations.map(decoratorInvocation => {\n const decoratorType = decoratorInvocation.type;\n const annotationCls = decoratorType.annotationCls;\n const annotationArgs = decoratorInvocation.args ? decoratorInvocation.args : [];\n return new annotationCls(...annotationArgs);\n });\n}\nfunction getParentCtor(ctor) {\n const parentProto = ctor.prototype ? Object.getPrototypeOf(ctor.prototype) : null;\n const parentCtor = parentProto ? parentProto.constructor : null;\n // Note: We always use `Object` as the null value\n // to simplify checking later on.\n return parentCtor || Object;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst _THROW_IF_NOT_FOUND = {};\nconst THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;\n/*\n * Name of a property (that we patch onto DI decorator), which is used as an annotation of which\n * InjectFlag this decorator represents. This allows to avoid direct references to the DI decorators\n * in the code, thus making them tree-shakable.\n */\nconst DI_DECORATOR_FLAG = '__NG_DI_FLAG__';\nconst NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';\nconst NG_TOKEN_PATH = 'ngTokenPath';\nconst NEW_LINE = /\\n/gm;\nconst NO_NEW_LINE = 'ɵ';\nconst SOURCE = '__source';\nconst USE_VALUE$1 = getClosureSafeProperty({ provide: String, useValue: getClosureSafeProperty });\n/**\n * Current injector value used by `inject`.\n * - `undefined`: it is an error to call `inject`\n * - `null`: `inject` can be called but there is no injector (limp-mode).\n * - Injector instance: Use the injector for resolution.\n */\nlet _currentInjector = undefined;\nfunction setCurrentInjector(injector) {\n const former = _currentInjector;\n _currentInjector = injector;\n return former;\n}\nfunction injectInjectorOnly(token, flags = InjectFlags.Default) {\n if (_currentInjector === undefined) {\n const errorMessage = (typeof ngDevMode === 'undefined' || ngDevMode) ?\n `inject() must be called from an injection context` :\n '';\n throw new RuntimeError(203 /* MISSING_INJECTION_CONTEXT */, errorMessage);\n }\n else if (_currentInjector === null) {\n return injectRootLimpMode(token, undefined, flags);\n }\n else {\n return _currentInjector.get(token, flags & InjectFlags.Optional ? null : undefined, flags);\n }\n}\nfunction ɵɵinject(token, flags = InjectFlags.Default) {\n return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);\n}\n/**\n * Throws an error indicating that a factory function could not be generated by the compiler for a\n * particular class.\n *\n * This instruction allows the actual error message to be optimized away when ngDevMode is turned\n * off, saving bytes of generated code while still providing a good experience in dev mode.\n *\n * The name of the class is not mentioned here, but will be in the generated factory function name\n * and thus in the stack trace.\n *\n * @codeGenApi\n */\nfunction ɵɵinvalidFactoryDep(index) {\n const msg = ngDevMode ?\n `This constructor is not compatible with Angular Dependency Injection because its dependency at index ${index} of the parameter list is invalid.\nThis can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.\n\nPlease check that 1) the type for the parameter at index ${index} is correct and 2) the correct Angular decorators are defined for this class and its ancestors.` :\n 'invalid';\n throw new Error(msg);\n}\n/**\n * Injects a token from the currently active injector.\n *\n * Must be used in the context of a factory function such as one defined for an\n * `InjectionToken`. Throws an error if not called from such a context.\n *\n * Within such a factory function, using this function to request injection of a dependency\n * is faster and more type-safe than providing an additional array of dependencies\n * (as has been common with `useFactory` providers).\n *\n * @param token The injection token for the dependency to be injected.\n * @param flags Optional flags that control how injection is executed.\n * The flags correspond to injection strategies that can be specified with\n * parameter decorators `@Host`, `@Self`, `@SkipSef`, and `@Optional`.\n * @returns the injected value if injection is successful, `null` otherwise.\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}\n *\n * @publicApi\n */\nconst inject = ɵɵinject;\nfunction injectArgs(types) {\n const args = [];\n for (let i = 0; i < types.length; i++) {\n const arg = resolveForwardRef(types[i]);\n if (Array.isArray(arg)) {\n if (arg.length === 0) {\n const errorMessage = (typeof ngDevMode === 'undefined' || ngDevMode) ?\n 'Arguments array must have arguments.' :\n '';\n throw new RuntimeError(900 /* INVALID_DIFFER_INPUT */, errorMessage);\n }\n let type = undefined;\n let flags = InjectFlags.Default;\n for (let j = 0; j < arg.length; j++) {\n const meta = arg[j];\n const flag = getInjectFlag(meta);\n if (typeof flag === 'number') {\n // Special case when we handle @Inject decorator.\n if (flag === -1 /* Inject */) {\n type = meta.token;\n }\n else {\n flags |= flag;\n }\n }\n else {\n type = meta;\n }\n }\n args.push(ɵɵinject(type, flags));\n }\n else {\n args.push(ɵɵinject(arg));\n }\n }\n return args;\n}\n/**\n * Attaches a given InjectFlag to a given decorator using monkey-patching.\n * Since DI decorators can be used in providers `deps` array (when provider is configured using\n * `useFactory`) without initialization (e.g. `Host`) and as an instance (e.g. `new Host()`), we\n * attach the flag to make it available both as a static property and as a field on decorator\n * instance.\n *\n * @param decorator Provided DI decorator.\n * @param flag InjectFlag that should be applied.\n */\nfunction attachInjectFlag(decorator, flag) {\n decorator[DI_DECORATOR_FLAG] = flag;\n decorator.prototype[DI_DECORATOR_FLAG] = flag;\n return decorator;\n}\n/**\n * Reads monkey-patched property that contains InjectFlag attached to a decorator.\n *\n * @param token Token that may contain monkey-patched DI flags property.\n */\nfunction getInjectFlag(token) {\n return token[DI_DECORATOR_FLAG];\n}\nfunction catchInjectorError(e, token, injectorErrorName, source) {\n const tokenPath = e[NG_TEMP_TOKEN_PATH];\n if (token[SOURCE]) {\n tokenPath.unshift(token[SOURCE]);\n }\n e.message = formatError('\\n' + e.message, tokenPath, injectorErrorName, source);\n e[NG_TOKEN_PATH] = tokenPath;\n e[NG_TEMP_TOKEN_PATH] = null;\n throw e;\n}\nfunction formatError(text, obj, injectorErrorName, source = null) {\n text = text && text.charAt(0) === '\\n' && text.charAt(1) == NO_NEW_LINE ? text.substr(2) : text;\n let context = stringify(obj);\n if (Array.isArray(obj)) {\n context = obj.map(stringify).join(' -> ');\n }\n else if (typeof obj === 'object') {\n let parts = [];\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n let value = obj[key];\n parts.push(key + ':' + (typeof value === 'string' ? JSON.stringify(value) : stringify(value)));\n }\n }\n context = `{${parts.join(', ')}}`;\n }\n return `${injectorErrorName}${source ? '(' + source + ')' : ''}[${context}]: ${text.replace(NEW_LINE, '\\n ')}`;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Inject decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Inject = attachInjectFlag(\n// Disable tslint because `DecoratorFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nmakeParamDecorator('Inject', (token) => ({ token })), -1 /* Inject */);\n/**\n * Optional decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Optional = \n// Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nattachInjectFlag(makeParamDecorator('Optional'), 8 /* Optional */);\n/**\n * Self decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Self = \n// Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nattachInjectFlag(makeParamDecorator('Self'), 2 /* Self */);\n/**\n * `SkipSelf` decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst SkipSelf = \n// Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nattachInjectFlag(makeParamDecorator('SkipSelf'), 4 /* SkipSelf */);\n/**\n * Host decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Host = \n// Disable tslint because `InternalInjectFlags` is a const enum which gets inlined.\n// tslint:disable-next-line: no-toplevel-property-access\nattachInjectFlag(makeParamDecorator('Host'), 1 /* Host */);\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet _reflect = null;\nfunction getReflect() {\n return (_reflect = _reflect || new ReflectionCapabilities());\n}\nfunction reflectDependencies(type) {\n return convertDependencies(getReflect().parameters(type));\n}\nfunction convertDependencies(deps) {\n return deps.map(dep => reflectDependency(dep));\n}\nfunction reflectDependency(dep) {\n const meta = {\n token: null,\n attribute: null,\n host: false,\n optional: false,\n self: false,\n skipSelf: false,\n };\n if (Array.isArray(dep) && dep.length > 0) {\n for (let j = 0; j < dep.length; j++) {\n const param = dep[j];\n if (param === undefined) {\n // param may be undefined if type of dep is not set by ngtsc\n continue;\n }\n const proto = Object.getPrototypeOf(param);\n if (param instanceof Optional || proto.ngMetadataName === 'Optional') {\n meta.optional = true;\n }\n else if (param instanceof SkipSelf || proto.ngMetadataName === 'SkipSelf') {\n meta.skipSelf = true;\n }\n else if (param instanceof Self || proto.ngMetadataName === 'Self') {\n meta.self = true;\n }\n else if (param instanceof Host || proto.ngMetadataName === 'Host') {\n meta.host = true;\n }\n else if (param instanceof Inject) {\n meta.token = param.token;\n }\n else if (param instanceof Attribute) {\n if (param.attributeName === undefined) {\n throw new Error(`Attribute name must be defined.`);\n }\n meta.attribute = param.attributeName;\n }\n else {\n meta.token = param;\n }\n }\n }\n else if (dep === undefined || (Array.isArray(dep) && dep.length === 0)) {\n meta.token = null;\n }\n else {\n meta.token = dep;\n }\n return meta;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Used to resolve resource URLs on `@Component` when used with JIT compilation.\n *\n * Example:\n * ```\n * @Component({\n * selector: 'my-comp',\n * templateUrl: 'my-comp.html', // This requires asynchronous resolution\n * })\n * class MyComponent{\n * }\n *\n * // Calling `renderComponent` will fail because `renderComponent` is a synchronous process\n * // and `MyComponent`'s `@Component.templateUrl` needs to be resolved asynchronously.\n *\n * // Calling `resolveComponentResources()` will resolve `@Component.templateUrl` into\n * // `@Component.template`, which allows `renderComponent` to proceed in a synchronous manner.\n *\n * // Use browser's `fetch()` function as the default resource resolution strategy.\n * resolveComponentResources(fetch).then(() => {\n * // After resolution all URLs have been converted into `template` strings.\n * renderComponent(MyComponent);\n * });\n *\n * ```\n *\n * NOTE: In AOT the resolution happens during compilation, and so there should be no need\n * to call this method outside JIT mode.\n *\n * @param resourceResolver a function which is responsible for returning a `Promise` to the\n * contents of the resolved URL. Browser's `fetch()` method is a good default implementation.\n */\nfunction resolveComponentResources(resourceResolver) {\n // Store all promises which are fetching the resources.\n const componentResolved = [];\n // Cache so that we don't fetch the same resource more than once.\n const urlMap = new Map();\n function cachedResourceResolve(url) {\n let promise = urlMap.get(url);\n if (!promise) {\n const resp = resourceResolver(url);\n urlMap.set(url, promise = resp.then(unwrapResponse));\n }\n return promise;\n }\n componentResourceResolutionQueue.forEach((component, type) => {\n const promises = [];\n if (component.templateUrl) {\n promises.push(cachedResourceResolve(component.templateUrl).then((template) => {\n component.template = template;\n }));\n }\n const styleUrls = component.styleUrls;\n const styles = component.styles || (component.styles = []);\n const styleOffset = component.styles.length;\n styleUrls && styleUrls.forEach((styleUrl, index) => {\n styles.push(''); // pre-allocate array.\n promises.push(cachedResourceResolve(styleUrl).then((style) => {\n styles[styleOffset + index] = style;\n styleUrls.splice(styleUrls.indexOf(styleUrl), 1);\n if (styleUrls.length == 0) {\n component.styleUrls = undefined;\n }\n }));\n });\n const fullyResolved = Promise.all(promises).then(() => componentDefResolved(type));\n componentResolved.push(fullyResolved);\n });\n clearResolutionOfComponentResourcesQueue();\n return Promise.all(componentResolved).then(() => undefined);\n}\nlet componentResourceResolutionQueue = new Map();\n// Track when existing ɵcmp for a Type is waiting on resources.\nconst componentDefPendingResolution = new Set();\nfunction maybeQueueResolutionOfComponentResources(type, metadata) {\n if (componentNeedsResolution(metadata)) {\n componentResourceResolutionQueue.set(type, metadata);\n componentDefPendingResolution.add(type);\n }\n}\nfunction isComponentDefPendingResolution(type) {\n return componentDefPendingResolution.has(type);\n}\nfunction componentNeedsResolution(component) {\n return !!((component.templateUrl && !component.hasOwnProperty('template')) ||\n component.styleUrls && component.styleUrls.length);\n}\nfunction clearResolutionOfComponentResourcesQueue() {\n const old = componentResourceResolutionQueue;\n componentResourceResolutionQueue = new Map();\n return old;\n}\nfunction restoreComponentResolutionQueue(queue) {\n componentDefPendingResolution.clear();\n queue.forEach((_, type) => componentDefPendingResolution.add(type));\n componentResourceResolutionQueue = queue;\n}\nfunction isComponentResourceResolutionQueueEmpty() {\n return componentResourceResolutionQueue.size === 0;\n}\nfunction unwrapResponse(response) {\n return typeof response == 'string' ? response : response.text();\n}\nfunction componentDefResolved(type) {\n componentDefPendingResolution.delete(type);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The Trusted Types policy, or null if Trusted Types are not\n * enabled/supported, or undefined if the policy has not been created yet.\n */\nlet policy$1;\n/**\n * Returns the Trusted Types policy, or null if Trusted Types are not\n * enabled/supported. The first call to this function will create the policy.\n */\nfunction getPolicy$1() {\n if (policy$1 === undefined) {\n policy$1 = null;\n if (_global.trustedTypes) {\n try {\n policy$1 = _global.trustedTypes.createPolicy('angular', {\n createHTML: (s) => s,\n createScript: (s) => s,\n createScriptURL: (s) => s,\n });\n }\n catch (_a) {\n // trustedTypes.createPolicy throws if called with a name that is\n // already registered, even in report-only mode. Until the API changes,\n // catch the error not to break the applications functionally. In such\n // cases, the code will fall back to using strings.\n }\n }\n }\n return policy$1;\n}\n/**\n * Unsafely promote a string to a TrustedHTML, falling back to strings when\n * Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that the\n * provided string will never cause an XSS vulnerability if used in a context\n * that will be interpreted as HTML by a browser, e.g. when assigning to\n * element.innerHTML.\n */\nfunction trustedHTMLFromString(html) {\n var _a;\n return ((_a = getPolicy$1()) === null || _a === void 0 ? void 0 : _a.createHTML(html)) || html;\n}\n/**\n * Unsafely promote a string to a TrustedScript, falling back to strings when\n * Trusted Types are not available.\n * @security In particular, it must be assured that the provided string will\n * never cause an XSS vulnerability if used in a context that will be\n * interpreted and executed as a script by a browser, e.g. when calling eval.\n */\nfunction trustedScriptFromString(script) {\n var _a;\n return ((_a = getPolicy$1()) === null || _a === void 0 ? void 0 : _a.createScript(script)) || script;\n}\n/**\n * Unsafely promote a string to a TrustedScriptURL, falling back to strings\n * when Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that the\n * provided string will never cause an XSS vulnerability if used in a context\n * that will cause a browser to load and execute a resource, e.g. when\n * assigning to script.src.\n */\nfunction trustedScriptURLFromString(url) {\n var _a;\n return ((_a = getPolicy$1()) === null || _a === void 0 ? void 0 : _a.createScriptURL(url)) || url;\n}\n/**\n * Unsafely call the Function constructor with the given string arguments. It\n * is only available in development mode, and should be stripped out of\n * production code.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only called from development code, as use in production code can lead to\n * XSS vulnerabilities.\n */\nfunction newTrustedFunctionForDev(...args) {\n if (typeof ngDevMode === 'undefined') {\n throw new Error('newTrustedFunctionForDev should never be called in production');\n }\n if (!_global.trustedTypes) {\n // In environments that don't support Trusted Types, fall back to the most\n // straightforward implementation:\n return new Function(...args);\n }\n // Chrome currently does not support passing TrustedScript to the Function\n // constructor. The following implements the workaround proposed on the page\n // below, where the Chromium bug is also referenced:\n // https://github.com/w3c/webappsec-trusted-types/wiki/Trusted-Types-for-function-constructor\n const fnArgs = args.slice(0, -1).join(',');\n const fnBody = args[args.length - 1];\n const body = `(function anonymous(${fnArgs}\n) { ${fnBody}\n})`;\n // Using eval directly confuses the compiler and prevents this module from\n // being stripped out of JS binaries even if not used. The global['eval']\n // indirection fixes that.\n const fn = _global['eval'](trustedScriptFromString(body));\n if (fn.bind === undefined) {\n // Workaround for a browser bug that only exists in Chrome 83, where passing\n // a TrustedScript to eval just returns the TrustedScript back without\n // evaluating it. In that case, fall back to the most straightforward\n // implementation:\n return new Function(...args);\n }\n // To completely mimic the behavior of calling \"new Function\", two more\n // things need to happen:\n // 1. Stringifying the resulting function should return its source code\n fn.toString = () => body;\n // 2. When calling the resulting function, `this` should refer to `global`\n return fn.bind(_global);\n // When Trusted Types support in Function constructors is widely available,\n // the implementation of this function can be simplified to:\n // return new Function(...args.map(a => trustedScriptFromString(a)));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The Trusted Types policy, or null if Trusted Types are not\n * enabled/supported, or undefined if the policy has not been created yet.\n */\nlet policy;\n/**\n * Returns the Trusted Types policy, or null if Trusted Types are not\n * enabled/supported. The first call to this function will create the policy.\n */\nfunction getPolicy() {\n if (policy === undefined) {\n policy = null;\n if (_global.trustedTypes) {\n try {\n policy = _global.trustedTypes\n .createPolicy('angular#unsafe-bypass', {\n createHTML: (s) => s,\n createScript: (s) => s,\n createScriptURL: (s) => s,\n });\n }\n catch (_a) {\n // trustedTypes.createPolicy throws if called with a name that is\n // already registered, even in report-only mode. Until the API changes,\n // catch the error not to break the applications functionally. In such\n // cases, the code will fall back to using strings.\n }\n }\n }\n return policy;\n}\n/**\n * Unsafely promote a string to a TrustedHTML, falling back to strings when\n * Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only passed strings that come directly from custom sanitizers or the\n * bypassSecurityTrust* functions.\n */\nfunction trustedHTMLFromStringBypass(html) {\n var _a;\n return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createHTML(html)) || html;\n}\n/**\n * Unsafely promote a string to a TrustedScript, falling back to strings when\n * Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only passed strings that come directly from custom sanitizers or the\n * bypassSecurityTrust* functions.\n */\nfunction trustedScriptFromStringBypass(script) {\n var _a;\n return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createScript(script)) || script;\n}\n/**\n * Unsafely promote a string to a TrustedScriptURL, falling back to strings\n * when Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only passed strings that come directly from custom sanitizers or the\n * bypassSecurityTrust* functions.\n */\nfunction trustedScriptURLFromStringBypass(url) {\n var _a;\n return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createScriptURL(url)) || url;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass SafeValueImpl {\n constructor(changingThisBreaksApplicationSecurity) {\n this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;\n }\n toString() {\n return `SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity}` +\n ` (see https://g.co/ng/security#xss)`;\n }\n}\nclass SafeHtmlImpl extends SafeValueImpl {\n getTypeName() {\n return \"HTML\" /* Html */;\n }\n}\nclass SafeStyleImpl extends SafeValueImpl {\n getTypeName() {\n return \"Style\" /* Style */;\n }\n}\nclass SafeScriptImpl extends SafeValueImpl {\n getTypeName() {\n return \"Script\" /* Script */;\n }\n}\nclass SafeUrlImpl extends SafeValueImpl {\n getTypeName() {\n return \"URL\" /* Url */;\n }\n}\nclass SafeResourceUrlImpl extends SafeValueImpl {\n getTypeName() {\n return \"ResourceURL\" /* ResourceUrl */;\n }\n}\nfunction unwrapSafeValue(value) {\n return value instanceof SafeValueImpl ? value.changingThisBreaksApplicationSecurity :\n value;\n}\nfunction allowSanitizationBypassAndThrow(value, type) {\n const actualType = getSanitizationBypassType(value);\n if (actualType != null && actualType !== type) {\n // Allow ResourceURLs in URL contexts, they are strictly more trusted.\n if (actualType === \"ResourceURL\" /* ResourceUrl */ && type === \"URL\" /* Url */)\n return true;\n throw new Error(`Required a safe ${type}, got a ${actualType} (see https://g.co/ng/security#xss)`);\n }\n return actualType === type;\n}\nfunction getSanitizationBypassType(value) {\n return value instanceof SafeValueImpl && value.getTypeName() || null;\n}\n/**\n * Mark `html` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link htmlSanitizer} to be trusted implicitly.\n *\n * @param trustedHtml `html` string which needs to be implicitly trusted.\n * @returns a `html` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustHtml(trustedHtml) {\n return new SafeHtmlImpl(trustedHtml);\n}\n/**\n * Mark `style` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link styleSanitizer} to be trusted implicitly.\n *\n * @param trustedStyle `style` string which needs to be implicitly trusted.\n * @returns a `style` hich has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustStyle(trustedStyle) {\n return new SafeStyleImpl(trustedStyle);\n}\n/**\n * Mark `script` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link scriptSanitizer} to be trusted implicitly.\n *\n * @param trustedScript `script` string which needs to be implicitly trusted.\n * @returns a `script` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustScript(trustedScript) {\n return new SafeScriptImpl(trustedScript);\n}\n/**\n * Mark `url` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link urlSanitizer} to be trusted implicitly.\n *\n * @param trustedUrl `url` string which needs to be implicitly trusted.\n * @returns a `url` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustUrl(trustedUrl) {\n return new SafeUrlImpl(trustedUrl);\n}\n/**\n * Mark `url` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link resourceUrlSanitizer} to be trusted implicitly.\n *\n * @param trustedResourceUrl `url` string which needs to be implicitly trusted.\n * @returns a `url` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustResourceUrl(trustedResourceUrl) {\n return new SafeResourceUrlImpl(trustedResourceUrl);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * This helper is used to get hold of an inert tree of DOM elements containing dirty HTML\n * that needs sanitizing.\n * Depending upon browser support we use one of two strategies for doing this.\n * Default: DOMParser strategy\n * Fallback: InertDocument strategy\n */\nfunction getInertBodyHelper(defaultDoc) {\n const inertDocumentHelper = new InertDocumentHelper(defaultDoc);\n return isDOMParserAvailable() ? new DOMParserHelper(inertDocumentHelper) : inertDocumentHelper;\n}\n/**\n * Uses DOMParser to create and fill an inert body element.\n * This is the default strategy used in browsers that support it.\n */\nclass DOMParserHelper {\n constructor(inertDocumentHelper) {\n this.inertDocumentHelper = inertDocumentHelper;\n }\n getInertBodyElement(html) {\n // We add these extra elements to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the\n // `` tag. Note that the `` tag is closed implicitly to prevent unclosed tags\n // in `html` from consuming the otherwise explicit `` tag.\n html = '' + html;\n try {\n const body = new window.DOMParser()\n .parseFromString(trustedHTMLFromString(html), 'text/html')\n .body;\n if (body === null) {\n // In some browsers (e.g. Mozilla/5.0 iPad AppleWebKit Mobile) the `body` property only\n // becomes available in the following tick of the JS engine. In that case we fall back to\n // the `inertDocumentHelper` instead.\n return this.inertDocumentHelper.getInertBodyElement(html);\n }\n body.removeChild(body.firstChild);\n return body;\n }\n catch (_a) {\n return null;\n }\n }\n}\n/**\n * Use an HTML5 `template` element, if supported, or an inert body element created via\n * `createHtmlDocument` to create and fill an inert DOM element.\n * This is the fallback strategy if the browser does not support DOMParser.\n */\nclass InertDocumentHelper {\n constructor(defaultDoc) {\n this.defaultDoc = defaultDoc;\n this.inertDocument = this.defaultDoc.implementation.createHTMLDocument('sanitization-inert');\n if (this.inertDocument.body == null) {\n // usually there should be only one body element in the document, but IE doesn't have any, so\n // we need to create one.\n const inertHtml = this.inertDocument.createElement('html');\n this.inertDocument.appendChild(inertHtml);\n const inertBodyElement = this.inertDocument.createElement('body');\n inertHtml.appendChild(inertBodyElement);\n }\n }\n getInertBodyElement(html) {\n // Prefer using