From f20532c08019707c768278adac2478e9799aa79e Mon Sep 17 00:00:00 2001 From: Kean Mariotti Date: Thu, 7 Jul 2022 16:48:21 +0000 Subject: [PATCH] Parsers receive Blob instead of Uint8Array Now Parsers rely on the Blob interface/abstraction, instead of the concrete Uint8Array. Thus, in the future we'll be able to implement incremental trace parsing (e.g. stream parsing) without breaking client code (e.g. ABT). Minor: specify timeout in end-to-end tests Test: npm run test:all Change-Id: I9098ee3beba231f4bb4b59b24cee60e5a1e1122e --- tools/winscope-ng/package-lock.json | 1063 ++++++++++------- tools/winscope-ng/package.json | 4 +- tools/winscope-ng/protractor.config.js | 9 +- tools/winscope-ng/src/app/app.component.ts | 21 +- tools/winscope-ng/src/app/core.ts | 4 +- .../src/common/trace/screen_recording.ts | 2 +- tools/winscope-ng/src/parsers/parser.ts | 19 +- .../src/parsers/parser_accessibility.spec.ts | 6 +- .../src/parsers/parser_accessibility.ts | 4 +- .../src/parsers/parser_common.spec.ts | 6 +- .../winscope-ng/src/parsers/parser_factory.ts | 7 +- .../parser_input_method_clients.spec.ts | 6 +- .../parsers/parser_input_method_clients.ts | 4 +- ...arser_input_method_manager_service.spec.ts | 6 +- .../parser_input_method_manager_service.ts | 4 +- .../parser_input_method_service.spec.ts | 6 +- .../parsers/parser_input_method_service.ts | 4 +- .../src/parsers/parser_protolog.spec.ts | 6 +- .../src/parsers/parser_protolog.ts | 4 +- .../parsers/parser_screen_recording.spec.ts | 6 +- .../src/parsers/parser_screen_recording.ts | 7 +- .../parsers/parser_surface_flinger.spec.ts | 6 +- .../src/parsers/parser_surface_flinger.ts | 4 +- .../parser_surface_flinger_dump.spec.ts | 6 +- .../src/parsers/parser_transactions.spec.ts | 6 +- .../src/parsers/parser_transactions.ts | 4 +- .../src/parsers/parser_window_manager.spec.ts | 6 +- .../src/parsers/parser_window_manager.ts | 4 +- .../parser_window_manager_dump.spec.ts | 6 +- .../src/parsers/parser_window_manager_dump.ts | 4 +- tools/winscope-ng/src/test/blob.ts | 48 + .../test/e2e/viewer_window_manager.spec.ts | 9 +- tools/winscope-ng/src/test/test_utils.ts | 18 +- 33 files changed, 760 insertions(+), 559 deletions(-) create mode 100644 tools/winscope-ng/src/test/blob.ts diff --git a/tools/winscope-ng/package-lock.json b/tools/winscope-ng/package-lock.json index 32876c1c5..3623e49e8 100644 --- a/tools/winscope-ng/package-lock.json +++ b/tools/winscope-ng/package-lock.json @@ -62,12 +62,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1400.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1400.4.tgz", - "integrity": "sha512-9tjOIRpAPuhsJ5xMVZI/C9qQUaVTF9URFrK4r/b9RO7lRsvMvweReMcOH4/8+veVSTAzAa34B6WNYvvuBZFMOg==", + "version": "0.1400.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1400.5.tgz", + "integrity": "sha512-A5sRLPK3qGJAehYtX4ayUDwxQZ02yvsrxcpf3sv492IxbF7ymdMhcxIp+0UG6wIsLvpQkpW9ekJUdKmFB6GVAw==", "dev": true, "dependencies": { - "@angular-devkit/core": "14.0.4", + "@angular-devkit/core": "14.0.5", "rxjs": "6.6.7" }, "engines": { @@ -95,15 +95,15 @@ "dev": true }, "node_modules/@angular-devkit/build-angular": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.0.4.tgz", - "integrity": "sha512-VoiDfyKSTBU4LDRwtY8Ga5ZBKsDxTYWNx9aDCoswalMvYREwhEi9+wEcWjF5aMKl4usr6twCPaYqDrbkHYUHqw==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.0.5.tgz", + "integrity": "sha512-Yjp0KyuJz4BvvW3xGC6UzYyVhMXTr5geYQskI7pkXaoNvVVD9Su4kaxl78dZBT/GRNZmNkrB2fJ4D8OOWH/oBg==", "dev": true, "dependencies": { "@ampproject/remapping": "2.2.0", - "@angular-devkit/architect": "0.1400.4", - "@angular-devkit/build-webpack": "0.1400.4", - "@angular-devkit/core": "14.0.4", + "@angular-devkit/architect": "0.1400.5", + "@angular-devkit/build-webpack": "0.1400.5", + "@angular-devkit/core": "14.0.5", "@babel/core": "7.17.10", "@babel/generator": "7.17.10", "@babel/helper-annotate-as-pure": "7.16.7", @@ -114,7 +114,7 @@ "@babel/runtime": "7.17.9", "@babel/template": "7.16.7", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "14.0.4", + "@ngtools/webpack": "14.0.5", "ansi-colors": "4.1.1", "babel-loader": "8.2.5", "babel-plugin-istanbul": "6.1.1", @@ -202,6 +202,142 @@ } } }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", + "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.10", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.10", + "@babel/types": "^7.17.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/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, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/preset-env": { + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.10.tgz", + "integrity": "sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.17.6", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.17.3", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.17.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.17.9", + "@babel/plugin-transform-modules-systemjs": "^7.17.8", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.10", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.17.9", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.17.10", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/preset-env/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, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -326,12 +462,12 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1400.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1400.4.tgz", - "integrity": "sha512-eknabzf8lWDidOzeoV7NG3Rrfme/O2REZtranhBGKRfoRNUOCWMYcCfAF1hUEHjgw7zd4pn+3EdMVjhwpG48hA==", + "version": "0.1400.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1400.5.tgz", + "integrity": "sha512-bg5P9e7ZqV4Vmj3eFmfZhGXxp2FICN/myvu9IpUyIaNfwsi/0S98Cc4MMH0GtoK0uy27kB5QSyWUO1rwB+npJA==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1400.4", + "@angular-devkit/architect": "0.1400.5", "rxjs": "6.6.7" }, "engines": { @@ -363,9 +499,9 @@ "dev": true }, "node_modules/@angular-devkit/core": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.0.4.tgz", - "integrity": "sha512-ySQnhu9KhU6vMcFE5jFD93Q2aQ/UJYRZXlvDCve11pp6Lb+llcA7H46lHlBwpxR3jKom+8U4W5vnviqU52zhcg==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.0.5.tgz", + "integrity": "sha512-/CUGi6QLwh79FvsOY7M+1LQL3asZsbQW/WBd5f1iu5y7TLNqCwo+wOb0ZXLDNPw45vYBxFajtt3ob3U7qx3jNg==", "dev": true, "dependencies": { "ajv": "8.11.0", @@ -407,12 +543,12 @@ "dev": true }, "node_modules/@angular-devkit/schematics": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.0.4.tgz", - "integrity": "sha512-dOi843eANcCL/tcSIAaotfLTHZTQLzRrpP2hz/le/vYMcuIfP90auvsWbQVrWbDIxWYl57Lu2UxvITT9gIarnA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.0.5.tgz", + "integrity": "sha512-sufxITBkn2MvgEREt9JQ3QCKHS+sue1WsVzLE+TWqG5MC/RPk0f9tQ5VoHk6ZTzDKUvOtSoc7G+n0RscQsyp5g==", "dev": true, "dependencies": { - "@angular-devkit/core": "14.0.4", + "@angular-devkit/core": "14.0.5", "jsonc-parser": "3.0.0", "magic-string": "0.26.1", "ora": "5.4.1", @@ -443,9 +579,9 @@ "dev": true }, "node_modules/@angular/animations": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.0.4.tgz", - "integrity": "sha512-+Qe+wLA0DOHlOdFRQSEJoenhFm5zcKwkDItqAFT5NVYOT04yxXq8NFRIHSbqn468qR70EkX514lKi6pr6nxGYQ==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.0.5.tgz", + "integrity": "sha512-oQy4rZIsJUHbK4CMxEgxVVOKAbX+k16Wqc9t6zPlqayvj0wQA1XdTdbXMfiZyekFgtfnjb+UPjmXa2FNe1G8NQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -453,19 +589,19 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "14.0.4" + "@angular/core": "14.0.5" } }, "node_modules/@angular/cli": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.0.4.tgz", - "integrity": "sha512-hb6mJk6/vJwHCuMaGResQh9aXgoSyfrJ/WuFgLcPspdFRkm4EQcTSx8DwrRo7YawuCa12UJdPoK0dASXYN6JHA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.0.5.tgz", + "integrity": "sha512-/Iqvy3vRqakHdxNi+Qo18xXQr8E1cCaKzMBnxR2wHNdlu1lyaw0p20E8LumoueXCrs+/SK6aKDvN6ek0R/q8Jg==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1400.4", - "@angular-devkit/core": "14.0.4", - "@angular-devkit/schematics": "14.0.4", - "@schematics/angular": "14.0.4", + "@angular-devkit/architect": "0.1400.5", + "@angular-devkit/core": "14.0.5", + "@angular-devkit/schematics": "14.0.5", + "@schematics/angular": "14.0.5", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.4", @@ -493,9 +629,9 @@ } }, "node_modules/@angular/common": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.0.4.tgz", - "integrity": "sha512-CvlFa2lCxen0LB3N45IzZDdMIqpcasXfVUhiAkLxZgT+kSTunc/rg8hMoLHVfmFpkQKCQmPVyuzNXnSwIFhYkQ==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.0.5.tgz", + "integrity": "sha512-YFRPxx3yRLjk0gPL7tm/97mi8+Pjt3q6zWCjrLkAlDjniDvgmKNWIQ1h6crZQR0Cw7yNqK0QoFXQgTw0GJIWLQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -503,14 +639,14 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "14.0.4", + "@angular/core": "14.0.5", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.0.4.tgz", - "integrity": "sha512-WdRpZFTX2vt71sSfQ89C1K5l2zhYtn8ON+ZlAVxyZ5uT0nA/Z/vuMLfNZB1WmcGVDOc7JmQduSiSaI0hhQqXqw==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.0.5.tgz", + "integrity": "sha512-2Fxrdd5558FFSgWU0szYMo6Lea1jzBPzn8oAcLxo/OkaHgX8tSrlmY6y3TMlSxJu8NbdKcq1CqFMrfw5mqtoDA==", "dependencies": { "tslib": "^2.3.0" }, @@ -518,7 +654,7 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "14.0.4" + "@angular/core": "14.0.5" }, "peerDependenciesMeta": { "@angular/core": { @@ -527,9 +663,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.0.4.tgz", - "integrity": "sha512-j3T0dOwNov6rKcaxLMSlPLRvrBT6MyBTum18x6XvZRqb75RUAJ/yV+PXgtA//XZ2hjuy87+CvZy3tBKktvY7bA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.0.5.tgz", + "integrity": "sha512-1bzojB5OoI/YLC7er+h+v1teG4Pp4jUxsFm9FmmgGaJ4gfadsPshzhZNASKoq/g7bQB7RnX0kgTGwwQImpirwQ==", "dev": true, "dependencies": { "@babel/core": "^7.17.2", @@ -552,14 +688,14 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/compiler": "14.0.4", + "@angular/compiler": "14.0.5", "typescript": ">=4.6.2 <4.8" } }, "node_modules/@angular/core": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.0.4.tgz", - "integrity": "sha512-uMS/X+/5RokF3uiiD1IAr6Ha9k7QPegHrAB3QW0x6WRUTMq0K+08F+AeF5COmbfYMMaxofD6x8XmM+BLeg/0hw==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.0.5.tgz", + "integrity": "sha512-4MIfFM2nD+N0/Dk8xKfKvbdS/zYRhQgdnKT6ZIIV7Y/XCfn5QAIa4+vB5BEAZpuzSsZHLVdBQQ0TkaiONLfL2Q==", "dependencies": { "tslib": "^2.3.0" }, @@ -572,9 +708,9 @@ } }, "node_modules/@angular/elements": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-14.0.4.tgz", - "integrity": "sha512-IFIgaw7E43YmOu8Gyrw9tPo72oWGwHkLlcFzZi5m5lD6TJCPkmKwQmi1BnAGk+Z2zhoXkAxZA5x3Iga07MHUfg==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-14.0.5.tgz", + "integrity": "sha512-VwUxLDiy8WMfELBInh7u0jjRDzWhHs86MAdJB6mvVtcX6SpOOdhxMK9JoFOWKRgnqCJsz2CF0K1mHQ5feR6oDA==", "dependencies": { "tslib": "^2.3.0" }, @@ -582,14 +718,14 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "14.0.4", + "@angular/core": "14.0.5", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/forms": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.0.4.tgz", - "integrity": "sha512-u/9y09WQ00y6BQeNo69hMa/Fx+xKHGnmcjMtS3xkZtmoCP+A0ebumG0Y9DfXs2olJY2//O5di7Qu3fwlBg+3Cw==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.0.5.tgz", + "integrity": "sha512-N1sxzaG4r0rwT3++lyYmbCUgSZaZA7E2NURvU1OFw6fay/XlI+ss1ZBFc6X0XfSa+OWxPuIBKnPmmQlP7aKOiQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -597,16 +733,16 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "14.0.4", - "@angular/core": "14.0.4", - "@angular/platform-browser": "14.0.4", + "@angular/common": "14.0.5", + "@angular/core": "14.0.5", + "@angular/platform-browser": "14.0.5", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/platform-browser": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.0.4.tgz", - "integrity": "sha512-VFeFpQ+248m8GiCqcsHwH4PET7tR1cyXnhsep1EeI4MDaO+aIbsUcESqXzMm5+ChOmNyiCtLQu8QvfHZK0uDVA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.0.5.tgz", + "integrity": "sha512-uWFLBKuEgLuT1HnWctr8rMdnwZZ2gEcUWbhbf6DvwePcN1G5T+ltDOcQ3o2a8396hgmU0JyxBFVyGC/PiCe5fQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -614,9 +750,9 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/animations": "14.0.4", - "@angular/common": "14.0.4", - "@angular/core": "14.0.4" + "@angular/animations": "14.0.5", + "@angular/common": "14.0.5", + "@angular/core": "14.0.5" }, "peerDependenciesMeta": { "@angular/animations": { @@ -625,9 +761,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.0.4.tgz", - "integrity": "sha512-snVbAKfnBuCUMgop6ln111B/ouMnDR1ZzMzpiKefdJDGUvASCLbR8XAioY+zXUI82QbNg5masUPia1Fy+yTvGw==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.0.5.tgz", + "integrity": "sha512-VVka6K5jFd6DkFOq+ddMUj1QuI5+As5SbDLkJW0N452cYXA+CE5Y265DvbNbdXXl5wSffGGrizlKrI8jp9uLEQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -635,16 +771,16 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "14.0.4", - "@angular/compiler": "14.0.4", - "@angular/core": "14.0.4", - "@angular/platform-browser": "14.0.4" + "@angular/common": "14.0.5", + "@angular/compiler": "14.0.5", + "@angular/core": "14.0.5", + "@angular/platform-browser": "14.0.5" } }, "node_modules/@angular/router": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.0.4.tgz", - "integrity": "sha512-aqtOjIjVNtWbpedDdni0yGfGR6sEb8S3jJB9jf43ththmHKxAlW7PKP2NgEmx0uJ2xY2iGET7Gkpl8RBwvoHgQ==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.0.5.tgz", + "integrity": "sha512-10V6MCzg65HdnylSOSDvmcvhWhsVaedrzyfulvAT1/f77HZkK8yv1lTZ9gL/rAMOnKoH3uzdQqlDj8AnuRLKFw==", "dependencies": { "tslib": "^2.3.0" }, @@ -652,9 +788,9 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "14.0.4", - "@angular/core": "14.0.4", - "@angular/platform-browser": "14.0.4", + "@angular/common": "14.0.5", + "@angular/core": "14.0.5", + "@angular/platform-browser": "14.0.5", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -677,30 +813,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", - "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", - "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", + "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.10", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.10", - "@babel/types": "^7.17.10", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helpers": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -715,6 +851,48 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/@babel/generator": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -964,9 +1142,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", - "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.8.tgz", + "integrity": "sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.6", @@ -975,8 +1153,8 @@ "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.18.6", "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/traverse": "^7.18.8", + "@babel/types": "^7.18.8" }, "engines": { "node": ">=6.9.0" @@ -1189,9 +1367,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", - "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.8.tgz", + "integrity": "sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1732,9 +1910,9 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz", - "integrity": "sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.8.tgz", + "integrity": "sha512-RySDoXdF6hgHSHuAW4aLGyVQdmvEX/iJtjVre52k0pxRq4hzqze+rAVP++NmNv596brBpYmaiKgTZby7ziBnVg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", @@ -1843,9 +2021,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz", - "integrity": "sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" @@ -2022,9 +2200,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz", - "integrity": "sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" @@ -2218,103 +2396,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.10.tgz", - "integrity": "sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.17.6", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.17.3", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.11", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.17.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.17.9", - "@babel/plugin-transform-modules-systemjs": "^7.17.8", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.10", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.17.9", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.17.10", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/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, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", @@ -2358,19 +2439,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", - "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.8.tgz", + "integrity": "sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", + "@babel/generator": "^7.18.7", "@babel/helper-environment-visitor": "^7.18.6", "@babel/helper-function-name": "^7.18.6", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6", + "@babel/parser": "^7.18.8", + "@babel/types": "^7.18.8", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2407,9 +2488,9 @@ } }, "node_modules/@babel/types": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", - "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.8.tgz", + "integrity": "sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", @@ -2673,9 +2754,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", - "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "engines": { "node": ">=6.0.0" } @@ -2710,9 +2791,9 @@ "dev": true }, "node_modules/@ngtools/webpack": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.0.4.tgz", - "integrity": "sha512-83b/gB4Kna2FhIQj82RNZol+6gq+vLv6+4LUFOGSBb4Xha3RVQGJQpGwqEkXRFziwgTODrPWJAnOup5pzKv9wA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.0.5.tgz", + "integrity": "sha512-fOHtOYfuQhMTcqOfASuH5z8LwEmIG8323yPTP528w9RM9bUr3JaoK1RNcVuLKSvAGRTvTfeykK3/Eri/YW1DvQ==", "dev": true, "engines": { "node": "^14.15.0 || >=16.10.0", @@ -2928,13 +3009,13 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@schematics/angular": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.0.4.tgz", - "integrity": "sha512-2t7B8ZplJzLfrU7SjciaUquaOAWCi6SD954Q1Ej/SZfWlLjs8k1SvlKb+Syzo9TMByMuzdKTrdnmNRHekvMZEQ==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.0.5.tgz", + "integrity": "sha512-xZjXHLn1djIvKJFiOfspTrzAomtDGRqGgsOo06glBkC+cqKCyyXU1Hgxnd3S5V+8a6TpYgX25AXihtE3BeCJzg==", "dev": true, "dependencies": { - "@angular-devkit/core": "14.0.4", - "@angular-devkit/schematics": "14.0.4", + "@angular-devkit/core": "14.0.5", + "@angular-devkit/schematics": "14.0.5", "jsonc-parser": "3.0.0" }, "engines": { @@ -3091,9 +3172,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.1.tgz", - "integrity": "sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg==" + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz", + "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -5396,9 +5477,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.179", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.179.tgz", - "integrity": "sha512-1XeTb/U/8Xgh2YgPOqhakLYsvCcU4U7jUjTMbEnhIJoIWd/Qt3yC8y0cbG+fHzn4zUNF99Ey1xiPf20bwgLO3Q==" + "version": "1.4.184", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.184.tgz", + "integrity": "sha512-IADi390FRdvxWfVX3hjzfTDNVHiTqVo9ar53/7em/SfhUG9YcjVhyQecY/XwmBHRKden/wFud7RWOUH7+7LFng==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -8211,14 +8292,14 @@ } }, "node_modules/kotlin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/kotlin/-/kotlin-1.7.0.tgz", - "integrity": "sha512-+bLf7i1n/2ebTgfxv59s8P7NcHUgOFfXTSTJgLCuGk1lkzWKpMXmpmJOXmfK52ntQGss3xT2Qfiu0fKiacprlw==" + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/kotlin/-/kotlin-1.7.10.tgz", + "integrity": "sha512-TFOnMPR/NhQtoMWzZ/uSX+HD6vCFNj43aui1KFlFSy/aRu2fwj+vWkb+WUHKEuObZKHupQl0F1JFht5zC4FPyQ==" }, "node_modules/kotlin-compiler": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/kotlin-compiler/-/kotlin-compiler-1.7.0.tgz", - "integrity": "sha512-nrUxnFb8KdjnnmhyvMgbmtuc6Hdv1pLmYXOoyEaWgHmH2HcipGwDNTn/ZUzAwEw091uedd5M8I5IxKPXR6UgDg==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/kotlin-compiler/-/kotlin-compiler-1.7.10.tgz", + "integrity": "sha512-h3Vqlgx6Ktpth1hgREh5LSJnLuCz3AIreJBah03A3NCj/g5sS+hxoNOShUGncWuTTnPIvoupLBo3Yw96ctFwWA==", "bin": { "kotlinc-js": "bin/kotlinc-js-runner.js" } @@ -8493,12 +8574,12 @@ } }, "node_modules/log4js": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.5.2.tgz", - "integrity": "sha512-DXtpNtt+KDOMT7RHUDIur/WsSA3rntlUh9Zg4XCdV42wUuMmbFkl38+LZ92Z5QvQA7mD5kAVkLiBSEH/tvUB8A==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.6.0.tgz", + "integrity": "sha512-3v8R7fd45UB6THucSht6wN2/7AZEruQbXdjygPZcxt5TA/msO6si9CN5MefUuKXbYnJHTBnYcx4famwcyQd+sA==", "dev": true, "dependencies": { - "date-format": "^4.0.10", + "date-format": "^4.0.11", "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", @@ -14062,12 +14143,12 @@ } }, "@angular-devkit/architect": { - "version": "0.1400.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1400.4.tgz", - "integrity": "sha512-9tjOIRpAPuhsJ5xMVZI/C9qQUaVTF9URFrK4r/b9RO7lRsvMvweReMcOH4/8+veVSTAzAa34B6WNYvvuBZFMOg==", + "version": "0.1400.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1400.5.tgz", + "integrity": "sha512-A5sRLPK3qGJAehYtX4ayUDwxQZ02yvsrxcpf3sv492IxbF7ymdMhcxIp+0UG6wIsLvpQkpW9ekJUdKmFB6GVAw==", "dev": true, "requires": { - "@angular-devkit/core": "14.0.4", + "@angular-devkit/core": "14.0.5", "rxjs": "6.6.7" }, "dependencies": { @@ -14089,15 +14170,15 @@ } }, "@angular-devkit/build-angular": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.0.4.tgz", - "integrity": "sha512-VoiDfyKSTBU4LDRwtY8Ga5ZBKsDxTYWNx9aDCoswalMvYREwhEi9+wEcWjF5aMKl4usr6twCPaYqDrbkHYUHqw==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.0.5.tgz", + "integrity": "sha512-Yjp0KyuJz4BvvW3xGC6UzYyVhMXTr5geYQskI7pkXaoNvVVD9Su4kaxl78dZBT/GRNZmNkrB2fJ4D8OOWH/oBg==", "dev": true, "requires": { "@ampproject/remapping": "2.2.0", - "@angular-devkit/architect": "0.1400.4", - "@angular-devkit/build-webpack": "0.1400.4", - "@angular-devkit/core": "14.0.4", + "@angular-devkit/architect": "0.1400.5", + "@angular-devkit/build-webpack": "0.1400.5", + "@angular-devkit/core": "14.0.5", "@babel/core": "7.17.10", "@babel/generator": "7.17.10", "@babel/helper-annotate-as-pure": "7.16.7", @@ -14108,7 +14189,7 @@ "@babel/runtime": "7.17.9", "@babel/template": "7.16.7", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "14.0.4", + "@ngtools/webpack": "14.0.5", "ansi-colors": "4.1.1", "babel-loader": "8.2.5", "babel-plugin-istanbul": "6.1.1", @@ -14159,6 +14240,127 @@ "webpack-subresource-integrity": "5.1.0" }, "dependencies": { + "@babel/core": { + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", + "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.10", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.10", + "@babel/types": "^7.17.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.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 + } + } + }, + "@babel/preset-env": { + "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.10.tgz", + "integrity": "sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.17.6", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.17.3", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.17.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.17.9", + "@babel/plugin-transform-modules-systemjs": "^7.17.8", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.10", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.17.9", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.17.10", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.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 + } + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -14253,12 +14455,12 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.1400.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1400.4.tgz", - "integrity": "sha512-eknabzf8lWDidOzeoV7NG3Rrfme/O2REZtranhBGKRfoRNUOCWMYcCfAF1hUEHjgw7zd4pn+3EdMVjhwpG48hA==", + "version": "0.1400.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1400.5.tgz", + "integrity": "sha512-bg5P9e7ZqV4Vmj3eFmfZhGXxp2FICN/myvu9IpUyIaNfwsi/0S98Cc4MMH0GtoK0uy27kB5QSyWUO1rwB+npJA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1400.4", + "@angular-devkit/architect": "0.1400.5", "rxjs": "6.6.7" }, "dependencies": { @@ -14280,9 +14482,9 @@ } }, "@angular-devkit/core": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.0.4.tgz", - "integrity": "sha512-ySQnhu9KhU6vMcFE5jFD93Q2aQ/UJYRZXlvDCve11pp6Lb+llcA7H46lHlBwpxR3jKom+8U4W5vnviqU52zhcg==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.0.5.tgz", + "integrity": "sha512-/CUGi6QLwh79FvsOY7M+1LQL3asZsbQW/WBd5f1iu5y7TLNqCwo+wOb0ZXLDNPw45vYBxFajtt3ob3U7qx3jNg==", "dev": true, "requires": { "ajv": "8.11.0", @@ -14310,12 +14512,12 @@ } }, "@angular-devkit/schematics": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.0.4.tgz", - "integrity": "sha512-dOi843eANcCL/tcSIAaotfLTHZTQLzRrpP2hz/le/vYMcuIfP90auvsWbQVrWbDIxWYl57Lu2UxvITT9gIarnA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.0.5.tgz", + "integrity": "sha512-sufxITBkn2MvgEREt9JQ3QCKHS+sue1WsVzLE+TWqG5MC/RPk0f9tQ5VoHk6ZTzDKUvOtSoc7G+n0RscQsyp5g==", "dev": true, "requires": { - "@angular-devkit/core": "14.0.4", + "@angular-devkit/core": "14.0.5", "jsonc-parser": "3.0.0", "magic-string": "0.26.1", "ora": "5.4.1", @@ -14340,23 +14542,23 @@ } }, "@angular/animations": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.0.4.tgz", - "integrity": "sha512-+Qe+wLA0DOHlOdFRQSEJoenhFm5zcKwkDItqAFT5NVYOT04yxXq8NFRIHSbqn468qR70EkX514lKi6pr6nxGYQ==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.0.5.tgz", + "integrity": "sha512-oQy4rZIsJUHbK4CMxEgxVVOKAbX+k16Wqc9t6zPlqayvj0wQA1XdTdbXMfiZyekFgtfnjb+UPjmXa2FNe1G8NQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/cli": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.0.4.tgz", - "integrity": "sha512-hb6mJk6/vJwHCuMaGResQh9aXgoSyfrJ/WuFgLcPspdFRkm4EQcTSx8DwrRo7YawuCa12UJdPoK0dASXYN6JHA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.0.5.tgz", + "integrity": "sha512-/Iqvy3vRqakHdxNi+Qo18xXQr8E1cCaKzMBnxR2wHNdlu1lyaw0p20E8LumoueXCrs+/SK6aKDvN6ek0R/q8Jg==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1400.4", - "@angular-devkit/core": "14.0.4", - "@angular-devkit/schematics": "14.0.4", - "@schematics/angular": "14.0.4", + "@angular-devkit/architect": "0.1400.5", + "@angular-devkit/core": "14.0.5", + "@angular-devkit/schematics": "14.0.5", + "@schematics/angular": "14.0.5", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.4", @@ -14376,25 +14578,25 @@ } }, "@angular/common": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.0.4.tgz", - "integrity": "sha512-CvlFa2lCxen0LB3N45IzZDdMIqpcasXfVUhiAkLxZgT+kSTunc/rg8hMoLHVfmFpkQKCQmPVyuzNXnSwIFhYkQ==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.0.5.tgz", + "integrity": "sha512-YFRPxx3yRLjk0gPL7tm/97mi8+Pjt3q6zWCjrLkAlDjniDvgmKNWIQ1h6crZQR0Cw7yNqK0QoFXQgTw0GJIWLQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.0.4.tgz", - "integrity": "sha512-WdRpZFTX2vt71sSfQ89C1K5l2zhYtn8ON+ZlAVxyZ5uT0nA/Z/vuMLfNZB1WmcGVDOc7JmQduSiSaI0hhQqXqw==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.0.5.tgz", + "integrity": "sha512-2Fxrdd5558FFSgWU0szYMo6Lea1jzBPzn8oAcLxo/OkaHgX8tSrlmY6y3TMlSxJu8NbdKcq1CqFMrfw5mqtoDA==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.0.4.tgz", - "integrity": "sha512-j3T0dOwNov6rKcaxLMSlPLRvrBT6MyBTum18x6XvZRqb75RUAJ/yV+PXgtA//XZ2hjuy87+CvZy3tBKktvY7bA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.0.5.tgz", + "integrity": "sha512-1bzojB5OoI/YLC7er+h+v1teG4Pp4jUxsFm9FmmgGaJ4gfadsPshzhZNASKoq/g7bQB7RnX0kgTGwwQImpirwQ==", "dev": true, "requires": { "@babel/core": "^7.17.2", @@ -14410,49 +14612,49 @@ } }, "@angular/core": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.0.4.tgz", - "integrity": "sha512-uMS/X+/5RokF3uiiD1IAr6Ha9k7QPegHrAB3QW0x6WRUTMq0K+08F+AeF5COmbfYMMaxofD6x8XmM+BLeg/0hw==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.0.5.tgz", + "integrity": "sha512-4MIfFM2nD+N0/Dk8xKfKvbdS/zYRhQgdnKT6ZIIV7Y/XCfn5QAIa4+vB5BEAZpuzSsZHLVdBQQ0TkaiONLfL2Q==", "requires": { "tslib": "^2.3.0" } }, "@angular/elements": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-14.0.4.tgz", - "integrity": "sha512-IFIgaw7E43YmOu8Gyrw9tPo72oWGwHkLlcFzZi5m5lD6TJCPkmKwQmi1BnAGk+Z2zhoXkAxZA5x3Iga07MHUfg==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-14.0.5.tgz", + "integrity": "sha512-VwUxLDiy8WMfELBInh7u0jjRDzWhHs86MAdJB6mvVtcX6SpOOdhxMK9JoFOWKRgnqCJsz2CF0K1mHQ5feR6oDA==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.0.4.tgz", - "integrity": "sha512-u/9y09WQ00y6BQeNo69hMa/Fx+xKHGnmcjMtS3xkZtmoCP+A0ebumG0Y9DfXs2olJY2//O5di7Qu3fwlBg+3Cw==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.0.5.tgz", + "integrity": "sha512-N1sxzaG4r0rwT3++lyYmbCUgSZaZA7E2NURvU1OFw6fay/XlI+ss1ZBFc6X0XfSa+OWxPuIBKnPmmQlP7aKOiQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.0.4.tgz", - "integrity": "sha512-VFeFpQ+248m8GiCqcsHwH4PET7tR1cyXnhsep1EeI4MDaO+aIbsUcESqXzMm5+ChOmNyiCtLQu8QvfHZK0uDVA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.0.5.tgz", + "integrity": "sha512-uWFLBKuEgLuT1HnWctr8rMdnwZZ2gEcUWbhbf6DvwePcN1G5T+ltDOcQ3o2a8396hgmU0JyxBFVyGC/PiCe5fQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.0.4.tgz", - "integrity": "sha512-snVbAKfnBuCUMgop6ln111B/ouMnDR1ZzMzpiKefdJDGUvASCLbR8XAioY+zXUI82QbNg5masUPia1Fy+yTvGw==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.0.5.tgz", + "integrity": "sha512-VVka6K5jFd6DkFOq+ddMUj1QuI5+As5SbDLkJW0N452cYXA+CE5Y265DvbNbdXXl5wSffGGrizlKrI8jp9uLEQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/router": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.0.4.tgz", - "integrity": "sha512-aqtOjIjVNtWbpedDdni0yGfGR6sEb8S3jJB9jf43ththmHKxAlW7PKP2NgEmx0uJ2xY2iGET7Gkpl8RBwvoHgQ==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.0.5.tgz", + "integrity": "sha512-10V6MCzg65HdnylSOSDvmcvhWhsVaedrzyfulvAT1/f77HZkK8yv1lTZ9gL/rAMOnKoH3uzdQqlDj8AnuRLKFw==", "requires": { "tslib": "^2.3.0" } @@ -14473,27 +14675,27 @@ } }, "@babel/compat-data": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", - "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", "dev": true }, "@babel/core": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", - "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", + "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.10", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.10", - "@babel/types": "^7.17.10", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helpers": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -14501,6 +14703,39 @@ "semver": "^6.3.0" }, "dependencies": { + "@babel/generator": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", + "dev": true, + "requires": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + } + }, + "@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -14696,9 +14931,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", - "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.8.tgz", + "integrity": "sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.6", @@ -14707,8 +14942,8 @@ "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.18.6", "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/traverse": "^7.18.8", + "@babel/types": "^7.18.8" }, "dependencies": { "@babel/template": { @@ -14875,9 +15110,9 @@ } }, "@babel/parser": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", - "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.8.tgz", + "integrity": "sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -15234,9 +15469,9 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz", - "integrity": "sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.8.tgz", + "integrity": "sha512-RySDoXdF6hgHSHuAW4aLGyVQdmvEX/iJtjVre52k0pxRq4hzqze+rAVP++NmNv596brBpYmaiKgTZby7ziBnVg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", @@ -15308,9 +15543,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz", - "integrity": "sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" @@ -15421,9 +15656,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz", - "integrity": "sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" @@ -15544,96 +15779,6 @@ "@babel/helper-plugin-utils": "^7.18.6" } }, - "@babel/preset-env": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.10.tgz", - "integrity": "sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.17.6", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.17.3", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.11", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.17.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.17.9", - "@babel/plugin-transform-modules-systemjs": "^7.17.8", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.10", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.17.9", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.17.10", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.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 - } - } - }, "@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", @@ -15668,19 +15813,19 @@ } }, "@babel/traverse": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", - "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.8.tgz", + "integrity": "sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", + "@babel/generator": "^7.18.7", "@babel/helper-environment-visitor": "^7.18.6", "@babel/helper-function-name": "^7.18.6", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6", + "@babel/parser": "^7.18.8", + "@babel/types": "^7.18.8", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -15710,9 +15855,9 @@ } }, "@babel/types": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", - "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.8.tgz", + "integrity": "sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.18.6", @@ -15865,9 +16010,9 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", - "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { "version": "1.1.2", @@ -15896,9 +16041,9 @@ "dev": true }, "@ngtools/webpack": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.0.4.tgz", - "integrity": "sha512-83b/gB4Kna2FhIQj82RNZol+6gq+vLv6+4LUFOGSBb4Xha3RVQGJQpGwqEkXRFziwgTODrPWJAnOup5pzKv9wA==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.0.5.tgz", + "integrity": "sha512-fOHtOYfuQhMTcqOfASuH5z8LwEmIG8323yPTP528w9RM9bUr3JaoK1RNcVuLKSvAGRTvTfeykK3/Eri/YW1DvQ==", "dev": true, "requires": {} }, @@ -16068,13 +16213,13 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "@schematics/angular": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.0.4.tgz", - "integrity": "sha512-2t7B8ZplJzLfrU7SjciaUquaOAWCi6SD954Q1Ej/SZfWlLjs8k1SvlKb+Syzo9TMByMuzdKTrdnmNRHekvMZEQ==", + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.0.5.tgz", + "integrity": "sha512-xZjXHLn1djIvKJFiOfspTrzAomtDGRqGgsOo06glBkC+cqKCyyXU1Hgxnd3S5V+8a6TpYgX25AXihtE3BeCJzg==", "dev": true, "requires": { - "@angular-devkit/core": "14.0.4", - "@angular-devkit/schematics": "14.0.4", + "@angular-devkit/core": "14.0.5", + "@angular-devkit/schematics": "14.0.5", "jsonc-parser": "3.0.0" } }, @@ -16223,9 +16368,9 @@ "dev": true }, "@types/node": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.1.tgz", - "integrity": "sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg==" + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz", + "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -17995,9 +18140,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.179", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.179.tgz", - "integrity": "sha512-1XeTb/U/8Xgh2YgPOqhakLYsvCcU4U7jUjTMbEnhIJoIWd/Qt3yC8y0cbG+fHzn4zUNF99Ey1xiPf20bwgLO3Q==" + "version": "1.4.184", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.184.tgz", + "integrity": "sha512-IADi390FRdvxWfVX3hjzfTDNVHiTqVo9ar53/7em/SfhUG9YcjVhyQecY/XwmBHRKden/wFud7RWOUH7+7LFng==" }, "emoji-regex": { "version": "8.0.0", @@ -20042,14 +20187,14 @@ "dev": true }, "kotlin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/kotlin/-/kotlin-1.7.0.tgz", - "integrity": "sha512-+bLf7i1n/2ebTgfxv59s8P7NcHUgOFfXTSTJgLCuGk1lkzWKpMXmpmJOXmfK52ntQGss3xT2Qfiu0fKiacprlw==" + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/kotlin/-/kotlin-1.7.10.tgz", + "integrity": "sha512-TFOnMPR/NhQtoMWzZ/uSX+HD6vCFNj43aui1KFlFSy/aRu2fwj+vWkb+WUHKEuObZKHupQl0F1JFht5zC4FPyQ==" }, "kotlin-compiler": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/kotlin-compiler/-/kotlin-compiler-1.7.0.tgz", - "integrity": "sha512-nrUxnFb8KdjnnmhyvMgbmtuc6Hdv1pLmYXOoyEaWgHmH2HcipGwDNTn/ZUzAwEw091uedd5M8I5IxKPXR6UgDg==" + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/kotlin-compiler/-/kotlin-compiler-1.7.10.tgz", + "integrity": "sha512-h3Vqlgx6Ktpth1hgREh5LSJnLuCz3AIreJBah03A3NCj/g5sS+hxoNOShUGncWuTTnPIvoupLBo3Yw96ctFwWA==" }, "less": { "version": "4.1.2", @@ -20244,12 +20389,12 @@ } }, "log4js": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.5.2.tgz", - "integrity": "sha512-DXtpNtt+KDOMT7RHUDIur/WsSA3rntlUh9Zg4XCdV42wUuMmbFkl38+LZ92Z5QvQA7mD5kAVkLiBSEH/tvUB8A==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.6.0.tgz", + "integrity": "sha512-3v8R7fd45UB6THucSht6wN2/7AZEruQbXdjygPZcxt5TA/msO6si9CN5MefUuKXbYnJHTBnYcx4famwcyQd+sA==", "dev": true, "requires": { - "date-format": "^4.0.10", + "date-format": "^4.0.11", "debug": "^4.3.4", "flatted": "^3.2.5", "rfdc": "^1.3.0", diff --git a/tools/winscope-ng/package.json b/tools/winscope-ng/package.json index 852caccc7..2f577bebc 100644 --- a/tools/winscope-ng/package.json +++ b/tools/winscope-ng/package.json @@ -3,10 +3,10 @@ "version": "0.0.0", "scripts": { "start": "webpack serve --config webpack.config.dev.js --open --hot", - "build:kotlin": "npx kotlinc-js -source-map -source-map-embed-sources always -module-kind commonjs -output kotlin_build/flicker.js ../../../platform_testing/libraries/flicker/src/com/android/server/wm/traces/common", + "build:kotlin": "rm -rf kotlin_build && npx kotlinc-js -source-map -source-map-embed-sources always -module-kind commonjs -output kotlin_build/flicker.js ../../../platform_testing/libraries/flicker/src/com/android/server/wm/traces/common", "build:prod": "webpack --config webpack.config.prod.js --progress", "build:unit": "webpack --config webpack.config.unit.spec.js", - "build:e2e": "npx tsc -p ./src/test/e2e", + "build:e2e": "rm -rf dist/e2e.spec && npx tsc -p ./src/test/e2e", "build:all": "npm run build:kotlin && npm run build:prod && npm run build:unit && npm run build:e2e", "test:unit": "jasmine dist/unit.spec/bundle.js", "test:component": "npx karma start", diff --git a/tools/winscope-ng/protractor.config.js b/tools/winscope-ng/protractor.config.js index 021884c2e..587cd3e15 100644 --- a/tools/winscope-ng/protractor.config.js +++ b/tools/winscope-ng/protractor.config.js @@ -31,8 +31,15 @@ exports.config = { }, chromeDriver: "./node_modules/webdriver-manager/selenium/chromedriver_103.0.5060.53", - // allow specifying the file protocol within browser.get(...) + allScriptsTimeout: 10000, + getPageTimeout: 10000, + + jasmineNodeOpts: { + defaultTimeoutInterval: 10000, + }, + onPrepare: function() { + // allow specifying the file protocol within browser.get(...) browser.ignoreSynchronization = true; browser.waitForAngular(); browser.sleep(500); diff --git a/tools/winscope-ng/src/app/app.component.ts b/tools/winscope-ng/src/app/app.component.ts index 804331110..2ffa6a19b 100644 --- a/tools/winscope-ng/src/app/app.component.ts +++ b/tools/winscope-ng/src/app/app.component.ts @@ -51,11 +51,10 @@ export class AppComponent { } public async onInputFile(event: Event) { - const buffers = await this.readInputFiles(event); - + const files = await this.getInputFiles(event); this.core = new Core(); - await this.core.bootstrap(buffers); + await this.core.bootstrap(files); const viewersDiv = document.querySelector("div#viewers")!; viewersDiv.innerHTML = ""; @@ -71,25 +70,13 @@ export class AppComponent { } //TODO: extend with support for multiple files, archives, etc... - private async readInputFiles(event: Event): Promise { + private getInputFiles(event: Event): File[] { const files: any = (event?.target as HTMLInputElement)?.files; if (!files || !files[0]) { - console.log("Invalid input file"); return []; } - const file: File = files[0]; - - const buffer: Uint8Array = await new Promise((resolve, _) => { - const reader = new FileReader(); - reader.onloadend = async (e) => { - const buffer = new Uint8Array( e.target!.result); - resolve(buffer); - }; - reader.readAsArrayBuffer(file); - }); - - return [buffer]; + return [files[0]]; } } diff --git a/tools/winscope-ng/src/app/core.ts b/tools/winscope-ng/src/app/core.ts index 64cb8b317..62cae46c4 100644 --- a/tools/winscope-ng/src/app/core.ts +++ b/tools/winscope-ng/src/app/core.ts @@ -28,8 +28,8 @@ class Core { this.viewers = []; } - async bootstrap(buffers: Uint8Array[]) { - this.parsers = new ParserFactory().createParsers(buffers); + async bootstrap(traces: Blob[]) { + this.parsers = await new ParserFactory().createParsers(traces); console.log("created parsers: ", this.parsers); const activeTraceTypes = this.parsers.map(parser => parser.getTraceTypeId()); diff --git a/tools/winscope-ng/src/common/trace/screen_recording.ts b/tools/winscope-ng/src/common/trace/screen_recording.ts index c9302c2a8..65a6ac531 100644 --- a/tools/winscope-ng/src/common/trace/screen_recording.ts +++ b/tools/winscope-ng/src/common/trace/screen_recording.ts @@ -16,7 +16,7 @@ class ScreenRecordingTraceEntry { constructor(public timestamp: number, public videoTimeSeconds: number, - public videoData: Uint8Array) { + public videoData: Blob) { } }; diff --git a/tools/winscope-ng/src/parsers/parser.ts b/tools/winscope-ng/src/parsers/parser.ts index 1b9d937bd..290887623 100644 --- a/tools/winscope-ng/src/parsers/parser.ts +++ b/tools/winscope-ng/src/parsers/parser.ts @@ -17,17 +17,23 @@ import {ArrayUtils} from '../common/utils/array_utils'; import {TraceTypeId} from "common/trace/type_id"; abstract class Parser { - constructor(buffer: Uint8Array) { + protected constructor(trace: Blob) { + this.trace = trace; + } + + public async parse() { + const traceBuffer = new Uint8Array(await this.trace.arrayBuffer()); + const magicNumber = this.getMagicNumber(); if (magicNumber !== undefined) { - const bufferContainsMagicNumber = ArrayUtils.equal(magicNumber, buffer.slice(0, magicNumber.length)); + const bufferContainsMagicNumber = ArrayUtils.equal(magicNumber, traceBuffer.slice(0, magicNumber.length)); if (!bufferContainsMagicNumber) { throw TypeError("buffer doesn't contain expected magic number"); } } - this.decodedEntries = this.decodeTrace(buffer); + this.decodedEntries = this.decodeTrace(traceBuffer); this.timestamps = this.decodedEntries.map((entry: any) => this.getTimestamp(entry)); } @@ -52,12 +58,13 @@ abstract class Parser { } protected abstract getMagicNumber(): undefined|number[]; - protected abstract decodeTrace(buffer: Uint8Array): any[]; + protected abstract decodeTrace(trace: Uint8Array): any[]; protected abstract getTimestamp(decodedEntry: any): number; protected abstract processDecodedEntry(decodedEntry: any): any; - protected decodedEntries: any[]; - protected timestamps: number[]; + protected trace: Blob; + protected decodedEntries: any[] = []; + protected timestamps: number[] = []; } export {Parser}; diff --git a/tools/winscope-ng/src/parsers/parser_accessibility.spec.ts b/tools/winscope-ng/src/parsers/parser_accessibility.spec.ts index 78deef483..9f644b96f 100644 --- a/tools/winscope-ng/src/parsers/parser_accessibility.spec.ts +++ b/tools/winscope-ng/src/parsers/parser_accessibility.spec.ts @@ -21,9 +21,9 @@ import {TestUtils} from "test/test_utils"; describe("ParserAccessibility", () => { let parser: Parser; - beforeAll(() => { - const buffer = TestUtils.loadFixture("trace_Accessibility.pb"); - const parsers = new ParserFactory().createParsers([buffer]); + beforeAll(async () => { + const trace = TestUtils.getFixtureBlob("trace_Accessibility.pb"); + const parsers = await new ParserFactory().createParsers([trace]); expect(parsers.length).toEqual(1); parser = parsers[0]; }); diff --git a/tools/winscope-ng/src/parsers/parser_accessibility.ts b/tools/winscope-ng/src/parsers/parser_accessibility.ts index 954a77ba4..3f4649aca 100644 --- a/tools/winscope-ng/src/parsers/parser_accessibility.ts +++ b/tools/winscope-ng/src/parsers/parser_accessibility.ts @@ -18,8 +18,8 @@ import {Parser} from './parser' import {AccessibilityTraceFileProto} from './proto_types'; class ParserAccessibility extends Parser { - constructor(buffer: Uint8Array) { - super(buffer); + constructor(trace: Blob) { + super(trace); } override getTraceTypeId(): TraceTypeId { diff --git a/tools/winscope-ng/src/parsers/parser_common.spec.ts b/tools/winscope-ng/src/parsers/parser_common.spec.ts index bc8b8585a..8f4744113 100644 --- a/tools/winscope-ng/src/parsers/parser_common.spec.ts +++ b/tools/winscope-ng/src/parsers/parser_common.spec.ts @@ -21,9 +21,9 @@ import {TestUtils} from "test/test_utils"; describe("Parser", () => { let parser: Parser; - beforeAll(() => { - const buffer = TestUtils.loadFixture("trace_WindowManager.pb"); - const parsers = new ParserFactory().createParsers([buffer]); + beforeAll(async () => { + const buffer = TestUtils.getFixtureBlob("trace_WindowManager.pb"); + const parsers = await new ParserFactory().createParsers([buffer]); expect(parsers.length).toEqual(1); parser = parsers[0]; }); diff --git a/tools/winscope-ng/src/parsers/parser_factory.ts b/tools/winscope-ng/src/parsers/parser_factory.ts index 2546325fc..421bd54d1 100644 --- a/tools/winscope-ng/src/parsers/parser_factory.ts +++ b/tools/winscope-ng/src/parsers/parser_factory.ts @@ -39,13 +39,14 @@ class ParserFactory { ParserWindowManagerDump, ] - createParsers(buffers: Uint8Array[]): Parser[] { + async createParsers(traces: Blob[]): Promise { const parsers: Parser[] = []; - for (const buffer of buffers) { + for (const trace of traces) { for (const ParserType of ParserFactory.PARSERS) { try { - const parser = new ParserType(buffer); + const parser = new ParserType(trace); + await parser.parse(); parsers.push(parser); break; } catch(error) { diff --git a/tools/winscope-ng/src/parsers/parser_input_method_clients.spec.ts b/tools/winscope-ng/src/parsers/parser_input_method_clients.spec.ts index 5ad72eec8..face668a5 100644 --- a/tools/winscope-ng/src/parsers/parser_input_method_clients.spec.ts +++ b/tools/winscope-ng/src/parsers/parser_input_method_clients.spec.ts @@ -21,9 +21,9 @@ import {TestUtils} from "test/test_utils"; describe("ParserInputMethodlClients", () => { let parser: Parser; - beforeAll(() => { - const buffer = TestUtils.loadFixture("trace_InputMethodClients.pb"); - const parsers = new ParserFactory().createParsers([buffer]); + beforeAll(async () => { + const buffer = TestUtils.getFixtureBlob("trace_InputMethodClients.pb"); + const parsers = await new ParserFactory().createParsers([buffer]); expect(parsers.length).toEqual(1); parser = parsers[0]; }); diff --git a/tools/winscope-ng/src/parsers/parser_input_method_clients.ts b/tools/winscope-ng/src/parsers/parser_input_method_clients.ts index 31a14190a..a3988e4d3 100644 --- a/tools/winscope-ng/src/parsers/parser_input_method_clients.ts +++ b/tools/winscope-ng/src/parsers/parser_input_method_clients.ts @@ -18,8 +18,8 @@ import {Parser} from './parser' import {InputMethodClientsTraceFileProto} from './proto_types'; class ParserInputMethodClients extends Parser { - constructor(buffer: Uint8Array) { - super(buffer); + constructor(trace: Blob) { + super(trace); } getTraceTypeId(): TraceTypeId { diff --git a/tools/winscope-ng/src/parsers/parser_input_method_manager_service.spec.ts b/tools/winscope-ng/src/parsers/parser_input_method_manager_service.spec.ts index f7a85874d..0e366779a 100644 --- a/tools/winscope-ng/src/parsers/parser_input_method_manager_service.spec.ts +++ b/tools/winscope-ng/src/parsers/parser_input_method_manager_service.spec.ts @@ -21,9 +21,9 @@ import {TestUtils} from "test/test_utils"; describe("ParserInputMethodManagerService", () => { let parser: Parser; - beforeAll(() => { - const buffer = TestUtils.loadFixture("trace_InputMethodManagerService.pb"); - const parsers = new ParserFactory().createParsers([buffer]); + beforeAll(async () => { + const buffer = TestUtils.getFixtureBlob("trace_InputMethodManagerService.pb"); + const parsers = await new ParserFactory().createParsers([buffer]); expect(parsers.length).toEqual(1); parser = parsers[0]; }); diff --git a/tools/winscope-ng/src/parsers/parser_input_method_manager_service.ts b/tools/winscope-ng/src/parsers/parser_input_method_manager_service.ts index 772d1678d..66bbdee23 100644 --- a/tools/winscope-ng/src/parsers/parser_input_method_manager_service.ts +++ b/tools/winscope-ng/src/parsers/parser_input_method_manager_service.ts @@ -18,8 +18,8 @@ import {Parser} from './parser' import {InputMethodManagerServiceTraceFileProto} from './proto_types'; class ParserInputMethodManagerService extends Parser { - constructor(buffer: Uint8Array) { - super(buffer); + constructor(trace: Blob) { + super(trace); } getTraceTypeId(): TraceTypeId { diff --git a/tools/winscope-ng/src/parsers/parser_input_method_service.spec.ts b/tools/winscope-ng/src/parsers/parser_input_method_service.spec.ts index 21d358bfd..248fb254c 100644 --- a/tools/winscope-ng/src/parsers/parser_input_method_service.spec.ts +++ b/tools/winscope-ng/src/parsers/parser_input_method_service.spec.ts @@ -21,9 +21,9 @@ import {TestUtils} from "test/test_utils"; describe("ParserInputMethodService", () => { let parser: Parser; - beforeAll(() => { - const buffer = TestUtils.loadFixture("trace_InputMethodService.pb"); - const parsers = new ParserFactory().createParsers([buffer]); + beforeAll(async () => { + const buffer = TestUtils.getFixtureBlob("trace_InputMethodService.pb"); + const parsers = await new ParserFactory().createParsers([buffer]); expect(parsers.length).toEqual(1); parser = parsers[0]; }); diff --git a/tools/winscope-ng/src/parsers/parser_input_method_service.ts b/tools/winscope-ng/src/parsers/parser_input_method_service.ts index b13109dfc..b02528e42 100644 --- a/tools/winscope-ng/src/parsers/parser_input_method_service.ts +++ b/tools/winscope-ng/src/parsers/parser_input_method_service.ts @@ -18,8 +18,8 @@ import {Parser} from './parser' import {InputMethodServiceTraceFileProto} from './proto_types'; class ParserInputMethodService extends Parser { - constructor(buffer: Uint8Array) { - super(buffer); + constructor(trace: Blob) { + super(trace); } getTraceTypeId(): TraceTypeId { diff --git a/tools/winscope-ng/src/parsers/parser_protolog.spec.ts b/tools/winscope-ng/src/parsers/parser_protolog.spec.ts index fd7855672..a8aaa6e06 100644 --- a/tools/winscope-ng/src/parsers/parser_protolog.spec.ts +++ b/tools/winscope-ng/src/parsers/parser_protolog.spec.ts @@ -31,9 +31,9 @@ describe("ParserProtoLog", () => { timestamp: Number(850746266486), }; - beforeAll(() => { - const buffer = TestUtils.loadFixture("trace_ProtoLog.pb"); - const parsers = new ParserFactory().createParsers([buffer]); + beforeAll(async () => { + const buffer = TestUtils.getFixtureBlob("trace_ProtoLog.pb"); + const parsers = await new ParserFactory().createParsers([buffer]); expect(parsers.length).toEqual(1); parser = parsers[0]; }); diff --git a/tools/winscope-ng/src/parsers/parser_protolog.ts b/tools/winscope-ng/src/parsers/parser_protolog.ts index 4b888d0a6..7c7a34108 100644 --- a/tools/winscope-ng/src/parsers/parser_protolog.ts +++ b/tools/winscope-ng/src/parsers/parser_protolog.ts @@ -20,8 +20,8 @@ import {ProtoLogFileProto} from "./proto_types"; import configJson from "../../../../../frameworks/base/data/etc/services.core.protolog.json"; class ParserProtoLog extends Parser { - constructor(buffer: Uint8Array) { - super(buffer); + constructor(trace: Blob) { + super(trace); } override getTraceTypeId(): TraceTypeId { diff --git a/tools/winscope-ng/src/parsers/parser_screen_recording.spec.ts b/tools/winscope-ng/src/parsers/parser_screen_recording.spec.ts index a8be68bc7..bc43ac24b 100644 --- a/tools/winscope-ng/src/parsers/parser_screen_recording.spec.ts +++ b/tools/winscope-ng/src/parsers/parser_screen_recording.spec.ts @@ -22,9 +22,9 @@ import {ParserFactory} from './parser_factory'; describe("ParserScreenRecording", () => { let parser: Parser; - beforeAll(() => { - const buffer = TestUtils.loadFixture("screen_recording.mp4"); - const parsers = new ParserFactory().createParsers([buffer]); + beforeAll(async () => { + const buffer = TestUtils.getFixtureBlob("screen_recording.mp4"); + const parsers = await new ParserFactory().createParsers([buffer]); expect(parsers.length).toEqual(1); parser = parsers[0]; }); diff --git a/tools/winscope-ng/src/parsers/parser_screen_recording.ts b/tools/winscope-ng/src/parsers/parser_screen_recording.ts index 28aa6b80a..cffaa8581 100644 --- a/tools/winscope-ng/src/parsers/parser_screen_recording.ts +++ b/tools/winscope-ng/src/parsers/parser_screen_recording.ts @@ -19,8 +19,8 @@ import {Parser} from "./parser" import {ScreenRecordingTraceEntry} from "common/trace/screen_recording"; class ParserScreenRecording extends Parser { - constructor(private videoData: Uint8Array) { - super(videoData); + constructor(trace: Blob) { + super(trace); } override getTraceTypeId(): TraceTypeId { @@ -43,7 +43,8 @@ class ParserScreenRecording extends Parser { override processDecodedEntry(timestamp: number): ScreenRecordingTraceEntry { const videoTimeSeconds = (timestamp - this.timestamps[0]) / 1000000000 + ParserScreenRecording.EPSILON; - return new ScreenRecordingTraceEntry(timestamp, videoTimeSeconds, this.videoData); + const videoData = this.trace; + return new ScreenRecordingTraceEntry(timestamp, videoTimeSeconds, videoData); } private searchMagicString(videoData: Uint8Array): number { diff --git a/tools/winscope-ng/src/parsers/parser_surface_flinger.spec.ts b/tools/winscope-ng/src/parsers/parser_surface_flinger.spec.ts index 071e32457..67a9a4312 100644 --- a/tools/winscope-ng/src/parsers/parser_surface_flinger.spec.ts +++ b/tools/winscope-ng/src/parsers/parser_surface_flinger.spec.ts @@ -22,9 +22,9 @@ import {ParserFactory} from './parser_factory'; describe("ParserSurfaceFlinger", () => { let parser: Parser; - beforeAll(() => { - const buffer = TestUtils.loadFixture("trace_SurfaceFlinger.pb"); - const parsers = new ParserFactory().createParsers([buffer]); + beforeAll(async () => { + const buffer = TestUtils.getFixtureBlob("trace_SurfaceFlinger.pb"); + const parsers = await new ParserFactory().createParsers([buffer]); expect(parsers.length).toEqual(1); parser = parsers[0]; }); diff --git a/tools/winscope-ng/src/parsers/parser_surface_flinger.ts b/tools/winscope-ng/src/parsers/parser_surface_flinger.ts index ec96644c6..9f3be9d1f 100644 --- a/tools/winscope-ng/src/parsers/parser_surface_flinger.ts +++ b/tools/winscope-ng/src/parsers/parser_surface_flinger.ts @@ -19,8 +19,8 @@ import {Parser} from './parser' import {LayersTraceFileProto} from './proto_types'; class ParserSurfaceFlinger extends Parser { - constructor(buffer: Uint8Array) { - super(buffer); + constructor(trace: Blob) { + super(trace); } override getTraceTypeId(): TraceTypeId { diff --git a/tools/winscope-ng/src/parsers/parser_surface_flinger_dump.spec.ts b/tools/winscope-ng/src/parsers/parser_surface_flinger_dump.spec.ts index 29b17af4d..4a120f90b 100644 --- a/tools/winscope-ng/src/parsers/parser_surface_flinger_dump.spec.ts +++ b/tools/winscope-ng/src/parsers/parser_surface_flinger_dump.spec.ts @@ -22,9 +22,9 @@ import {ParserFactory} from './parser_factory'; describe("ParserSurfaceFlingerDump", () => { let parser: Parser; - beforeAll(() => { - const buffer = TestUtils.loadFixture("dump_SurfaceFlinger.pb"); - const parsers = new ParserFactory().createParsers([buffer]); + beforeAll(async () => { + const buffer = TestUtils.getFixtureBlob("dump_SurfaceFlinger.pb"); + const parsers = await new ParserFactory().createParsers([buffer]); expect(parsers.length).toEqual(1); parser = parsers[0]; }); diff --git a/tools/winscope-ng/src/parsers/parser_transactions.spec.ts b/tools/winscope-ng/src/parsers/parser_transactions.spec.ts index 38b021ad3..41da6dad3 100644 --- a/tools/winscope-ng/src/parsers/parser_transactions.spec.ts +++ b/tools/winscope-ng/src/parsers/parser_transactions.spec.ts @@ -21,9 +21,9 @@ import {TestUtils} from "test/test_utils"; describe("ParserTransactions", () => { let parser: Parser; - beforeAll(() => { - const buffer = TestUtils.loadFixture("trace_Transactions.pb"); - const parsers = new ParserFactory().createParsers([buffer]); + beforeAll(async () => { + const buffer = TestUtils.getFixtureBlob("trace_Transactions.pb"); + const parsers = await new ParserFactory().createParsers([buffer]); expect(parsers.length).toEqual(1); parser = parsers[0]; }); diff --git a/tools/winscope-ng/src/parsers/parser_transactions.ts b/tools/winscope-ng/src/parsers/parser_transactions.ts index 4f4c0e089..733959823 100644 --- a/tools/winscope-ng/src/parsers/parser_transactions.ts +++ b/tools/winscope-ng/src/parsers/parser_transactions.ts @@ -18,8 +18,8 @@ import {Parser} from './parser' import {TransactionsTraceFileProto} from './proto_types'; class ParserTransactions extends Parser { - constructor(buffer: Uint8Array) { - super(buffer); + constructor(trace: Blob) { + super(trace); } override getTraceTypeId(): TraceTypeId { diff --git a/tools/winscope-ng/src/parsers/parser_window_manager.spec.ts b/tools/winscope-ng/src/parsers/parser_window_manager.spec.ts index ee2d72f0a..a94050b1e 100644 --- a/tools/winscope-ng/src/parsers/parser_window_manager.spec.ts +++ b/tools/winscope-ng/src/parsers/parser_window_manager.spec.ts @@ -22,9 +22,9 @@ import {TestUtils} from "test/test_utils"; describe("ParserWindowManager", () => { let parser: Parser; - beforeAll(() => { - const buffer = TestUtils.loadFixture("trace_WindowManager.pb"); - const parsers = new ParserFactory().createParsers([buffer]); + beforeAll(async () => { + const buffer = TestUtils.getFixtureBlob("trace_WindowManager.pb"); + const parsers = await new ParserFactory().createParsers([buffer]); expect(parsers.length).toEqual(1); parser = parsers[0]; }); diff --git a/tools/winscope-ng/src/parsers/parser_window_manager.ts b/tools/winscope-ng/src/parsers/parser_window_manager.ts index 122157f76..4cd818cab 100644 --- a/tools/winscope-ng/src/parsers/parser_window_manager.ts +++ b/tools/winscope-ng/src/parsers/parser_window_manager.ts @@ -19,8 +19,8 @@ import {WindowManagerTraceFileProto} from './proto_types'; import {WindowManagerState} from 'common/trace/flickerlib/windows/WindowManagerState'; class ParserWindowManager extends Parser { - constructor(buffer: Uint8Array) { - super(buffer); + constructor(trace: Blob) { + super(trace); } override getTraceTypeId(): TraceTypeId { diff --git a/tools/winscope-ng/src/parsers/parser_window_manager_dump.spec.ts b/tools/winscope-ng/src/parsers/parser_window_manager_dump.spec.ts index b97c69608..7f68a8877 100644 --- a/tools/winscope-ng/src/parsers/parser_window_manager_dump.spec.ts +++ b/tools/winscope-ng/src/parsers/parser_window_manager_dump.spec.ts @@ -22,9 +22,9 @@ import {TestUtils} from "test/test_utils"; describe("ParserWindowManagerDump", () => { let parser: Parser; - beforeAll(() => { - const buffer = TestUtils.loadFixture("dump_WindowManager.pb"); - const parsers = new ParserFactory().createParsers([buffer]); + beforeAll(async () => { + const buffer = TestUtils.getFixtureBlob("dump_WindowManager.pb"); + const parsers = await new ParserFactory().createParsers([buffer]); expect(parsers.length).toEqual(1); parser = parsers[0]; }); diff --git a/tools/winscope-ng/src/parsers/parser_window_manager_dump.ts b/tools/winscope-ng/src/parsers/parser_window_manager_dump.ts index c8874ea61..739cbe616 100644 --- a/tools/winscope-ng/src/parsers/parser_window_manager_dump.ts +++ b/tools/winscope-ng/src/parsers/parser_window_manager_dump.ts @@ -19,8 +19,8 @@ import {WindowManagerServiceDumpProto} from './proto_types'; import {WindowManagerState} from 'common/trace/flickerlib/windows/WindowManagerState'; class ParserWindowManagerDump extends Parser { - constructor(buffer: Uint8Array) { - super(buffer); + constructor(trace: Blob) { + super(trace); } override getTraceTypeId(): TraceTypeId { diff --git a/tools/winscope-ng/src/test/blob.ts b/tools/winscope-ng/src/test/blob.ts new file mode 100644 index 000000000..a92749cb5 --- /dev/null +++ b/tools/winscope-ng/src/test/blob.ts @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * 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. + */ + +// This class is needed for testing because Node.js doesn't provide the Web API's Blob type +class Blob { + constructor(buffer: ArrayBuffer) { + this.size = buffer.byteLength; + this.type = "application/octet-stream"; + this.buffer = buffer; + } + + arrayBuffer(): Promise { + return new Promise((resolve, reject) => { + resolve(this.buffer); + }); + } + + slice(start?: number, end?: number, contentType?: string): Blob { + throw new Error("Not implemented!"); + } + + stream(): any { + throw new Error("Not implemented!"); + } + + text(): Promise { + throw new Error("Not implemented!"); + } + + readonly size: number; + readonly type: string; + private readonly buffer: ArrayBuffer; +} + +export {Blob}; diff --git a/tools/winscope-ng/src/test/e2e/viewer_window_manager.spec.ts b/tools/winscope-ng/src/test/e2e/viewer_window_manager.spec.ts index d5c2887e9..c6523f3dd 100644 --- a/tools/winscope-ng/src/test/e2e/viewer_window_manager.spec.ts +++ b/tools/winscope-ng/src/test/e2e/viewer_window_manager.spec.ts @@ -16,14 +16,15 @@ import {browser, element, by} from 'protractor'; import {TestUtils} from '../test_utils'; -describe("winscope", () => { - beforeAll(() => { +describe("Viewer WindowManager", () => { + beforeAll(async () => { + browser.manage().timeouts().implicitlyWait(1000); browser.get("file://" + TestUtils.getProductionIndexHtmlPath()); }), it("processes trace and renders view", () => { - const inputfile = element(by.css("input[type=\"file\"]")); - inputfile.sendKeys(TestUtils.getFixturePath("trace_WindowManager.pb")); + const inputFile = element(by.css("input[type=\"file\"]")); + inputFile.sendKeys(TestUtils.getFixturePath("trace_WindowManager.pb")); const windowManagerViewerTitle = element(by.css(".viewer-window-manager .title")); expect(windowManagerViewerTitle.getText()).toContain("Window Manager"); diff --git a/tools/winscope-ng/src/test/test_utils.ts b/tools/winscope-ng/src/test/test_utils.ts index 457e00996..dcb05487e 100644 --- a/tools/winscope-ng/src/test/test_utils.ts +++ b/tools/winscope-ng/src/test/test_utils.ts @@ -13,14 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const fs = require("fs"); -const path = require("path"); +import * as fs from "fs"; +import * as path from "path"; +import {Blob} from "./blob"; class TestUtils { - static loadFixture(filename: string): Uint8Array { - const fullPath = path.resolve(__dirname, path.join("../../src/test/fixtures", filename)); - const data = fs.readFileSync(TestUtils.getFixturePath(filename)); - return new Uint8Array(data); + static getFixtureBlob(filename: string): Blob { + const buffer = TestUtils.loadFixture(filename); + return new Blob(buffer); + } + + static loadFixture(filename: string): ArrayBuffer { + return fs.readFileSync(TestUtils.getFixturePath(filename)); } static getFixturePath(filename: string): string { @@ -34,6 +38,6 @@ class TestUtils { static getProjectRootPath(): string { return path.join(__dirname, "../.."); } -}; +} export {TestUtils};