diff --git a/angular.json b/angular.json
index 4840ea2..e66e8d0 100644
--- a/angular.json
+++ b/angular.json
@@ -31,6 +31,7 @@
"src/assets"
],
"styles": [
+ "@angular/material/prebuilt-themes/azure-blue.css",
"src/styles.scss"
],
"scripts": [],
@@ -93,6 +94,7 @@
"src/assets"
],
"styles": [
+ "@angular/material/prebuilt-themes/azure-blue.css",
"src/styles.scss"
],
"scripts": []
diff --git a/package-lock.json b/package-lock.json
index 84dd6d0..88d8e76 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,14 +9,20 @@
"version": "0.0.0",
"dependencies": {
"@angular/animations": "^18.1.0",
+ "@angular/cdk": "^18.1.2",
"@angular/common": "^18.1.0",
"@angular/compiler": "^18.1.0",
"@angular/core": "^18.1.0",
"@angular/forms": "^18.1.0",
+ "@angular/material": "^18.1.2",
"@angular/platform-browser": "^18.1.0",
"@angular/platform-browser-dynamic": "^18.1.0",
"@angular/router": "^18.1.0",
"@ngneat/falso": "^6.2.0",
+ "@ngrx/effects": "^18.0.1",
+ "@ngrx/router-store": "^18.0.1",
+ "@ngrx/store": "^18.0.1",
+ "@ngrx/store-devtools": "^18.0.1",
"rxjs": "~7.5.0",
"tslib": "^2.3.0",
"zone.js": "~0.14.7"
@@ -25,7 +31,9 @@
"@angular-devkit/build-angular": "^18.1.0",
"@angular/cli": "~18.1.0",
"@angular/compiler-cli": "^18.1.0",
+ "@hirez_io/observer-spy": "^2.2.0",
"@types/jasmine": "~4.3.0",
+ "jasmine-auto-spies": "^8.0.1",
"jasmine-core": "~4.5.0",
"karma": "~6.4.0",
"karma-chrome-launcher": "~3.1.0",
@@ -697,6 +705,22 @@
"fsevents": "~2.3.2"
}
},
+ "node_modules/@angular/cdk": {
+ "version": "18.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.1.2.tgz",
+ "integrity": "sha512-yiAJ/9AMVF2zk7VLEuyJxNJwpV84xLlf0zCaXiYIs6Z8xU6m8N9KR2nqxC59gQc4nTjItmoO/Sgk7XH0X4yGOQ==",
+ "dependencies": {
+ "tslib": "^2.3.0"
+ },
+ "optionalDependencies": {
+ "parse5": "^7.1.2"
+ },
+ "peerDependencies": {
+ "@angular/common": "^18.0.0 || ^19.0.0",
+ "@angular/core": "^18.0.0 || ^19.0.0",
+ "rxjs": "^6.5.3 || ^7.4.0"
+ }
+ },
"node_modules/@angular/cli": {
"version": "18.1.0",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.1.0.tgz",
@@ -824,6 +848,23 @@
"rxjs": "^6.5.3 || ^7.4.0"
}
},
+ "node_modules/@angular/material": {
+ "version": "18.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.1.2.tgz",
+ "integrity": "sha512-B56pofk3WMqqtNww2W33KRbAu69c+aGYFdNFW45DcdIw9OKV1x/HjhyEchSrUOPOXgJFVTYw2HRhp327ONpetw==",
+ "dependencies": {
+ "tslib": "^2.3.0"
+ },
+ "peerDependencies": {
+ "@angular/animations": "^18.0.0 || ^19.0.0",
+ "@angular/cdk": "18.1.2",
+ "@angular/common": "^18.0.0 || ^19.0.0",
+ "@angular/core": "^18.0.0 || ^19.0.0",
+ "@angular/forms": "^18.0.0 || ^19.0.0",
+ "@angular/platform-browser": "^18.0.0 || ^19.0.0",
+ "rxjs": "^6.5.3 || ^7.4.0"
+ }
+ },
"node_modules/@angular/platform-browser": {
"version": "18.1.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.1.0.tgz",
@@ -3024,6 +3065,29 @@
"node": ">=12"
}
},
+ "node_modules/@hirez_io/auto-spies-core": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@hirez_io/auto-spies-core/-/auto-spies-core-3.0.0.tgz",
+ "integrity": "sha512-au7s7/AqPU5CJhv0slVjmZqEv5Uaf2nj7pYFepp5g3B7EocEeNy7bZ74x5RJldHYtW0R8OptV2mZfwaDOfcNCA==",
+ "dev": true,
+ "dependencies": {
+ "javascript-stringify": "2.1.0"
+ },
+ "peerDependencies": {
+ "rxjs": ">=6.0.0 < 8",
+ "typescript": ">=2.8.1"
+ }
+ },
+ "node_modules/@hirez_io/observer-spy": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@hirez_io/observer-spy/-/observer-spy-2.2.0.tgz",
+ "integrity": "sha512-G9nv87vjRILgB/X1AtKBv1DZX7yXSYAOCXon/f+QULKoXVhVehYUF5Lv0SQ97ebf1sA48Z2CyQ9h2v4Pz6DgaQ==",
+ "dev": true,
+ "peerDependencies": {
+ "rxjs": ">=6.0.0",
+ "typescript": ">=2.8.1"
+ }
+ },
"node_modules/@inquirer/checkbox": {
"version": "2.3.10",
"resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.3.10.tgz",
@@ -4245,6 +4309,70 @@
"uuid": "8.3.2"
}
},
+ "node_modules/@ngrx/effects": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-18.0.1.tgz",
+ "integrity": "sha512-ESxJYx31uABixtnWcuDY+HLKyqXKABpPG3LPDMyZrj7lIdjCaTk471QMhRZOme8QQKzlJt0drGfzFo3FM+QYuA==",
+ "dependencies": {
+ "@ngrx/operators": "18.0.1",
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "@angular/core": "^18.0.0",
+ "@ngrx/store": "18.0.1",
+ "rxjs": "^6.5.3 || ^7.5.0"
+ }
+ },
+ "node_modules/@ngrx/operators": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@ngrx/operators/-/operators-18.0.1.tgz",
+ "integrity": "sha512-M+QMrHNKgcuiLaRGZxJ4aQi5/OCRfKC4+T/63dsHyLFZ53/FFpF6a/ytSO1Q+tzOplZ5o99S+i8FVaZqNQ3LmQ==",
+ "dependencies": {
+ "tslib": "^2.3.0"
+ },
+ "peerDependencies": {
+ "rxjs": "^6.5.3 || ^7.4.0"
+ }
+ },
+ "node_modules/@ngrx/router-store": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@ngrx/router-store/-/router-store-18.0.1.tgz",
+ "integrity": "sha512-OrgM6DkYOES7S/NQilxbTk5xtfZTrD3hlM2CsB4TBbV6zvOW0F8HpazcXffFXi9T9y34W1Y4pMzpKHoMTIHF/g==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "@angular/common": "^18.0.0",
+ "@angular/core": "^18.0.0",
+ "@angular/router": "^18.0.0",
+ "@ngrx/store": "18.0.1",
+ "rxjs": "^6.5.3 || ^7.5.0"
+ }
+ },
+ "node_modules/@ngrx/store": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-18.0.1.tgz",
+ "integrity": "sha512-TxZiQz06fGSxQ0clYfzkH4NCr6tfa8A7zqzkvvOOK1ZezOHHsk0vZJJtgxQcKUqAQxPpbp5+Z7YR8P/Fuid7GQ==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "@angular/core": "^18.0.0",
+ "rxjs": "^6.5.3 || ^7.5.0"
+ }
+ },
+ "node_modules/@ngrx/store-devtools": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-18.0.1.tgz",
+ "integrity": "sha512-necHUUcLd41mpObOSuyGQSVyDq4Tb+uejG16WmA6VwXufaUqEl385aumKiS1KLtUP8TQQzogaogaMMDtqtznsQ==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "@ngrx/store": "18.0.1",
+ "rxjs": "^6.5.3 || ^7.5.0"
+ }
+ },
"node_modules/@ngtools/webpack": {
"version": "18.1.0",
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.1.0.tgz",
@@ -6951,7 +7079,7 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">=0.12"
},
@@ -8542,12 +8670,32 @@
"@pkgjs/parseargs": "^0.11.0"
}
},
+ "node_modules/jasmine-auto-spies": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/jasmine-auto-spies/-/jasmine-auto-spies-8.0.1.tgz",
+ "integrity": "sha512-4T8YVS6VJ7VoCdAOqEh3sziD6Wf/m+dfGGQ1a7GZHqjZUjaSD0Be+KqP7CmTiBc3HrX+uvOXr380QIW+TfHhqA==",
+ "dev": true,
+ "dependencies": {
+ "@hirez_io/auto-spies-core": "3.0.0"
+ },
+ "peerDependencies": {
+ "jasmine-core": ">=2.6.0 < 6",
+ "rxjs": ">=6.0.0 < 8",
+ "typescript": ">=2.8.1"
+ }
+ },
"node_modules/jasmine-core": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz",
"integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==",
"dev": true
},
+ "node_modules/javascript-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
+ "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",
+ "dev": true
+ },
"node_modules/jest-worker": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
@@ -10578,6 +10726,18 @@
"node": ">= 0.10"
}
},
+ "node_modules/parse5": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+ "devOptional": true,
+ "dependencies": {
+ "entities": "^4.4.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
"node_modules/parse5-html-rewriting-stream": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz",
@@ -10592,18 +10752,6 @@
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
- "node_modules/parse5-html-rewriting-stream/node_modules/parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
- "dev": true,
- "dependencies": {
- "entities": "^4.4.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
"node_modules/parse5-sax-parser": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz",
@@ -10616,18 +10764,6 @@
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
- "node_modules/parse5-sax-parser/node_modules/parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
- "dev": true,
- "dependencies": {
- "entities": "^4.4.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -13894,6 +14030,15 @@
}
}
},
+ "@angular/cdk": {
+ "version": "18.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.1.2.tgz",
+ "integrity": "sha512-yiAJ/9AMVF2zk7VLEuyJxNJwpV84xLlf0zCaXiYIs6Z8xU6m8N9KR2nqxC59gQc4nTjItmoO/Sgk7XH0X4yGOQ==",
+ "requires": {
+ "parse5": "^7.1.2",
+ "tslib": "^2.3.0"
+ }
+ },
"@angular/cli": {
"version": "18.1.0",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.1.0.tgz",
@@ -13967,6 +14112,14 @@
"tslib": "^2.3.0"
}
},
+ "@angular/material": {
+ "version": "18.1.2",
+ "resolved": "https://registry.npmjs.org/@angular/material/-/material-18.1.2.tgz",
+ "integrity": "sha512-B56pofk3WMqqtNww2W33KRbAu69c+aGYFdNFW45DcdIw9OKV1x/HjhyEchSrUOPOXgJFVTYw2HRhp327ONpetw==",
+ "requires": {
+ "tslib": "^2.3.0"
+ }
+ },
"@angular/platform-browser": {
"version": "18.1.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.1.0.tgz",
@@ -15389,6 +15542,22 @@
"dev": true,
"optional": true
},
+ "@hirez_io/auto-spies-core": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@hirez_io/auto-spies-core/-/auto-spies-core-3.0.0.tgz",
+ "integrity": "sha512-au7s7/AqPU5CJhv0slVjmZqEv5Uaf2nj7pYFepp5g3B7EocEeNy7bZ74x5RJldHYtW0R8OptV2mZfwaDOfcNCA==",
+ "dev": true,
+ "requires": {
+ "javascript-stringify": "2.1.0"
+ }
+ },
+ "@hirez_io/observer-spy": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@hirez_io/observer-spy/-/observer-spy-2.2.0.tgz",
+ "integrity": "sha512-G9nv87vjRILgB/X1AtKBv1DZX7yXSYAOCXon/f+QULKoXVhVehYUF5Lv0SQ97ebf1sA48Z2CyQ9h2v4Pz6DgaQ==",
+ "dev": true,
+ "requires": {}
+ },
"@inquirer/checkbox": {
"version": "2.3.10",
"resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.3.10.tgz",
@@ -16276,6 +16445,47 @@
"uuid": "8.3.2"
}
},
+ "@ngrx/effects": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-18.0.1.tgz",
+ "integrity": "sha512-ESxJYx31uABixtnWcuDY+HLKyqXKABpPG3LPDMyZrj7lIdjCaTk471QMhRZOme8QQKzlJt0drGfzFo3FM+QYuA==",
+ "requires": {
+ "@ngrx/operators": "18.0.1",
+ "tslib": "^2.0.0"
+ }
+ },
+ "@ngrx/operators": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@ngrx/operators/-/operators-18.0.1.tgz",
+ "integrity": "sha512-M+QMrHNKgcuiLaRGZxJ4aQi5/OCRfKC4+T/63dsHyLFZ53/FFpF6a/ytSO1Q+tzOplZ5o99S+i8FVaZqNQ3LmQ==",
+ "requires": {
+ "tslib": "^2.3.0"
+ }
+ },
+ "@ngrx/router-store": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@ngrx/router-store/-/router-store-18.0.1.tgz",
+ "integrity": "sha512-OrgM6DkYOES7S/NQilxbTk5xtfZTrD3hlM2CsB4TBbV6zvOW0F8HpazcXffFXi9T9y34W1Y4pMzpKHoMTIHF/g==",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
+ "@ngrx/store": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-18.0.1.tgz",
+ "integrity": "sha512-TxZiQz06fGSxQ0clYfzkH4NCr6tfa8A7zqzkvvOOK1ZezOHHsk0vZJJtgxQcKUqAQxPpbp5+Z7YR8P/Fuid7GQ==",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
+ "@ngrx/store-devtools": {
+ "version": "18.0.1",
+ "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-18.0.1.tgz",
+ "integrity": "sha512-necHUUcLd41mpObOSuyGQSVyDq4Tb+uejG16WmA6VwXufaUqEl385aumKiS1KLtUP8TQQzogaogaMMDtqtznsQ==",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
"@ngtools/webpack": {
"version": "18.1.0",
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.1.0.tgz",
@@ -18310,7 +18520,7 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true
+ "devOptional": true
},
"env-paths": {
"version": "2.2.1",
@@ -19481,12 +19691,27 @@
"@pkgjs/parseargs": "^0.11.0"
}
},
+ "jasmine-auto-spies": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/jasmine-auto-spies/-/jasmine-auto-spies-8.0.1.tgz",
+ "integrity": "sha512-4T8YVS6VJ7VoCdAOqEh3sziD6Wf/m+dfGGQ1a7GZHqjZUjaSD0Be+KqP7CmTiBc3HrX+uvOXr380QIW+TfHhqA==",
+ "dev": true,
+ "requires": {
+ "@hirez_io/auto-spies-core": "3.0.0"
+ }
+ },
"jasmine-core": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz",
"integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==",
"dev": true
},
+ "javascript-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
+ "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",
+ "dev": true
+ },
"jest-worker": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
@@ -20983,6 +21208,15 @@
"integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
"dev": true
},
+ "parse5": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+ "devOptional": true,
+ "requires": {
+ "entities": "^4.4.0"
+ }
+ },
"parse5-html-rewriting-stream": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz",
@@ -20992,17 +21226,6 @@
"entities": "^4.3.0",
"parse5": "^7.0.0",
"parse5-sax-parser": "^7.0.0"
- },
- "dependencies": {
- "parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
- "dev": true,
- "requires": {
- "entities": "^4.4.0"
- }
- }
}
},
"parse5-sax-parser": {
@@ -21012,17 +21235,6 @@
"dev": true,
"requires": {
"parse5": "^7.0.0"
- },
- "dependencies": {
- "parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
- "dev": true,
- "requires": {
- "entities": "^4.4.0"
- }
- }
}
},
"parseurl": {
diff --git a/package.json b/package.json
index 5290450..a6b74bd 100644
--- a/package.json
+++ b/package.json
@@ -11,14 +11,20 @@
"private": true,
"dependencies": {
"@angular/animations": "^18.1.0",
+ "@angular/cdk": "^18.1.2",
"@angular/common": "^18.1.0",
"@angular/compiler": "^18.1.0",
"@angular/core": "^18.1.0",
"@angular/forms": "^18.1.0",
+ "@angular/material": "^18.1.2",
"@angular/platform-browser": "^18.1.0",
"@angular/platform-browser-dynamic": "^18.1.0",
"@angular/router": "^18.1.0",
"@ngneat/falso": "^6.2.0",
+ "@ngrx/effects": "^18.0.1",
+ "@ngrx/router-store": "^18.0.1",
+ "@ngrx/store": "^18.0.1",
+ "@ngrx/store-devtools": "^18.0.1",
"rxjs": "~7.5.0",
"tslib": "^2.3.0",
"zone.js": "~0.14.7"
@@ -27,7 +33,9 @@
"@angular-devkit/build-angular": "^18.1.0",
"@angular/cli": "~18.1.0",
"@angular/compiler-cli": "^18.1.0",
+ "@hirez_io/observer-spy": "^2.2.0",
"@types/jasmine": "~4.3.0",
+ "jasmine-auto-spies": "^8.0.1",
"jasmine-core": "~4.5.0",
"karma": "~6.4.0",
"karma-chrome-launcher": "~3.1.0",
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 0c03e65..063278b 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -1,6 +1,8 @@
-
-
-
{{ product | json }}
+
+
\ No newline at end of file
+
diff --git a/src/app/app.component.scss b/src/app/app.component.scss
index a1e7d11..6a573c2 100644
--- a/src/app/app.component.scss
+++ b/src/app/app.component.scss
@@ -1,29 +1,64 @@
-.stage {
- width: 50%;
- min-width: 360px;
- max-width: 1400px;
- margin: 0 auto;
- padding: 4rem;
- background-color: #fff;
+.loader {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ width: 100%;
+ height: 100vh;
+ background-color: var(--loader-container-background-color);
+ display: flex;
+ flex-direction: column;
+ flex-wrap: nowrap;
+ align-content: space-around;
+ justify-content: center;
+ align-items: center;
+ z-index: 999;
+
+ &__spinner {
+ width: 48px;
+ height: 48px;
+ background: var(--loader-spinner-circle-color);
+ border-radius: 50%;
+
+ animation: spin 3s infinite linear;
+
+ > div {
+ width: 48px;
+ height: 12px;
+ background: var(--loader-spinner-arm-color);
+ position: relative;
+ top: 18px;
+ left: 18px;
+ }
+ }
}
-pre {
- overflow: auto;
- background-color: #f2f4f7;
- padding: 1rem;
+@keyframes spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
}
-.more {
- font: inherit;
- display: block;
- margin: 4rem auto 0;
- border: 1px solid #d7dbe0;
- border-radius: .25rem;
- padding: 1rem 2rem;
- background-color: #fff;
- cursor: pointer;
+.main {
- &:hover, &:focus {
- background-color: #ebecf0;
+ overflow: overlay;
+ height: 100vh;
+ justify-content: flex-start;
+ display: flex;
+ position: relative;
+
+ .main__container {
+ width: 50%;
+ min-width: 360px;
+ max-width: 1400px;
+ min-height: 100vh;
+ height: max-content;
+ margin: 0 auto;
+ padding: 4rem;
+ background-color: var(--main-background-color);
}
-}
\ No newline at end of file
+}
diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts
index 77ac082..c2d5f83 100644
--- a/src/app/app.component.spec.ts
+++ b/src/app/app.component.spec.ts
@@ -1,11 +1,34 @@
-import { TestBed } from '@angular/core/testing';
+import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
import { AppComponent } from './app.component';
+import { RouterModule } from '@angular/router';
+import { StoreModule } from '@ngrx/store';
+import * as ProductSelectors from './store/product/product.selectors';
+import { MockStore, provideMockStore } from '@ngrx/store/testing';
+import { subscribeSpyTo } from '@hirez_io/observer-spy';
+import { ProductState } from './store/product/product.reducer';
+import { By } from '@angular/platform-browser';
describe('AppComponent', () => {
+ let component: AppComponent;
+ let fixture: ComponentFixture
;
+ let store: MockStore;
+
+ const initialState: ProductState = { productsPage: { content: [], more: false }, page: 0, isLoading: false, hasError: false };
+
beforeEach(async () => {
await TestBed.configureTestingModule({
- declarations: [AppComponent]
+ declarations: [AppComponent],
+ imports: [
+ RouterModule,
+ StoreModule.forRoot({})
+ ],
+ providers: [provideMockStore({ initialState })]
}).compileComponents();
+
+ fixture = TestBed.createComponent(AppComponent);
+ component = fixture.componentInstance;
+
+ store = TestBed.inject(MockStore);
});
it('should create the app', () => {
@@ -13,4 +36,46 @@ describe('AppComponent', () => {
const app = fixture.componentInstance;
expect(app).toBeTruthy();
});
+
+ it(`should output the correct value from isLoading$ store selector`, () => {
+
+ store.overrideSelector(ProductSelectors.selectIsLoading, true);
+
+ const observerSpy = subscribeSpyTo(component.isLoading$);
+
+ const isLoading = observerSpy.getLastValue();
+ expect(isLoading).toEqual(true);
+
+ observerSpy.unsubscribe();
+ });
+
+ it(`should show loader when store emits that it's loading`, fakeAsync(() => {
+
+ store.overrideSelector(ProductSelectors.selectIsLoading, true);
+
+ const observerSpy = subscribeSpyTo(component.isLoading$);
+
+ tick(250);
+ fixture.detectChanges();
+
+ const el = fixture.debugElement.query(By.css('.loader'));
+ expect(el).toBeTruthy();
+
+ observerSpy.unsubscribe();
+ }));
+
+ it(`should not show loader when store emits that it's not loading`, fakeAsync(() => {
+
+ store.overrideSelector(ProductSelectors.selectIsLoading, false);
+
+ const observerSpy = subscribeSpyTo(component.isLoading$);
+
+ tick(250);
+ fixture.detectChanges();
+
+ const el = fixture.debugElement.query(By.css('.loader'));
+ expect(el).toBeFalsy();
+
+ observerSpy.unsubscribe();
+ }));
});
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 06f5ba9..43e4b3b 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -1,16 +1,17 @@
import { Component } from '@angular/core';
+import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';
-import { Page } from './products/page';
-import { Product } from './products/product';
-import { ProductService } from './products/product.service';
+import * as ProductSelectors from './store/product/product.selectors';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
- styleUrls: ['./app.component.scss']
+ styleUrls: ['./app.component.scss'],
})
export class AppComponent {
- constructor(private readonly productService: ProductService) {}
- readonly products$: Observable> = this.productService.get(0);
+ readonly isLoading$: Observable = this.store
+ .select(ProductSelectors.selectIsLoading);
+
+ constructor(private readonly store: Store) {}
}
diff --git a/src/app/app.constants.ts b/src/app/app.constants.ts
new file mode 100644
index 0000000..a438439
--- /dev/null
+++ b/src/app/app.constants.ts
@@ -0,0 +1 @@
+export const SNACKBAR_ERROR_DURATION: number = 300000;
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 5e2c2c3..1683097 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -1,11 +1,64 @@
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
+import { MAT_SNACK_BAR_DEFAULT_OPTIONS, MatSnackBarModule } from '@angular/material/snack-bar';
import { BrowserModule } from '@angular/platform-browser';
+import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
+import { RouterModule } from '@angular/router';
+import { EffectsModule } from '@ngrx/effects';
+import { routerReducer, StoreRouterConnectingModule } from '@ngrx/router-store';
+import { StoreModule } from '@ngrx/store';
+import { StoreDevtoolsModule } from '@ngrx/store-devtools';
import { AppComponent } from './app.component';
+import { ProductsComponent } from './components/products-list/products.component';
+import { ProductEffects } from './store/product/product.effects';
+import * as ProductStore from "./store/product/product.reducer";
+import { SNACKBAR_ERROR_DURATION } from './app.constants';
+
+const material = [
+ MatSnackBarModule,
+];
@NgModule({
- imports: [BrowserModule, CommonModule],
+ imports: [
+ BrowserModule,
+ CommonModule,
+ ProductsComponent,
+ material,
+ RouterModule.forRoot([
+ {
+ path: "",
+ component: ProductsComponent,
+ },
+ {
+ path: "**",
+ redirectTo: "",
+ pathMatch: "full",
+ },
+ ]),
+ StoreModule.forRoot({
+ "router": routerReducer,
+ }),
+ StoreRouterConnectingModule.forRoot(),
+ StoreModule.forFeature(ProductStore.FEATURE_KEY, ProductStore.productReducer),
+ StoreDevtoolsModule.instrument({
+ maxAge: 25, // Retains last 25 states
+ logOnly: false
+ }),
+ EffectsModule.forRoot([ProductEffects]),
+ ],
declarations: [AppComponent],
- bootstrap: [AppComponent]
+ bootstrap: [AppComponent],
+ providers: [
+ provideAnimationsAsync(),
+ {
+ provide: MAT_SNACK_BAR_DEFAULT_OPTIONS,
+ useValue: {
+ horizontalPosition: 'left',
+ verticalPosition: 'top',
+ panelClass: 'snackbar__error',
+ duration: SNACKBAR_ERROR_DURATION,
+ },
+ },
+ ],
})
export class AppModule {}
diff --git a/src/app/components/product-card/product-card.component.html b/src/app/components/product-card/product-card.component.html
new file mode 100644
index 0000000..d3f4c14
--- /dev/null
+++ b/src/app/components/product-card/product-card.component.html
@@ -0,0 +1,17 @@
+
+
![]()
+
+
+{{ product.title }}
+
+
+
{{ product.description }}
+
+
+
+
+ {{ category }}
+
+
diff --git a/src/app/components/product-card/product-card.component.scss b/src/app/components/product-card/product-card.component.scss
new file mode 100644
index 0000000..9fc721d
--- /dev/null
+++ b/src/app/components/product-card/product-card.component.scss
@@ -0,0 +1,100 @@
+.card {
+ box-sizing: border-box;
+ min-width: 16rem;
+ border: 1px solid var(--card-border-color);
+ border-radius: 8px;
+ flex: 1 0 calc(25% - 1rem);
+
+ transition: box-shadow 0.3s ease-in-out;
+ min-height: 150px;
+
+ display: flex;
+ flex-direction: column;
+
+ &__image {
+ flex: 1 0 37%;
+
+ img {
+ width: 100%;
+ height: 100%;
+ border-top-left-radius: 8px;
+ border-top-right-radius: 8px;
+ aspect-ratio: 2 / 1;
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-clip: content-box;
+ }
+ }
+
+ &__title {
+ margin-top: 0.5rem;
+ padding: 0.5rem 1rem;
+
+ font-weight: 400;
+ font-size: 1.3rem;
+ color: var(--card-text-color);
+
+ flex: 0 1 10%;
+ }
+
+ &__description {
+ padding: 0.5rem 1rem;
+ max-height: 150px;
+
+ flex: 0 1 20%;
+
+ > p {
+ display: -webkit-box;
+ -webkit-line-clamp: 3;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ text-overflow: ellipsis;
+
+ font-size: 0.9rem;
+ font-weight: 500;
+ color: var(--card-text-color);
+ }
+ }
+
+ &__categories {
+ padding: 0.5rem 1rem;
+
+ display: flex;
+ gap: 0.5rem;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: flex-end;
+ flex: 1 1 33%;
+ row-gap: 0;
+ align-content: flex-end;
+ }
+
+ &__category {
+ border: 1px solid var(--card-category-border-color);
+ border-radius: 0.25rem;
+ padding: 0.25rem 0.5rem;
+
+ color: var(--card-category-color);
+ font-size: 0.8rem;
+ font-weight: 500;
+
+ margin-top: 0.5rem;
+ max-height: 1.8rem;
+ }
+
+ &:hover {
+ cursor: pointer;
+ box-shadow: 0 4px 8px var(--card-category-box-shadow-color);
+ }
+
+ &--empty {
+ box-sizing: border-box;
+ min-width: 16rem;
+ flex: 1 0 calc(25% - 1rem);
+ display: flex;
+ flex-direction: column;
+ border: none;
+ min-height: auto;
+ }
+}
diff --git a/src/app/components/product-card/product-card.component.spec.ts b/src/app/components/product-card/product-card.component.spec.ts
new file mode 100644
index 0000000..0499734
--- /dev/null
+++ b/src/app/components/product-card/product-card.component.spec.ts
@@ -0,0 +1,37 @@
+import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
+
+import { ProductCardComponent } from './product-card.component';
+import { Product } from 'src/app/products';
+import { By } from '@angular/platform-browser';
+
+describe('ProductCardComponent', () => {
+ let component: ProductCardComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ProductCardComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ProductCardComponent);
+ component = fixture.componentInstance;
+ component.product = {} as Product;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+
+ it('should set default image on error', fakeAsync(() => {
+
+ const imgDebugElement = fixture.debugElement.query(By.css('img'));
+ const imgElement: HTMLImageElement = imgDebugElement.nativeElement;
+
+ imgDebugElement.triggerEventHandler('error', null);
+ fixture.detectChanges();
+
+ expect(imgElement.src).toContain('assets/images/placeholder-2-1.png');
+ }));
+});
diff --git a/src/app/components/product-card/product-card.component.ts b/src/app/components/product-card/product-card.component.ts
new file mode 100644
index 0000000..d9800dc
--- /dev/null
+++ b/src/app/components/product-card/product-card.component.ts
@@ -0,0 +1,33 @@
+import { CommonModule } from '@angular/common';
+import {
+ Component,
+ HostBinding,
+ Input,
+ signal,
+ ViewEncapsulation,
+} from '@angular/core';
+import { Product } from 'src/app/products';
+
+@Component({
+ selector: 'app-product-card',
+ standalone: true,
+ imports: [CommonModule],
+ templateUrl: './product-card.component.html',
+ styleUrl: './product-card.component.scss',
+ encapsulation: ViewEncapsulation.None,
+})
+export class ProductCardComponent {
+ @HostBinding('class') class = 'card';
+
+ @Input() product!: Product;
+
+ imageSrc = signal('');
+
+ ngOnInit(): void {
+ this.imageSrc.set(this.product.image);
+ }
+
+ setDefaultPic(): void {
+ this.imageSrc.set('assets/images/placeholder-2-1.png');
+ }
+}
diff --git a/src/app/components/products-list/products.component.html b/src/app/components/products-list/products.component.html
new file mode 100644
index 0000000..2dbc53f
--- /dev/null
+++ b/src/app/components/products-list/products.component.html
@@ -0,0 +1,28 @@
+
+
+
+
+ Sorry for the inconvenience, the server is currently busy. Please try again later.
+
+
+
+
diff --git a/src/app/components/products-list/products.component.scss b/src/app/components/products-list/products.component.scss
new file mode 100644
index 0000000..88602c4
--- /dev/null
+++ b/src/app/components/products-list/products.component.scss
@@ -0,0 +1,42 @@
+.products {
+
+ * {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ }
+
+ &__container {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1rem;
+ }
+
+ &__error-container {
+ display: flex;
+ flex-wrap: nowrap;
+ flex-direction: row;
+ justify-content: center;
+ align-content: flex-end;
+ align-items: flex-end;
+
+ > p {
+ padding: 2rem;
+ }
+ }
+
+ &__button {
+ font: inherit;
+ display: block;
+ margin: 4rem auto 0;
+ border: 1px solid var(--products-button-border-color);
+ border-radius: .25rem;
+ padding: 1rem 2rem;
+ background-color: var(--products-button-background-color);
+ cursor: pointer;
+
+ &:hover, &:focus {
+ background-color: var(--products-button-hover-and-focus-background-color);
+ }
+ }
+}
diff --git a/src/app/components/products-list/products.component.spec.ts b/src/app/components/products-list/products.component.spec.ts
new file mode 100644
index 0000000..514c207
--- /dev/null
+++ b/src/app/components/products-list/products.component.spec.ts
@@ -0,0 +1,127 @@
+import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+import { ObserverSpy, subscribeSpyTo } from '@hirez_io/observer-spy';
+import { Store, StoreModule } from '@ngrx/store';
+import { MockStore, provideMockStore } from '@ngrx/store/testing';
+import { provideAutoSpy } from 'jasmine-auto-spies';
+import { Product } from 'src/app/products';
+import { ProductState } from 'src/app/store/product/product.reducer';
+import * as ProductActions from '../../store/product/product.actions';
+import * as ProductSelectors from '../../store/product/product.selectors';
+import { ProductsComponent } from './products.component';
+
+describe('ProductsComponent', () => {
+ let component: ProductsComponent;
+ let fixture: ComponentFixture;
+ let dispatchSpy: jasmine.Spy;
+ let store: MockStore;
+ let observerSpy: ObserverSpy;
+
+ const productsContent = [
+ {
+ title: 'Product 1',
+ image: null,
+ categories: [],
+ description: '',
+ url: '',
+ },
+ ];
+ const initialState: ProductState = { productsPage: { content: [], more: false }, page: 0, isLoading: false, hasError: false };
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ProductsComponent, StoreModule.forRoot({})],
+ providers: [provideAutoSpy(Store), provideMockStore({ initialState })],
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(ProductsComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+
+ store = TestBed.inject(MockStore);
+ dispatchSpy = spyOn(store, 'dispatch').and.callThrough();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+
+ describe('product$ observable', () => {
+
+ it('should output the correct products from products$ observable', () => {
+ store.overrideSelector(ProductSelectors.selectProductsPage, {
+ content: productsContent,
+ more: true,
+ });
+ observerSpy = subscribeSpyTo(component.products$);
+
+ const products = observerSpy.getLastValue();
+
+ expect(products).toEqual([
+ {
+ title: 'Product 1',
+ image: null,
+ categories: [],
+ description: '',
+ url: '',
+ },
+ ]);
+ });
+ });
+
+ describe('canLoadMore()', () => {
+ it('should be able to load more when product page can provide more products', () => {
+ store.overrideSelector(ProductSelectors.selectProductsPage, {
+ content: productsContent,
+ more: true,
+ });
+ observerSpy = subscribeSpyTo(component.products$);
+
+ observerSpy.getLastValue();
+
+ expect(component.canLoadMore()).toEqual(true);
+ });
+
+ it('should not be able to load more when product page cant provide any more products', () => {
+ store.overrideSelector(ProductSelectors.selectProductsPage, {
+ content: productsContent,
+ more: false,
+ });
+ observerSpy = subscribeSpyTo(component.products$);
+
+ observerSpy.getLastValue();
+
+ expect(component.canLoadMore()).toEqual(false);
+ });
+
+ it('should not be able to load more when product page is undefined', () => {
+ store.overrideSelector(ProductSelectors.selectProductsPage, undefined);
+ observerSpy = subscribeSpyTo(component.products$);
+
+ observerSpy.getLastValue();
+
+ expect(component.canLoadMore()).toEqual(false);
+ });
+ });
+
+ it('should dispatch loadMoreProducts action when loadMore button is pressed', fakeAsync(() => {
+ component.canLoadMore.set(true);
+
+ tick();
+ fixture.detectChanges();
+
+ const el = fixture.debugElement.query(By.css('.products__button'));
+ el.nativeElement.click();
+
+ expect(dispatchSpy).toHaveBeenCalledWith(ProductActions.loadMoreProducts());
+ }));
+
+ it('should calculate lastRowExtraCount corectly', () => {
+
+ let lastRowExtraCount = (component as any).getLastRowExtraCount(5, 952, 305);
+ expect(lastRowExtraCount).toEqual(1);
+
+ lastRowExtraCount = (component as any).getLastRowExtraCount(5, 1256, 302);
+ expect(lastRowExtraCount).toEqual(3);
+ });
+});
diff --git a/src/app/components/products-list/products.component.ts b/src/app/components/products-list/products.component.ts
new file mode 100644
index 0000000..7e985e0
--- /dev/null
+++ b/src/app/components/products-list/products.component.ts
@@ -0,0 +1,86 @@
+import { CommonModule } from '@angular/common';
+import {
+ Component,
+ ElementRef,
+ HostBinding,
+ HostListener,
+ signal,
+ ViewChild,
+ ViewEncapsulation,
+} from '@angular/core';
+import { Store } from '@ngrx/store';
+import { debounceTime, filter, map, Observable, Subject, tap } from 'rxjs';
+import { Product } from '../../products';
+import * as ProductActions from '../../store/product/product.actions';
+import * as ProductSelectors from '../../store/product/product.selectors';
+import { ProductCardComponent } from '../product-card/product-card.component';
+
+@Component({
+ selector: 'app-products',
+ standalone: true,
+ imports: [CommonModule, ProductCardComponent],
+ templateUrl: './products.component.html',
+ styleUrl: './products.component.scss',
+ encapsulation: ViewEncapsulation.None,
+})
+export class ProductsComponent {
+ @HostBinding('class') class = 'products';
+
+ @ViewChild('containerRef') containerRef!: ElementRef;
+
+ @HostListener('window:resize', ['$event'])
+ onResize(_: any) {
+ this.fixLastRow$.next(true);
+ }
+
+ readonly hasError$ = this.store.select(ProductSelectors.selectHasError);
+
+ readonly products$: Observable = this.store
+ .select(ProductSelectors.selectProductsPage)
+ .pipe(
+ tap((productsPage) => {
+ this.canLoadMore.set(!productsPage ? false: productsPage.more);
+ this.count = !productsPage ? 0 : productsPage.content.length;
+ }),
+ map((productsPage) => productsPage?.content),
+ tap(() => this.fixLastRow$.next(true))
+ );
+
+ readonly fixLastRow$ = new Subject();
+
+ canLoadMore = signal(false);
+ lastRowExtras = signal([]);
+
+ private count = 0;
+
+ constructor(private readonly store: Store) {
+ this.fixLastRow$
+ .pipe(
+ debounceTime(25),
+ filter(() => this.count > 0),
+ map(() => ({
+ count: this.count,
+ containerWidth: this.containerRef.nativeElement.clientWidth,
+ cardWidth: this.containerRef.nativeElement.firstChild.clientWidth
+ }))
+ ).subscribe((payload) => {
+ const lastRowExtraCount = this.getLastRowExtraCount(payload.count, payload.containerWidth, payload.cardWidth);
+ this.lastRowExtras.set(lastRowExtraCount > 0 ? new Array(lastRowExtraCount) : undefined);
+ });
+ }
+
+ goToProduct(url: string): void {
+ window.open(url, '_blank');
+ }
+
+ loadMore(): void {
+ this.store.dispatch(ProductActions.loadMoreProducts());
+ }
+
+ private getLastRowExtraCount(count: number, containerWidth: number, cardWidth: number): number {
+ const cardsPerRow = Math.floor(containerWidth / cardWidth);
+ const lastRowCount = count % cardsPerRow;
+ const lastRowExtraCount = cardsPerRow - lastRowCount;
+ return lastRowExtraCount === cardsPerRow ? 0 : lastRowExtraCount;
+ }
+}
diff --git a/src/app/products/index.ts b/src/app/products/index.ts
new file mode 100644
index 0000000..db7e84c
--- /dev/null
+++ b/src/app/products/index.ts
@@ -0,0 +1,3 @@
+export * from "./page";
+export * from "./product.service";
+export * from "./product";
diff --git a/src/app/products/product.service.ts b/src/app/products/product.service.ts
index cafcceb..9e50b55 100644
--- a/src/app/products/product.service.ts
+++ b/src/app/products/product.service.ts
@@ -23,10 +23,10 @@ export class ProductService {
/**
* Get a page of products.
- *
+ *
* *Note:* This is a fake service that returns random data. It simulates a
* network request by delaying the response and randomly returning an error.
- *
+ *
* @param page The page number.
* @returns An observable of the page of products.
*/
diff --git a/src/app/store/product/product.actions.ts b/src/app/store/product/product.actions.ts
new file mode 100644
index 0000000..ab7bdb0
--- /dev/null
+++ b/src/app/store/product/product.actions.ts
@@ -0,0 +1,61 @@
+import { createAction, props } from '@ngrx/store';
+import { Page, Product } from 'src/app/products';
+
+export enum ProductActionTypes {
+ LOAD_PRODUCTS = '[Product] Load Products',
+ LOAD_PRODUCTS_SUCCESS = '[Product] Load Products Success',
+ SET_IS_LOADING = '[Product] Set Is Loading',
+ SET_PAGE = '[Product] Set Page',
+ RESET_PRODUCTS_PAGE = '[Product] Reset Products Page',
+ LOAD_MORE_PRODUCTS = '[Product] Load More Products',
+ LOAD_MORE_PRODUCTS_SUCCESS = '[Product] Load More Products Success',
+ SET_PRODUCTS_ERROR = '[Product] Set Products Error',
+ SET_HAS_ERROR = '[Product] Set Has Error',
+}
+
+export const loadProducts = createAction(
+ ProductActionTypes.LOAD_PRODUCTS,
+ props<{ page: number }>()
+);
+
+export const loadProductsSuccess = createAction(
+ ProductActionTypes.LOAD_PRODUCTS_SUCCESS,
+ props<{ productsPage: Page }>()
+);
+
+export const setIsLoading = createAction(
+ ProductActionTypes.SET_IS_LOADING,
+ props<{
+ isLoading: boolean;
+ }>()
+);
+
+export const setPage = createAction(
+ ProductActionTypes.SET_PAGE,
+ props<{
+ page: number;
+ }>()
+);
+
+export const resetProductsPage = createAction(
+ ProductActionTypes.RESET_PRODUCTS_PAGE
+);
+
+export const loadMoreProducts = createAction(
+ ProductActionTypes.LOAD_MORE_PRODUCTS
+);
+
+export const loadMoreProductsSuccess = createAction(
+ ProductActionTypes.LOAD_MORE_PRODUCTS_SUCCESS,
+ props<{ productsPage: Page }>()
+);
+
+export const setProductsError = createAction(
+ ProductActionTypes.SET_PRODUCTS_ERROR,
+ props<{ err: string }>()
+);
+
+export const setHasError = createAction(
+ ProductActionTypes.SET_HAS_ERROR,
+ props<{ value: boolean }>()
+);
diff --git a/src/app/store/product/product.effects.spec.ts b/src/app/store/product/product.effects.spec.ts
new file mode 100644
index 0000000..12ce1d1
--- /dev/null
+++ b/src/app/store/product/product.effects.spec.ts
@@ -0,0 +1,123 @@
+import { TestBed } from '@angular/core/testing';
+import { EventType } from '@angular/router';
+import { subscribeSpyTo } from '@hirez_io/observer-spy';
+import { provideMockActions } from '@ngrx/effects/testing';
+import { routerNavigatedAction } from '@ngrx/router-store';
+import { provideMockStore } from '@ngrx/store/testing';
+import { createSpyFromClass, Spy } from 'jasmine-auto-spies';
+import { Observable, of } from 'rxjs';
+import { ProductService } from 'src/app/products';
+import * as ProductActions from '../product/product.actions';
+import * as ProductSelectors from '../product/product.selectors';
+import { ProductEffects } from './product.effects';
+import { ProductState } from './product.reducer';
+
+describe('ProductEffects', () => {
+ let actions$: Observable;
+ let effects: ProductEffects;
+ let productServiceSpy: Spy;
+
+ const initialState: ProductState = { productsPage: { content: [], more: false }, page: 0, isLoading: false, hasError: false };
+
+ beforeEach(() => {
+ productServiceSpy = createSpyFromClass(ProductService);
+
+ TestBed.configureTestingModule({
+ providers: [
+ ProductEffects,
+ provideMockActions(() => actions$),
+ provideMockStore({
+ selectors: [
+ {
+ selector: ProductSelectors.selectPage,
+ value: 0,
+ },
+ ],
+ }),
+ { provide: ProductService, useValue: productServiceSpy },
+ ],
+ });
+
+ effects = TestBed.inject(ProductEffects);
+ });
+
+ it('should dispatch setIsLoading, resetProductsPage and loadProducts on router navigated to "/"', async () => {
+ actions$ = of(routerNavigatedAction({
+ payload: {
+ routerState: {} as any,
+ event: { url: '/', id: 1, type: EventType.NavigationEnd, urlAfterRedirects: '' }
+ }
+ }));
+ const observerSpy = subscribeSpyTo(effects.loadInitialProducts$);
+
+ await observerSpy.onComplete();
+
+ expect(observerSpy.getValues()).toEqual([
+ ProductActions.setIsLoading({ isLoading: true }),
+ ProductActions.resetProductsPage(),
+ ProductActions.loadProducts({ page: 0 }),
+ ]);
+ });
+
+ it("should select the loading from store", () => {
+ const result = ProductSelectors.selectIsLoading.projector(initialState);
+ expect(result).toEqual(false);
+ });
+
+ it("should select the page from store", () => {
+ const result = ProductSelectors.selectPage.projector(initialState);
+ expect(result).toEqual(0);
+ });
+
+ it("should select the products page from store", () => {
+ const result = ProductSelectors.selectProductsPage.projector(initialState);
+ expect(result?.content).toEqual([]);
+ });
+
+ it('should dispatch loadProductsSuccess when loadProducts is triggered', async () => {
+ const mockProductsPage = { content: [], more: false };
+ productServiceSpy.get.and.returnValue(of(mockProductsPage));
+ actions$ = of(ProductActions.loadProducts({ page: 0 }));
+ const observerSpy = subscribeSpyTo(effects.loadProducts$);
+
+ await observerSpy.onComplete();
+
+ expect(observerSpy.getValues()).toEqual([
+ ProductActions.setIsLoading({ isLoading: false }),
+ ProductActions.loadProductsSuccess({ productsPage: mockProductsPage }),
+ ]);
+ });
+
+ it('should dispatch setPage and loadMoreProductsSuccess when loadMoreProducts is triggered', async () => {
+ const mockProductsPage = { content: [], more: false };
+ productServiceSpy.get.and.returnValue(of(mockProductsPage));
+ actions$ = of(ProductActions.loadMoreProducts());
+ const observerSpy = subscribeSpyTo(effects.loadMoreProducts$);
+
+ await observerSpy.onComplete();
+
+ expect(observerSpy.getValues()).toEqual([
+ ProductActions.setIsLoading({ isLoading: false }),
+ ProductActions.setPage({ page: 1 }),
+ ProductActions.loadMoreProductsSuccess({ productsPage: mockProductsPage }),
+ ]);
+ });
+
+ it('should select the page from the store and call productService.get with incremented page', async () => {
+ const mockProductsPage = { content: [], more: false };
+ productServiceSpy.get.and.returnValue(of(mockProductsPage));
+
+ actions$ = of(ProductActions.loadMoreProducts());
+
+ const observerSpy = subscribeSpyTo(effects.loadMoreProducts$);
+
+ await observerSpy.onComplete();
+
+ expect(productServiceSpy.get).toHaveBeenCalledWith(1);
+ expect(observerSpy.getValues()).toEqual([
+ ProductActions.setIsLoading({ isLoading: false }),
+ ProductActions.setPage({ page: 1 }),
+ ProductActions.loadMoreProductsSuccess({ productsPage: mockProductsPage }),
+ ]);
+ });
+});
diff --git a/src/app/store/product/product.effects.ts b/src/app/store/product/product.effects.ts
new file mode 100644
index 0000000..14cf193
--- /dev/null
+++ b/src/app/store/product/product.effects.ts
@@ -0,0 +1,86 @@
+import { Injectable } from '@angular/core';
+import { MatSnackBar } from '@angular/material/snack-bar';
+import { Actions, createEffect, ofType } from '@ngrx/effects';
+import {
+ routerNavigatedAction
+} from '@ngrx/router-store';
+import { Store } from '@ngrx/store';
+import { catchError, filter, map, mergeMap, of, switchMap, tap, withLatestFrom } from 'rxjs';
+import { ProductService } from 'src/app/products';
+import * as ProductActions from '../product/product.actions';
+import * as ProductSelectors from '../product/product.selectors';
+
+@Injectable()
+export class ProductEffects {
+ loadInitialProducts$ = createEffect(() =>
+ this.actions$.pipe(
+ ofType(routerNavigatedAction),
+ filter((action) => action.payload.event.url === '/'),
+ switchMap(() => [
+ ProductActions.setIsLoading({ isLoading: true }),
+ ProductActions.resetProductsPage(),
+ ProductActions.loadProducts({ page: 0 })
+ ])
+ )
+ );
+
+ loadProducts$ = createEffect(() =>
+ this.actions$.pipe(
+ ofType(ProductActions.loadProducts),
+ switchMap((payload) =>
+ this.productService
+ .get(payload.page)
+ .pipe(
+ catchError(err => {
+ this.store.dispatch(ProductActions.setProductsError({ err }));
+ return of({ content: [], more: false });
+ }),
+ mergeMap((response) => [
+ ProductActions.setIsLoading({ isLoading: false }),
+ ProductActions.loadProductsSuccess({ productsPage: response })
+ ]
+ )
+ )
+ )
+ )
+ );
+
+ loadMoreProducts$ = createEffect(() =>
+ this.actions$.pipe(
+ ofType(ProductActions.loadMoreProducts),
+ withLatestFrom(this.store.select(ProductSelectors.selectPage)),
+ tap(() => this.store.dispatch(ProductActions.setIsLoading({ isLoading: true }))),
+ map(([_, page]) => (page + 1)),
+ switchMap((page) =>
+ this.productService
+ .get(page)
+ .pipe(
+ catchError(err => {
+ this.store.dispatch(ProductActions.setProductsError({ err }));
+ return of({ content: [], more: false });
+ }),
+ mergeMap((response) => [
+ ProductActions.setIsLoading({ isLoading: false }),
+ ProductActions.setPage({ page }),
+ ProductActions.loadMoreProductsSuccess({ productsPage: response })
+ ])
+ )
+ )
+ )
+ );
+
+ loadProductsError$ = createEffect(() =>
+ this.actions$.pipe(
+ ofType(ProductActions.setProductsError),
+ tap(payload => this.snackBar.open(payload.err, 'Close')),
+ switchMap(() => of(ProductActions.setHasError({ value: true })))
+ )
+ );
+
+ constructor(
+ private store: Store,
+ private actions$: Actions,
+ private snackBar: MatSnackBar,
+ private productService: ProductService
+ ) {}
+}
diff --git a/src/app/store/product/product.reducer.ts b/src/app/store/product/product.reducer.ts
new file mode 100644
index 0000000..e38fc5b
--- /dev/null
+++ b/src/app/store/product/product.reducer.ts
@@ -0,0 +1,67 @@
+import { createReducer, on } from '@ngrx/store';
+import * as ProductActions from './product.actions';
+import { Page, Product } from 'src/app/products';
+
+export const FEATURE_KEY = 'PRODUCT';
+
+export interface ProductState {
+ productsPage?: Page;
+ page: number;
+ isLoading: boolean;
+ hasError: boolean;
+}
+
+export const initialProductState: ProductState = {
+ productsPage: undefined,
+ page: 0,
+ isLoading: true,
+ hasError: false
+};
+
+export const productReducer = createReducer(
+ initialProductState,
+ on(ProductActions.setIsLoading, (state, payload) => {
+ return {
+ ...state,
+ isLoading: payload.isLoading,
+ };
+ }),
+ on(ProductActions.setPage, (state, payload) => {
+ return {
+ ...state,
+ page: payload.page,
+ };
+ }),
+ on(ProductActions.resetProductsPage, (state) => {
+ return {
+ ...state,
+ page: 0,
+ productsPage: undefined
+ };
+ }),
+ on(ProductActions.loadProductsSuccess, (state, payload) => {
+ return {
+ ...state,
+ productsPage: payload.productsPage,
+ };
+ }),
+ on(ProductActions.loadMoreProductsSuccess, (state, payload) => {
+ console.log("loadMoreProductsSuccess -> payload[" + payload.productsPage.content.length + "]: ", payload);
+ return {
+ ...state,
+ productsPage: {
+ ...payload.productsPage,
+ content: [
+ ...state.productsPage!.content,
+ ...payload.productsPage?.content
+ ],
+ },
+ };
+ }),
+ on(ProductActions.setHasError, (state, payload) => {
+ return {
+ ...state,
+ hasError: payload.value,
+ };
+ }),
+);
diff --git a/src/app/store/product/product.selectors.ts b/src/app/store/product/product.selectors.ts
new file mode 100644
index 0000000..ba186d3
--- /dev/null
+++ b/src/app/store/product/product.selectors.ts
@@ -0,0 +1,27 @@
+import { createFeatureSelector, createSelector } from '@ngrx/store';
+import * as ProductReducer from './product.reducer';
+import { Page, Product } from 'src/app/products';
+
+const selectProductState = createFeatureSelector(
+ ProductReducer.FEATURE_KEY
+);
+
+export const selectProductsPage = createSelector(
+ selectProductState,
+ (state): Page | undefined => state.productsPage
+);
+
+export const selectPage = createSelector(
+ selectProductState,
+ (state): number => state.page
+);
+
+export const selectIsLoading = createSelector(
+ selectProductState,
+ (state): boolean => state.isLoading
+);
+
+export const selectHasError = createSelector(
+ selectProductState,
+ (state): boolean => state.hasError
+);
diff --git a/src/app/store/router/router.selectors.ts b/src/app/store/router/router.selectors.ts
new file mode 100644
index 0000000..063fe54
--- /dev/null
+++ b/src/app/store/router/router.selectors.ts
@@ -0,0 +1,11 @@
+import { getRouterSelectors } from '@ngrx/router-store';
+
+// `router` is used as the default feature name. You can use the feature name
+// of your choice by creating a feature selector and pass it to the `getRouterSelectors` function
+// export const selectRouter = createFeatureSelector('yourFeatureName');
+
+export const {
+ selectCurrentRoute, // select the current route
+ selectFragment, // select the current route fragment
+ selectUrl, // select the current url
+} = getRouterSelectors();
diff --git a/src/assets/images/placeholder-2-1.png b/src/assets/images/placeholder-2-1.png
new file mode 100644
index 0000000..666cf63
Binary files /dev/null and b/src/assets/images/placeholder-2-1.png differ
diff --git a/src/index.html b/src/index.html
index 15d9953..ab80be8 100644
--- a/src/index.html
+++ b/src/index.html
@@ -8,7 +8,7 @@
-
+
diff --git a/src/styles.scss b/src/styles.scss
index 942051b..f45aa08 100644
--- a/src/styles.scss
+++ b/src/styles.scss
@@ -1,8 +1,59 @@
/* You can add global styles to this file, and also import other style files */
@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap');
+html, body { height: 100%; }
body {
margin: 0;
- background-color: #f2f4f7;
- font-family: 'Open Sans', sans-serif;
+ background-color: var(--body-background-color);
+ font-family: Roboto, sans-serif;
+ overflow: hidden;
+ max-height: 100vh;
+}
+
+.snackbar__error {
+
+ .mdc-snackbar__label {
+ font-size: 1rem !important;
+ }
+
+ .mdc-snackbar__surface {
+ background-color: var(--snackbar-background-color) !important;
+ }
+
+ .mat-mdc-simple-snack-bar {
+ padding: 1rem;
+ }
+ .mdc-snackbar__actions {
+ padding-left: 2rem;
+
+ .mat-mdc-button {
+ background-color: var(--snackbar-action-button-background-color);
+ color: var(--snackbar-action-button-color) !important;
+ }
+ }
+}
+
+:root {
+
+ --body-background-color: #f2f4f7;
+
+ --main-background-color: #fff;
+
+ --loader-container-background-color: #cae4f778;
+ --loader-spinner-circle-color: #9bb9daad;
+ --loader-spinner-arm-color: #4170b678;
+
+ --products-button-border-color: #d7dbe0;
+ --products-button-background-color: #fff;
+ --products-button-hover-and-focus-background-color: #ebecf0;
+
+ --card-border-color: lightgray;
+ --card-text-color: #444;
+ --card-category-color: gray;
+ --card-category-border-color: lightgray;
+ --card-category-box-shadow-color: rgba(0, 0, 0, 0.1);
+
+ --snackbar-background-color: #c85454;
+ --snackbar-action-button-background-color: #00000063;
+ --snackbar-action-button-color: #fff;
}
diff --git a/yarn.lock b/yarn.lock
index 3ccb442..9fb926e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,7 +2,7 @@
# yarn lockfile v1
-"@ampproject/remapping@2.3.0", "@ampproject/remapping@^2.2.0":
+"@ampproject/remapping@^2.2.0", "@ampproject/remapping@2.3.0":
version "2.3.0"
resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz"
integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
@@ -120,7 +120,7 @@
ora "5.4.1"
rxjs "7.8.1"
-"@angular/animations@^18.1.0":
+"@angular/animations@^18.0.0 || ^19.0.0", "@angular/animations@^18.1.0", "@angular/animations@18.1.0":
version "18.1.0"
resolved "https://registry.npmjs.org/@angular/animations/-/animations-18.1.0.tgz"
integrity sha512-K0BhvZ/SIVoGXZVuh1KOJDdgcGlHfFGMGrs58utndndAb+gYXReMfz4GR5cQs2OObH6TKmIOY2EH7Og1CY2tsw==
@@ -160,6 +160,15 @@
vite "5.3.2"
watchpack "2.4.1"
+"@angular/cdk@^18.1.2", "@angular/cdk@18.1.2":
+ version "18.1.2"
+ resolved "https://registry.npmjs.org/@angular/cdk/-/cdk-18.1.2.tgz"
+ integrity sha512-yiAJ/9AMVF2zk7VLEuyJxNJwpV84xLlf0zCaXiYIs6Z8xU6m8N9KR2nqxC59gQc4nTjItmoO/Sgk7XH0X4yGOQ==
+ dependencies:
+ tslib "^2.3.0"
+ optionalDependencies:
+ parse5 "^7.1.2"
+
"@angular/cli@~18.1.0":
version "18.1.0"
resolved "https://registry.npmjs.org/@angular/cli/-/cli-18.1.0.tgz"
@@ -183,14 +192,14 @@
symbol-observable "4.0.0"
yargs "17.7.2"
-"@angular/common@^18.1.0":
+"@angular/common@^18.0.0", "@angular/common@^18.0.0 || ^19.0.0", "@angular/common@^18.1.0", "@angular/common@18.1.0":
version "18.1.0"
resolved "https://registry.npmjs.org/@angular/common/-/common-18.1.0.tgz"
integrity sha512-noHDLarQSCZZh7hyNd0HR61Fut+q4QCVq9qc/jKPglfbV/6nPujQSmSpT+rNJlNuBOrCLuvH/CNBNbiqii+x3g==
dependencies:
tslib "^2.3.0"
-"@angular/compiler-cli@^18.1.0":
+"@angular/compiler-cli@^18.0.0", "@angular/compiler-cli@^18.1.0":
version "18.1.0"
resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.1.0.tgz"
integrity sha512-BBsogLPJwxkPh7f8RVHsxyyqNE8XpHbAanjB5fAwnU4W6Sw1kR5rFzkeZM3xaRm2MDiC8DovIl6hlf+s/mKYOw==
@@ -204,27 +213,34 @@
tslib "^2.3.0"
yargs "^17.2.1"
-"@angular/compiler@^18.1.0":
+"@angular/compiler@^18.1.0", "@angular/compiler@18.1.0":
version "18.1.0"
resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-18.1.0.tgz"
integrity sha512-JRQzVTeJGSfRLY+dx+gwu/hPQVB8K+5pW12Z42M9x/HBgGW4in0cO2zHkeQPvImqm0nak82Us1Hyf5C+qTlMMQ==
dependencies:
tslib "^2.3.0"
-"@angular/core@^18.1.0":
+"@angular/core@^18.0.0", "@angular/core@^18.0.0 || ^19.0.0", "@angular/core@^18.1.0", "@angular/core@18.1.0":
version "18.1.0"
resolved "https://registry.npmjs.org/@angular/core/-/core-18.1.0.tgz"
integrity sha512-/57/s7CD/0CwlN+3FlhVmx7ypCWXjKi5UKtnlBAUg0D1denIf6ADxwTHFZABYZcYBqOTJgeQUtUw9u/A+0CIlg==
dependencies:
tslib "^2.3.0"
-"@angular/forms@^18.1.0":
+"@angular/forms@^18.0.0 || ^19.0.0", "@angular/forms@^18.1.0":
version "18.1.0"
resolved "https://registry.npmjs.org/@angular/forms/-/forms-18.1.0.tgz"
integrity sha512-m+7m9wa+n5dEacd458eSZsZTz0B+HbOtr7/uqM0YTMQaPrhwl1epG5Y103mB6yr00JiJcLNlPLjP888cHFjldQ==
dependencies:
tslib "^2.3.0"
+"@angular/material@^18.1.2":
+ version "18.1.2"
+ resolved "https://registry.npmjs.org/@angular/material/-/material-18.1.2.tgz"
+ integrity sha512-B56pofk3WMqqtNww2W33KRbAu69c+aGYFdNFW45DcdIw9OKV1x/HjhyEchSrUOPOXgJFVTYw2HRhp327ONpetw==
+ dependencies:
+ tslib "^2.3.0"
+
"@angular/platform-browser-dynamic@^18.1.0":
version "18.1.0"
resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.1.0.tgz"
@@ -232,14 +248,14 @@
dependencies:
tslib "^2.3.0"
-"@angular/platform-browser@^18.1.0":
+"@angular/platform-browser@^18.0.0 || ^19.0.0", "@angular/platform-browser@^18.1.0", "@angular/platform-browser@18.1.0":
version "18.1.0"
resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.1.0.tgz"
integrity sha512-jCmxthiI4Zef54crckNht60xwfIsuciGeyZvb7SsXna2maLW9fA4uz1VhZqIWTiBnHwNynVlyfBX3/jBD7S9+g==
dependencies:
tslib "^2.3.0"
-"@angular/router@^18.1.0":
+"@angular/router@^18.0.0", "@angular/router@^18.1.0":
version "18.1.0"
resolved "https://registry.npmjs.org/@angular/router/-/router-18.1.0.tgz"
integrity sha512-dl2cSxZkl4we+rWMxdm123TZzlor6yxwNFI2yT7b6DP2i+rXaaHBSSPet0ASp+UX6djz+Osr56Bifs6wi4rhiQ==
@@ -259,7 +275,7 @@
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz"
integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==
-"@babel/core@7.24.7", "@babel/core@^7.12.3", "@babel/core@^7.23.9":
+"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.23.9", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0", "@babel/core@7.24.7":
version "7.24.7"
resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz"
integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==
@@ -280,7 +296,7 @@
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/generator@7.24.7", "@babel/generator@^7.24.7":
+"@babel/generator@^7.24.7", "@babel/generator@7.24.7":
version "7.24.7"
resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz"
integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==
@@ -290,7 +306,7 @@
"@jridgewell/trace-mapping" "^0.3.25"
jsesc "^2.5.1"
-"@babel/helper-annotate-as-pure@7.24.7", "@babel/helper-annotate-as-pure@^7.24.7":
+"@babel/helper-annotate-as-pure@^7.24.7", "@babel/helper-annotate-as-pure@7.24.7":
version "7.24.7"
resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz"
integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==
@@ -446,7 +462,7 @@
"@babel/traverse" "^7.24.7"
"@babel/types" "^7.24.7"
-"@babel/helper-split-export-declaration@7.24.7", "@babel/helper-split-export-declaration@^7.24.7":
+"@babel/helper-split-export-declaration@^7.24.7", "@babel/helper-split-export-declaration@7.24.7":
version "7.24.7"
resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz"
integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==
@@ -580,7 +596,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.24.7"
-"@babel/plugin-syntax-import-attributes@7.24.7", "@babel/plugin-syntax-import-attributes@^7.24.7":
+"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@7.24.7":
version "7.24.7"
resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz"
integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==
@@ -672,7 +688,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.24.7"
-"@babel/plugin-transform-async-generator-functions@7.24.7", "@babel/plugin-transform-async-generator-functions@^7.24.7":
+"@babel/plugin-transform-async-generator-functions@^7.24.7", "@babel/plugin-transform-async-generator-functions@7.24.7":
version "7.24.7"
resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz"
integrity sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==
@@ -682,7 +698,7 @@
"@babel/helper-remap-async-to-generator" "^7.24.7"
"@babel/plugin-syntax-async-generators" "^7.8.4"
-"@babel/plugin-transform-async-to-generator@7.24.7", "@babel/plugin-transform-async-to-generator@^7.24.7":
+"@babel/plugin-transform-async-to-generator@^7.24.7", "@babel/plugin-transform-async-to-generator@7.24.7":
version "7.24.7"
resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz"
integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==
@@ -1165,7 +1181,7 @@
resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz"
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
-"@babel/runtime@7.24.7", "@babel/runtime@^7.8.4":
+"@babel/runtime@^7.8.4", "@babel/runtime@7.24.7":
version "7.24.7"
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz"
integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==
@@ -1216,121 +1232,23 @@
resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz"
integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
-"@esbuild/aix-ppc64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
- integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
-
-"@esbuild/android-arm64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
- integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
-
-"@esbuild/android-arm@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
- integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
-
-"@esbuild/android-x64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
- integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
-
-"@esbuild/darwin-arm64@0.21.5":
- version "0.21.5"
- resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz"
- integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
-
-"@esbuild/darwin-x64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
- integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
-
-"@esbuild/freebsd-arm64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
- integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
-
-"@esbuild/freebsd-x64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
- integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
-
-"@esbuild/linux-arm64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
- integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
-
-"@esbuild/linux-arm@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
- integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
-
-"@esbuild/linux-ia32@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
- integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
-
-"@esbuild/linux-loong64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
- integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
-
-"@esbuild/linux-mips64el@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
- integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
-
-"@esbuild/linux-ppc64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
- integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
-
-"@esbuild/linux-riscv64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
- integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
-
-"@esbuild/linux-s390x@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
- integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
-
-"@esbuild/linux-x64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
- integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
-
-"@esbuild/netbsd-x64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
- integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
-
-"@esbuild/openbsd-x64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
- integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
-
-"@esbuild/sunos-x64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
- integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
-
-"@esbuild/win32-arm64@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
- integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
-
-"@esbuild/win32-ia32@0.21.5":
- version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
- integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
-
"@esbuild/win32-x64@0.21.5":
version "0.21.5"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
+ resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz"
integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
+"@hirez_io/auto-spies-core@3.0.0":
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/@hirez_io/auto-spies-core/-/auto-spies-core-3.0.0.tgz"
+ integrity sha512-au7s7/AqPU5CJhv0slVjmZqEv5Uaf2nj7pYFepp5g3B7EocEeNy7bZ74x5RJldHYtW0R8OptV2mZfwaDOfcNCA==
+ dependencies:
+ javascript-stringify "2.1.0"
+
+"@hirez_io/observer-spy@^2.2.0":
+ version "2.2.0"
+ resolved "https://registry.npmjs.org/@hirez_io/observer-spy/-/observer-spy-2.2.0.tgz"
+ integrity sha512-G9nv87vjRILgB/X1AtKBv1DZX7yXSYAOCXon/f+QULKoXVhVehYUF5Lv0SQ97ebf1sA48Z2CyQ9h2v4Pz6DgaQ==
+
"@inquirer/checkbox@^2.3.7":
version "2.3.10"
resolved "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.3.10.tgz"
@@ -1342,7 +1260,7 @@
ansi-escapes "^4.3.2"
yoctocolors-cjs "^2.1.2"
-"@inquirer/confirm@3.1.11", "@inquirer/confirm@^3.1.11":
+"@inquirer/confirm@^3.1.11", "@inquirer/confirm@3.1.11":
version "3.1.11"
resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.11.tgz"
integrity sha512-3wWw10VPxQP279FO4bzWsf8YjIAq7NdwATJ4xS2h1uwsXZu/RmtOVV95rZ7yllS1h/dzu+uLewjMAzNDEj8h2w==
@@ -1428,7 +1346,7 @@
"@inquirer/type" "^1.4.0"
ansi-escapes "^4.3.2"
-"@inquirer/prompts@5.0.7":
+"@inquirer/prompts@>= 3 < 6", "@inquirer/prompts@5.0.7":
version "5.0.7"
resolved "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.0.7.tgz"
integrity sha512-GFcigCxJTKCH3aECzMIu4FhgLJWnFvMXzpI4CCSoELWFtkOOU2P+goYA61+OKpGrB8fPE7q6n8zAXBSlZRrHjQ==
@@ -1558,64 +1476,14 @@
dependencies:
"@inquirer/type" "^1.3.3"
-"@lmdb/lmdb-darwin-arm64@3.0.12":
- version "3.0.12"
- resolved "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.12.tgz"
- integrity sha512-vgTwzNUD3Hy4aqtGhX2+nV/usI0mwy3hDRuTjs8VcK0BLiMVEpNQXgzwlWEgPmA8AAPloUgyOs2nK5clJF5oIg==
-
-"@lmdb/lmdb-darwin-x64@3.0.12":
- version "3.0.12"
- resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.12.tgz#b73d7b7cc46253320a786e959fa131de90b4a4f9"
- integrity sha512-qOt0hAhj2ZLY6aEWu85rzt5zcyCAQITMhCMEPNlo1tuYekpVAdkQNiwXxEkCjBYvwTskvXuwXOOUpjuSc+aJnA==
-
-"@lmdb/lmdb-linux-arm64@3.0.12":
- version "3.0.12"
- resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.12.tgz#c7a74d215728085ec4096feef303ba930e33f9c3"
- integrity sha512-Qy4cFXFe9h1wAWMsojex8x1ifvw2kqiZv686YiRTdQEzAfc3vJASHFcD/QejHUCx7YHMYdnUoCS45rG2AiGDTQ==
-
-"@lmdb/lmdb-linux-arm@3.0.12":
- version "3.0.12"
- resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.12.tgz#7a603d8732046b67d475030f72d2dabf68045d32"
- integrity sha512-Ggd/UXpE+alMncbELCXA3OKpDj9bDBR3qVO7WRTxstloDglRAHfZmUJgTkeaNKjFO1JHqS7AKy0jba9XebZB1w==
-
-"@lmdb/lmdb-linux-x64@3.0.12":
- version "3.0.12"
- resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.12.tgz#cc1fbf72a57caf7c0fbd6e7ddecae6660e7b57cd"
- integrity sha512-c+noT9IofktxktFllKHFmci8ka2SYGSLN17pj/KSl1hg7mmfAiGp4xxFxEwMLTb+SX95vP1DFiR++1I3WLVxvA==
-
"@lmdb/lmdb-win32-x64@3.0.12":
version "3.0.12"
- resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.12.tgz#0e06dc23dfe23c4a9d0a9cbcce1b0af74c8884a0"
+ resolved "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.12.tgz"
integrity sha512-CO3MFV8gUx16NU/CyyuumAKblESwvoGVA2XhQKZ976OTOxaTbb8F8D3f0iiZ4MYqsN74jIrFuCmXpPnpjbhfOQ==
-"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3":
- version "3.0.3"
- resolved "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz"
- integrity sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==
-
-"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz#33677a275204898ad8acbf62734fc4dc0b6a4855"
- integrity sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==
-
-"@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz#19edf7cdc2e7063ee328403c1d895a86dd28f4bb"
- integrity sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==
-
-"@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz#94fb0543ba2e28766c3fc439cabbe0440ae70159"
- integrity sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==
-
-"@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz#4a0609ab5fe44d07c9c60a11e4484d3c38bbd6e3"
- integrity sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==
-
"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3":
version "3.0.3"
- resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz#0aa5502d547b57abfc4ac492de68e2006e417242"
+ resolved "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz"
integrity sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==
"@ngneat/falso@^6.2.0":
@@ -1626,6 +1494,42 @@
seedrandom "3.0.5"
uuid "8.3.2"
+"@ngrx/effects@^18.0.1":
+ version "18.0.1"
+ resolved "https://registry.npmjs.org/@ngrx/effects/-/effects-18.0.1.tgz"
+ integrity sha512-ESxJYx31uABixtnWcuDY+HLKyqXKABpPG3LPDMyZrj7lIdjCaTk471QMhRZOme8QQKzlJt0drGfzFo3FM+QYuA==
+ dependencies:
+ "@ngrx/operators" "18.0.1"
+ tslib "^2.0.0"
+
+"@ngrx/operators@18.0.1":
+ version "18.0.1"
+ resolved "https://registry.npmjs.org/@ngrx/operators/-/operators-18.0.1.tgz"
+ integrity sha512-M+QMrHNKgcuiLaRGZxJ4aQi5/OCRfKC4+T/63dsHyLFZ53/FFpF6a/ytSO1Q+tzOplZ5o99S+i8FVaZqNQ3LmQ==
+ dependencies:
+ tslib "^2.3.0"
+
+"@ngrx/router-store@^18.0.1":
+ version "18.0.1"
+ resolved "https://registry.npmjs.org/@ngrx/router-store/-/router-store-18.0.1.tgz"
+ integrity sha512-OrgM6DkYOES7S/NQilxbTk5xtfZTrD3hlM2CsB4TBbV6zvOW0F8HpazcXffFXi9T9y34W1Y4pMzpKHoMTIHF/g==
+ dependencies:
+ tslib "^2.0.0"
+
+"@ngrx/store-devtools@^18.0.1":
+ version "18.0.1"
+ resolved "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-18.0.1.tgz"
+ integrity sha512-necHUUcLd41mpObOSuyGQSVyDq4Tb+uejG16WmA6VwXufaUqEl385aumKiS1KLtUP8TQQzogaogaMMDtqtznsQ==
+ dependencies:
+ tslib "^2.0.0"
+
+"@ngrx/store@^18.0.1", "@ngrx/store@18.0.1":
+ version "18.0.1"
+ resolved "https://registry.npmjs.org/@ngrx/store/-/store-18.0.1.tgz"
+ integrity sha512-TxZiQz06fGSxQ0clYfzkH4NCr6tfa8A7zqzkvvOOK1ZezOHHsk0vZJJtgxQcKUqAQxPpbp5+Z7YR8P/Fuid7GQ==
+ dependencies:
+ tslib "^2.0.0"
+
"@ngtools/webpack@18.1.0":
version "18.1.0"
resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.1.0.tgz"
@@ -1639,7 +1543,7 @@
"@nodelib/fs.stat" "2.0.5"
run-parallel "^1.1.9"
-"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
version "2.0.5"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
@@ -1740,164 +1644,14 @@
resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz"
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
-"@rollup/rollup-android-arm-eabi@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27"
- integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==
-
-"@rollup/rollup-android-arm-eabi@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz#f0da481244b7d9ea15296b35f7fe39cd81157396"
- integrity sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==
-
-"@rollup/rollup-android-arm64@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203"
- integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==
-
-"@rollup/rollup-android-arm64@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz#82ab3c575f4235fb647abea5e08eec6cf325964e"
- integrity sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==
-
-"@rollup/rollup-darwin-arm64@4.18.0":
- version "4.18.0"
- resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz"
- integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==
-
-"@rollup/rollup-darwin-arm64@4.18.1":
- version "4.18.1"
- resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz"
- integrity sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==
-
-"@rollup/rollup-darwin-x64@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c"
- integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==
-
-"@rollup/rollup-darwin-x64@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz#47727479f5ca292cf434d7e75af2725b724ecbc7"
- integrity sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==
-
-"@rollup/rollup-linux-arm-gnueabihf@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8"
- integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==
-
-"@rollup/rollup-linux-arm-gnueabihf@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz#46193c498aa7902a8db89ac00128060320e84fef"
- integrity sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==
-
-"@rollup/rollup-linux-arm-musleabihf@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549"
- integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==
-
-"@rollup/rollup-linux-arm-musleabihf@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz#22d831fe239643c1d05c98906420325cee439d85"
- integrity sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==
-
-"@rollup/rollup-linux-arm64-gnu@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577"
- integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==
-
-"@rollup/rollup-linux-arm64-gnu@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz#19abd33695ec9d588b4a858d122631433084e4a3"
- integrity sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==
-
-"@rollup/rollup-linux-arm64-musl@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c"
- integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==
-
-"@rollup/rollup-linux-arm64-musl@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz#d60af8c0b9be424424ff96a0ba19fce65d26f6ab"
- integrity sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==
-
-"@rollup/rollup-linux-powerpc64le-gnu@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf"
- integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==
-
-"@rollup/rollup-linux-powerpc64le-gnu@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz#b1194e5ed6d138fdde0842d126fccde74a90f457"
- integrity sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==
-
-"@rollup/rollup-linux-riscv64-gnu@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9"
- integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==
-
-"@rollup/rollup-linux-riscv64-gnu@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz#f5a635c017b9bff8b856b0221fbd5c0e3373b7ec"
- integrity sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==
-
-"@rollup/rollup-linux-s390x-gnu@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec"
- integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==
-
-"@rollup/rollup-linux-s390x-gnu@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz#f1043d9f4026bf6995863cb3f8dd4732606e4baa"
- integrity sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==
-
-"@rollup/rollup-linux-x64-gnu@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942"
- integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==
-
-"@rollup/rollup-linux-x64-gnu@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz#1e781730be445119f06c9df5f185e193bc82c610"
- integrity sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==
-
-"@rollup/rollup-linux-x64-musl@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d"
- integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==
-
-"@rollup/rollup-linux-x64-musl@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz#08f12e1965d6f27d6898ff932592121cca6abc4b"
- integrity sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==
-
-"@rollup/rollup-win32-arm64-msvc@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf"
- integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==
-
-"@rollup/rollup-win32-arm64-msvc@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz#4a5dcbbe7af7d41cac92b09798e7c1831da1f599"
- integrity sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==
-
-"@rollup/rollup-win32-ia32-msvc@4.18.0":
- version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54"
- integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==
-
-"@rollup/rollup-win32-ia32-msvc@4.18.1":
- version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz#075b0713de627843a73b4cf0e087c56b53e9d780"
- integrity sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==
-
"@rollup/rollup-win32-x64-msvc@4.18.0":
version "4.18.0"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4"
+ resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz"
integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==
"@rollup/rollup-win32-x64-msvc@4.18.1":
version "4.18.1"
- resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz#0cb240c147c0dfd0e3eaff4cc060a772d39e155c"
+ resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz"
integrity sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==
"@schematics/angular@18.1.0":
@@ -2034,7 +1788,7 @@
"@types/estree" "*"
"@types/json-schema" "*"
-"@types/estree@*", "@types/estree@1.0.5", "@types/estree@^1.0.5":
+"@types/estree@*", "@types/estree@^1.0.5", "@types/estree@1.0.5":
version "1.0.5"
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz"
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
@@ -2049,7 +1803,7 @@
"@types/range-parser" "*"
"@types/send" "*"
-"@types/express@*", "@types/express@^4.17.21":
+"@types/express@*", "@types/express@^4.17.13", "@types/express@^4.17.21":
version "4.17.21"
resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz"
integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==
@@ -2100,7 +1854,7 @@
dependencies:
"@types/node" "*"
-"@types/node@*", "@types/node@>=10.0.0", "@types/node@^20.14.9":
+"@types/node@*", "@types/node@^18.0.0 || >=20.0.0", "@types/node@^20.14.9", "@types/node@>=10.0.0":
version "20.14.10"
resolved "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz"
integrity sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==
@@ -2170,7 +1924,7 @@
resolved "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz"
integrity sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==
-"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1":
+"@webassemblyjs/ast@^1.12.1", "@webassemblyjs/ast@1.12.1":
version "1.12.1"
resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz"
integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==
@@ -2271,7 +2025,7 @@
"@webassemblyjs/wasm-gen" "1.12.1"
"@webassemblyjs/wasm-parser" "1.12.1"
-"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1":
+"@webassemblyjs/wasm-parser@^1.12.1", "@webassemblyjs/wasm-parser@1.12.1":
version "1.12.1"
resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz"
integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==
@@ -2324,7 +2078,7 @@ acorn-import-attributes@^1.9.5:
resolved "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz"
integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==
-acorn@^8.7.1, acorn@^8.8.2:
+acorn@^8, acorn@^8.7.1, acorn@^8.8.2:
version "8.12.1"
resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz"
integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
@@ -2352,13 +2106,6 @@ aggregate-error@^3.0.0:
clean-stack "^2.0.0"
indent-string "^4.0.0"
-ajv-formats@3.0.1:
- version "3.0.1"
- resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz"
- integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==
- dependencies:
- ajv "^8.0.0"
-
ajv-formats@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz"
@@ -2366,6 +2113,13 @@ ajv-formats@^2.1.1:
dependencies:
ajv "^8.0.0"
+ajv-formats@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz"
+ integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==
+ dependencies:
+ ajv "^8.0.0"
+
ajv-keywords@^3.5.2:
version "3.5.2"
resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz"
@@ -2378,17 +2132,7 @@ ajv-keywords@^5.1.0:
dependencies:
fast-deep-equal "^3.1.3"
-ajv@8.16.0, ajv@^8.0.0, ajv@^8.9.0:
- version "8.16.0"
- resolved "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz"
- integrity sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==
- dependencies:
- fast-deep-equal "^3.1.3"
- json-schema-traverse "^1.0.0"
- require-from-string "^2.0.2"
- uri-js "^4.4.1"
-
-ajv@^6.12.5:
+ajv@^6.12.5, ajv@^6.9.1:
version "6.12.6"
resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -2398,6 +2142,16 @@ ajv@^6.12.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
+ajv@^8.0.0, ajv@^8.8.2, ajv@^8.9.0, ajv@8.16.0:
+ version "8.16.0"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz"
+ integrity sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==
+ dependencies:
+ fast-deep-equal "^3.1.3"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.4.1"
+
ansi-colors@4.1.3:
version "4.1.3"
resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz"
@@ -2437,14 +2191,31 @@ ansi-styles@^3.2.1:
dependencies:
color-convert "^1.9.0"
-ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ansi-styles@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi-styles@^4.1.0:
version "4.3.0"
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
dependencies:
color-convert "^2.0.1"
-ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1:
+ansi-styles@^6.0.0:
+ version "6.2.1"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz"
+ integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
+ansi-styles@^6.1.0:
+ version "6.2.1"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz"
+ integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
+ansi-styles@^6.2.1:
version "6.2.1"
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz"
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
@@ -2521,7 +2292,7 @@ base64-js@^1.3.1:
resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-base64id@2.0.0, base64id@~2.0.0:
+base64id@~2.0.0, base64id@2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz"
integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==
@@ -2550,7 +2321,7 @@ bl@^4.1.0:
inherits "^2.0.4"
readable-stream "^3.4.0"
-body-parser@1.20.2, body-parser@^1.19.0:
+body-parser@^1.19.0, body-parser@1.20.2:
version "1.20.2"
resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz"
integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
@@ -2603,7 +2374,7 @@ braces@^3.0.2, braces@^3.0.3, braces@~3.0.2:
dependencies:
fill-range "^7.1.1"
-browserslist@^4.21.10, browserslist@^4.21.5, browserslist@^4.22.2, browserslist@^4.23.0:
+browserslist@^4.21.10, browserslist@^4.21.5, browserslist@^4.22.2, browserslist@^4.23.0, "browserslist@>= 4.21.0":
version "4.23.2"
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz"
integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==
@@ -2704,7 +2475,7 @@ chardet@^0.7.0:
resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz"
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-"chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.5.1, chokidar@^3.6.0:
+chokidar@^3.0.0, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.6.0, "chokidar@>=3.0.0 <4.0.0":
version "3.6.0"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz"
integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
@@ -2812,16 +2583,16 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
- integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-
color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
colorette@^2.0.10, colorette@^2.0.20:
version "2.0.20"
resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz"
@@ -2904,16 +2675,16 @@ cookie-signature@1.0.6:
resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
-cookie@0.6.0:
- version "0.6.0"
- resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz"
- integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
-
cookie@~0.4.1:
version "0.4.2"
resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz"
integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+cookie@0.6.0:
+ version "0.6.0"
+ resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz"
+ integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
+
copy-anything@^2.0.1:
version "2.0.6"
resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz"
@@ -3030,26 +2801,26 @@ date-format@^4.0.14:
resolved "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz"
integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==
-debug@2.6.9:
- version "2.6.9"
- resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+debug@^3.2.6:
+ version "3.2.7"
+ resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
- ms "2.0.0"
+ ms "^2.1.1"
-debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2:
+debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4:
version "4.3.4"
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
-debug@^3.2.6:
- version "3.2.7"
- resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
- integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+debug@2.6.9:
+ version "2.6.9"
+ resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
- ms "^2.1.1"
+ ms "2.0.0"
default-browser-id@^5.0.0:
version "5.0.0"
@@ -3092,16 +2863,16 @@ define-lazy-prop@^3.0.0:
resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz"
integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==
-depd@2.0.0:
- version "2.0.0"
- resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz"
- integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
-
depd@~1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
+depd@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz"
+ integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
destroy@1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz"
@@ -3301,7 +3072,7 @@ esbuild-wasm@0.21.5:
resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.21.5.tgz"
integrity sha512-L/FlOPMMFtw+6qPAbuPvJXdrOYOp9yx/PEwSrIZW0qghY4vgV003evdYDwqQ/9ENMQI0B6RMod9xT4FHtto6OQ==
-esbuild@0.21.5, esbuild@^0.21.3:
+esbuild@^0.21.3, esbuild@0.21.5:
version "0.21.5"
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz"
integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==
@@ -3471,7 +3242,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-fast-glob@3.3.2, fast-glob@^3.3.2:
+fast-glob@^3.3.2, fast-glob@3.3.2:
version "3.3.2"
resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz"
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
@@ -3616,11 +3387,6 @@ fs.realpath@^1.0.0:
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
-fsevents@~2.3.2, fsevents@~2.3.3:
- version "2.3.3"
- resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
- integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
-
function-bind@^1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
@@ -3688,7 +3454,7 @@ glob@^10.2.2, glob@^10.3.10, glob@^10.3.7:
package-json-from-dist "^1.0.0"
path-scurry "^1.11.1"
-glob@^7.1.3, glob@^7.1.7:
+glob@^7.1.3:
version "7.2.3"
resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -3700,14 +3466,26 @@ glob@^7.1.3, glob@^7.1.7:
once "^1.3.0"
path-is-absolute "^1.0.0"
-globals@^11.1.0:
- version "11.12.0"
- resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
- integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-
-globby@^14.0.0:
- version "14.0.2"
- resolved "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz"
+glob@^7.1.7:
+ version "7.2.3"
+ resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globby@^14.0.0:
+ version "14.0.2"
+ resolved "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz"
integrity sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==
dependencies:
"@sindresorhus/merge-streams" "^2.1.0"
@@ -3815,6 +3593,16 @@ http-deceiver@^1.2.7:
resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz"
integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==
+http-errors@~1.6.2:
+ version "1.6.3"
+ resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz"
+ integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
http-errors@2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz"
@@ -3826,16 +3614,6 @@ http-errors@2.0.0:
statuses "2.0.1"
toidentifier "1.0.1"
-http-errors@~1.6.2:
- version "1.6.3"
- resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz"
- integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==
- dependencies:
- depd "~1.1.2"
- inherits "2.0.3"
- setprototypeof "1.1.0"
- statuses ">= 1.4.0 < 2"
-
http-parser-js@>=0.5.1:
version "0.5.8"
resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz"
@@ -3849,6 +3627,17 @@ http-proxy-agent@^7.0.0:
agent-base "^7.1.0"
debug "^4.3.4"
+http-proxy-middleware@^2.0.3:
+ version "2.0.6"
+ resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz"
+ integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==
+ dependencies:
+ "@types/http-proxy" "^1.17.8"
+ http-proxy "^1.18.1"
+ is-glob "^4.0.1"
+ is-plain-obj "^3.0.0"
+ micromatch "^4.0.2"
+
http-proxy-middleware@3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz"
@@ -3861,17 +3650,6 @@ http-proxy-middleware@3.0.0:
is-plain-obj "^3.0.0"
micromatch "^4.0.5"
-http-proxy-middleware@^2.0.3:
- version "2.0.6"
- resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz"
- integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==
- dependencies:
- "@types/http-proxy" "^1.17.8"
- http-proxy "^1.18.1"
- is-glob "^4.0.1"
- is-plain-obj "^3.0.0"
- micromatch "^4.0.2"
-
http-proxy@^1.18.1:
version "1.18.1"
resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz"
@@ -3881,7 +3659,7 @@ http-proxy@^1.18.1:
follow-redirects "^1.0.0"
requires-port "^1.0.0"
-https-proxy-agent@7.0.5, https-proxy-agent@^7.0.1:
+https-proxy-agent@^7.0.1, https-proxy-agent@7.0.5:
version "7.0.5"
resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz"
integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==
@@ -3899,14 +3677,21 @@ hyperdyperid@^1.2.0:
resolved "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz"
integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==
-iconv-lite@0.4.24, iconv-lite@^0.4.24:
+iconv-lite@^0.4.24, iconv-lite@0.4.24:
version "0.4.24"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
dependencies:
safer-buffer ">= 2.1.2 < 3"
-iconv-lite@^0.6.2, iconv-lite@^0.6.3:
+iconv-lite@^0.6.2:
+ version "0.6.3"
+ resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
+iconv-lite@^0.6.3:
version "0.6.3"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
@@ -3971,7 +3756,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
+inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4:
version "2.0.4"
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -3981,7 +3766,7 @@ inherits@2.0.3:
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
-ini@4.1.3, ini@^4.1.3:
+ini@^4.1.3, ini@4.1.3:
version "4.1.3"
resolved "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz"
integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==
@@ -3994,16 +3779,16 @@ ip-address@^9.0.5:
jsbn "1.1.0"
sprintf-js "^1.1.3"
-ipaddr.js@1.9.1:
- version "1.9.1"
- resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
- integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
-
ipaddr.js@^2.1.0:
version "2.2.0"
resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz"
integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==
+ipaddr.js@1.9.1:
+ version "1.9.1"
+ resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
+ integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
@@ -4148,17 +3933,6 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz"
integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
-istanbul-lib-instrument@6.0.2:
- version "6.0.2"
- resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz"
- integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==
- dependencies:
- "@babel/core" "^7.23.9"
- "@babel/parser" "^7.23.9"
- "@istanbuljs/schema" "^0.1.3"
- istanbul-lib-coverage "^3.2.0"
- semver "^7.5.4"
-
istanbul-lib-instrument@^5.1.0:
version "5.2.1"
resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz"
@@ -4170,6 +3944,17 @@ istanbul-lib-instrument@^5.1.0:
istanbul-lib-coverage "^3.2.0"
semver "^6.3.0"
+istanbul-lib-instrument@6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz"
+ integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==
+ dependencies:
+ "@babel/core" "^7.23.9"
+ "@babel/parser" "^7.23.9"
+ "@istanbuljs/schema" "^0.1.3"
+ istanbul-lib-coverage "^3.2.0"
+ semver "^7.5.4"
+
istanbul-lib-report@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz"
@@ -4205,11 +3990,23 @@ jackspeak@^3.1.2:
optionalDependencies:
"@pkgjs/parseargs" "^0.11.0"
-jasmine-core@^4.1.0, jasmine-core@~4.5.0:
+jasmine-auto-spies@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.npmjs.org/jasmine-auto-spies/-/jasmine-auto-spies-8.0.1.tgz"
+ integrity sha512-4T8YVS6VJ7VoCdAOqEh3sziD6Wf/m+dfGGQ1a7GZHqjZUjaSD0Be+KqP7CmTiBc3HrX+uvOXr380QIW+TfHhqA==
+ dependencies:
+ "@hirez_io/auto-spies-core" "3.0.0"
+
+jasmine-core@^4.0.0, jasmine-core@^4.1.0, "jasmine-core@>=2.6.0 < 6", jasmine-core@~4.5.0:
version "4.5.0"
resolved "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz"
integrity sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==
+javascript-stringify@2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz"
+ integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==
+
jest-worker@^27.4.5:
version "27.5.1"
resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz"
@@ -4317,7 +4114,7 @@ karma-jasmine-html-reporter@~2.0.0:
resolved "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz"
integrity sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==
-karma-jasmine@~5.1.0:
+karma-jasmine@^5.0.0, karma-jasmine@~5.1.0:
version "5.1.0"
resolved "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz"
integrity sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==
@@ -4331,7 +4128,7 @@ karma-source-map-support@1.4.0:
dependencies:
source-map-support "^0.5.5"
-karma@~6.4.0:
+karma@^6.0.0, karma@^6.3.0, karma@~6.4.0:
version "6.4.1"
resolved "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz"
integrity sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA==
@@ -4379,7 +4176,7 @@ less-loader@12.2.0:
resolved "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz"
integrity sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==
-less@4.2.0:
+less@*, "less@^3.5.0 || ^4.0.0", less@^4.2.0, less@4.2.0:
version "4.2.0"
resolved "https://registry.npmjs.org/less/-/less-4.2.0.tgz"
integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==
@@ -4443,11 +4240,6 @@ loader-runner@^4.2.0:
resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz"
integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
-loader-utils@3.3.1:
- version "3.3.1"
- resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz"
- integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==
-
loader-utils@^2.0.0:
version "2.0.4"
resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz"
@@ -4457,6 +4249,11 @@ loader-utils@^2.0.0:
emojis-list "^3.0.0"
json5 "^2.1.2"
+loader-utils@3.3.1:
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz"
+ integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==
+
locate-path@^7.1.0:
version "7.2.0"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz"
@@ -4504,7 +4301,12 @@ log4js@^6.4.1:
rfdc "^1.3.0"
streamroller "^3.1.3"
-lru-cache@^10.0.1, lru-cache@^10.2.0:
+lru-cache@^10.0.1:
+ version "10.4.3"
+ resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz"
+ integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
+
+lru-cache@^10.2.0:
version "10.4.3"
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz"
integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
@@ -4599,7 +4401,7 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
braces "^3.0.3"
picomatch "^2.3.1"
-mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
+"mime-db@>= 1.43.0 < 2", mime-db@1.52.0:
version "1.52.0"
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
@@ -4611,7 +4413,7 @@ mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24,
dependencies:
mime-db "1.52.0"
-mime@1.6.0, mime@^1.4.1:
+mime@^1.4.1:
version "1.6.0"
resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
@@ -4621,6 +4423,11 @@ mime@^2.5.2:
resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz"
integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
+mime@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"
@@ -4704,16 +4511,16 @@ minipass@^3.0.0:
dependencies:
yallist "^4.0.0"
-minipass@^5.0.0:
- version "5.0.0"
- resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz"
- integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
-
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.2:
version "7.1.2"
resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz"
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
+minipass@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz"
+ integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
+
minizlib@^2.1.1, minizlib@^2.1.2:
version "2.1.2"
resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz"
@@ -4739,16 +4546,16 @@ mrmime@2.0.0:
resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz"
integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==
+ms@^2.1.1, ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
ms@2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
-ms@2.1.2, ms@^2.1.1:
- version "2.1.2"
- resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
ms@2.1.3:
version "2.1.3"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
@@ -4802,7 +4609,7 @@ needle@^3.1.0:
iconv-lite "^0.6.3"
sax "^1.2.4"
-negotiator@0.6.3, negotiator@^0.6.3:
+negotiator@^0.6.3, negotiator@0.6.3:
version "0.6.3"
resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz"
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
@@ -4812,19 +4619,6 @@ neo-async@^2.6.2:
resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
-nice-napi@^1.0.2:
- version "1.0.2"
- resolved "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz"
- integrity sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==
- dependencies:
- node-addon-api "^3.0.0"
- node-gyp-build "^4.2.2"
-
-node-addon-api@^3.0.0:
- version "3.2.1"
- resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz"
- integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==
-
node-addon-api@^6.1.0:
version "6.1.0"
resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz"
@@ -4842,11 +4636,6 @@ node-gyp-build-optional-packages@5.2.2:
dependencies:
detect-libc "^2.0.1"
-node-gyp-build@^4.2.2:
- version "4.8.1"
- resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz"
- integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==
-
node-gyp@^10.0.0:
version "10.2.0"
resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz"
@@ -4913,7 +4702,7 @@ npm-normalize-package-bin@^3.0.0:
resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz"
integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==
-npm-package-arg@11.0.2, npm-package-arg@^11.0.0:
+npm-package-arg@^11.0.0, npm-package-arg@11.0.2:
version "11.0.2"
resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz"
integrity sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==
@@ -4930,7 +4719,7 @@ npm-packlist@^8.0.0:
dependencies:
ignore-walk "^6.0.4"
-npm-pick-manifest@9.0.1, npm-pick-manifest@^9.0.0:
+npm-pick-manifest@^9.0.0, npm-pick-manifest@9.0.1:
version "9.0.1"
resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz"
integrity sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==
@@ -4983,7 +4772,7 @@ obuf@^1.0.0, obuf@^1.1.2:
resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz"
integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
-on-finished@2.4.1, on-finished@^2.4.1:
+on-finished@^2.4.1, on-finished@2.4.1:
version "2.4.1"
resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz"
integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
@@ -5016,7 +4805,7 @@ onetime@^5.1.0, onetime@^5.1.2:
dependencies:
mimic-fn "^2.1.0"
-open@10.1.0, open@^10.0.3:
+open@^10.0.3, open@10.1.0:
version "10.1.0"
resolved "https://registry.npmjs.org/open/-/open-10.1.0.tgz"
integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==
@@ -5147,7 +4936,7 @@ parse5-sax-parser@^7.0.0:
dependencies:
parse5 "^7.0.0"
-parse5@^7.0.0:
+parse5@^7.0.0, parse5@^7.1.2:
version "7.1.2"
resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz"
integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
@@ -5202,16 +4991,16 @@ picocolors@^1.0.0, picocolors@^1.0.1:
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz"
integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==
-picomatch@4.0.2:
- version "4.0.2"
- resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz"
- integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
-
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+picomatch@4.0.2:
+ version "4.0.2"
+ resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz"
+ integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
+
pify@^4.0.1:
version "4.0.1"
resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz"
@@ -5286,7 +5075,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
-postcss@8.4.38, postcss@^8.2.14, postcss@^8.4.23, postcss@^8.4.33, postcss@^8.4.38:
+"postcss@^7.0.0 || ^8.0.1", postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.0, postcss@^8.4.23, postcss@^8.4.33, postcss@^8.4.38, postcss@8.4.38:
version "8.4.38"
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz"
integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
@@ -5488,7 +5277,7 @@ resolve-url-loader@5.0.0:
postcss "^8.2.14"
source-map "0.6.1"
-resolve@1.22.8, resolve@^1.14.2:
+resolve@^1.14.2, resolve@1.22.8:
version "1.22.8"
resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
@@ -5547,31 +5336,6 @@ rimraf@^5.0.5:
dependencies:
glob "^10.3.7"
-rollup@4.18.0:
- version "4.18.0"
- resolved "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz"
- integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==
- dependencies:
- "@types/estree" "1.0.5"
- optionalDependencies:
- "@rollup/rollup-android-arm-eabi" "4.18.0"
- "@rollup/rollup-android-arm64" "4.18.0"
- "@rollup/rollup-darwin-arm64" "4.18.0"
- "@rollup/rollup-darwin-x64" "4.18.0"
- "@rollup/rollup-linux-arm-gnueabihf" "4.18.0"
- "@rollup/rollup-linux-arm-musleabihf" "4.18.0"
- "@rollup/rollup-linux-arm64-gnu" "4.18.0"
- "@rollup/rollup-linux-arm64-musl" "4.18.0"
- "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0"
- "@rollup/rollup-linux-riscv64-gnu" "4.18.0"
- "@rollup/rollup-linux-s390x-gnu" "4.18.0"
- "@rollup/rollup-linux-x64-gnu" "4.18.0"
- "@rollup/rollup-linux-x64-musl" "4.18.0"
- "@rollup/rollup-win32-arm64-msvc" "4.18.0"
- "@rollup/rollup-win32-ia32-msvc" "4.18.0"
- "@rollup/rollup-win32-x64-msvc" "4.18.0"
- fsevents "~2.3.2"
-
rollup@^4.13.0:
version "4.18.1"
resolved "https://registry.npmjs.org/rollup/-/rollup-4.18.1.tgz"
@@ -5597,6 +5361,31 @@ rollup@^4.13.0:
"@rollup/rollup-win32-x64-msvc" "4.18.1"
fsevents "~2.3.2"
+rollup@4.18.0:
+ version "4.18.0"
+ resolved "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz"
+ integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==
+ dependencies:
+ "@types/estree" "1.0.5"
+ optionalDependencies:
+ "@rollup/rollup-android-arm-eabi" "4.18.0"
+ "@rollup/rollup-android-arm64" "4.18.0"
+ "@rollup/rollup-darwin-arm64" "4.18.0"
+ "@rollup/rollup-darwin-x64" "4.18.0"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.18.0"
+ "@rollup/rollup-linux-arm-musleabihf" "4.18.0"
+ "@rollup/rollup-linux-arm64-gnu" "4.18.0"
+ "@rollup/rollup-linux-arm64-musl" "4.18.0"
+ "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0"
+ "@rollup/rollup-linux-riscv64-gnu" "4.18.0"
+ "@rollup/rollup-linux-s390x-gnu" "4.18.0"
+ "@rollup/rollup-linux-x64-gnu" "4.18.0"
+ "@rollup/rollup-linux-x64-musl" "4.18.0"
+ "@rollup/rollup-win32-arm64-msvc" "4.18.0"
+ "@rollup/rollup-win32-ia32-msvc" "4.18.0"
+ "@rollup/rollup-win32-x64-msvc" "4.18.0"
+ fsevents "~2.3.2"
+
run-applescript@^7.0.0:
version "7.0.0"
resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz"
@@ -5609,6 +5398,13 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
+"rxjs@^6.5.3 || ^7.4.0", "rxjs@^6.5.3 || ^7.5.0", rxjs@>=6.0.0, "rxjs@>=6.0.0 < 8", rxjs@~7.5.0:
+ version "7.5.7"
+ resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz"
+ integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==
+ dependencies:
+ tslib "^2.1.0"
+
rxjs@7.8.1:
version "7.8.1"
resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz"
@@ -5616,22 +5412,20 @@ rxjs@7.8.1:
dependencies:
tslib "^2.1.0"
-rxjs@~7.5.0:
- version "7.5.7"
- resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz"
- integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==
- dependencies:
- tslib "^2.1.0"
+safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1:
+ version "5.2.1"
+ resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
- version "5.2.1"
- resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+safe-buffer@5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2"
@@ -5645,7 +5439,7 @@ sass-loader@14.2.1:
dependencies:
neo-async "^2.6.2"
-sass@1.77.6:
+sass@*, sass@^1.3.0, sass@1.77.6:
version "1.77.6"
resolved "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz"
integrity sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==
@@ -5659,7 +5453,16 @@ sax@^1.2.4:
resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-schema-utils@^3.1.1, schema-utils@^3.2.0:
+schema-utils@^3.1.1:
+ version "3.3.0"
+ resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz"
+ integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
+ dependencies:
+ "@types/json-schema" "^7.0.8"
+ ajv "^6.12.5"
+ ajv-keywords "^3.5.2"
+
+schema-utils@^3.2.0:
version "3.3.0"
resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz"
integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
@@ -5696,17 +5499,17 @@ selfsigned@^2.4.1:
"@types/node-forge" "^1.3.0"
node-forge "^1"
-semver@7.6.2, semver@^7.0.0, semver@^7.1.1, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4:
- version "7.6.2"
- resolved "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz"
- integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
-
semver@^5.6.0:
version "5.7.1"
resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-semver@^6.0.0, semver@^6.3.0:
+semver@^6.0.0:
+ version "6.3.0"
+ resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^6.3.0:
version "6.3.0"
resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
@@ -5716,6 +5519,11 @@ semver@^6.3.1:
resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+semver@^7.0.0, semver@^7.1.1, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@7.6.2:
+ version "7.6.2"
+ resolved "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz"
+ integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
+
send@0.18.0:
version "0.18.0"
resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz"
@@ -5825,7 +5633,12 @@ signal-exit@^3.0.2, signal-exit@^3.0.3:
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-signal-exit@^4.0.1, signal-exit@^4.1.0:
+signal-exit@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+signal-exit@^4.1.0:
version "4.1.0"
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz"
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
@@ -5919,7 +5732,7 @@ socks@^2.8.3:
ip-address "^9.0.5"
smart-buffer "^4.2.0"
-"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2, source-map-js@^1.2.0:
+source-map-js@^1.0.2, source-map-js@^1.2.0, "source-map-js@>=0.6.2 <2.0.0":
version "1.2.0"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz"
integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
@@ -5932,7 +5745,7 @@ source-map-loader@5.0.0:
iconv-lite "^0.6.3"
source-map-js "^1.0.2"
-source-map-support@0.5.21, source-map-support@^0.5.5, source-map-support@~0.5.20:
+source-map-support@^0.5.5, source-map-support@~0.5.20, source-map-support@0.5.21:
version "0.5.21"
resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz"
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
@@ -5940,7 +5753,22 @@ source-map-support@0.5.21, source-map-support@^0.5.5, source-map-support@~0.5.20
buffer-from "^1.0.0"
source-map "^0.6.0"
-source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0:
+source-map@^0.6.0:
+ version "0.6.1"
+ resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@~0.6.0:
+ version "0.6.1"
+ resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+source-map@0.6.1:
version "0.6.1"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
@@ -6011,16 +5839,16 @@ ssri@^10.0.0:
dependencies:
minipass "^7.0.3"
-statuses@2.0.1:
- version "2.0.1"
- resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"
- integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
-
"statuses@>= 1.4.0 < 2", statuses@~1.5.0:
version "1.5.0"
resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
+statuses@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"
+ integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+
streamroller@^3.1.3:
version "3.1.3"
resolved "https://registry.npmjs.org/streamroller/-/streamroller-3.1.3.tgz"
@@ -6030,6 +5858,20 @@ streamroller@^3.1.3:
debug "^4.3.4"
fs-extra "^8.1.0"
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
"string-width-cjs@npm:string-width@^4.2.0":
version "4.2.3"
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
@@ -6066,20 +5908,6 @@ string-width@^7.0.0:
get-east-asian-width "^1.0.0"
strip-ansi "^7.1.0"
-string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
@@ -6094,7 +5922,14 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
dependencies:
ansi-regex "^5.0.1"
-strip-ansi@^7.0.1, strip-ansi@^7.1.0:
+strip-ansi@^7.0.1:
+ version "7.1.0"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ dependencies:
+ ansi-regex "^6.0.1"
+
+strip-ansi@^7.1.0:
version "7.1.0"
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz"
integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
@@ -6165,20 +6000,20 @@ terser-webpack-plugin@^5.3.10:
serialize-javascript "^6.0.1"
terser "^5.26.0"
-terser@5.29.2:
- version "5.29.2"
- resolved "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz"
- integrity sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==
+terser@^5.26.0:
+ version "5.31.2"
+ resolved "https://registry.npmjs.org/terser/-/terser-5.31.2.tgz"
+ integrity sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==
dependencies:
"@jridgewell/source-map" "^0.3.3"
acorn "^8.8.2"
commander "^2.20.0"
source-map-support "~0.5.20"
-terser@^5.26.0:
- version "5.31.2"
- resolved "https://registry.npmjs.org/terser/-/terser-5.31.2.tgz"
- integrity sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==
+terser@^5.4.0, terser@5.29.2:
+ version "5.29.2"
+ resolved "https://registry.npmjs.org/terser/-/terser-5.29.2.tgz"
+ integrity sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==
dependencies:
"@jridgewell/source-map" "^0.3.3"
acorn "^8.8.2"
@@ -6236,7 +6071,7 @@ tree-kill@1.2.2:
resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz"
integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
-tslib@2.6.3, tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0:
+tslib@^2, tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0, tslib@2, tslib@2.6.3:
version "2.6.3"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz"
integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==
@@ -6268,7 +6103,7 @@ typed-assert@^1.0.8:
resolved "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz"
integrity sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==
-typescript@~5.4.5:
+typescript@>=2.8.1, typescript@>=4.9.5, "typescript@>=5.4 <5.6", typescript@~5.4.5:
version "5.4.5"
resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz"
integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==
@@ -6335,7 +6170,7 @@ universalify@^0.1.0:
resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
-unpipe@1.0.0, unpipe@~1.0.0:
+unpipe@~1.0.0, unpipe@1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
@@ -6365,7 +6200,7 @@ utils-merge@1.0.1:
resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"
integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
-uuid@8.3.2, uuid@^8.3.2:
+uuid@^8.3.2, uuid@8.3.2:
version "8.3.2"
resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
@@ -6388,7 +6223,7 @@ vary@^1, vary@~1.1.2:
resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
-vite@5.3.2:
+"vite@^3.0.0 || ^4.0.0 || ^5.0.0", vite@5.3.2:
version "5.3.2"
resolved "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz"
integrity sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==
@@ -6404,7 +6239,7 @@ void-elements@^2.0.0:
resolved "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz"
integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==
-watchpack@2.4.1, watchpack@^2.4.1:
+watchpack@^2.4.1, watchpack@2.4.1:
version "2.4.1"
resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz"
integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==
@@ -6431,7 +6266,7 @@ weak-lru-cache@^1.2.2:
resolved "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz"
integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==
-webpack-dev-middleware@7.2.1, webpack-dev-middleware@^7.1.0:
+webpack-dev-middleware@^7.1.0, webpack-dev-middleware@7.2.1:
version "7.2.1"
resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz"
integrity sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==
@@ -6443,7 +6278,7 @@ webpack-dev-middleware@7.2.1, webpack-dev-middleware@^7.1.0:
range-parser "^1.2.1"
schema-utils "^4.0.0"
-webpack-dev-server@5.0.4:
+webpack-dev-server@^5.0.2, webpack-dev-server@5.0.4:
version "5.0.4"
resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz"
integrity sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==
@@ -6500,7 +6335,7 @@ webpack-subresource-integrity@5.1.0:
dependencies:
typed-assert "^1.0.8"
-webpack@5.92.1:
+webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.27.0, webpack@^5.30.0, webpack@^5.54.0, webpack@^5.72.1, webpack@>=5, webpack@5.92.1:
version "5.92.1"
resolved "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz"
integrity sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==
@@ -6530,7 +6365,7 @@ webpack@5.92.1:
watchpack "^2.4.1"
webpack-sources "^3.2.3"
-websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
+websocket-driver@^0.7.4, websocket-driver@>=0.5.1:
version "0.7.4"
resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz"
integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
@@ -6655,19 +6490,6 @@ yargs-parser@^21.1.1:
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
-yargs@17.7.2, yargs@^17.2.1:
- version "17.7.2"
- resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz"
- integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
- dependencies:
- cliui "^8.0.1"
- escalade "^3.1.1"
- get-caller-file "^2.0.5"
- require-directory "^2.1.1"
- string-width "^4.2.3"
- y18n "^5.0.5"
- yargs-parser "^21.1.1"
-
yargs@^16.1.1:
version "16.2.0"
resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz"
@@ -6681,6 +6503,19 @@ yargs@^16.1.1:
y18n "^5.0.5"
yargs-parser "^20.2.2"
+yargs@^17.2.1, yargs@17.7.2:
+ version "17.7.2"
+ resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz"
+ integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
+ dependencies:
+ cliui "^8.0.1"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.3"
+ y18n "^5.0.5"
+ yargs-parser "^21.1.1"
+
yocto-queue@^1.0.0:
version "1.1.1"
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz"
@@ -6691,7 +6526,7 @@ yoctocolors-cjs@^2.1.2:
resolved "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz"
integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==
-zone.js@~0.14.7:
+zone.js@~0.14.0, zone.js@~0.14.7:
version "0.14.7"
resolved "https://registry.npmjs.org/zone.js/-/zone.js-0.14.7.tgz"
integrity sha512-0w6DGkX2BPuiK/NLf+4A8FLE43QwBfuqz2dVgi/40Rj1WmqUskCqj329O/pwrqFJLG5X8wkeG2RhIAro441xtg==