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 };
};