diff --git a/README.md b/README.md index edab67c45..2567c3f90 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,6 @@ by conforming to Angular conventions.
ng add @angular/fire
-_Note: If you want to ng add AngularFire and will be using Hosting/Cloud Functions, you need to configure the -Firebase CLI first so that you are logged in for the schematics that are run as part of `ng add @angular/fire`. -Follow [this guide](docs/install-firebase-tools.md) to have the Firebase CLI walk you through the setup._ - - **Dependency injection** - Provide and Inject Firebase services in your components - **Zone.js wrappers** - Stable zones allow proper functionality of service workers, forms, SSR, and pre-rendering - **Observable based** - Utilize RxJS rather than callbacks for realtime streams diff --git a/package-lock.json b/package-lock.json index 0b833b981..9d73494d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,16 +9,16 @@ "version": "17.0.0", "license": "MIT", "dependencies": { - "@angular-devkit/architect": "~0.1700.0-next.0", - "@angular-devkit/core": "^17.0.0-next.0", - "@angular-devkit/schematics": "^17.0.0-next.0", - "@angular/common": "^17.0.0-next.0", - "@angular/compiler": "^17.0.0-next.0", - "@angular/core": "^17.0.0-next.0", - "@angular/platform-browser": "^17.0.0-next.0", - "@angular/platform-browser-dynamic": "^17.0.0-next.0", - "@angular/router": "^17.0.0-next.0", - "@schematics/angular": "^17.0.0-next.0", + "@angular-devkit/architect": "~0.1700.0", + "@angular-devkit/core": "^17.0.0", + "@angular-devkit/schematics": "^17.0.0", + "@angular/common": "^17.0.0", + "@angular/compiler": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/platform-browser": "^17.0.0", + "@angular/platform-browser-dynamic": "^17.0.0", + "@angular/router": "^17.0.0", + "@schematics/angular": "^17.0.0", "firebase": "^10.0.0", "firebase-admin": "^9.11.1", "firebase-functions": "^3.6.0", @@ -39,11 +39,11 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^17.0.0-next.0", - "@angular/animations": "^17.0.0-next.0", - "@angular/cli": "^17.0.0-next.0", - "@angular/compiler-cli": "^17.0.0-next.0", - "@angular/platform-server": "^17.0.0-next.0", + "@angular-devkit/build-angular": "^17.0.0", + "@angular/animations": "^17.0.0", + "@angular/cli": "^17.0.0", + "@angular/compiler-cli": "^17.0.0", + "@angular/platform-server": "^17.0.0", "@types/fs-extra": "^7.0.0", "@types/gzip-size": "^5.1.1", "@types/inquirer": "^0.0.44", @@ -71,7 +71,7 @@ "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.1.0", "karma-safarinative-launcher": "^1.1.0", - "ng-packagr": "^17.0.0-next.0", + "ng-packagr": "^17.0.0", "reflect-metadata": "^0.1.2", "replace-in-file": "^5.0.2", "rimraf": "^2.5.4", @@ -105,29 +105,29 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1700.0-rc.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1700.0-rc.2.tgz", - "integrity": "sha512-+1GpG59fHgHNdqnDxXDa801vunrxSHDQohtS2s9ltuWDrl29vptdHLXCAWpP7OD+MD7+gab5jQqIDNCXats8gw==", + "version": "0.1700.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1700.6.tgz", + "integrity": "sha512-zVpz736cBZHXcv0v2bRLfJLcykanUyEMVQXkGwZp2eygjNK1Ls9s/74o1dXd6nGdvjh6AnkzOU/vouj2dqA41g==", "dependencies": { - "@angular-devkit/core": "17.0.0-rc.2", + "@angular-devkit/core": "17.0.6", "rxjs": "7.8.1" }, "engines": { - "node": ">=18.13.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular-devkit/build-angular": { - "version": "17.0.0-rc.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.0.0-rc.2.tgz", - "integrity": "sha512-lRWtwbZtk1VQ0XhJ97M0ijzLld5aAlx/CyxK1CBveP05i3FjdhQ4sH0MFf/bqkDr7kDc9WhDikryKEIdpcKE5w==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.0.6.tgz", + "integrity": "sha512-gYxmbvq5/nk7aVJ6JxIIW0//RM7859kMPJGPKekcCGSWkkObjqG6P5cDgJJNAjMl/IfCsG7B+xGYjr4zN8QV9g==", "dev": true, "dependencies": { "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1700.0-rc.2", - "@angular-devkit/build-webpack": "0.1700.0-rc.2", - "@angular-devkit/core": "17.0.0-rc.2", + "@angular-devkit/architect": "0.1700.6", + "@angular-devkit/build-webpack": "0.1700.6", + "@angular-devkit/core": "17.0.6", "@babel/core": "7.23.2", "@babel/generator": "7.23.0", "@babel/helper-annotate-as-pure": "7.22.5", @@ -138,7 +138,7 @@ "@babel/preset-env": "7.23.2", "@babel/runtime": "7.23.2", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "17.0.0-rc.2", + "@ngtools/webpack": "17.0.6", "@vitejs/plugin-basic-ssl": "1.0.1", "ansi-colors": "4.1.3", "autoprefixer": "10.4.16", @@ -167,7 +167,7 @@ "open": "8.4.2", "ora": "5.4.1", "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "2.3.1", + "picomatch": "3.0.1", "piscina": "4.1.0", "postcss": "8.4.31", "postcss-loader": "7.3.3", @@ -178,11 +178,12 @@ "semver": "7.5.4", "source-map-loader": "4.0.1", "source-map-support": "0.5.21", - "terser": "5.22.0", + "terser": "5.24.0", "text-table": "0.2.0", "tree-kill": "1.2.2", "tslib": "2.6.2", - "vite": "4.5.0", + "undici": "5.27.2", + "vite": "4.5.1", "webpack": "5.89.0", "webpack-dev-middleware": "6.1.1", "webpack-dev-server": "4.15.1", @@ -190,7 +191,7 @@ "webpack-subresource-integrity": "5.1.0" }, "engines": { - "node": ">=18.13.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -198,14 +199,14 @@ "esbuild": "0.19.5" }, "peerDependencies": { - "@angular/compiler-cli": "^17.0.0 || ^17.0.0-next.0", - "@angular/localize": "^17.0.0 || ^17.0.0-next.0", - "@angular/platform-server": "^17.0.0 || ^17.0.0-next.0", - "@angular/service-worker": "^17.0.0 || ^17.0.0-next.0", + "@angular/compiler-cli": "^17.0.0", + "@angular/localize": "^17.0.0", + "@angular/platform-server": "^17.0.0", + "@angular/service-worker": "^17.0.0", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", "karma": "^6.3.0", - "ng-packagr": "^17.0.0 || ^17.0.0-next.1", + "ng-packagr": "^17.0.0", "protractor": "^7.0.0", "tailwindcss": "^2.0.0 || ^3.0.0", "typescript": ">=5.2 <5.3" @@ -711,6 +712,18 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@angular-devkit/build-angular/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/run-async": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", @@ -721,9 +734,9 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/vite": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", - "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", + "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", "dev": true, "dependencies": { "esbuild": "^0.18.10", @@ -813,16 +826,16 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1700.0-rc.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1700.0-rc.2.tgz", - "integrity": "sha512-yOI3cXXpkLnTlqMqXik1ATFWCgPZdR7Rv3eG67mD8QaMIShubFb82HQLKcb34SQJxf6HntYw7X6d5xnKbHwnvQ==", + "version": "0.1700.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1700.6.tgz", + "integrity": "sha512-xT5LL92rScVjvGZO7but/YbTQ12PNilosyjDouephl+HIf2V6rwDovTsEfpLYgcrqgodh+R0X0ZCOk95+MmSBA==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1700.0-rc.2", + "@angular-devkit/architect": "0.1700.6", "rxjs": "7.8.1" }, "engines": { - "node": ">=18.13.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -832,19 +845,19 @@ } }, "node_modules/@angular-devkit/core": { - "version": "17.0.0-rc.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.0-rc.2.tgz", - "integrity": "sha512-z68Y+JhcDsTv9TVOX5tmuR7bRrTMLCP/3AxUeJ9kZW4UdCeZA77ya0k7F1XpkyCb2JTM/5+yYXTigxMh6Jhr8g==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.6.tgz", + "integrity": "sha512-+h9VnFHof7rKzBJ5FWrbPXWzbag31QKbUGJ/mV5BYgj39vjzPNUXBW8AaScZAlATi8+tElYXjRMvM49GnuyRLg==", "dependencies": { "ajv": "8.12.0", "ajv-formats": "2.1.1", "jsonc-parser": "3.2.0", - "picomatch": "2.3.1", + "picomatch": "3.0.1", "rxjs": "7.8.1", "source-map": "0.7.4" }, "engines": { - "node": ">=18.13.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, @@ -857,48 +870,59 @@ } } }, + "node_modules/@angular-devkit/core/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@angular-devkit/schematics": { - "version": "17.0.0-rc.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.0.0-rc.2.tgz", - "integrity": "sha512-WW4mQdCGZ2YA6g2r10571hKxCMwkiVEoOF69GjBzLfIr4YBF6bcXcczqgGyeOtbTT3xy7FbTcdNZ7/l9K4XLDQ==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.0.6.tgz", + "integrity": "sha512-2g769MpazA1aOzJOm2MNGosra3kxw8CbdIQQOKkvycIzroRNgN06yHcRTDC03GADgP/CkDJ6kxwJQNG+wNFL2A==", "dependencies": { - "@angular-devkit/core": "17.0.0-rc.2", + "@angular-devkit/core": "17.0.6", "jsonc-parser": "3.2.0", "magic-string": "0.30.5", "ora": "5.4.1", "rxjs": "7.8.1" }, "engines": { - "node": ">=18.13.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular/animations": { - "version": "17.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.0.0-rc.1.tgz", - "integrity": "sha512-eCrE4n+hOpgZXthjv9iR3Ao/J6hAbuQTqhFpSVAauMuSO9dRFOwMBG6rmx7Rk8Icro9M/LQZ8lPRTwh6b36vuw==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.0.6.tgz", + "integrity": "sha512-fic61LjLHry79c5H9UGM8Ff311MJnf9an7EukLj2aLJ3J0uadL/H9de7dDp8PaIT10DX9g+aRTIKOmF3PmmXIQ==", "devOptional": true, "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">=18.13.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "17.0.0-rc.1" + "@angular/core": "17.0.6" } }, "node_modules/@angular/cli": { - "version": "17.0.0-rc.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.0.0-rc.2.tgz", - "integrity": "sha512-2Xl2e5PzD3MyNpf3Urbs1esHBqY5faPcqsRwFvHC2yo+X0M1n64D6uuKQ5+gbPnEbUc5KKi04QiFEsCbPIW/mw==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.0.6.tgz", + "integrity": "sha512-BLA2wDeqZManC/7MI6WvRRV+VhrwjxxB7FawLyp4xYlo0CTSOFOfeKPVRMLEnA/Ou4R5d47B+BqJTlep62pHwg==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1700.0-rc.2", - "@angular-devkit/core": "17.0.0-rc.2", - "@angular-devkit/schematics": "17.0.0-rc.2", - "@schematics/angular": "17.0.0-rc.2", + "@angular-devkit/architect": "0.1700.6", + "@angular-devkit/core": "17.0.6", + "@angular-devkit/schematics": "17.0.6", + "@schematics/angular": "17.0.6", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.1", @@ -918,7 +942,7 @@ "ng": "bin/ng.js" }, "engines": { - "node": ">=18.13.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } @@ -1029,32 +1053,32 @@ } }, "node_modules/@angular/common": { - "version": "17.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.0.0-rc.1.tgz", - "integrity": "sha512-E51n8DdHY6WvP2OCBK9saIeGOjqCsekTxJ9Dx52kD/ZSI5JyQHUmxnCiGbp6rbxPBSli/0CS/6OabX7tVYq2Mg==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.0.6.tgz", + "integrity": "sha512-FZtf8ol8W2V21ZDgFtcxmJ6JJKUO97QZ+wr/bosyYEryWMmn6VGrbOARhfW7BlrEgn14NdFkLb72KKtqoqRjrg==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">=18.13.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "17.0.0-rc.1", + "@angular/core": "17.0.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "17.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.0.0-rc.1.tgz", - "integrity": "sha512-h1HNvTNbroMo2YUtn6K/i0LKQUlAPQJb/Bq+nz1TyxnDI5nYGbRJ8WycQyGwRVrfvLkghkkCGzQqIHEUmZ3rSw==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.0.6.tgz", + "integrity": "sha512-PaCNnlPcL0rvByKCBUUyLWkKJYXOrcfKlYYvcacjOzEUgZeEpekG81hMRb9u/Pz+A+M4HJSTmdgzwGP35zo8qw==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">=18.13.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "17.0.0-rc.1" + "@angular/core": "17.0.6" }, "peerDependenciesMeta": { "@angular/core": { @@ -1063,9 +1087,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "17.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.0.0-rc.1.tgz", - "integrity": "sha512-qGom6m5NXj8mB2laXm/xv5th2Vo5iwR0eSOW5VbvU7mCAhwx6WwlWd/jNaf58w1GygrU9p0ay8CHOv4yIK26Kw==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.0.6.tgz", + "integrity": "sha512-C1Gfh9kbjYZezEMOwxnvUTHuPXa+6pk7mAfSj8e5oAO6E+wfo2dTxv1J5zxa3KYzxPYMNfF8OFvLuMKsw7lXjA==", "dev": true, "dependencies": { "@babel/core": "7.23.2", @@ -1083,22 +1107,22 @@ "ngcc": "bundles/ngcc/index.js" }, "engines": { - "node": ">=18.13.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/compiler": "17.0.0-rc.1", + "@angular/compiler": "17.0.6", "typescript": ">=5.2 <5.3" } }, "node_modules/@angular/core": { - "version": "17.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.0.0-rc.1.tgz", - "integrity": "sha512-qz5Xjye2XkmBp+4vSxpPVM6yXs/36oXx/FUQa6PDP/DrW9wrCxSELf2g9PHT84xDgq6BhBqca0a4fq+QFURTqg==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.0.6.tgz", + "integrity": "sha512-QzfKRTDNgGOY9D5VxenUUz20cvPVC+uVw9xiqkDuHgGfLYVFlCAK9ymFYkdUCLTcVzJPxckP+spMpPX8nc4Aqw==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">=18.13.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { "rxjs": "^6.5.3 || ^7.4.0", @@ -1106,19 +1130,19 @@ } }, "node_modules/@angular/platform-browser": { - "version": "17.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.0.0-rc.1.tgz", - "integrity": "sha512-y1YzN36AmvWMKNjJ0P8OVcnymCuc16xt/hHmEgDDu7ky5TfBO5OTm26DVySdGVuJdkz0M1sTbyyRuGDrhxRu7A==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.0.6.tgz", + "integrity": "sha512-nBhWH1MKT2WswgRNIoMnmNAt0n5/fG59BanJtodW71//Aj5aIE+BuVoFgK3wmO8IMoeP4i4GXRInBXs6lUMOJw==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">=18.13.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/animations": "17.0.0-rc.1", - "@angular/common": "17.0.0-rc.1", - "@angular/core": "17.0.0-rc.1" + "@angular/animations": "17.0.6", + "@angular/common": "17.0.6", + "@angular/core": "17.0.6" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1127,56 +1151,56 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "17.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.0.0-rc.1.tgz", - "integrity": "sha512-cfrfruJ+OgSIBlnRFM0KPcStJlFHjiokwzkigScBMYXjeqMk9jGbUMsQZYHP4yG5JaXvJUsU2ngFDdYlULUXxQ==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.0.6.tgz", + "integrity": "sha512-5ZEmBtBkqamTaWjUXCls7G1f3xyK/ykXE7hnUV9CgGqXKrNkxblmbtOhoWdsbuIYjjdxQcAk1qtg/Rg21wcc4w==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">=18.13.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "17.0.0-rc.1", - "@angular/compiler": "17.0.0-rc.1", - "@angular/core": "17.0.0-rc.1", - "@angular/platform-browser": "17.0.0-rc.1" + "@angular/common": "17.0.6", + "@angular/compiler": "17.0.6", + "@angular/core": "17.0.6", + "@angular/platform-browser": "17.0.6" } }, "node_modules/@angular/platform-server": { - "version": "17.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-17.0.0-rc.1.tgz", - "integrity": "sha512-OoWBIw9UZ1iMDdxR28FT6R+ptw1iMN1P3vuvPao5Pu25iSUZDY9p1T2A3MBhx8hOQPTL+s65ZDHZPDDD+ahZ4Q==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-17.0.6.tgz", + "integrity": "sha512-HrSsrkPQC7t8Yw5+bs40S4Goxscr3hWFYe7ecDmFPzJ88a4JYG38CwsJ+vv8xDQEarR4ugJMEfMxsCFNoXKLXw==", "dev": true, "dependencies": { "tslib": "^2.3.0", "xhr2": "^0.2.0" }, "engines": { - "node": ">=18.13.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/animations": "17.0.0-rc.1", - "@angular/common": "17.0.0-rc.1", - "@angular/compiler": "17.0.0-rc.1", - "@angular/core": "17.0.0-rc.1", - "@angular/platform-browser": "17.0.0-rc.1" + "@angular/animations": "17.0.6", + "@angular/common": "17.0.6", + "@angular/compiler": "17.0.6", + "@angular/core": "17.0.6", + "@angular/platform-browser": "17.0.6" } }, "node_modules/@angular/router": { - "version": "17.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.0.0-rc.1.tgz", - "integrity": "sha512-TO8dBZoYOvKSDVC+PXZvs1LhxnHBpl8eNGgZCXdmqihykdZEqMU+gU5bhBsgfjkkcwu8Lpu+mGrrgL30P4uhaQ==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.0.6.tgz", + "integrity": "sha512-xW6yDxREpBOB9MoODSfIw5HwkwLK+OgK34Q6sGYs0ft9UryMoFwft+pHGAaDz2nzhA72n+Ht9B2eai78UE9jGQ==", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": ">=18.13.0" + "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "17.0.0-rc.1", - "@angular/core": "17.0.0-rc.1", - "@angular/platform-browser": "17.0.0-rc.1", + "@angular/common": "17.0.6", + "@angular/core": "17.0.6", + "@angular/platform-browser": "17.0.6", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -3421,6 +3445,15 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@firebase/analytics": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.0.tgz", @@ -4611,17 +4644,17 @@ } }, "node_modules/@ngtools/webpack": { - "version": "17.0.0-rc.2", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.0.0-rc.2.tgz", - "integrity": "sha512-V/FEtXh0tnoUQsdY9Q7QrkjSF9tvKFhm5mTC/qj2WMq+e53cT/HbeAcUvZMyKsNmr/1SWm6xv4BhIwPHPIq7yg==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.0.6.tgz", + "integrity": "sha512-9Us20rqGhi8PmQBwQu6Qtww3WVV/gf2s2DbzcLclsiDtSBobzT64Z6F6E9OpAYD+c5PxlUaOghL6NXdnSNdByA==", "dev": true, "engines": { - "node": ">=18.13.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^17.0.0 || ^17.0.0-next.0", + "@angular/compiler-cli": "^17.0.0", "typescript": ">=5.2 <5.3", "webpack": "^5.54.0" } @@ -5063,9 +5096,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", - "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, "dependencies": { "@types/estree": "^1.0.0", @@ -5084,17 +5117,189 @@ } } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.6.1.tgz", + "integrity": "sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.6.1.tgz", + "integrity": "sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.1.tgz", + "integrity": "sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.6.1.tgz", + "integrity": "sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.6.1.tgz", + "integrity": "sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.6.1.tgz", + "integrity": "sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.6.1.tgz", + "integrity": "sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.1.tgz", + "integrity": "sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.6.1.tgz", + "integrity": "sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.6.1.tgz", + "integrity": "sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.6.1.tgz", + "integrity": "sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.1.tgz", + "integrity": "sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/wasm-node": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.6.1.tgz", + "integrity": "sha512-Mh6TSuMLoK9n3uLKa5r1NdX+BGZJyl5L+dx/MH9K2l9Dzk/R0w1XQMs1aP/quv3KB/kn6UIUbJmXNReIW5032Q==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/@schematics/angular": { - "version": "17.0.0-rc.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.0.0-rc.2.tgz", - "integrity": "sha512-ZkQiiz2r8onJJEZlxJl9j2X12Tm7ZJaZlnxmbSryT8vkHX8g6xtB9RgLfSAoojrHj0n/io314fFnu9C0tBWsRQ==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.0.6.tgz", + "integrity": "sha512-AyC7Bk3Omy6PfADThhq5ci+zzdTTi2N1oZI35gw4tMK5ZxVwIACx2Zyhaz399m5c2RCDi9Hz4A2BOFq9f0j/dg==", "dependencies": { - "@angular-devkit/core": "17.0.0-rc.2", - "@angular-devkit/schematics": "17.0.0-rc.2", + "@angular-devkit/core": "17.0.6", + "@angular-devkit/schematics": "17.0.6", "jsonc-parser": "3.2.0" }, "engines": { - "node": ">=18.13.0", + "node": "^18.13.0 || >=20.9.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } @@ -5223,9 +5428,9 @@ } }, "node_modules/@types/bonjour": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.12.tgz", - "integrity": "sha512-ky0kWSqXVxSqgqJvPIkgFkcn4C8MnRog308Ou8xBBIVo39OmUFy+jqNe0nPwLCDFxUpmT9EvT91YzOJgkDRcFg==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, "dependencies": { "@types/node": "*" @@ -5240,9 +5445,9 @@ } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.2.tgz", - "integrity": "sha512-gX2j9x+NzSh4zOhnRPSdPPmTepS4DfxES0AvIFv3jGv5QyeAJf6u6dY5/BAoAJU9Qq1uTvwOku8SSC2GnCRl6Q==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, "dependencies": { "@types/express-serve-static-core": "*", @@ -5362,9 +5567,9 @@ "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==" }, "node_modules/@types/http-proxy": { - "version": "1.17.13", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.13.tgz", - "integrity": "sha512-GkhdWcMNiR5QSQRYnJ+/oXzu0+7JJEPC8vkWXK351BkhjraZF+1W13CUYARUvX9+NqIU2n6YHA4iwywsc/M6Sw==", + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", "dev": true, "dependencies": { "@types/node": "*" @@ -5460,9 +5665,9 @@ "integrity": "sha512-Q+eSkdYQJ2XK1AJnr4Ji8Gvk3sRDybEwfTvtL9CA25FFUSD2EgZQewN6VCyWYZCXg5MWZdwogdTNBhlWRcWS1w==" }, "node_modules/@types/node-forge": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.8.tgz", - "integrity": "sha512-vGXshY9vim9CJjrpcS5raqSjEfKlJcWy2HNdgUasR66fAnVEYarrf1ULV4nfvpC1nZq/moA9qyqBcu83x+Jlrg==", + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", + "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", "dev": true, "dependencies": { "@types/node": "*" @@ -5662,9 +5867,9 @@ } }, "node_modules/@types/serve-index": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.3.tgz", - "integrity": "sha512-4KG+yMEuvDPRrYq5fyVm/I2uqAJSAwZK9VSa+Zf+zUq9/oxSSvy3kkIqyL+jjStv6UCVi8/Aho0NHtB1Fwosrg==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, "dependencies": { "@types/express": "*" @@ -5681,9 +5886,9 @@ } }, "node_modules/@types/sockjs": { - "version": "0.3.35", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.35.tgz", - "integrity": "sha512-tIF57KB+ZvOBpAQwSaACfEu7htponHXaFzP7RfKYgsOS0NoYnn+9+jzp7bbq4fWerizI3dTB4NfAZoyeQKWJLw==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, "dependencies": { "@types/node": "*" @@ -5714,9 +5919,9 @@ } }, "node_modules/@types/ws": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.8.tgz", - "integrity": "sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, "dependencies": { "@types/node": "*" @@ -16385,44 +16590,45 @@ } }, "node_modules/ng-packagr": { - "version": "17.0.0-rc.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-17.0.0-rc.0.tgz", - "integrity": "sha512-Wvd2GT5NvxsNFezbFXIeCr+eW4ELp4LBBkwZRWTZ/5tJ+KgmdYb7vUyBsPljn0B9bBvXz0Gn09c9/VBXtUuoTA==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-17.0.2.tgz", + "integrity": "sha512-1bn1Y93d23ZwTjazCdiEEdolYbXPddq4Q1XNhh+CyUgSTMONJhW2Ikpzbt+Z+3uxz0kSAAPBlHTx7uABXbMPPQ==", "dev": true, "dependencies": { - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.0.0", - "ajv": "^8.11.0", + "@rollup/plugin-json": "^6.0.1", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/wasm-node": "^4.5.0", + "ajv": "^8.12.0", "ansi-colors": "^4.1.3", - "autoprefixer": "^10.4.12", - "browserslist": "^4.21.4", + "autoprefixer": "^10.4.16", + "browserslist": "^4.22.1", "cacache": "^18.0.0", "chokidar": "^3.5.3", - "commander": "^11.0.0", + "commander": "^11.1.0", "convert-source-map": "^2.0.0", "dependency-graph": "^0.11.0", - "esbuild-wasm": "^0.19.0", - "fast-glob": "^3.2.12", + "esbuild-wasm": "^0.19.5", + "fast-glob": "^3.3.1", "find-cache-dir": "^3.3.2", "injection-js": "^2.4.0", "jsonc-parser": "^3.2.0", - "less": "^4.1.3", + "less": "^4.2.0", "ora": "^5.1.0", - "piscina": "^4.0.0", - "postcss": "^8.4.16", + "piscina": "^4.1.0", + "postcss": "^8.4.31", "postcss-url": "^10.1.3", - "rollup": "^3.0.0", - "rxjs": "^7.5.6", - "sass": "^1.55.0" + "rxjs": "^7.8.1", + "sass": "^1.69.5" }, "bin": { "ng-packagr": "cli/main.js" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^18.13.0 || >=20.9.0" }, "optionalDependencies": { - "esbuild": "^0.19.0" + "esbuild": "^0.19.0", + "rollup": "^4.5.0" }, "peerDependencies": { "@angular/compiler-cli": "^17.0.0 || ^17.0.0-next.0", @@ -16480,6 +16686,35 @@ "node": ">=8" } }, + "node_modules/ng-packagr/node_modules/rollup": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.6.1.tgz", + "integrity": "sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==", + "dev": true, + "optional": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.6.1", + "@rollup/rollup-android-arm64": "4.6.1", + "@rollup/rollup-darwin-arm64": "4.6.1", + "@rollup/rollup-darwin-x64": "4.6.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.6.1", + "@rollup/rollup-linux-arm64-gnu": "4.6.1", + "@rollup/rollup-linux-arm64-musl": "4.6.1", + "@rollup/rollup-linux-x64-gnu": "4.6.1", + "@rollup/rollup-linux-x64-musl": "4.6.1", + "@rollup/rollup-win32-arm64-msvc": "4.6.1", + "@rollup/rollup-win32-ia32-msvc": "4.6.1", + "@rollup/rollup-win32-x64-msvc": "4.6.1", + "fsevents": "~2.3.2" + } + }, "node_modules/nice-napi": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", @@ -16567,9 +16802,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", - "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.1.tgz", + "integrity": "sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==", "dev": true, "optional": true, "bin": { @@ -21344,9 +21579,9 @@ "dev": true }, "node_modules/terser": { - "version": "5.22.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.22.0.tgz", - "integrity": "sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==", + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -22104,6 +22339,18 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, + "node_modules/undici": { + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz", + "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", diff --git a/package.json b/package.json index 67142fc57..20f0264fa 100644 --- a/package.json +++ b/package.json @@ -45,16 +45,16 @@ }, "homepage": "https://github.com/angular/angularfire#readme", "dependencies": { - "@angular-devkit/architect": "~0.1700.0-next.0", - "@angular-devkit/core": "^17.0.0-next.0", - "@angular-devkit/schematics": "^17.0.0-next.0", - "@angular/common": "^17.0.0-next.0", - "@angular/compiler": "^17.0.0-next.0", - "@angular/core": "^17.0.0-next.0", - "@angular/platform-browser": "^17.0.0-next.0", - "@angular/platform-browser-dynamic": "^17.0.0-next.0", - "@angular/router": "^17.0.0-next.0", - "@schematics/angular": "^17.0.0-next.0", + "@angular-devkit/architect": "~0.1700.0", + "@angular-devkit/core": "^17.0.0", + "@angular-devkit/schematics": "^17.0.0", + "@angular/common": "^17.0.0", + "@angular/compiler": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/platform-browser": "^17.0.0", + "@angular/platform-browser-dynamic": "^17.0.0", + "@angular/router": "^17.0.0", + "@schematics/angular": "^17.0.0", "firebase": "^10.0.0", "firebase-admin": "^9.11.1", "firebase-functions": "^3.6.0", @@ -75,11 +75,11 @@ "zone.js": "~0.14.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^17.0.0-next.0", - "@angular/animations": "^17.0.0-next.0", - "@angular/cli": "^17.0.0-next.0", - "@angular/compiler-cli": "^17.0.0-next.0", - "@angular/platform-server": "^17.0.0-next.0", + "@angular-devkit/build-angular": "^17.0.0", + "@angular/animations": "^17.0.0", + "@angular/cli": "^17.0.0", + "@angular/compiler-cli": "^17.0.0", + "@angular/platform-server": "^17.0.0", "@types/fs-extra": "^7.0.0", "@types/gzip-size": "^5.1.1", "@types/inquirer": "^0.0.44", @@ -107,7 +107,7 @@ "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.1.0", "karma-safarinative-launcher": "^1.1.0", - "ng-packagr": "^17.0.0-next.0", + "ng-packagr": "^17.0.0", "reflect-metadata": "^0.1.2", "replace-in-file": "^5.0.2", "rimraf": "^2.5.4", diff --git a/src/package.json b/src/package.json index 6a4963139..473380723 100644 --- a/src/package.json +++ b/src/package.json @@ -23,10 +23,10 @@ "author": "angular,firebase", "license": "MIT", "peerDependencies": { - "@angular/common": "^17.0.0-next.0", - "@angular/core": "^17.0.0-next.0", - "@angular/platform-browser": "^17.0.0-next.0", - "@angular/platform-browser-dynamic": "^17.0.0-next.0", + "@angular/common": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/platform-browser": "^17.0.0", + "@angular/platform-browser-dynamic": "^17.0.0", "rxjs": "~7.8.0", "firebase-tools": "^12.0.0" }, @@ -36,8 +36,8 @@ "dependencies": { "firebase": "^10.5.0", "rxfire": "^6.0.5", - "@angular-devkit/schematics": "^17.0.0-next.0", - "@schematics/angular": "^17.0.0-next.0", + "@angular-devkit/schematics": "^17.0.0", + "@schematics/angular": "^17.0.0", "tslib": "^2.3.0", "fuzzy": "^0.1.3", "inquirer-autocomplete-prompt": "^1.0.1", diff --git a/src/schematics/firebaseTools.ts b/src/schematics/firebaseTools.ts index 90db6b1b0..43e5c5c8a 100644 --- a/src/schematics/firebaseTools.ts +++ b/src/schematics/firebaseTools.ts @@ -44,8 +44,8 @@ export const getFirebaseTools = () => globalThis.firebaseTools ? globalThis.firebaseTools = firebaseTools; const version = firebaseTools.cli.version(); console.log(`Using firebase-tools version ${version}`); - if (semver.compare(version, '9.9.0') === -1) { - console.error('firebase-tools version 9.9+ is required, please upgrade and run again'); + if (semver.compare(version, '13.0.0') === -1) { + console.error('firebase-tools version 13.0.0+ is required, please upgrade and run again'); return Promise.reject(); } return firebaseTools; diff --git a/src/schematics/interfaces.ts b/src/schematics/interfaces.ts index bd4446420..7dee0c1b3 100644 --- a/src/schematics/interfaces.ts +++ b/src/schematics/interfaces.ts @@ -41,10 +41,7 @@ export interface NgAddNormalizedOptions { firebaseApp: FirebaseApp|undefined; firebaseHostingSite: FirebaseHostingSite|undefined; sdkConfig: Record|undefined; - prerender: boolean|undefined; - browserTarget: string|undefined; - serverTarget: string|undefined; - prerenderTarget: string|undefined; + buildTarget: string|undefined; ssrRegion: string|undefined; } @@ -122,7 +119,7 @@ export interface FirebaseTools { }; login: { - list(): Promise<{user: Record}[]>; + list(): Promise<{user: Record}[] | { users: undefined }>; add(): Promise>; use(email: string, options?: unknown): Promise; } & ((options?: unknown) => Promise>); diff --git a/src/schematics/setup/index.ts b/src/schematics/setup/index.ts index 3ec346dd1..eaf0f2b68 100644 --- a/src/schematics/setup/index.ts +++ b/src/schematics/setup/index.ts @@ -12,7 +12,7 @@ import { import { getFirebaseTools } from '../firebaseTools'; import { DeployOptions, FEATURES, FirebaseApp, FirebaseHostingSite, FirebaseProject, - NgAddNormalizedOptions, PROJECT_TYPE + NgAddNormalizedOptions } from '../interfaces'; import { FirebaseJSON, Workspace, WorkspaceProject } from '../interfaces'; import { @@ -27,14 +27,9 @@ export interface SetupConfig extends DeployOptions { firebaseApp?: FirebaseApp, firebaseHostingSite?: FirebaseHostingSite, sdkConfig?: Record, - nodeVersion?: string, - browserTarget?: string, - serverTarget?: string, - prerenderTarget?: string, + buildTarget?: string, project?: string, ssrRegion?: string, - projectType?: PROJECT_TYPE, - prerender?: boolean, } export const setupProject = @@ -55,10 +50,7 @@ export const setupProject = firebaseApp: config.firebaseApp, firebaseHostingSite: config.firebaseHostingSite, sdkConfig: config.sdkConfig, - prerender: undefined, - browserTarget: config.browserTarget, - serverTarget: config.serverTarget, - prerenderTarget: config.prerenderTarget, + buildTarget: config.buildTarget, ssrRegion: config.ssrRegion, }, tree, @@ -97,7 +89,10 @@ export const ngAddSetupProject = ( if (!host.exists('/firebase.json')) { writeFileSync(join(projectRoot, 'firebase.json'), '{}'); } const user = await userPrompt({ projectRoot }); - await firebaseTools.login.use(user.email, { projectRoot }); + const defaultUser = await firebaseTools.login(options); + if (user.email !== defaultUser?.email) { + await firebaseTools.login.use(user.email, { projectRoot }); + } const { project: ngProject, projectName: ngProjectName } = getProject(options, host); @@ -187,10 +182,13 @@ export const setupFirebase = (config: { builder: '@angular/fire:deploy', options: { version: 2, - browserTarget: options.browserTarget, - ...(options.serverTarget ? {serverTarget: options.serverTarget} : {}), - ...(options.prerenderTarget ? {prerenderTarget: options.prerenderTarget} : {}) - } + }, + configurations: { + production: { + buildTarget: options.buildTarget, + }, + }, + defaultConfiguration: 'production', }; tree.overwrite(workspacePath, JSON.stringify(workspace, null, 2)); diff --git a/src/schematics/setup/prompts.ts b/src/schematics/setup/prompts.ts index b8329fbd5..616df4785 100644 --- a/src/schematics/setup/prompts.ts +++ b/src/schematics/setup/prompts.ts @@ -3,7 +3,8 @@ import * as inquirer from 'inquirer'; import { shortSiteName } from '../common'; import { getFirebaseTools } from '../firebaseTools'; import { FEATURES, FirebaseApp, FirebaseHostingSite, FirebaseProject, PROJECT_TYPE, WorkspaceProject, featureOptions } from '../interfaces'; -import { hasPrerenderOption, isUniversalApp, shortAppId } from '../utils'; +import { isUniversalApp, shortAppId } from '../utils'; +import { spawnSync } from 'child_process'; // eslint-disable-next-line @typescript-eslint/no-var-requires inquirer.registerPrompt('autocomplete', require('inquirer-autocomplete-prompt')); @@ -122,16 +123,15 @@ export const featuresPrompt = async (): Promise => { return features; }; -export const userPrompt = async (options: unknown): Promise> => { +export const userPrompt = async (options: { projectRoot: string }): Promise> => { const firebaseTools = await getFirebaseTools(); - const users = await firebaseTools.login.list(); - if (!users || users.length === 0) { - await firebaseTools.login(); // first login isn't returning anything of value - const user = await firebaseTools.login(options); - return user; + const loginList = await firebaseTools.login.list(); + if (!Array.isArray(loginList) || loginList.length === 0) { + spawnSync('firebase login', { shell: true, cwd: options.projectRoot, stdio: 'inherit' }); + return await firebaseTools.login(options); } else { const defaultUser = await firebaseTools.login(options); - const choices = users.map(({user}) => ({ name: user.email, value: user })); + const choices = loginList.map(({user}) => ({ name: user.email, value: user })); const newChoice = { name: '[Login in with another account]', value: NEW_OPTION }; const { user } = await inquirer.prompt({ type: 'list', @@ -242,14 +242,8 @@ const ALLOWED_SSR_REGIONS = [ ]; export const projectTypePrompt = async (project: WorkspaceProject, name: string) => { - let serverTarget: string|undefined; - let browserTarget = `${name}:build:${project.architect?.build?.defaultConfiguration || 'production'}`; - let prerenderTarget: string|undefined; + const buildTarget = `${name}:build:${project.architect?.build?.defaultConfiguration || 'production'}`; if (isUniversalApp(project)) { - serverTarget = `${name}:server:${project.architect?.server?.defaultConfiguration || 'production'}`; - browserTarget = `${name}:build:${project.architect?.build?.defaultConfiguration || 'production'}`; - const prerender = hasPrerenderOption(project); - prerenderTarget = prerender && `${name}:prerender:${prerender.defaultConfiguration || 'production'}`; const { ssrRegion } = await inquirer.prompt({ type: 'list', name: 'ssrRegion', @@ -257,7 +251,7 @@ export const projectTypePrompt = async (project: WorkspaceProject, name: string) message: 'In which region would you like to host server-side content?', default: DEFAULT_REGION, }) as { ssrRegion: string }; - return { prerender, projectType: PROJECT_TYPE.WebFrameworks, ssrRegion, browserTarget, serverTarget, prerenderTarget }; + return { projectType: PROJECT_TYPE.WebFrameworks, ssrRegion, buildTarget }; } - return { projectType: PROJECT_TYPE.WebFrameworks, browserTarget, serverTarget, prerenderTarget }; + return { projectType: PROJECT_TYPE.WebFrameworks, buildTarget }; };