From 3cae317106ad9ae821773d03b39d9b492c3cba8a Mon Sep 17 00:00:00 2001 From: Plotnikova Darya Date: Fri, 3 Oct 2025 14:54:49 +0500 Subject: [PATCH 1/7] Remove unused tasks Distribute by lecture topics --- .../13-highly-customizable-css/README.md | 13 - .../13-highly-customizable-css/project.json | 73 ------ .../src/app/page.component.ts | 16 -- .../src/app/static-text.component.ts | 38 --- .../src/app/text.component.ts | 15 -- .../13-highly-customizable-css/src/index.html | 13 - .../13-highly-customizable-css/src/main.ts | 4 - .../angular/32-change-detection-bug/README.md | 13 - .../32-change-detection-bug/jest.config.ts | 22 -- .../32-change-detection-bug/project.json | 83 ------- .../src/app/app.component.ts | 20 -- .../src/app/app.config.ts | 30 --- .../src/app/bar.component.ts | 9 - .../src/app/fake.service.ts | 7 - .../src/app/foo.component.ts | 9 - .../src/app/main-navigation.component.ts | 63 ----- .../32-change-detection-bug/src/index.html | 13 - .../33-decoupling-components/README.md | 13 - .../33-decoupling-components/project.json | 72 ------ .../src/app/app.component.ts | 12 - .../33-decoupling-components/src/index.html | 13 - .../tsconfig.editor.json | 11 - .../angular/39-injection-token/.eslintrc.json | 19 -- apps/angular/39-injection-token/README.md | 13 - .../angular/39-injection-token/jest.config.ts | 22 -- apps/angular/39-injection-token/project.json | 83 ------- .../src/app/app.component.ts | 22 -- .../39-injection-token/src/app/app.config.ts | 12 - .../39-injection-token/src/app/data.ts | 1 - .../src/app/phone.component.ts | 15 -- .../src/app/timer-container.component.ts | 20 -- .../src/app/timer.component.ts | 14 -- .../src/app/video.component.ts | 15 -- .../angular/39-injection-token/src/index.html | 13 - apps/angular/4-typed-context-outlet/README.md | 13 - .../4-typed-context-outlet/project.json | 73 ------ .../src/app/app.component.ts | 44 ---- .../src/app/list.component.ts | 30 --- .../src/app/person.component.ts | 21 -- .../4-typed-context-outlet/src/index.html | 13 - .../angular/44-view-transition/.eslintrc.json | 18 -- apps/angular/45-react-in-angular/README.md | 13 - .../45-react-in-angular/jest.config.ts | 22 -- apps/angular/45-react-in-angular/project.json | 81 ------- .../src/app/app.component.ts | 61 ----- .../src/app/react/ReactPost.tsx | 29 --- .../src/app/react/post.component.ts | 16 -- .../45-react-in-angular/src/index.html | 13 - .../5-crud-application/tsconfig.spec.json | 10 - .../52-lazy-load-component/tsconfig.spec.json | 15 -- .../55-back-button-navigation/README.md | 13 - .../55-back-button-navigation/jest.config.ts | 22 -- .../55-back-button-navigation/project.json | 86 ------- .../src/app/app.component.html | 1 - .../src/app/app.component.ts | 9 - .../src/app/app.config.ts | 10 - .../src/app/app.routes.ts | 24 -- .../src/app/dialog/dialog.component.html | 6 - .../src/app/dialog/dialog.component.ts | 25 -- .../src/app/home/home.component.html | 7 - .../src/app/home/home.component.ts | 10 - .../sensitive-action.component.html | 3 - .../sensitive-action.component.ts | 19 -- .../simple-action.component.html | 1 - .../simple-action/simple-action.component.ts | 19 -- .../55-back-button-navigation/src/index.html | 13 - .../55-back-button-navigation/src/styles.scss | 29 --- .../tsconfig.app.json | 11 - .../58-content-projection-condition/README.md | 13 - .../project.json | 85 ------- .../src/app/app.component.ts | 22 -- .../src/app/app.config.ts | 5 - .../src/app/card.component.ts | 25 -- .../src/index.html | 13 - .../tsconfig.app.json | 11 - .../tsconfig.json | 29 --- .../.eslintrc.json | 37 --- .../59-content-projection-defer/README.md | 13 - .../59-content-projection-defer/project.json | 83 ------- .../src/app/app.component.ts | 23 -- .../src/app/app.config.ts | 12 - .../src/app/app.routes.ts | 13 - .../src/app/expandable-card.ts | 54 ----- .../src/app/page-1.ts | 10 - .../src/app/page-2.ts | 43 ---- .../src/index.html | 13 - .../tsconfig.app.json | 11 - .../59-content-projection-defer/tsconfig.json | 29 --- .../6-structural-directive/tsconfig.app.json | 13 - apps/angular/8-pure-pipe/tsconfig.app.json | 13 - .../9-wrap-function-pipe/src/polyfills.ts | 52 ---- .../9-wrap-function-pipe/tsconfig.app.json | 13 - .../9-wrap-function-pipe/tsconfig.json | 28 --- .../simple-animations}/.eslintrc.json | 0 .../simple-animations}/README.md | 0 .../simple-animations}/jest.config.ts | 0 .../simple-animations}/project.json | 0 .../src/app/app.component.ts | 0 .../simple-animations}/src/app/app.config.ts | 0 .../simple-animations}/src/assets/.gitkeep | 0 .../simple-animations}/src/favicon.ico | Bin .../simple-animations}/src/index.html | 0 .../simple-animations}/src/main.ts | 0 .../simple-animations}/src/styles.scss | 0 .../simple-animations}/src/test-setup.ts | 0 .../simple-animations}/tailwind.config.js | 0 .../simple-animations/tsconfig.app.json | 14 ++ .../simple-animations}/tsconfig.editor.json | 0 .../simple-animations}/tsconfig.json | 0 .../simple-animations}/tsconfig.spec.json | 6 +- .../view-transition}/.eslintrc.json | 0 .../view-transition}/README.md | 0 .../view-transition}/project.json | 0 .../view-transition}/src/app/app.component.ts | 0 .../view-transition}/src/app/app.config.ts | 0 .../src/app/blog/blog.component.ts | 0 .../app/blog/thumbnail-header.component.ts | 0 .../src/app/blog/thumbnail.component.ts | 0 .../view-transition}/src/app/data.ts | 0 .../view-transition}/src/app/post.model.ts | 0 .../src/app/post/post-header.component.ts | 0 .../src/app/post/post.component.ts | 0 .../view-transition}/src/assets/.gitkeep | 0 .../view-transition}/src/assets/angular.webp | Bin .../src/assets/guard.full.webp | Bin .../src/assets/highly-custom.full.webp | Bin .../view-transition}/src/assets/profil.webp | Bin .../src/assets/signal-cd.full.webp | Bin .../view-transition}/src/favicon.ico | Bin .../view-transition}/src/index.html | 0 .../view-transition}/src/main.ts | 0 .../view-transition}/src/styles.scss | 0 .../view-transition}/tailwind.config.js | 0 .../view-transition}/tsconfig.app.json | 4 +- .../view-transition}/tsconfig.editor.json | 0 .../view-transition}/tsconfig.json | 0 .../default-vs-onpush}/.eslintrc.json | 0 .../default-vs-onpush}/README.md | 0 .../default-vs-onpush}/project.json | 0 .../src/app/app.component.ts | 0 .../default-vs-onpush}/src/app/app.config.ts | 0 .../src/app/person-list.component.ts | 0 .../src/app/random.component.ts | 0 .../default-vs-onpush}/src/assets/.gitkeep | 0 .../default-vs-onpush}/src/favicon.ico | Bin .../default-vs-onpush}/src/index.html | 0 .../default-vs-onpush}/src/main.ts | 0 .../default-vs-onpush}/src/styles.scss | 0 .../default-vs-onpush}/tailwind.config.js | 0 .../default-vs-onpush}/tsconfig.app.json | 4 +- .../default-vs-onpush}/tsconfig.editor.json | 2 +- .../default-vs-onpush}/tsconfig.json | 0 .../lazy-load-component}/.eslintrc.json | 0 .../lazy-load-component}/README.md | 0 .../lazy-load-component}/jest.config.ts | 0 .../lazy-load-component}/project.json | 0 .../src/app/app.component.ts | 0 .../src/app/app.module.ts | 0 .../src/app/placeholder.component.ts | 0 .../src/app/top.component.ts | 0 .../lazy-load-component}/src/assets/.gitkeep | 0 .../lazy-load-component}/src/favicon.ico | Bin .../lazy-load-component}/src/index.html | 0 .../lazy-load-component}/src/main.ts | 0 .../lazy-load-component}/src/styles.scss | 0 .../lazy-load-component}/src/test-setup.ts | 0 .../lazy-load-component}/tailwind.config.js | 0 .../lazy-load-component/tsconfig.app.json | 14 ++ .../lazy-load-component}/tsconfig.editor.json | 3 +- .../lazy-load-component}/tsconfig.json | 0 .../lazy-load-component}/tsconfig.spec.json | 6 +- .../memoization}/.eslintrc.json | 0 .../memoization}/README.md | 0 .../memoization}/project.json | 0 .../memoization}/src/app/app.component.ts | 0 .../memoization}/src/app/app.config.ts | 0 .../memoization}/src/app/generateList.ts | 0 .../src/app/person-list.component.ts | 0 .../memoization}/src/app/person.model.ts | 0 .../memoization}/src/assets/.gitkeep | 0 .../memoization}/src/favicon.ico | Bin .../memoization}/src/index.html | 0 .../memoization}/src/main.ts | 0 .../memoization}/src/styles.scss | 0 .../memoization}/tailwind.config.js | 0 .../memoization}/tsconfig.app.json | 4 +- .../memoization}/tsconfig.editor.json | 0 .../memoization}/tsconfig.json | 0 .../ngfor-optimization}/.eslintrc.json | 0 .../ngfor-optimization}/README.md | 0 .../ngfor-optimization}/jest.config.ts | 0 .../ngfor-optimization}/project.json | 0 .../src/app/app.component.ts | 0 .../ngfor-optimization}/src/app/app.config.ts | 0 .../src/app/generateList.ts | 0 .../src/app/list.service.ts | 0 .../src/app/person-list.component.ts | 0 .../src/app/person.model.ts | 0 .../ngfor-optimization}/src/assets/.gitkeep | 0 .../ngfor-optimization}/src/favicon.ico | Bin .../ngfor-optimization}/src/index.html | 0 .../ngfor-optimization}/src/main.ts | 0 .../ngfor-optimization}/src/styles.scss | 0 .../ngfor-optimization}/src/test-setup.ts | 0 .../ngfor-optimization}/tailwind.config.js | 0 .../ngfor-optimization/tsconfig.app.json | 14 ++ .../ngfor-optimization}/tsconfig.editor.json | 0 .../ngfor-optimization}/tsconfig.json | 0 .../ngfor-optimization}/tsconfig.spec.json | 6 +- .../optimize-change-detection}/.eslintrc.json | 0 .../optimize-change-detection}/README.md | 0 .../optimize-change-detection}/jest.config.ts | 0 .../optimize-change-detection}/project.json | 0 .../src/app/app.component.ts | 0 .../src/assets/.gitkeep | 0 .../src/favicon.ico | Bin .../optimize-change-detection}/src/index.html | 0 .../optimize-change-detection}/src/main.ts | 0 .../src/styles.scss | 0 .../src/test-setup.ts | 0 .../tsconfig.app.json | 14 ++ .../tsconfig.editor.json | 0 .../optimize-change-detection}/tsconfig.json | 0 .../tsconfig.spec.json | 6 +- .../.eslintrc.json | 0 .../content-projection-default}/README.md | 0 .../content-projection-default}/project.json | 0 .../public}/favicon.ico | Bin .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../src/app/card.component.ts | 0 .../src/index.html | 0 .../content-projection-default}/src/main.ts | 0 .../src/styles.scss | 0 .../tailwind.config.js | 0 .../tsconfig.app.json | 4 +- .../tsconfig.editor.json | 0 .../content-projection-default}/tsconfig.json | 0 .../crud-application}/.eslintrc.json | 0 .../crud-application}/README.md | 0 .../crud-application}/jest.config.ts | 0 .../crud-application}/project.json | 0 .../src/app/app.component.ts | 0 .../crud-application}/src/app/app.config.ts | 0 .../crud-application}/src/assets/.gitkeep | 0 .../crud-application}/src/favicon.ico | Bin .../crud-application}/src/index.html | 0 .../crud-application}/src/main.ts | 0 .../crud-application}/src/polyfills.ts | 0 .../crud-application}/src/styles.scss | 0 .../crud-application}/src/test-setup.ts | 0 .../crud-application/tsconfig.app.json | 15 ++ .../crud-application}/tsconfig.editor.json | 0 .../crud-application}/tsconfig.json | 0 .../crud-application}/tsconfig.spec.json | 10 +- .../projection}/.eslintrc.json | 0 .../projection}/README.md | 0 .../projection}/jest.config.ts | 0 .../projection}/project.json | 0 .../projection}/src/app/app.component.ts | 0 .../city-card/city-card.component.ts | 0 .../student-card/student-card.component.ts | 0 .../teacher-card/teacher-card.component.ts | 0 .../src/app/data-access/city.store.ts | 0 .../src/app/data-access/fake-http.service.ts | 0 .../src/app/data-access/student.store.ts | 0 .../src/app/data-access/teacher.store.ts | 0 .../projection}/src/app/model/card.model.ts | 0 .../projection}/src/app/model/city.model.ts | 0 .../src/app/model/student.model.ts | 0 .../src/app/model/teacher.model.ts | 0 .../src/app/ui/card/card.component.ts | 0 .../app/ui/list-item/list-item.component.ts | 0 .../projection}/src/assets/.gitkeep | 0 .../projection}/src/assets/img/city.png | Bin .../projection}/src/assets/img/student.webp | Bin .../projection}/src/assets/img/teacher.png | Bin .../projection}/src/assets/svg/trash.svg | 0 .../projection}/src/favicon.ico | Bin .../projection}/src/index.html | 0 .../projection}/src/main.ts | 0 .../projection}/src/polyfills.ts | 0 .../projection}/src/styles.scss | 0 .../projection}/src/test-setup.ts | 0 .../projection}/tailwind.config.js | 0 .../projection/tsconfig.app.json | 15 ++ .../projection}/tsconfig.editor.json | 0 .../projection}/tsconfig.json | 0 .../projection}/tsconfig.spec.json | 7 +- .../.eslintrc.json | 0 .../master-dependency-injection}/README.md | 0 .../master-dependency-injection}/project.json | 0 .../src/app/app.component.ts | 0 .../src/app/currency.pipe.ts | 0 .../src/app/currency.service.ts | 0 .../src/app/product.model.ts | 0 .../src/assets/.gitkeep | 0 .../src/favicon.ico | Bin .../src/index.html | 0 .../master-dependency-injection}/src/main.ts | 0 .../src/styles.scss | 0 .../tsconfig.app.json | 13 + .../tsconfig.editor.json | 0 .../tsconfig.json | 0 .../pure-pipe}/.eslintrc.json | 0 .../pure-pipe}/README.md | 0 .../pure-pipe}/project.json | 0 .../pure-pipe}/src/app/app.component.ts | 0 .../pure-pipe}/src/assets/.gitkeep | 0 .../pure-pipe}/src/favicon.ico | Bin .../pure-pipe}/src/index.html | 0 .../pure-pipe}/src/main.ts | 0 .../pure-pipe}/src/polyfills.ts | 0 .../pure-pipe}/src/styles.scss | 0 .../pure-pipe}/tsconfig.app.json | 3 +- .../pure-pipe}/tsconfig.editor.json | 0 .../pure-pipe}/tsconfig.json | 0 .../structural-directive}/.eslintrc.json | 0 .../structural-directive}/README.md | 0 .../structural-directive}/project.json | 0 .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../src/app/button.component.ts | 0 .../src/app/dashboard/admin.component.ts | 0 .../src/app/dashboard/manager.component.ts | 0 .../src/app/information.component.ts | 0 .../src/app/login.component.ts | 0 .../structural-directive}/src/app/routes.ts | 0 .../src/app/user.model.ts | 0 .../src/app/user.store.ts | 0 .../structural-directive}/src/assets/.gitkeep | 0 .../structural-directive}/src/favicon.ico | Bin .../structural-directive}/src/index.html | 0 .../structural-directive}/src/main.ts | 0 .../structural-directive}/src/polyfills.ts | 0 .../structural-directive}/src/styles.scss | 0 .../structural-directive}/tailwind.config.js | 0 .../structural-directive}/tsconfig.app.json | 3 +- .../tsconfig.editor.json | 0 .../structural-directive}/tsconfig.json | 0 .../utility-wrapper-pipe}/.eslintrc.json | 0 .../utility-wrapper-pipe}/README.md | 0 .../utility-wrapper-pipe}/project.json | 0 .../src/app/app.component.ts | 0 .../src/app/person.utils.ts | 0 .../utility-wrapper-pipe}/src/assets/.gitkeep | 0 .../utility-wrapper-pipe}/src/favicon.ico | Bin .../utility-wrapper-pipe}/src/index.html | 0 .../utility-wrapper-pipe}/src/main.ts | 0 .../utility-wrapper-pipe}/src/polyfills.ts | 0 .../utility-wrapper-pipe}/src/styles.scss | 0 .../utility-wrapper-pipe}/tsconfig.app.json | 3 +- .../tsconfig.editor.json | 0 .../utility-wrapper-pipe}/tsconfig.json | 0 .../wrap-function-pipe}/.eslintrc.json | 0 .../wrap-function-pipe}/README.md | 0 .../wrap-function-pipe}/project.json | 0 .../src/app/app.component.ts | 0 .../wrap-function-pipe}/src/assets/.gitkeep | 0 .../wrap-function-pipe}/src/favicon.ico | Bin .../wrap-function-pipe}/src/index.html | 0 .../wrap-function-pipe}/src/main.ts | 0 .../wrap-function-pipe}/src/polyfills.ts | 0 .../wrap-function-pipe}/src/styles.scss | 0 .../wrap-function-pipe}/tsconfig.app.json | 3 +- .../wrap-function-pipe}/tsconfig.editor.json | 0 .../wrap-function-pipe}/tsconfig.json | 0 .../src/test-setup.ts | 2 - .../tsconfig.app.json | 11 - .../41-control-value-accessor/tsconfig.json | 33 --- .../tsconfig.app.json | 11 - .../avoid-losing-form-data}/.eslintrc.json | 0 .../README.md | 0 .../project.json | 0 .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../src/app/app.routes.ts | 0 .../src/app/pages/join.component.ts | 0 .../src/app/pages/page.component.ts | 0 .../src/app/ui/dialog.component.ts | 0 .../src/app/ui/form.component.ts | 0 .../src/app/ui/nav.component.ts | 0 .../src/assets/.gitkeep | 0 .../avoid-losing-form-data}/src/favicon.ico | Bin .../src/index.html | 0 .../avoid-losing-form-data}/src/main.ts | 0 .../avoid-losing-form-data}/src/styles.scss | 0 .../tailwind.config.js | 0 .../avoid-losing-form-data}/tsconfig.app.json | 0 .../tsconfig.editor.json | 0 .../tsconfig.json | 0 .../control-value-accessor}/.eslintrc.json | 0 .../README.md | 0 .../jest.config.ts | 0 .../project.json | 0 .../src/app/app.component.ts | 0 .../feedback-form.component.html | 0 .../feedback-form.component.scss | 0 .../feedback-form/feedback-form.component.ts | 0 .../rating-control.component.html | 0 .../rating-control.component.scss | 0 .../rating-control.component.ts | 0 .../src/assets/.gitkeep | 0 .../control-value-accessor/src}/favicon.ico | Bin .../src/index.html | 0 .../control-value-accessor}/src/main.ts | 0 .../control-value-accessor}/src/styles.scss | 0 .../control-value-accessor}/src/test-setup.ts | 0 .../tailwind.config.js | 0 .../control-value-accessor}/tsconfig.app.json | 0 .../tsconfig.editor.json | 0 .../control-value-accessor}/tsconfig.json | 0 .../tsconfig.spec.json | 0 apps/nx/42-static-vs-dynamic-import/README.md | 13 - .../42-static-vs-dynamic-import/project.json | 74 ------ .../src/app/app.component.ts | 26 -- .../src/app/app.config.ts | 16 -- .../src/index.html | 16 -- .../tsconfig.app.json | 11 - .../src/styles.scss | 1 - .../tsconfig.app.json | 11 - .../34-default-vs-onpush/tsconfig.app.json | 11 - .../34-default-vs-onpush/tsconfig.json | 29 --- .../35-memoization/src/styles.scss | 5 - .../35-memoization/tsconfig.app.json | 11 - .../35-memoization/tsconfig.editor.json | 7 - apps/performance/35-memoization/tsconfig.json | 29 --- .../36-ngfor-optimization/.eslintrc.json | 36 --- .../36-ngfor-optimization/src/main.ts | 7 - .../36-ngfor-optimization/src/styles.scss | 5 - .../36-ngfor-optimization/src/test-setup.ts | 2 - .../36-ngfor-optimization/tailwind.config.js | 14 -- .../36-ngfor-optimization/tsconfig.app.json | 11 - .../tsconfig.editor.json | 7 - .../36-ngfor-optimization/tsconfig.json | 32 --- .../36-ngfor-optimization/tsconfig.spec.json | 15 -- .../37-optimize-big-list/.eslintrc.json | 36 --- .../37-optimize-big-list/README.md | 13 - .../37-optimize-big-list/project.json | 76 ------ .../src/app/app.component.ts | 38 --- .../src/app/app.config.ts | 6 - .../src/app/generateList.ts | 15 -- .../src/app/list.service.ts | 44 ---- .../src/app/person-list.component.ts | 25 -- .../src/app/person.model.ts | 4 - .../37-optimize-big-list/src/favicon.ico | Bin 15086 -> 0 bytes .../37-optimize-big-list/src/index.html | 13 - .../37-optimize-big-list/src/main.ts | 7 - .../37-optimize-big-list/src/styles.scss | 5 - .../37-optimize-big-list/tailwind.config.js | 14 -- .../37-optimize-big-list/tsconfig.app.json | 11 - .../37-optimize-big-list/tsconfig.editor.json | 7 - .../37-optimize-big-list/tsconfig.json | 29 --- apps/performance/40-web-workers/README.md | 13 - apps/performance/40-web-workers/project.json | 70 ------ .../40-web-workers/src/app/app.component.ts | 30 --- .../src/app/heavy-calculation.service.ts | 30 --- .../unknown-person.component.css | 225 ------------------ .../unknown-person.component.ts | 35 --- .../40-web-workers/src/favicon.ico | Bin 15086 -> 0 bytes .../performance/40-web-workers/src/index.html | 13 - apps/performance/40-web-workers/src/main.ts | 4 - .../40-web-workers/src/styles.scss | 5 - .../40-web-workers/tailwind.config.js | 14 -- .../40-web-workers/tsconfig.app.json | 11 - .../40-web-workers/tsconfig.editor.json | 7 - apps/performance/40-web-workers/tsconfig.json | 29 --- .../anchor-navigation}/.eslintrc.json | 0 .../anchor-navigation}/README.md | 0 .../anchor-navigation}/jest.config.ts | 0 .../anchor-navigation}/project.json | 0 .../src/app/app.component.ts | 0 .../anchor-navigation}/src/app/app.config.ts | 0 .../anchor-navigation}/src/app/app.routes.ts | 0 .../src/app/foo.component.ts | 0 .../src/app/home.component.ts | 0 .../src/app/nav-button.component.ts | 0 .../anchor-navigation}/src/assets/.gitkeep | 0 .../anchor-navigation/src}/favicon.ico | Bin .../anchor-navigation}/src/index.html | 0 .../anchor-navigation}/src/main.ts | 0 .../anchor-navigation}/src/styles.scss | 0 .../anchor-navigation}/src/test-setup.ts | 0 .../anchor-navigation}/tailwind.config.js | 0 .../anchor-navigation/tsconfig.app.json | 14 ++ .../anchor-navigation}/tsconfig.editor.json | 0 .../anchor-navigation}/tsconfig.json | 0 .../anchor-navigation}/tsconfig.spec.json | 6 +- .../async-redirect}/.eslintrc.json | 0 .../async-redirect}/README.md | 0 .../async-redirect}/project.json | 0 .../async-redirect}/public/favicon.ico | Bin .../async-redirect}/src/app/admin-page.ts | 0 .../async-redirect}/src/app/app.config.ts | 0 .../async-redirect}/src/app/app.ts | 0 .../async-redirect}/src/app/dashboard.ts | 0 .../async-redirect}/src/app/profile-page.ts | 0 .../async-redirect}/src/app/routes.ts | 0 .../async-redirect}/src/app/user-page.ts | 0 .../src/app/user-profile.service.ts | 0 .../async-redirect}/src/index.html | 0 .../async-redirect}/src/main.ts | 0 .../async-redirect}/src/styles.scss | 0 .../async-redirect}/tailwind.config.js | 0 .../async-redirect}/tsconfig.app.json | 0 .../async-redirect}/tsconfig.json | 0 .../router-input}/.eslintrc.json | 0 .../router-input}/README.md | 0 .../router-input}/project.json | 0 .../router-input}/src/app/app.component.ts | 0 .../router-input}/src/app/app.config.ts | 0 .../router-input}/src/app/app.routes.ts | 0 .../router-input}/src/app/home.component.ts | 0 .../router-input}/src/app/test.component.ts | 0 .../router-input}/src/assets/.gitkeep | 0 .../router-input}/src/favicon.ico | Bin .../router-input}/src/index.html | 0 .../router-input}/src/main.ts | 0 .../router-input}/src/styles.scss | 0 apps/routing/router-input/tsconfig.app.json | 13 + .../router-input}/tsconfig.editor.json | 0 .../router-input}/tsconfig.json | 0 .../src/assets/.gitkeep | 0 .../src/favicon.ico | Bin 15086 -> 0 bytes .../11-high-order-operator-bug/src/main.ts | 4 - .../src/styles.scss | 1 - .../tsconfig.editor.json | 7 - apps/rxjs/14-race-condition/.eslintrc.json | 36 --- .../14-race-condition/src/assets/.gitkeep | 0 apps/rxjs/14-race-condition/src/favicon.ico | Bin 15086 -> 0 bytes .../14-race-condition/tsconfig.editor.json | 7 - apps/rxjs/38-catch-error/.eslintrc.json | 36 --- apps/rxjs/38-catch-error/src/assets/.gitkeep | 0 apps/rxjs/38-catch-error/src/favicon.ico | Bin 15086 -> 0 bytes apps/rxjs/38-catch-error/src/main.ts | 7 - apps/rxjs/38-catch-error/src/styles.scss | 5 - apps/rxjs/38-catch-error/src/test-setup.ts | 2 - apps/rxjs/38-catch-error/tailwind.config.js | 14 -- apps/rxjs/38-catch-error/tsconfig.app.json | 11 - apps/rxjs/38-catch-error/tsconfig.editor.json | 7 - apps/rxjs/38-catch-error/tsconfig.json | 32 --- apps/rxjs/38-catch-error/tsconfig.spec.json | 15 -- .../src/assets/.gitkeep | 0 .../49-hold-to-save-button/src/favicon.ico | Bin 15086 -> 0 bytes apps/rxjs/49-hold-to-save-button/src/main.ts | 7 - .../49-hold-to-save-button/src/test-setup.ts | 2 - .../49-hold-to-save-button/tailwind.config.js | 14 -- .../49-hold-to-save-button/tsconfig.app.json | 11 - .../rxjs/49-hold-to-save-button/tsconfig.json | 33 --- .../49-hold-to-save-button/tsconfig.spec.json | 15 -- .../catch-error}/.eslintrc.json | 0 .../{38-catch-error => catch-error}/README.md | 0 .../jest.config.ts | 0 .../project.json | 0 .../src/app/app.component.css | 0 .../src/app/app.component.spec.ts | 0 .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../catch-error}/src/assets/.gitkeep | 0 .../catch-error/src}/favicon.ico | Bin .../src/index.html | 0 .../catch-error}/src/main.ts | 0 .../catch-error}/src/styles.scss | 0 .../catch-error}/src/test-setup.ts | 0 .../catch-error}/tailwind.config.js | 0 .../catch-error}/tsconfig.app.json | 0 .../catch-error}/tsconfig.editor.json | 0 .../catch-error}/tsconfig.json | 0 .../catch-error}/tsconfig.spec.json | 0 .../high-order-operator-bug}/.eslintrc.json | 0 .../README.md | 0 .../project.json | 0 .../src/app/app.component.ts | 0 .../src/app/app.service.ts | 0 .../src/app/localDB.service.ts | 0 .../src/assets/.gitkeep | 0 .../high-order-operator-bug}/src/favicon.ico | Bin .../src/index.html | 0 .../high-order-operator-bug}/src/main.ts | 0 .../high-order-operator-bug}/src/styles.scss | 0 .../tsconfig.app.json | 0 .../tsconfig.editor.json | 0 .../tsconfig.json | 0 .../hold-to-save-button}/.eslintrc.json | 0 .../README.md | 0 .../jest.config.ts | 0 .../project.json | 0 .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../hold-to-save-button}/src/assets/.gitkeep | 0 .../hold-to-save-button}/src/favicon.ico | Bin .../src/index.html | 0 .../hold-to-save-button}/src/main.ts | 0 .../src/styles.scss | 0 .../hold-to-save-button}/src/test-setup.ts | 0 .../hold-to-save-button}/tailwind.config.js | 0 .../hold-to-save-button}/tsconfig.app.json | 0 .../hold-to-save-button}/tsconfig.editor.json | 0 .../hold-to-save-button}/tsconfig.json | 0 .../hold-to-save-button}/tsconfig.spec.json | 0 .../race-condition}/.eslintrc.json | 0 .../README.md | 0 .../cypress.config.ts | 0 .../cypress/fixtures/example.json | 0 .../cypress/support/commands.ts | 0 .../cypress/support/component-index.html | 0 .../cypress/support/component.ts | 0 .../cypress/tsconfig.json | 0 .../jest.config.ts | 0 .../project.json | 0 .../src/app/app.component.cy.ts | 0 .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../src/app/topic-dialog.component.ts | 0 .../src/app/topic.service.ts | 0 .../race-condition}/src/assets/.gitkeep | 0 .../race-condition}/src/favicon.ico | Bin .../src/index.html | 0 .../src/main.ts | 0 .../src/styles.scss | 0 .../src/test-setup.ts | 0 .../tsconfig.app.json | 0 .../race-condition}/tsconfig.editor.json | 0 .../tsconfig.json | 0 .../race-condition}/tsconfig.spec.json | 0 .../30-interop-rxjs-signal/.eslintrc.json | 36 --- apps/signal/30-interop-rxjs-signal/README.md | 13 - .../30-interop-rxjs-signal/jest.config.ts | 22 -- .../30-interop-rxjs-signal/project.json | 86 ------- .../src/app/app.component.ts | 12 - .../src/app/app.config.ts | 29 --- .../src/app/detail/detail.component.ts | 44 ---- .../src/app/list/photos.component.ts | 128 ---------- .../src/app/list/photos.store.ts | 135 ----------- .../src/app/photo.model.ts | 22 -- .../src/app/photos.service.ts | 43 ---- .../src/assets/.gitkeep | 0 .../30-interop-rxjs-signal/src/favicon.ico | Bin 15086 -> 0 bytes .../30-interop-rxjs-signal/src/index.html | 13 - .../signal/30-interop-rxjs-signal/src/main.ts | 7 - .../30-interop-rxjs-signal/src/styles.scss | 5 - .../30-interop-rxjs-signal/src/test-setup.ts | 2 - .../30-interop-rxjs-signal/tailwind.config.js | 14 -- .../30-interop-rxjs-signal/tsconfig.app.json | 11 - .../tsconfig.editor.json | 7 - .../30-interop-rxjs-signal/tsconfig.json | 32 --- .../30-interop-rxjs-signal/tsconfig.spec.json | 15 -- apps/signal/43-signal-input/.eslintrc.json | 36 --- .../43-signal-input/src/assets/.gitkeep | 0 apps/signal/43-signal-input/src/favicon.ico | Bin 15086 -> 0 bytes apps/signal/43-signal-input/src/main.ts | 7 - apps/signal/43-signal-input/src/styles.scss | 5 - .../signal/43-signal-input/tailwind.config.js | 14 -- apps/signal/43-signal-input/tsconfig.app.json | 11 - .../43-signal-input/tsconfig.editor.json | 7 - apps/signal/43-signal-input/tsconfig.json | 30 --- apps/signal/50-bug-in-effect/.eslintrc.json | 36 --- .../50-bug-in-effect/src/assets/.gitkeep | 0 apps/signal/50-bug-in-effect/src/favicon.ico | Bin 15086 -> 0 bytes apps/signal/50-bug-in-effect/src/main.ts | 7 - apps/signal/50-bug-in-effect/src/styles.scss | 5 - .../50-bug-in-effect/tailwind.config.js | 14 -- .../signal/50-bug-in-effect/tsconfig.app.json | 11 - .../51-function-call-effect/.eslintrc.json | 36 --- .../src/app/app.config.ts | 5 - .../src/assets/.gitkeep | 0 .../51-function-call-effect/src/favicon.ico | Bin 15086 -> 0 bytes .../51-function-call-effect/src/main.ts | 7 - .../51-function-call-effect/src/styles.scss | 5 - .../tailwind.config.js | 14 -- .../51-function-call-effect/tsconfig.app.json | 11 - .../tsconfig.editor.json | 6 - .../53-big-signal-performance/.eslintrc.json | 19 -- .../53-big-signal-performance/README.md | 13 - .../53-big-signal-performance/project.json | 70 ------ .../src/app/address.component.ts | 20 -- .../src/app/app.component.ts | 26 -- .../src/app/app.config.ts | 5 - .../src/app/job.component.ts | 19 -- .../src/app/name.component.ts | 17 -- .../src/app/note.component.ts | 17 -- .../src/app/user-form.component.ts | 99 -------- .../src/app/user.service.ts | 16 -- .../src/assets/.gitkeep | 0 .../53-big-signal-performance/src/favicon.ico | Bin 15086 -> 0 bytes .../53-big-signal-performance/src/index.html | 13 - .../53-big-signal-performance/src/main.ts | 7 - .../53-big-signal-performance/src/styles.scss | 5 - .../tailwind.config.js | 14 -- .../tsconfig.app.json | 11 - .../tsconfig.editor.json | 6 - .../.eslintrc.json | 19 -- .../src/assets/.gitkeep | 0 .../src/favicon.ico | Bin 15086 -> 0 bytes .../54-pipe-observable-to-signal/src/main.ts | 4 - .../tailwind.config.js | 14 -- .../tsconfig.app.json | 11 - .../tsconfig.editor.json | 6 - .../signal/56-forms-and-signal/.eslintrc.json | 36 --- .../56-forms-and-signal/public/favicon.ico | Bin 15086 -> 0 bytes apps/signal/56-forms-and-signal/src/main.ts | 7 - .../56-forms-and-signal/src/styles.scss | 5 - .../56-forms-and-signal/tailwind.config.js | 14 -- .../56-forms-and-signal/tsconfig.app.json | 11 - .../56-forms-and-signal/tsconfig.editor.json | 6 - apps/signal/56-forms-and-signal/tsconfig.json | 30 --- .../bug-in-effect}/.eslintrc.json | 0 .../README.md | 0 .../project.json | 0 .../src/app/app.component.ts | 0 .../bug-in-effect}/src/app/app.config.ts | 0 .../bug-in-effect}/src/assets/.gitkeep | 0 .../bug-in-effect}/src/favicon.ico | Bin .../src/index.html | 0 .../bug-in-effect}/src/main.ts | 0 .../bug-in-effect}/src/styles.scss | 0 .../bug-in-effect}/tailwind.config.js | 0 .../bug-in-effect}/tsconfig.app.json | 0 .../bug-in-effect}/tsconfig.editor.json | 0 .../tsconfig.json | 0 .../forms-and-signal}/.eslintrc.json | 0 .../README.md | 0 .../project.json | 0 .../forms-and-signal/public}/favicon.ico | Bin .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../src/app/app.routes.ts | 0 .../src/app/checkout.component.ts | 0 .../src/app/dashboard.component.ts | 0 .../src/app/order.component.ts | 0 .../src/app/payment.component.ts | 0 .../src/app/products.ts | 0 .../src/index.html | 0 .../forms-and-signal}/src/main.ts | 0 .../forms-and-signal}/src/styles.scss | 0 .../forms-and-signal}/tailwind.config.js | 0 .../forms-and-signal}/tsconfig.app.json | 0 .../forms-and-signal}/tsconfig.editor.json | 0 .../tsconfig.json | 0 .../function-call-effect}/.eslintrc.json | 0 .../README.md | 0 .../project.json | 0 .../src/app/action.component.ts | 0 .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../src/app/user.service.ts | 0 .../function-call-effect}/src/assets/.gitkeep | 0 .../function-call-effect}/src/favicon.ico | Bin .../src/index.html | 0 .../function-call-effect}/src/main.ts | 0 .../function-call-effect}/src/styles.scss | 0 .../function-call-effect}/tailwind.config.js | 0 .../function-call-effect}/tsconfig.app.json | 0 .../tsconfig.editor.json | 0 .../tsconfig.json | 0 .../pipe-observable-to-signal}/.eslintrc.json | 0 .../README.md | 0 .../project.json | 0 .../src/app/app.component.ts | 0 .../src/app/currency.pipe.ts | 0 .../src/app/currency.service.ts | 0 .../src/app/product-row.component.ts | 0 .../src/app/product.model.ts | 0 .../src/assets/.gitkeep | 0 .../src/favicon.ico | Bin .../src/index.html | 0 .../pipe-observable-to-signal}/src/main.ts | 0 .../src/styles.scss | 0 .../tailwind.config.js | 0 .../tsconfig.app.json | 0 .../tsconfig.editor.json | 0 .../tsconfig.json | 0 .../signal-input}/.eslintrc.json | 0 .../README.md | 0 .../project.json | 0 .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../src/app/user.component.ts | 0 .../signal-input}/src/assets/.gitkeep | 0 .../signal-input}/src/favicon.ico | Bin .../src/index.html | 0 .../signal-input}/src/main.ts | 0 .../signal-input}/src/styles.scss | 0 .../signal-input}/tailwind.config.js | 0 .../signal-input}/tsconfig.app.json | 0 .../signal-input}/tsconfig.editor.json | 0 .../signal-input}/tsconfig.json | 0 .../module-to-standalone}/.eslintrc.json | 0 .../module-to-standalone}/README.md | 0 .../module-to-standalone}/project.json | 0 .../src/app/app.component.ts | 0 .../src/app/app.module.ts | 0 .../module-to-standalone}/src/assets/.gitkeep | 0 .../module-to-standalone}/src/favicon.ico | Bin .../module-to-standalone}/src/index.html | 0 .../module-to-standalone}/src/main.ts | 0 .../module-to-standalone}/src/styles.scss | 0 .../module-to-standalone}/tailwind.config.js | 0 .../module-to-standalone/tsconfig.app.json | 13 + .../tsconfig.editor.json | 2 +- .../module-to-standalone}/tsconfig.json | 0 apps/testing/17-router/.eslintrc.json | 36 --- apps/testing/17-router/README.md | 13 - apps/testing/17-router/cypress.config.ts | 8 - .../17-router/cypress/fixtures/example.json | 5 - .../17-router/cypress/support/commands.ts | 25 -- .../cypress/support/component-index.html | 12 - .../17-router/cypress/support/component.ts | 17 -- apps/testing/17-router/cypress/tsconfig.json | 18 -- apps/testing/17-router/jest.config.ts | 22 -- apps/testing/17-router/project.json | 97 -------- .../17-router/src/app/app.component.cy.ts | 33 --- .../17-router/src/app/app.component.spec.ts | 31 --- .../17-router/src/app/app.component.ts | 41 ---- apps/testing/17-router/src/app/app.config.ts | 6 - apps/testing/17-router/src/app/app.routes.ts | 28 --- apps/testing/17-router/src/app/book.guard.ts | 20 -- apps/testing/17-router/src/app/book.model.ts | 17 -- .../src/app/no-book-search.component.ts | 9 - .../17-router/src/app/search.component.ts | 66 ----- .../17-router/src/app/shelf.component.ts | 30 --- apps/testing/17-router/src/assets/.gitkeep | 0 apps/testing/17-router/src/favicon.ico | Bin 15086 -> 0 bytes apps/testing/17-router/src/index.html | 13 - apps/testing/17-router/src/main.ts | 8 - apps/testing/17-router/src/styles.scss | 1 - apps/testing/17-router/src/test-setup.ts | 2 - apps/testing/17-router/tsconfig.app.json | 21 -- apps/testing/17-router/tsconfig.editor.json | 7 - apps/testing/17-router/tsconfig.json | 35 --- apps/testing/17-router/tsconfig.spec.json | 15 -- .../18-nested-components/.eslintrc.json | 19 -- apps/testing/18-nested-components/README.md | 13 - .../18-nested-components/cypress.config.ts | 8 - .../cypress/fixtures/example.json | 5 - .../cypress/support/commands.ts | 25 -- .../cypress/support/component-index.html | 12 - .../cypress/support/component.ts | 17 -- .../cypress/tsconfig.json | 18 -- .../18-nested-components/jest.config.ts | 21 -- .../testing/18-nested-components/project.json | 97 -------- .../src/app/app.component.ts | 11 - .../src/app/child.component.cy.ts | 18 -- .../src/app/child.component.spec.ts | 16 -- .../src/app/child.component.ts | 81 ------- .../src/app/http.service.ts | 8 - .../18-nested-components/src/assets/.gitkeep | 0 .../18-nested-components/src/favicon.ico | Bin 15086 -> 0 bytes .../18-nested-components/src/index.html | 13 - apps/testing/18-nested-components/src/main.ts | 4 - .../18-nested-components/src/styles.scss | 1 - .../18-nested-components/src/test-setup.ts | 2 - .../18-nested-components/tsconfig.app.json | 21 -- .../18-nested-components/tsconfig.editor.json | 7 - .../18-nested-components/tsconfig.json | 35 --- apps/testing/19-input-output/.eslintrc.json | 36 --- apps/testing/19-input-output/README.md | 13 - .../testing/19-input-output/cypress.config.ts | 8 - .../cypress/fixtures/example.json | 5 - .../cypress/support/commands.ts | 25 -- .../cypress/support/component-index.html | 12 - .../cypress/support/component.ts | 17 -- .../19-input-output/cypress/tsconfig.json | 18 -- apps/testing/19-input-output/jest.config.ts | 21 -- apps/testing/19-input-output/project.json | 97 -------- .../19-input-output/src/app/app.component.ts | 15 -- .../src/app/counter.component.cy.ts | 13 - .../src/app/counter.component.spec.ts | 27 --- .../src/app/counter.component.ts | 32 --- .../19-input-output/src/assets/.gitkeep | 0 apps/testing/19-input-output/src/favicon.ico | Bin 15086 -> 0 bytes apps/testing/19-input-output/src/index.html | 13 - apps/testing/19-input-output/src/main.ts | 4 - apps/testing/19-input-output/src/styles.scss | 1 - .../testing/19-input-output/src/test-setup.ts | 2 - .../testing/19-input-output/tsconfig.app.json | 21 -- .../19-input-output/tsconfig.editor.json | 7 - apps/testing/19-input-output/tsconfig.json | 35 --- .../19-input-output/tsconfig.spec.json | 15 -- apps/testing/20-modal/.eslintrc.json | 36 --- apps/testing/20-modal/README.md | 13 - apps/testing/20-modal/cypress.config.ts | 8 - .../20-modal/cypress/fixtures/example.json | 5 - .../20-modal/cypress/support/commands.ts | 25 -- .../cypress/support/component-index.html | 12 - .../20-modal/cypress/support/component.ts | 17 -- apps/testing/20-modal/cypress/tsconfig.json | 18 -- apps/testing/20-modal/jest.config.ts | 21 -- apps/testing/20-modal/project.json | 100 -------- .../20-modal/src/app/app.component.cy.ts | 19 -- .../20-modal/src/app/app.component.spec.ts | 16 -- .../testing/20-modal/src/app/app.component.ts | 64 ----- apps/testing/20-modal/src/app/app.config.ts | 5 - apps/testing/20-modal/src/app/error.dialog.ts | 20 -- .../src/app/profil-confirmation.dialog.ts | 19 -- apps/testing/20-modal/src/assets/.gitkeep | 0 apps/testing/20-modal/src/favicon.ico | Bin 15086 -> 0 bytes apps/testing/20-modal/src/index.html | 13 - apps/testing/20-modal/src/main.ts | 8 - apps/testing/20-modal/src/styles.scss | 5 - apps/testing/20-modal/src/test-setup.ts | 2 - apps/testing/20-modal/tailwind.config.js | 14 -- apps/testing/20-modal/tsconfig.app.json | 21 -- apps/testing/20-modal/tsconfig.editor.json | 7 - apps/testing/20-modal/tsconfig.json | 35 --- apps/testing/20-modal/tsconfig.spec.json | 15 -- apps/testing/23-harness/.eslintrc.json | 36 --- apps/testing/23-harness/README.md | 13 - apps/testing/23-harness/jest.config.ts | 21 -- apps/testing/23-harness/project.json | 87 ------- .../23-harness/src/app/app.component.ts | 12 - apps/testing/23-harness/src/app/app.config.ts | 6 - .../src/app/child.component.spec.ts | 38 --- .../23-harness/src/app/child.component.ts | 119 --------- apps/testing/23-harness/src/assets/.gitkeep | 0 apps/testing/23-harness/src/favicon.ico | Bin 15086 -> 0 bytes apps/testing/23-harness/src/index.html | 16 -- apps/testing/23-harness/src/main.ts | 7 - apps/testing/23-harness/src/styles.scss | 29 --- apps/testing/23-harness/src/test-setup.ts | 2 - apps/testing/23-harness/tailwind.config.js | 14 -- apps/testing/23-harness/tsconfig.app.json | 11 - apps/testing/23-harness/tsconfig.editor.json | 7 - apps/testing/23-harness/tsconfig.json | 32 --- apps/testing/23-harness/tsconfig.spec.json | 16 -- .../24-harness-creation/.eslintrc.json | 36 --- apps/testing/24-harness-creation/README.md | 13 - .../24-harness-creation/jest.config.ts | 21 -- apps/testing/24-harness-creation/project.json | 87 ------- .../src/app/app.component.spec.ts | 22 -- .../src/app/app.component.ts | 27 --- .../24-harness-creation/src/app/app.config.ts | 6 - .../src/app/slider.component.ts | 75 ------ .../src/app/slider.harness.ts | 5 - .../24-harness-creation/src/assets/.gitkeep | 0 .../24-harness-creation/src/favicon.ico | Bin 15086 -> 0 bytes .../24-harness-creation/src/index.html | 16 -- apps/testing/24-harness-creation/src/main.ts | 7 - .../24-harness-creation/src/styles.scss | 30 --- .../24-harness-creation/src/test-setup.ts | 2 - .../24-harness-creation/tailwind.config.js | 14 -- .../24-harness-creation/tsconfig.app.json | 11 - .../24-harness-creation/tsconfig.editor.json | 7 - .../testing/24-harness-creation/tsconfig.json | 32 --- .../24-harness-creation/tsconfig.spec.json | 16 -- apps/testing/28-checkbox/.eslintrc.json | 36 --- apps/testing/28-checkbox/README.md | 13 - apps/testing/28-checkbox/jest.config.ts | 22 -- apps/testing/28-checkbox/project.json | 83 ------- .../28-checkbox/src/app/app.component.spec.ts | 10 - .../28-checkbox/src/app/app.component.ts | 28 --- apps/testing/28-checkbox/src/assets/.gitkeep | 0 apps/testing/28-checkbox/src/favicon.ico | Bin 15086 -> 0 bytes apps/testing/28-checkbox/src/index.html | 13 - apps/testing/28-checkbox/src/main.ts | 4 - apps/testing/28-checkbox/src/styles.scss | 5 - apps/testing/28-checkbox/src/test-setup.ts | 2 - apps/testing/28-checkbox/tailwind.config.js | 14 -- apps/testing/28-checkbox/tsconfig.app.json | 11 - apps/testing/28-checkbox/tsconfig.editor.json | 7 - apps/testing/28-checkbox/tsconfig.json | 32 --- apps/testing/28-checkbox/tsconfig.spec.json | 15 -- .../29-real-life-application/.eslintrc.json | 36 --- .../29-real-life-application/README.md | 13 - .../cypress.config.ts | 8 - .../cypress/fixtures/example.json | 5 - .../cypress/support/commands.ts | 25 -- .../cypress/support/component-index.html | 12 - .../cypress/support/component.ts | 17 -- .../cypress/tsconfig.json | 18 -- .../29-real-life-application/jest.config.ts | 21 -- .../29-real-life-application/project.json | 100 -------- .../src/app/app.component.ts | 11 - .../src/app/app.config.ts | 7 - .../src/app/app.route.ts | 25 -- .../src/app/backend.service.ts | 109 --------- .../src/app/detail/detail.component.ts | 56 ----- .../src/app/detail/detail.store.ts | 66 ----- .../src/app/list/list.component.spec.ts | 112 --------- .../src/app/list/list.component.ts | 71 ------ .../src/app/list/ticket.store.spec.ts | 29 --- .../src/app/list/ticket.store.ts | 180 -------------- .../src/app/list/ui/add.component.ts | 61 ----- .../src/app/list/ui/row.component.spec.ts | 41 ---- .../src/app/list/ui/row.component.ts | 93 -------- .../src/assets/.gitkeep | 0 .../29-real-life-application/src/favicon.ico | Bin 15086 -> 0 bytes .../29-real-life-application/src/index.html | 13 - .../29-real-life-application/src/main.ts | 8 - .../29-real-life-application/src/styles.scss | 13 - .../src/test-setup.ts | 2 - .../tailwind.config.js | 14 -- .../tsconfig.app.json | 21 -- .../tsconfig.editor.json | 7 - .../29-real-life-application/tsconfig.json | 35 --- .../tsconfig.spec.json | 15 -- .../15-function-overload/.eslintrc.json | 36 --- .../typescript/15-function-overload/README.md | 13 - .../15-function-overload/project.json | 73 ------ .../src/app/app.component.ts | 14 -- .../src/app/vehicle.utils.ts | 55 ----- .../15-function-overload/src/assets/.gitkeep | 0 .../15-function-overload/src/favicon.ico | Bin 15086 -> 0 bytes .../15-function-overload/src/index.html | 13 - .../15-function-overload/src/main.ts | 4 - .../15-function-overload/src/styles.scss | 1 - .../15-function-overload/tsconfig.app.json | 11 - .../15-function-overload/tsconfig.editor.json | 7 - .../15-function-overload/tsconfig.json | 29 --- .../47-enums-vs-union-types/.eslintrc.json | 36 --- .../47-enums-vs-union-types/README.md | 13 - .../47-enums-vs-union-types/project.json | 70 ------ .../src/app/app.component.ts | 82 ------- .../src/app/app.config.ts | 5 - .../src/assets/.gitkeep | 0 .../47-enums-vs-union-types/src/favicon.ico | Bin 15086 -> 0 bytes .../47-enums-vs-union-types/src/index.html | 13 - .../47-enums-vs-union-types/src/main.ts | 7 - .../47-enums-vs-union-types/src/styles.scss | 5 - .../tailwind.config.js | 14 -- .../47-enums-vs-union-types/tsconfig.app.json | 11 - .../tsconfig.editor.json | 7 - .../47-enums-vs-union-types/tsconfig.json | 30 --- 1023 files changed, 192 insertions(+), 10331 deletions(-) delete mode 100644 apps/angular/13-highly-customizable-css/README.md delete mode 100644 apps/angular/13-highly-customizable-css/project.json delete mode 100644 apps/angular/13-highly-customizable-css/src/app/page.component.ts delete mode 100644 apps/angular/13-highly-customizable-css/src/app/static-text.component.ts delete mode 100644 apps/angular/13-highly-customizable-css/src/app/text.component.ts delete mode 100644 apps/angular/13-highly-customizable-css/src/index.html delete mode 100644 apps/angular/13-highly-customizable-css/src/main.ts delete mode 100644 apps/angular/32-change-detection-bug/README.md delete mode 100644 apps/angular/32-change-detection-bug/jest.config.ts delete mode 100644 apps/angular/32-change-detection-bug/project.json delete mode 100644 apps/angular/32-change-detection-bug/src/app/app.component.ts delete mode 100644 apps/angular/32-change-detection-bug/src/app/app.config.ts delete mode 100644 apps/angular/32-change-detection-bug/src/app/bar.component.ts delete mode 100644 apps/angular/32-change-detection-bug/src/app/fake.service.ts delete mode 100644 apps/angular/32-change-detection-bug/src/app/foo.component.ts delete mode 100644 apps/angular/32-change-detection-bug/src/app/main-navigation.component.ts delete mode 100644 apps/angular/32-change-detection-bug/src/index.html delete mode 100644 apps/angular/33-decoupling-components/README.md delete mode 100644 apps/angular/33-decoupling-components/project.json delete mode 100644 apps/angular/33-decoupling-components/src/app/app.component.ts delete mode 100644 apps/angular/33-decoupling-components/src/index.html delete mode 100644 apps/angular/33-decoupling-components/tsconfig.editor.json delete mode 100644 apps/angular/39-injection-token/.eslintrc.json delete mode 100644 apps/angular/39-injection-token/README.md delete mode 100644 apps/angular/39-injection-token/jest.config.ts delete mode 100644 apps/angular/39-injection-token/project.json delete mode 100644 apps/angular/39-injection-token/src/app/app.component.ts delete mode 100644 apps/angular/39-injection-token/src/app/app.config.ts delete mode 100644 apps/angular/39-injection-token/src/app/data.ts delete mode 100644 apps/angular/39-injection-token/src/app/phone.component.ts delete mode 100644 apps/angular/39-injection-token/src/app/timer-container.component.ts delete mode 100644 apps/angular/39-injection-token/src/app/timer.component.ts delete mode 100644 apps/angular/39-injection-token/src/app/video.component.ts delete mode 100644 apps/angular/39-injection-token/src/index.html delete mode 100644 apps/angular/4-typed-context-outlet/README.md delete mode 100644 apps/angular/4-typed-context-outlet/project.json delete mode 100644 apps/angular/4-typed-context-outlet/src/app/app.component.ts delete mode 100644 apps/angular/4-typed-context-outlet/src/app/list.component.ts delete mode 100644 apps/angular/4-typed-context-outlet/src/app/person.component.ts delete mode 100644 apps/angular/4-typed-context-outlet/src/index.html delete mode 100644 apps/angular/44-view-transition/.eslintrc.json delete mode 100644 apps/angular/45-react-in-angular/README.md delete mode 100644 apps/angular/45-react-in-angular/jest.config.ts delete mode 100644 apps/angular/45-react-in-angular/project.json delete mode 100644 apps/angular/45-react-in-angular/src/app/app.component.ts delete mode 100644 apps/angular/45-react-in-angular/src/app/react/ReactPost.tsx delete mode 100644 apps/angular/45-react-in-angular/src/app/react/post.component.ts delete mode 100644 apps/angular/45-react-in-angular/src/index.html delete mode 100644 apps/angular/5-crud-application/tsconfig.spec.json delete mode 100644 apps/angular/52-lazy-load-component/tsconfig.spec.json delete mode 100644 apps/angular/55-back-button-navigation/README.md delete mode 100644 apps/angular/55-back-button-navigation/jest.config.ts delete mode 100644 apps/angular/55-back-button-navigation/project.json delete mode 100644 apps/angular/55-back-button-navigation/src/app/app.component.html delete mode 100644 apps/angular/55-back-button-navigation/src/app/app.component.ts delete mode 100644 apps/angular/55-back-button-navigation/src/app/app.config.ts delete mode 100644 apps/angular/55-back-button-navigation/src/app/app.routes.ts delete mode 100644 apps/angular/55-back-button-navigation/src/app/dialog/dialog.component.html delete mode 100644 apps/angular/55-back-button-navigation/src/app/dialog/dialog.component.ts delete mode 100644 apps/angular/55-back-button-navigation/src/app/home/home.component.html delete mode 100644 apps/angular/55-back-button-navigation/src/app/home/home.component.ts delete mode 100644 apps/angular/55-back-button-navigation/src/app/sensitive-action/sensitive-action.component.html delete mode 100644 apps/angular/55-back-button-navigation/src/app/sensitive-action/sensitive-action.component.ts delete mode 100644 apps/angular/55-back-button-navigation/src/app/simple-action/simple-action.component.html delete mode 100644 apps/angular/55-back-button-navigation/src/app/simple-action/simple-action.component.ts delete mode 100644 apps/angular/55-back-button-navigation/src/index.html delete mode 100644 apps/angular/55-back-button-navigation/src/styles.scss delete mode 100644 apps/angular/57-content-projection-default/tsconfig.app.json delete mode 100644 apps/angular/58-content-projection-condition/README.md delete mode 100644 apps/angular/58-content-projection-condition/project.json delete mode 100644 apps/angular/58-content-projection-condition/src/app/app.component.ts delete mode 100644 apps/angular/58-content-projection-condition/src/app/app.config.ts delete mode 100644 apps/angular/58-content-projection-condition/src/app/card.component.ts delete mode 100644 apps/angular/58-content-projection-condition/src/index.html delete mode 100644 apps/angular/58-content-projection-condition/tsconfig.app.json delete mode 100644 apps/angular/58-content-projection-condition/tsconfig.json delete mode 100644 apps/angular/59-content-projection-defer/.eslintrc.json delete mode 100644 apps/angular/59-content-projection-defer/README.md delete mode 100644 apps/angular/59-content-projection-defer/project.json delete mode 100644 apps/angular/59-content-projection-defer/src/app/app.component.ts delete mode 100644 apps/angular/59-content-projection-defer/src/app/app.config.ts delete mode 100644 apps/angular/59-content-projection-defer/src/app/app.routes.ts delete mode 100644 apps/angular/59-content-projection-defer/src/app/expandable-card.ts delete mode 100644 apps/angular/59-content-projection-defer/src/app/page-1.ts delete mode 100644 apps/angular/59-content-projection-defer/src/app/page-2.ts delete mode 100644 apps/angular/59-content-projection-defer/src/index.html delete mode 100644 apps/angular/59-content-projection-defer/tsconfig.app.json delete mode 100644 apps/angular/59-content-projection-defer/tsconfig.json delete mode 100644 apps/angular/6-structural-directive/tsconfig.app.json delete mode 100644 apps/angular/8-pure-pipe/tsconfig.app.json delete mode 100644 apps/angular/9-wrap-function-pipe/src/polyfills.ts delete mode 100644 apps/angular/9-wrap-function-pipe/tsconfig.app.json delete mode 100644 apps/angular/9-wrap-function-pipe/tsconfig.json rename apps/{angular/10-utility-wrapper-pipe => animations/simple-animations}/.eslintrc.json (100%) rename apps/{angular/46-simple-animations => animations/simple-animations}/README.md (100%) rename apps/{angular/46-simple-animations => animations/simple-animations}/jest.config.ts (100%) rename apps/{angular/46-simple-animations => animations/simple-animations}/project.json (100%) rename apps/{angular/46-simple-animations => animations/simple-animations}/src/app/app.component.ts (100%) rename apps/{angular/45-react-in-angular => animations/simple-animations}/src/app/app.config.ts (100%) rename apps/{angular/1-projection => animations/simple-animations}/src/assets/.gitkeep (100%) rename apps/{angular/1-projection => animations/simple-animations}/src/favicon.ico (100%) rename apps/{angular/46-simple-animations => animations/simple-animations}/src/index.html (100%) rename apps/{angular/22-router-input => animations/simple-animations}/src/main.ts (100%) rename apps/{angular/21-anchor-navigation => animations/simple-animations}/src/styles.scss (100%) rename apps/{angular/32-change-detection-bug => animations/simple-animations}/src/test-setup.ts (100%) rename apps/{angular/1-projection => animations/simple-animations}/tailwind.config.js (100%) create mode 100644 apps/animations/simple-animations/tsconfig.app.json rename apps/{angular/21-anchor-navigation => animations/simple-animations}/tsconfig.editor.json (100%) rename apps/{angular/45-react-in-angular => animations/simple-animations}/tsconfig.json (100%) rename apps/{forms/41-control-value-accessor => animations/simple-animations}/tsconfig.spec.json (80%) rename apps/{angular/4-typed-context-outlet => animations/view-transition}/.eslintrc.json (100%) rename apps/{angular/44-view-transition => animations/view-transition}/README.md (100%) rename apps/{angular/44-view-transition => animations/view-transition}/project.json (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/app/app.component.ts (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/app/app.config.ts (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/app/blog/blog.component.ts (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/app/blog/thumbnail-header.component.ts (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/app/blog/thumbnail.component.ts (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/app/data.ts (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/app/post.model.ts (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/app/post/post-header.component.ts (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/app/post/post.component.ts (100%) rename apps/{angular/10-utility-wrapper-pipe => animations/view-transition}/src/assets/.gitkeep (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/assets/angular.webp (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/assets/guard.full.webp (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/assets/highly-custom.full.webp (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/assets/profil.webp (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/assets/signal-cd.full.webp (100%) rename apps/{angular/10-utility-wrapper-pipe => animations/view-transition}/src/favicon.ico (100%) rename apps/{angular/44-view-transition => animations/view-transition}/src/index.html (100%) rename apps/{angular/32-change-detection-bug => animations/view-transition}/src/main.ts (100%) rename apps/{angular/1-projection => animations/view-transition}/src/styles.scss (100%) rename apps/{angular/21-anchor-navigation => animations/view-transition}/tailwind.config.js (100%) rename apps/{angular/46-simple-animations => animations/view-transition}/tsconfig.app.json (87%) rename apps/{angular/13-highly-customizable-css => animations/view-transition}/tsconfig.editor.json (100%) rename apps/{angular/44-view-transition => animations/view-transition}/tsconfig.json (100%) rename apps/{angular/13-highly-customizable-css => best-practices/default-vs-onpush}/.eslintrc.json (100%) rename apps/{performance/34-default-vs-onpush => best-practices/default-vs-onpush}/README.md (100%) rename apps/{performance/34-default-vs-onpush => best-practices/default-vs-onpush}/project.json (100%) rename apps/{performance/34-default-vs-onpush => best-practices/default-vs-onpush}/src/app/app.component.ts (100%) rename apps/{performance/34-default-vs-onpush => best-practices/default-vs-onpush}/src/app/app.config.ts (100%) rename apps/{performance/34-default-vs-onpush => best-practices/default-vs-onpush}/src/app/person-list.component.ts (100%) rename apps/{performance/34-default-vs-onpush => best-practices/default-vs-onpush}/src/app/random.component.ts (100%) rename apps/{angular/13-highly-customizable-css => best-practices/default-vs-onpush}/src/assets/.gitkeep (100%) rename apps/{angular/13-highly-customizable-css => best-practices/default-vs-onpush}/src/favicon.ico (100%) rename apps/{performance/34-default-vs-onpush => best-practices/default-vs-onpush}/src/index.html (100%) rename apps/{angular/39-injection-token => best-practices/default-vs-onpush}/src/main.ts (100%) rename apps/{angular/31-module-to-standalone => best-practices/default-vs-onpush}/src/styles.scss (100%) rename apps/{angular/32-change-detection-bug => best-practices/default-vs-onpush}/tailwind.config.js (100%) rename apps/{angular/45-react-in-angular => best-practices/default-vs-onpush}/tsconfig.app.json (87%) rename apps/{performance/34-default-vs-onpush => best-practices/default-vs-onpush}/tsconfig.editor.json (61%) rename apps/{angular/13-highly-customizable-css => best-practices/default-vs-onpush}/tsconfig.json (100%) rename apps/{angular/45-react-in-angular => best-practices/lazy-load-component}/.eslintrc.json (100%) rename apps/{angular/52-lazy-load-component => best-practices/lazy-load-component}/README.md (100%) rename apps/{angular/52-lazy-load-component => best-practices/lazy-load-component}/jest.config.ts (100%) rename apps/{angular/52-lazy-load-component => best-practices/lazy-load-component}/project.json (100%) rename apps/{angular/52-lazy-load-component => best-practices/lazy-load-component}/src/app/app.component.ts (100%) rename apps/{angular/52-lazy-load-component => best-practices/lazy-load-component}/src/app/app.module.ts (100%) rename apps/{angular/52-lazy-load-component => best-practices/lazy-load-component}/src/app/placeholder.component.ts (100%) rename apps/{angular/52-lazy-load-component => best-practices/lazy-load-component}/src/app/top.component.ts (100%) rename apps/{angular/16-master-dependency-injection => best-practices/lazy-load-component}/src/assets/.gitkeep (100%) rename apps/{angular/16-master-dependency-injection => best-practices/lazy-load-component}/src/favicon.ico (100%) rename apps/{angular/52-lazy-load-component => best-practices/lazy-load-component}/src/index.html (100%) rename apps/{angular/31-module-to-standalone => best-practices/lazy-load-component}/src/main.ts (100%) rename apps/{angular/32-change-detection-bug => best-practices/lazy-load-component}/src/styles.scss (100%) rename apps/{angular/39-injection-token => best-practices/lazy-load-component}/src/test-setup.ts (100%) rename apps/{angular/33-decoupling-components => best-practices/lazy-load-component}/tailwind.config.js (100%) create mode 100644 apps/best-practices/lazy-load-component/tsconfig.app.json rename apps/{signal/50-bug-in-effect => best-practices/lazy-load-component}/tsconfig.editor.json (53%) rename apps/{angular/52-lazy-load-component => best-practices/lazy-load-component}/tsconfig.json (100%) rename apps/{angular/55-back-button-navigation => best-practices/lazy-load-component}/tsconfig.spec.json (80%) rename apps/{angular/21-anchor-navigation => best-practices/memoization}/.eslintrc.json (100%) rename apps/{performance/35-memoization => best-practices/memoization}/README.md (100%) rename apps/{performance/35-memoization => best-practices/memoization}/project.json (100%) rename apps/{performance/35-memoization => best-practices/memoization}/src/app/app.component.ts (100%) rename apps/{performance/35-memoization => best-practices/memoization}/src/app/app.config.ts (100%) rename apps/{performance/35-memoization => best-practices/memoization}/src/app/generateList.ts (100%) rename apps/{performance/35-memoization => best-practices/memoization}/src/app/person-list.component.ts (100%) rename apps/{performance/35-memoization => best-practices/memoization}/src/app/person.model.ts (100%) rename apps/{angular/21-anchor-navigation => best-practices/memoization}/src/assets/.gitkeep (100%) rename apps/{angular/21-anchor-navigation => best-practices/memoization}/src/favicon.ico (100%) rename apps/{performance/35-memoization => best-practices/memoization}/src/index.html (100%) rename apps/{angular/44-view-transition => best-practices/memoization}/src/main.ts (100%) rename apps/{angular/33-decoupling-components => best-practices/memoization}/src/styles.scss (100%) rename apps/{angular/39-injection-token => best-practices/memoization}/tailwind.config.js (100%) rename apps/{angular/52-lazy-load-component => best-practices/memoization}/tsconfig.app.json (87%) rename apps/{angular/16-master-dependency-injection => best-practices/memoization}/tsconfig.editor.json (100%) rename apps/{angular/16-master-dependency-injection => best-practices/memoization}/tsconfig.json (100%) rename apps/{angular/22-router-input => best-practices/ngfor-optimization}/.eslintrc.json (100%) rename apps/{performance/36-ngfor-optimization => best-practices/ngfor-optimization}/README.md (100%) rename apps/{performance/36-ngfor-optimization => best-practices/ngfor-optimization}/jest.config.ts (100%) rename apps/{performance/36-ngfor-optimization => best-practices/ngfor-optimization}/project.json (100%) rename apps/{performance/36-ngfor-optimization => best-practices/ngfor-optimization}/src/app/app.component.ts (100%) rename apps/{performance/36-ngfor-optimization => best-practices/ngfor-optimization}/src/app/app.config.ts (100%) rename apps/{performance/36-ngfor-optimization => best-practices/ngfor-optimization}/src/app/generateList.ts (100%) rename apps/{performance/36-ngfor-optimization => best-practices/ngfor-optimization}/src/app/list.service.ts (100%) rename apps/{performance/36-ngfor-optimization => best-practices/ngfor-optimization}/src/app/person-list.component.ts (100%) rename apps/{performance/36-ngfor-optimization => best-practices/ngfor-optimization}/src/app/person.model.ts (100%) rename apps/{angular/22-router-input => best-practices/ngfor-optimization}/src/assets/.gitkeep (100%) rename apps/{angular/22-router-input => best-practices/ngfor-optimization}/src/favicon.ico (100%) rename apps/{performance/36-ngfor-optimization => best-practices/ngfor-optimization}/src/index.html (100%) rename apps/{angular/45-react-in-angular => best-practices/ngfor-optimization}/src/main.ts (100%) rename apps/{angular/39-injection-token => best-practices/ngfor-optimization}/src/styles.scss (100%) rename apps/{angular/45-react-in-angular => best-practices/ngfor-optimization}/src/test-setup.ts (100%) rename apps/{angular/44-view-transition => best-practices/ngfor-optimization}/tailwind.config.js (100%) create mode 100644 apps/best-practices/ngfor-optimization/tsconfig.app.json rename apps/{angular/32-change-detection-bug => best-practices/ngfor-optimization}/tsconfig.editor.json (100%) rename apps/{angular/21-anchor-navigation => best-practices/ngfor-optimization}/tsconfig.json (100%) rename apps/{angular/46-simple-animations => best-practices/ngfor-optimization}/tsconfig.spec.json (80%) rename apps/{angular/31-module-to-standalone => best-practices/optimize-change-detection}/.eslintrc.json (100%) rename apps/{performance/12-optimize-change-detection => best-practices/optimize-change-detection}/README.md (100%) rename apps/{performance/12-optimize-change-detection => best-practices/optimize-change-detection}/jest.config.ts (100%) rename apps/{performance/12-optimize-change-detection => best-practices/optimize-change-detection}/project.json (100%) rename apps/{performance/12-optimize-change-detection => best-practices/optimize-change-detection}/src/app/app.component.ts (100%) rename apps/{angular/31-module-to-standalone => best-practices/optimize-change-detection}/src/assets/.gitkeep (100%) rename apps/{angular/31-module-to-standalone => best-practices/optimize-change-detection}/src/favicon.ico (100%) rename apps/{performance/12-optimize-change-detection => best-practices/optimize-change-detection}/src/index.html (100%) rename apps/{angular/1-projection => best-practices/optimize-change-detection}/src/main.ts (100%) rename apps/{angular/10-utility-wrapper-pipe => best-practices/optimize-change-detection}/src/styles.scss (100%) rename apps/{angular/1-projection => best-practices/optimize-change-detection}/src/test-setup.ts (100%) create mode 100644 apps/best-practices/optimize-change-detection/tsconfig.app.json rename apps/{angular/39-injection-token => best-practices/optimize-change-detection}/tsconfig.editor.json (100%) rename apps/{angular/32-change-detection-bug => best-practices/optimize-change-detection}/tsconfig.json (100%) rename apps/{performance/12-optimize-change-detection => best-practices/optimize-change-detection}/tsconfig.spec.json (78%) rename apps/{angular/46-simple-animations => components-and-templates/content-projection-default}/.eslintrc.json (100%) rename apps/{angular/57-content-projection-default => components-and-templates/content-projection-default}/README.md (100%) rename apps/{angular/57-content-projection-default => components-and-templates/content-projection-default}/project.json (100%) rename apps/{angular/32-change-detection-bug/src => components-and-templates/content-projection-default/public}/favicon.ico (100%) rename apps/{angular/57-content-projection-default => components-and-templates/content-projection-default}/src/app/app.component.ts (100%) rename apps/{angular/57-content-projection-default => components-and-templates/content-projection-default}/src/app/app.config.ts (100%) rename apps/{angular/57-content-projection-default => components-and-templates/content-projection-default}/src/app/card.component.ts (100%) rename apps/{angular/57-content-projection-default => components-and-templates/content-projection-default}/src/index.html (100%) rename apps/{angular/46-simple-animations => components-and-templates/content-projection-default}/src/main.ts (100%) rename apps/{angular/45-react-in-angular => components-and-templates/content-projection-default}/src/styles.scss (100%) rename apps/{angular/45-react-in-angular => components-and-templates/content-projection-default}/tailwind.config.js (100%) rename apps/{angular/55-back-button-navigation => components-and-templates/content-projection-default}/tsconfig.app.json (87%) rename apps/{angular/52-lazy-load-component => components-and-templates/content-projection-default}/tsconfig.editor.json (100%) rename apps/{angular/57-content-projection-default => components-and-templates/content-projection-default}/tsconfig.json (100%) rename apps/{angular/5-crud-application => components-and-templates/crud-application}/.eslintrc.json (100%) rename apps/{angular/5-crud-application => components-and-templates/crud-application}/README.md (100%) rename apps/{angular/5-crud-application => components-and-templates/crud-application}/jest.config.ts (100%) rename apps/{angular/5-crud-application => components-and-templates/crud-application}/project.json (100%) rename apps/{angular/5-crud-application => components-and-templates/crud-application}/src/app/app.component.ts (100%) rename apps/{angular/5-crud-application => components-and-templates/crud-application}/src/app/app.config.ts (100%) rename apps/{angular/32-change-detection-bug => components-and-templates/crud-application}/src/assets/.gitkeep (100%) rename apps/{angular/33-decoupling-components => components-and-templates/crud-application}/src/favicon.ico (100%) rename apps/{angular/5-crud-application => components-and-templates/crud-application}/src/index.html (100%) rename apps/{angular/5-crud-application => components-and-templates/crud-application}/src/main.ts (100%) rename apps/{angular/1-projection => components-and-templates/crud-application}/src/polyfills.ts (100%) rename apps/{angular/5-crud-application => components-and-templates/crud-application}/src/styles.scss (100%) rename apps/{angular/46-simple-animations => components-and-templates/crud-application}/src/test-setup.ts (100%) create mode 100644 apps/components-and-templates/crud-application/tsconfig.app.json rename apps/{angular/10-utility-wrapper-pipe => components-and-templates/crud-application}/tsconfig.editor.json (100%) rename apps/{angular/1-projection => components-and-templates/crud-application}/tsconfig.json (100%) rename apps/{testing/18-nested-components => components-and-templates/crud-application}/tsconfig.spec.json (61%) rename apps/{angular/1-projection => components-and-templates/projection}/.eslintrc.json (100%) rename apps/{angular/1-projection => components-and-templates/projection}/README.md (100%) rename apps/{angular/1-projection => components-and-templates/projection}/jest.config.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/project.json (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/app.component.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/component/city-card/city-card.component.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/component/student-card/student-card.component.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/component/teacher-card/teacher-card.component.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/data-access/city.store.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/data-access/fake-http.service.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/data-access/student.store.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/data-access/teacher.store.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/model/card.model.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/model/city.model.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/model/student.model.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/model/teacher.model.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/ui/card/card.component.ts (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/app/ui/list-item/list-item.component.ts (100%) rename apps/{angular/33-decoupling-components => components-and-templates/projection}/src/assets/.gitkeep (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/assets/img/city.png (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/assets/img/student.webp (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/assets/img/teacher.png (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/assets/svg/trash.svg (100%) rename apps/{angular/39-injection-token => components-and-templates/projection}/src/favicon.ico (100%) rename apps/{angular/1-projection => components-and-templates/projection}/src/index.html (100%) rename apps/{angular/10-utility-wrapper-pipe => components-and-templates/projection}/src/main.ts (100%) rename apps/{angular/10-utility-wrapper-pipe => components-and-templates/projection}/src/polyfills.ts (100%) rename apps/{angular/44-view-transition => components-and-templates/projection}/src/styles.scss (100%) rename apps/{angular/21-anchor-navigation => components-and-templates/projection}/src/test-setup.ts (100%) rename apps/{angular/46-simple-animations => components-and-templates/projection}/tailwind.config.js (100%) create mode 100644 apps/components-and-templates/projection/tsconfig.app.json rename apps/{angular/1-projection => components-and-templates/projection}/tsconfig.editor.json (100%) rename apps/{angular/5-crud-application => components-and-templates/projection}/tsconfig.json (100%) rename apps/{angular/1-projection => components-and-templates/projection}/tsconfig.spec.json (55%) rename apps/{angular/16-master-dependency-injection => dependency-injection/master-dependency-injection}/.eslintrc.json (100%) rename apps/{angular/16-master-dependency-injection => dependency-injection/master-dependency-injection}/README.md (100%) rename apps/{angular/16-master-dependency-injection => dependency-injection/master-dependency-injection}/project.json (100%) rename apps/{angular/16-master-dependency-injection => dependency-injection/master-dependency-injection}/src/app/app.component.ts (100%) rename apps/{angular/16-master-dependency-injection => dependency-injection/master-dependency-injection}/src/app/currency.pipe.ts (100%) rename apps/{angular/16-master-dependency-injection => dependency-injection/master-dependency-injection}/src/app/currency.service.ts (100%) rename apps/{angular/16-master-dependency-injection => dependency-injection/master-dependency-injection}/src/app/product.model.ts (100%) rename apps/{angular/39-injection-token => dependency-injection/master-dependency-injection}/src/assets/.gitkeep (100%) rename apps/{angular/4-typed-context-outlet => dependency-injection/master-dependency-injection}/src/favicon.ico (100%) rename apps/{angular/16-master-dependency-injection => dependency-injection/master-dependency-injection}/src/index.html (100%) rename apps/{angular/16-master-dependency-injection => dependency-injection/master-dependency-injection}/src/main.ts (100%) rename apps/{angular/16-master-dependency-injection => dependency-injection/master-dependency-injection}/src/styles.scss (100%) create mode 100644 apps/dependency-injection/master-dependency-injection/tsconfig.app.json rename apps/{angular/22-router-input => dependency-injection/master-dependency-injection}/tsconfig.editor.json (100%) rename apps/{angular/22-router-input => dependency-injection/master-dependency-injection}/tsconfig.json (100%) rename apps/{angular/52-lazy-load-component => directives-and-pipes/pure-pipe}/.eslintrc.json (100%) rename apps/{angular/8-pure-pipe => directives-and-pipes/pure-pipe}/README.md (100%) rename apps/{angular/8-pure-pipe => directives-and-pipes/pure-pipe}/project.json (100%) rename apps/{angular/8-pure-pipe => directives-and-pipes/pure-pipe}/src/app/app.component.ts (100%) rename apps/{angular/44-view-transition => directives-and-pipes/pure-pipe}/src/assets/.gitkeep (100%) rename apps/{angular/44-view-transition => directives-and-pipes/pure-pipe}/src/favicon.ico (100%) rename apps/{angular/8-pure-pipe => directives-and-pipes/pure-pipe}/src/index.html (100%) rename apps/{angular/33-decoupling-components => directives-and-pipes/pure-pipe}/src/main.ts (100%) rename apps/{angular/4-typed-context-outlet => directives-and-pipes/pure-pipe}/src/polyfills.ts (100%) rename apps/{angular/13-highly-customizable-css => directives-and-pipes/pure-pipe}/src/styles.scss (100%) rename apps/{angular/1-projection => directives-and-pipes/pure-pipe}/tsconfig.app.json (85%) rename apps/{angular/4-typed-context-outlet => directives-and-pipes/pure-pipe}/tsconfig.editor.json (100%) rename apps/{angular/10-utility-wrapper-pipe => directives-and-pipes/pure-pipe}/tsconfig.json (100%) rename apps/{angular/55-back-button-navigation => directives-and-pipes/structural-directive}/.eslintrc.json (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/README.md (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/project.json (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/src/app/app.component.ts (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/src/app/app.config.ts (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/src/app/button.component.ts (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/src/app/dashboard/admin.component.ts (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/src/app/dashboard/manager.component.ts (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/src/app/information.component.ts (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/src/app/login.component.ts (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/src/app/routes.ts (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/src/app/user.model.ts (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/src/app/user.store.ts (100%) rename apps/{angular/45-react-in-angular => directives-and-pipes/structural-directive}/src/assets/.gitkeep (100%) rename apps/{angular/45-react-in-angular => directives-and-pipes/structural-directive}/src/favicon.ico (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/structural-directive}/src/index.html (100%) rename apps/{angular/21-anchor-navigation => directives-and-pipes/structural-directive}/src/main.ts (100%) rename apps/{angular/5-crud-application => directives-and-pipes/structural-directive}/src/polyfills.ts (100%) rename apps/{angular/46-simple-animations => directives-and-pipes/structural-directive}/src/styles.scss (100%) rename apps/{angular/52-lazy-load-component => directives-and-pipes/structural-directive}/tailwind.config.js (100%) rename apps/{angular/5-crud-application => directives-and-pipes/structural-directive}/tsconfig.app.json (85%) rename apps/{angular/5-crud-application => directives-and-pipes/structural-directive}/tsconfig.editor.json (100%) rename apps/{angular/4-typed-context-outlet => directives-and-pipes/structural-directive}/tsconfig.json (100%) rename apps/{angular/57-content-projection-default => directives-and-pipes/utility-wrapper-pipe}/.eslintrc.json (100%) rename apps/{angular/10-utility-wrapper-pipe => directives-and-pipes/utility-wrapper-pipe}/README.md (100%) rename apps/{angular/10-utility-wrapper-pipe => directives-and-pipes/utility-wrapper-pipe}/project.json (100%) rename apps/{angular/10-utility-wrapper-pipe => directives-and-pipes/utility-wrapper-pipe}/src/app/app.component.ts (100%) rename apps/{angular/10-utility-wrapper-pipe => directives-and-pipes/utility-wrapper-pipe}/src/app/person.utils.ts (100%) rename apps/{angular/46-simple-animations => directives-and-pipes/utility-wrapper-pipe}/src/assets/.gitkeep (100%) rename apps/{angular/46-simple-animations => directives-and-pipes/utility-wrapper-pipe}/src/favicon.ico (100%) rename apps/{angular/10-utility-wrapper-pipe => directives-and-pipes/utility-wrapper-pipe}/src/index.html (100%) rename apps/{angular/4-typed-context-outlet => directives-and-pipes/utility-wrapper-pipe}/src/main.ts (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/utility-wrapper-pipe}/src/polyfills.ts (100%) rename apps/{angular/22-router-input => directives-and-pipes/utility-wrapper-pipe}/src/styles.scss (100%) rename apps/{angular/10-utility-wrapper-pipe => directives-and-pipes/utility-wrapper-pipe}/tsconfig.app.json (85%) rename apps/{angular/6-structural-directive => directives-and-pipes/utility-wrapper-pipe}/tsconfig.editor.json (100%) rename apps/{angular/6-structural-directive => directives-and-pipes/utility-wrapper-pipe}/tsconfig.json (100%) rename apps/{angular/58-content-projection-condition => directives-and-pipes/wrap-function-pipe}/.eslintrc.json (100%) rename apps/{angular/9-wrap-function-pipe => directives-and-pipes/wrap-function-pipe}/README.md (100%) rename apps/{angular/9-wrap-function-pipe => directives-and-pipes/wrap-function-pipe}/project.json (100%) rename apps/{angular/9-wrap-function-pipe => directives-and-pipes/wrap-function-pipe}/src/app/app.component.ts (100%) rename apps/{angular/5-crud-application => directives-and-pipes/wrap-function-pipe}/src/assets/.gitkeep (100%) rename apps/{angular/5-crud-application => directives-and-pipes/wrap-function-pipe}/src/favicon.ico (100%) rename apps/{angular/9-wrap-function-pipe => directives-and-pipes/wrap-function-pipe}/src/index.html (100%) rename apps/{angular/8-pure-pipe => directives-and-pipes/wrap-function-pipe}/src/main.ts (100%) rename apps/{angular/8-pure-pipe => directives-and-pipes/wrap-function-pipe}/src/polyfills.ts (100%) rename apps/{angular/4-typed-context-outlet => directives-and-pipes/wrap-function-pipe}/src/styles.scss (100%) rename apps/{angular/4-typed-context-outlet => directives-and-pipes/wrap-function-pipe}/tsconfig.app.json (85%) rename apps/{angular/8-pure-pipe => directives-and-pipes/wrap-function-pipe}/tsconfig.editor.json (100%) rename apps/{angular/8-pure-pipe => directives-and-pipes/wrap-function-pipe}/tsconfig.json (100%) delete mode 100644 apps/forms/41-control-value-accessor/src/test-setup.ts delete mode 100644 apps/forms/41-control-value-accessor/tsconfig.app.json delete mode 100644 apps/forms/41-control-value-accessor/tsconfig.json delete mode 100644 apps/forms/48-avoid-losing-form-data/tsconfig.app.json rename apps/{angular/6-structural-directive => forms/avoid-losing-form-data}/.eslintrc.json (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/README.md (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/project.json (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/src/app/app.component.ts (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/src/app/app.config.ts (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/src/app/app.routes.ts (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/src/app/pages/join.component.ts (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/src/app/pages/page.component.ts (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/src/app/ui/dialog.component.ts (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/src/app/ui/form.component.ts (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/src/app/ui/nav.component.ts (100%) rename apps/{angular/52-lazy-load-component => forms/avoid-losing-form-data}/src/assets/.gitkeep (100%) rename apps/{angular/52-lazy-load-component => forms/avoid-losing-form-data}/src/favicon.ico (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/src/index.html (100%) rename apps/{angular/55-back-button-navigation => forms/avoid-losing-form-data}/src/main.ts (100%) rename apps/{angular/52-lazy-load-component => forms/avoid-losing-form-data}/src/styles.scss (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/tailwind.config.js (100%) rename apps/{angular/13-highly-customizable-css => forms/avoid-losing-form-data}/tsconfig.app.json (100%) rename apps/{angular/55-back-button-navigation => forms/avoid-losing-form-data}/tsconfig.editor.json (100%) rename apps/forms/{48-avoid-losing-form-data => avoid-losing-form-data}/tsconfig.json (100%) rename apps/{angular/60-async-redirect => forms/control-value-accessor}/.eslintrc.json (100%) rename apps/forms/{41-control-value-accessor => control-value-accessor}/README.md (100%) rename apps/forms/{41-control-value-accessor => control-value-accessor}/jest.config.ts (100%) rename apps/forms/{41-control-value-accessor => control-value-accessor}/project.json (100%) rename apps/forms/{41-control-value-accessor => control-value-accessor}/src/app/app.component.ts (100%) rename apps/forms/{41-control-value-accessor => control-value-accessor}/src/app/feedback-form/feedback-form.component.html (100%) rename apps/forms/{41-control-value-accessor => control-value-accessor}/src/app/feedback-form/feedback-form.component.scss (100%) rename apps/forms/{41-control-value-accessor => control-value-accessor}/src/app/feedback-form/feedback-form.component.ts (100%) rename apps/forms/{41-control-value-accessor => control-value-accessor}/src/app/rating-control/rating-control.component.html (100%) rename apps/forms/{41-control-value-accessor => control-value-accessor}/src/app/rating-control/rating-control.component.scss (100%) rename apps/forms/{41-control-value-accessor => control-value-accessor}/src/app/rating-control/rating-control.component.ts (100%) rename apps/{angular/6-structural-directive => forms/control-value-accessor}/src/assets/.gitkeep (100%) rename apps/{angular/57-content-projection-default/public => forms/control-value-accessor/src}/favicon.ico (100%) rename apps/forms/{41-control-value-accessor => control-value-accessor}/src/index.html (100%) rename apps/{angular/9-wrap-function-pipe => forms/control-value-accessor}/src/main.ts (100%) rename apps/{angular/57-content-projection-default => forms/control-value-accessor}/src/styles.scss (100%) rename apps/{angular/5-crud-application => forms/control-value-accessor}/src/test-setup.ts (100%) rename apps/{angular/55-back-button-navigation => forms/control-value-accessor}/tailwind.config.js (100%) rename apps/{angular/16-master-dependency-injection => forms/control-value-accessor}/tsconfig.app.json (100%) rename apps/{angular/45-react-in-angular => forms/control-value-accessor}/tsconfig.editor.json (100%) rename apps/{angular/46-simple-animations => forms/control-value-accessor}/tsconfig.json (100%) rename apps/{angular/39-injection-token => forms/control-value-accessor}/tsconfig.spec.json (100%) delete mode 100644 apps/nx/42-static-vs-dynamic-import/README.md delete mode 100644 apps/nx/42-static-vs-dynamic-import/project.json delete mode 100644 apps/nx/42-static-vs-dynamic-import/src/app/app.component.ts delete mode 100644 apps/nx/42-static-vs-dynamic-import/src/app/app.config.ts delete mode 100644 apps/nx/42-static-vs-dynamic-import/src/index.html delete mode 100644 apps/nx/42-static-vs-dynamic-import/tsconfig.app.json delete mode 100644 apps/performance/12-optimize-change-detection/src/styles.scss delete mode 100644 apps/performance/12-optimize-change-detection/tsconfig.app.json delete mode 100644 apps/performance/34-default-vs-onpush/tsconfig.app.json delete mode 100644 apps/performance/34-default-vs-onpush/tsconfig.json delete mode 100644 apps/performance/35-memoization/src/styles.scss delete mode 100644 apps/performance/35-memoization/tsconfig.app.json delete mode 100644 apps/performance/35-memoization/tsconfig.editor.json delete mode 100644 apps/performance/35-memoization/tsconfig.json delete mode 100644 apps/performance/36-ngfor-optimization/.eslintrc.json delete mode 100644 apps/performance/36-ngfor-optimization/src/main.ts delete mode 100644 apps/performance/36-ngfor-optimization/src/styles.scss delete mode 100644 apps/performance/36-ngfor-optimization/src/test-setup.ts delete mode 100644 apps/performance/36-ngfor-optimization/tailwind.config.js delete mode 100644 apps/performance/36-ngfor-optimization/tsconfig.app.json delete mode 100644 apps/performance/36-ngfor-optimization/tsconfig.editor.json delete mode 100644 apps/performance/36-ngfor-optimization/tsconfig.json delete mode 100644 apps/performance/36-ngfor-optimization/tsconfig.spec.json delete mode 100644 apps/performance/37-optimize-big-list/.eslintrc.json delete mode 100644 apps/performance/37-optimize-big-list/README.md delete mode 100644 apps/performance/37-optimize-big-list/project.json delete mode 100644 apps/performance/37-optimize-big-list/src/app/app.component.ts delete mode 100644 apps/performance/37-optimize-big-list/src/app/app.config.ts delete mode 100644 apps/performance/37-optimize-big-list/src/app/generateList.ts delete mode 100644 apps/performance/37-optimize-big-list/src/app/list.service.ts delete mode 100644 apps/performance/37-optimize-big-list/src/app/person-list.component.ts delete mode 100644 apps/performance/37-optimize-big-list/src/app/person.model.ts delete mode 100644 apps/performance/37-optimize-big-list/src/favicon.ico delete mode 100644 apps/performance/37-optimize-big-list/src/index.html delete mode 100644 apps/performance/37-optimize-big-list/src/main.ts delete mode 100644 apps/performance/37-optimize-big-list/src/styles.scss delete mode 100644 apps/performance/37-optimize-big-list/tailwind.config.js delete mode 100644 apps/performance/37-optimize-big-list/tsconfig.app.json delete mode 100644 apps/performance/37-optimize-big-list/tsconfig.editor.json delete mode 100644 apps/performance/37-optimize-big-list/tsconfig.json delete mode 100644 apps/performance/40-web-workers/README.md delete mode 100644 apps/performance/40-web-workers/project.json delete mode 100644 apps/performance/40-web-workers/src/app/app.component.ts delete mode 100644 apps/performance/40-web-workers/src/app/heavy-calculation.service.ts delete mode 100644 apps/performance/40-web-workers/src/app/unknown-person/unknown-person.component.css delete mode 100644 apps/performance/40-web-workers/src/app/unknown-person/unknown-person.component.ts delete mode 100644 apps/performance/40-web-workers/src/favicon.ico delete mode 100644 apps/performance/40-web-workers/src/index.html delete mode 100644 apps/performance/40-web-workers/src/main.ts delete mode 100644 apps/performance/40-web-workers/src/styles.scss delete mode 100644 apps/performance/40-web-workers/tailwind.config.js delete mode 100644 apps/performance/40-web-workers/tsconfig.app.json delete mode 100644 apps/performance/40-web-workers/tsconfig.editor.json delete mode 100644 apps/performance/40-web-workers/tsconfig.json rename apps/{angular/32-change-detection-bug => routing/anchor-navigation}/.eslintrc.json (100%) rename apps/{angular/21-anchor-navigation => routing/anchor-navigation}/README.md (100%) rename apps/{angular/21-anchor-navigation => routing/anchor-navigation}/jest.config.ts (100%) rename apps/{angular/21-anchor-navigation => routing/anchor-navigation}/project.json (100%) rename apps/{angular/21-anchor-navigation => routing/anchor-navigation}/src/app/app.component.ts (100%) rename apps/{angular/21-anchor-navigation => routing/anchor-navigation}/src/app/app.config.ts (100%) rename apps/{angular/21-anchor-navigation => routing/anchor-navigation}/src/app/app.routes.ts (100%) rename apps/{angular/21-anchor-navigation => routing/anchor-navigation}/src/app/foo.component.ts (100%) rename apps/{angular/21-anchor-navigation => routing/anchor-navigation}/src/app/home.component.ts (100%) rename apps/{angular/21-anchor-navigation => routing/anchor-navigation}/src/app/nav-button.component.ts (100%) rename apps/{angular/8-pure-pipe => routing/anchor-navigation}/src/assets/.gitkeep (100%) rename apps/{angular/58-content-projection-condition/public => routing/anchor-navigation/src}/favicon.ico (100%) rename apps/{angular/21-anchor-navigation => routing/anchor-navigation}/src/index.html (100%) rename apps/{angular/6-structural-directive => routing/anchor-navigation}/src/main.ts (100%) rename apps/{angular/58-content-projection-condition => routing/anchor-navigation}/src/styles.scss (100%) rename apps/{performance/12-optimize-change-detection => routing/anchor-navigation}/src/test-setup.ts (100%) rename apps/{angular/57-content-projection-default => routing/anchor-navigation}/tailwind.config.js (100%) create mode 100644 apps/routing/anchor-navigation/tsconfig.app.json rename apps/{angular/46-simple-animations => routing/anchor-navigation}/tsconfig.editor.json (100%) rename apps/{angular/39-injection-token => routing/anchor-navigation}/tsconfig.json (100%) rename apps/{rxjs/14-race-condition => routing/anchor-navigation}/tsconfig.spec.json (78%) rename apps/{angular/8-pure-pipe => routing/async-redirect}/.eslintrc.json (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/README.md (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/project.json (100%) rename apps/{angular/59-content-projection-defer => routing/async-redirect}/public/favicon.ico (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/src/app/admin-page.ts (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/src/app/app.config.ts (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/src/app/app.ts (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/src/app/dashboard.ts (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/src/app/profile-page.ts (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/src/app/routes.ts (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/src/app/user-page.ts (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/src/app/user-profile.service.ts (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/src/index.html (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/src/main.ts (100%) rename apps/{angular/59-content-projection-defer => routing/async-redirect}/src/styles.scss (100%) rename apps/{angular/58-content-projection-condition => routing/async-redirect}/tailwind.config.js (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/tsconfig.app.json (100%) rename apps/{angular/60-async-redirect => routing/async-redirect}/tsconfig.json (100%) rename apps/{angular/33-decoupling-components => routing/router-input}/.eslintrc.json (100%) rename apps/{angular/22-router-input => routing/router-input}/README.md (100%) rename apps/{angular/22-router-input => routing/router-input}/project.json (100%) rename apps/{angular/22-router-input => routing/router-input}/src/app/app.component.ts (100%) rename apps/{angular/22-router-input => routing/router-input}/src/app/app.config.ts (100%) rename apps/{angular/22-router-input => routing/router-input}/src/app/app.routes.ts (100%) rename apps/{angular/22-router-input => routing/router-input}/src/app/home.component.ts (100%) rename apps/{angular/22-router-input => routing/router-input}/src/app/test.component.ts (100%) rename apps/{angular/9-wrap-function-pipe => routing/router-input}/src/assets/.gitkeep (100%) rename apps/{angular/6-structural-directive => routing/router-input}/src/favicon.ico (100%) rename apps/{angular/22-router-input => routing/router-input}/src/index.html (100%) rename apps/{angular/57-content-projection-default => routing/router-input}/src/main.ts (100%) rename apps/{angular/8-pure-pipe => routing/router-input}/src/styles.scss (100%) create mode 100644 apps/routing/router-input/tsconfig.app.json rename apps/{angular/44-view-transition => routing/router-input}/tsconfig.editor.json (100%) rename apps/{angular/31-module-to-standalone => routing/router-input}/tsconfig.json (100%) delete mode 100644 apps/rxjs/11-high-order-operator-bug/src/assets/.gitkeep delete mode 100644 apps/rxjs/11-high-order-operator-bug/src/favicon.ico delete mode 100644 apps/rxjs/11-high-order-operator-bug/src/main.ts delete mode 100644 apps/rxjs/11-high-order-operator-bug/src/styles.scss delete mode 100644 apps/rxjs/11-high-order-operator-bug/tsconfig.editor.json delete mode 100644 apps/rxjs/14-race-condition/.eslintrc.json delete mode 100644 apps/rxjs/14-race-condition/src/assets/.gitkeep delete mode 100644 apps/rxjs/14-race-condition/src/favicon.ico delete mode 100644 apps/rxjs/14-race-condition/tsconfig.editor.json delete mode 100644 apps/rxjs/38-catch-error/.eslintrc.json delete mode 100644 apps/rxjs/38-catch-error/src/assets/.gitkeep delete mode 100644 apps/rxjs/38-catch-error/src/favicon.ico delete mode 100644 apps/rxjs/38-catch-error/src/main.ts delete mode 100644 apps/rxjs/38-catch-error/src/styles.scss delete mode 100644 apps/rxjs/38-catch-error/src/test-setup.ts delete mode 100644 apps/rxjs/38-catch-error/tailwind.config.js delete mode 100644 apps/rxjs/38-catch-error/tsconfig.app.json delete mode 100644 apps/rxjs/38-catch-error/tsconfig.editor.json delete mode 100644 apps/rxjs/38-catch-error/tsconfig.json delete mode 100644 apps/rxjs/38-catch-error/tsconfig.spec.json delete mode 100644 apps/rxjs/49-hold-to-save-button/src/assets/.gitkeep delete mode 100644 apps/rxjs/49-hold-to-save-button/src/favicon.ico delete mode 100644 apps/rxjs/49-hold-to-save-button/src/main.ts delete mode 100644 apps/rxjs/49-hold-to-save-button/src/test-setup.ts delete mode 100644 apps/rxjs/49-hold-to-save-button/tailwind.config.js delete mode 100644 apps/rxjs/49-hold-to-save-button/tsconfig.app.json delete mode 100644 apps/rxjs/49-hold-to-save-button/tsconfig.json delete mode 100644 apps/rxjs/49-hold-to-save-button/tsconfig.spec.json rename apps/{performance/12-optimize-change-detection => rxjs/catch-error}/.eslintrc.json (100%) rename apps/rxjs/{38-catch-error => catch-error}/README.md (100%) rename apps/rxjs/{38-catch-error => catch-error}/jest.config.ts (100%) rename apps/rxjs/{38-catch-error => catch-error}/project.json (100%) rename apps/rxjs/{38-catch-error => catch-error}/src/app/app.component.css (100%) rename apps/rxjs/{38-catch-error => catch-error}/src/app/app.component.spec.ts (100%) rename apps/rxjs/{38-catch-error => catch-error}/src/app/app.component.ts (100%) rename apps/rxjs/{38-catch-error => catch-error}/src/app/app.config.ts (100%) rename apps/{forms/41-control-value-accessor => rxjs/catch-error}/src/assets/.gitkeep (100%) rename apps/{angular/60-async-redirect/public => rxjs/catch-error/src}/favicon.ico (100%) rename apps/rxjs/{38-catch-error => catch-error}/src/index.html (100%) rename apps/{angular/58-content-projection-condition => rxjs/catch-error}/src/main.ts (100%) rename apps/{angular/6-structural-directive => rxjs/catch-error}/src/styles.scss (100%) rename apps/{angular/52-lazy-load-component => rxjs/catch-error}/src/test-setup.ts (100%) rename apps/{angular/59-content-projection-defer => rxjs/catch-error}/tailwind.config.js (100%) rename apps/{angular/21-anchor-navigation => rxjs/catch-error}/tsconfig.app.json (100%) rename apps/{forms/41-control-value-accessor => rxjs/catch-error}/tsconfig.editor.json (100%) rename apps/{performance/12-optimize-change-detection => rxjs/catch-error}/tsconfig.json (100%) rename apps/{angular/32-change-detection-bug => rxjs/catch-error}/tsconfig.spec.json (100%) rename apps/{angular/9-wrap-function-pipe => rxjs/high-order-operator-bug}/.eslintrc.json (100%) rename apps/rxjs/{11-high-order-operator-bug => high-order-operator-bug}/README.md (100%) rename apps/rxjs/{11-high-order-operator-bug => high-order-operator-bug}/project.json (100%) rename apps/rxjs/{11-high-order-operator-bug => high-order-operator-bug}/src/app/app.component.ts (100%) rename apps/rxjs/{11-high-order-operator-bug => high-order-operator-bug}/src/app/app.service.ts (100%) rename apps/rxjs/{11-high-order-operator-bug => high-order-operator-bug}/src/app/localDB.service.ts (100%) rename apps/{forms/48-avoid-losing-form-data => rxjs/high-order-operator-bug}/src/assets/.gitkeep (100%) rename apps/{angular/8-pure-pipe => rxjs/high-order-operator-bug}/src/favicon.ico (100%) rename apps/rxjs/{11-high-order-operator-bug => high-order-operator-bug}/src/index.html (100%) rename apps/{forms/41-control-value-accessor => rxjs/high-order-operator-bug}/src/main.ts (100%) rename apps/{angular/9-wrap-function-pipe => rxjs/high-order-operator-bug}/src/styles.scss (100%) rename apps/rxjs/{11-high-order-operator-bug => high-order-operator-bug}/tsconfig.app.json (100%) rename apps/{angular/9-wrap-function-pipe => rxjs/high-order-operator-bug}/tsconfig.editor.json (100%) rename apps/rxjs/{11-high-order-operator-bug => high-order-operator-bug}/tsconfig.json (100%) rename apps/{forms/41-control-value-accessor => rxjs/hold-to-save-button}/.eslintrc.json (100%) rename apps/rxjs/{49-hold-to-save-button => hold-to-save-button}/README.md (100%) rename apps/rxjs/{49-hold-to-save-button => hold-to-save-button}/jest.config.ts (100%) rename apps/rxjs/{49-hold-to-save-button => hold-to-save-button}/project.json (100%) rename apps/rxjs/{49-hold-to-save-button => hold-to-save-button}/src/app/app.component.ts (100%) rename apps/{angular/46-simple-animations => rxjs/hold-to-save-button}/src/app/app.config.ts (100%) rename apps/{nx/42-static-vs-dynamic-import => rxjs/hold-to-save-button}/src/assets/.gitkeep (100%) rename apps/{angular/9-wrap-function-pipe => rxjs/hold-to-save-button}/src/favicon.ico (100%) rename apps/rxjs/{49-hold-to-save-button => hold-to-save-button}/src/index.html (100%) rename apps/{angular/59-content-projection-defer => rxjs/hold-to-save-button}/src/main.ts (100%) rename apps/rxjs/{49-hold-to-save-button => hold-to-save-button}/src/styles.scss (100%) rename apps/{angular/55-back-button-navigation => rxjs/hold-to-save-button}/src/test-setup.ts (100%) rename apps/{angular/6-structural-directive => rxjs/hold-to-save-button}/tailwind.config.js (100%) rename apps/{angular/22-router-input => rxjs/hold-to-save-button}/tsconfig.app.json (100%) rename apps/{angular/57-content-projection-default => rxjs/hold-to-save-button}/tsconfig.editor.json (100%) rename apps/{angular/55-back-button-navigation => rxjs/hold-to-save-button}/tsconfig.json (100%) rename apps/{angular/45-react-in-angular => rxjs/hold-to-save-button}/tsconfig.spec.json (100%) rename apps/{performance/34-default-vs-onpush => rxjs/race-condition}/.eslintrc.json (100%) rename apps/rxjs/{14-race-condition => race-condition}/README.md (100%) rename apps/rxjs/{14-race-condition => race-condition}/cypress.config.ts (100%) rename apps/rxjs/{14-race-condition => race-condition}/cypress/fixtures/example.json (100%) rename apps/rxjs/{14-race-condition => race-condition}/cypress/support/commands.ts (100%) rename apps/rxjs/{14-race-condition => race-condition}/cypress/support/component-index.html (100%) rename apps/rxjs/{14-race-condition => race-condition}/cypress/support/component.ts (100%) rename apps/rxjs/{14-race-condition => race-condition}/cypress/tsconfig.json (100%) rename apps/rxjs/{14-race-condition => race-condition}/jest.config.ts (100%) rename apps/rxjs/{14-race-condition => race-condition}/project.json (100%) rename apps/rxjs/{14-race-condition => race-condition}/src/app/app.component.cy.ts (100%) rename apps/rxjs/{14-race-condition => race-condition}/src/app/app.component.ts (100%) rename apps/rxjs/{14-race-condition => race-condition}/src/app/app.config.ts (100%) rename apps/rxjs/{14-race-condition => race-condition}/src/app/topic-dialog.component.ts (100%) rename apps/rxjs/{14-race-condition => race-condition}/src/app/topic.service.ts (100%) rename apps/{performance/12-optimize-change-detection => rxjs/race-condition}/src/assets/.gitkeep (100%) rename apps/{forms/41-control-value-accessor => rxjs/race-condition}/src/favicon.ico (100%) rename apps/rxjs/{14-race-condition => race-condition}/src/index.html (100%) rename apps/rxjs/{14-race-condition => race-condition}/src/main.ts (100%) rename apps/rxjs/{14-race-condition => race-condition}/src/styles.scss (100%) rename apps/rxjs/{14-race-condition => race-condition}/src/test-setup.ts (100%) rename apps/rxjs/{14-race-condition => race-condition}/tsconfig.app.json (100%) rename apps/{performance/12-optimize-change-detection => rxjs/race-condition}/tsconfig.editor.json (100%) rename apps/rxjs/{14-race-condition => race-condition}/tsconfig.json (100%) rename apps/{angular/21-anchor-navigation => rxjs/race-condition}/tsconfig.spec.json (100%) delete mode 100644 apps/signal/30-interop-rxjs-signal/.eslintrc.json delete mode 100644 apps/signal/30-interop-rxjs-signal/README.md delete mode 100644 apps/signal/30-interop-rxjs-signal/jest.config.ts delete mode 100644 apps/signal/30-interop-rxjs-signal/project.json delete mode 100644 apps/signal/30-interop-rxjs-signal/src/app/app.component.ts delete mode 100644 apps/signal/30-interop-rxjs-signal/src/app/app.config.ts delete mode 100644 apps/signal/30-interop-rxjs-signal/src/app/detail/detail.component.ts delete mode 100644 apps/signal/30-interop-rxjs-signal/src/app/list/photos.component.ts delete mode 100644 apps/signal/30-interop-rxjs-signal/src/app/list/photos.store.ts delete mode 100644 apps/signal/30-interop-rxjs-signal/src/app/photo.model.ts delete mode 100644 apps/signal/30-interop-rxjs-signal/src/app/photos.service.ts delete mode 100644 apps/signal/30-interop-rxjs-signal/src/assets/.gitkeep delete mode 100644 apps/signal/30-interop-rxjs-signal/src/favicon.ico delete mode 100644 apps/signal/30-interop-rxjs-signal/src/index.html delete mode 100644 apps/signal/30-interop-rxjs-signal/src/main.ts delete mode 100644 apps/signal/30-interop-rxjs-signal/src/styles.scss delete mode 100644 apps/signal/30-interop-rxjs-signal/src/test-setup.ts delete mode 100644 apps/signal/30-interop-rxjs-signal/tailwind.config.js delete mode 100644 apps/signal/30-interop-rxjs-signal/tsconfig.app.json delete mode 100644 apps/signal/30-interop-rxjs-signal/tsconfig.editor.json delete mode 100644 apps/signal/30-interop-rxjs-signal/tsconfig.json delete mode 100644 apps/signal/30-interop-rxjs-signal/tsconfig.spec.json delete mode 100644 apps/signal/43-signal-input/.eslintrc.json delete mode 100644 apps/signal/43-signal-input/src/assets/.gitkeep delete mode 100644 apps/signal/43-signal-input/src/favicon.ico delete mode 100644 apps/signal/43-signal-input/src/main.ts delete mode 100644 apps/signal/43-signal-input/src/styles.scss delete mode 100644 apps/signal/43-signal-input/tailwind.config.js delete mode 100644 apps/signal/43-signal-input/tsconfig.app.json delete mode 100644 apps/signal/43-signal-input/tsconfig.editor.json delete mode 100644 apps/signal/43-signal-input/tsconfig.json delete mode 100644 apps/signal/50-bug-in-effect/.eslintrc.json delete mode 100644 apps/signal/50-bug-in-effect/src/assets/.gitkeep delete mode 100644 apps/signal/50-bug-in-effect/src/favicon.ico delete mode 100644 apps/signal/50-bug-in-effect/src/main.ts delete mode 100644 apps/signal/50-bug-in-effect/src/styles.scss delete mode 100644 apps/signal/50-bug-in-effect/tailwind.config.js delete mode 100644 apps/signal/50-bug-in-effect/tsconfig.app.json delete mode 100644 apps/signal/51-function-call-effect/.eslintrc.json delete mode 100644 apps/signal/51-function-call-effect/src/app/app.config.ts delete mode 100644 apps/signal/51-function-call-effect/src/assets/.gitkeep delete mode 100644 apps/signal/51-function-call-effect/src/favicon.ico delete mode 100644 apps/signal/51-function-call-effect/src/main.ts delete mode 100644 apps/signal/51-function-call-effect/src/styles.scss delete mode 100644 apps/signal/51-function-call-effect/tailwind.config.js delete mode 100644 apps/signal/51-function-call-effect/tsconfig.app.json delete mode 100644 apps/signal/51-function-call-effect/tsconfig.editor.json delete mode 100644 apps/signal/53-big-signal-performance/.eslintrc.json delete mode 100644 apps/signal/53-big-signal-performance/README.md delete mode 100644 apps/signal/53-big-signal-performance/project.json delete mode 100644 apps/signal/53-big-signal-performance/src/app/address.component.ts delete mode 100644 apps/signal/53-big-signal-performance/src/app/app.component.ts delete mode 100644 apps/signal/53-big-signal-performance/src/app/app.config.ts delete mode 100644 apps/signal/53-big-signal-performance/src/app/job.component.ts delete mode 100644 apps/signal/53-big-signal-performance/src/app/name.component.ts delete mode 100644 apps/signal/53-big-signal-performance/src/app/note.component.ts delete mode 100644 apps/signal/53-big-signal-performance/src/app/user-form.component.ts delete mode 100644 apps/signal/53-big-signal-performance/src/app/user.service.ts delete mode 100644 apps/signal/53-big-signal-performance/src/assets/.gitkeep delete mode 100644 apps/signal/53-big-signal-performance/src/favicon.ico delete mode 100644 apps/signal/53-big-signal-performance/src/index.html delete mode 100644 apps/signal/53-big-signal-performance/src/main.ts delete mode 100644 apps/signal/53-big-signal-performance/src/styles.scss delete mode 100644 apps/signal/53-big-signal-performance/tailwind.config.js delete mode 100644 apps/signal/53-big-signal-performance/tsconfig.app.json delete mode 100644 apps/signal/53-big-signal-performance/tsconfig.editor.json delete mode 100644 apps/signal/54-pipe-observable-to-signal/.eslintrc.json delete mode 100644 apps/signal/54-pipe-observable-to-signal/src/assets/.gitkeep delete mode 100644 apps/signal/54-pipe-observable-to-signal/src/favicon.ico delete mode 100644 apps/signal/54-pipe-observable-to-signal/src/main.ts delete mode 100644 apps/signal/54-pipe-observable-to-signal/tailwind.config.js delete mode 100644 apps/signal/54-pipe-observable-to-signal/tsconfig.app.json delete mode 100644 apps/signal/54-pipe-observable-to-signal/tsconfig.editor.json delete mode 100644 apps/signal/56-forms-and-signal/.eslintrc.json delete mode 100644 apps/signal/56-forms-and-signal/public/favicon.ico delete mode 100644 apps/signal/56-forms-and-signal/src/main.ts delete mode 100644 apps/signal/56-forms-and-signal/src/styles.scss delete mode 100644 apps/signal/56-forms-and-signal/tailwind.config.js delete mode 100644 apps/signal/56-forms-and-signal/tsconfig.app.json delete mode 100644 apps/signal/56-forms-and-signal/tsconfig.editor.json delete mode 100644 apps/signal/56-forms-and-signal/tsconfig.json rename apps/{forms/48-avoid-losing-form-data => signal/bug-in-effect}/.eslintrc.json (100%) rename apps/signal/{50-bug-in-effect => bug-in-effect}/README.md (100%) rename apps/signal/{50-bug-in-effect => bug-in-effect}/project.json (100%) rename apps/signal/{50-bug-in-effect => bug-in-effect}/src/app/app.component.ts (100%) rename apps/{rxjs/49-hold-to-save-button => signal/bug-in-effect}/src/app/app.config.ts (100%) rename apps/{performance/34-default-vs-onpush => signal/bug-in-effect}/src/assets/.gitkeep (100%) rename apps/{forms/48-avoid-losing-form-data => signal/bug-in-effect}/src/favicon.ico (100%) rename apps/signal/{50-bug-in-effect => bug-in-effect}/src/index.html (100%) rename apps/{forms/48-avoid-losing-form-data => signal/bug-in-effect}/src/main.ts (100%) rename apps/{angular/60-async-redirect => signal/bug-in-effect}/src/styles.scss (100%) rename apps/{angular/60-async-redirect => signal/bug-in-effect}/tailwind.config.js (100%) rename apps/{angular/31-module-to-standalone => signal/bug-in-effect}/tsconfig.app.json (100%) rename apps/{angular/58-content-projection-condition => signal/bug-in-effect}/tsconfig.editor.json (100%) rename apps/signal/{50-bug-in-effect => bug-in-effect}/tsconfig.json (100%) rename apps/{nx/42-static-vs-dynamic-import => signal/forms-and-signal}/.eslintrc.json (100%) rename apps/signal/{56-forms-and-signal => forms-and-signal}/README.md (100%) rename apps/signal/{56-forms-and-signal => forms-and-signal}/project.json (100%) rename apps/{nx/42-static-vs-dynamic-import/src => signal/forms-and-signal/public}/favicon.ico (100%) rename apps/signal/{56-forms-and-signal => forms-and-signal}/src/app/app.component.ts (100%) rename apps/signal/{56-forms-and-signal => forms-and-signal}/src/app/app.config.ts (100%) rename apps/signal/{56-forms-and-signal => forms-and-signal}/src/app/app.routes.ts (100%) rename apps/signal/{56-forms-and-signal => forms-and-signal}/src/app/checkout.component.ts (100%) rename apps/signal/{56-forms-and-signal => forms-and-signal}/src/app/dashboard.component.ts (100%) rename apps/signal/{56-forms-and-signal => forms-and-signal}/src/app/order.component.ts (100%) rename apps/signal/{56-forms-and-signal => forms-and-signal}/src/app/payment.component.ts (100%) rename apps/signal/{56-forms-and-signal => forms-and-signal}/src/app/products.ts (100%) rename apps/signal/{56-forms-and-signal => forms-and-signal}/src/index.html (100%) rename apps/{nx/42-static-vs-dynamic-import => signal/forms-and-signal}/src/main.ts (100%) rename apps/{forms/41-control-value-accessor => signal/forms-and-signal}/src/styles.scss (100%) rename apps/{forms/41-control-value-accessor => signal/forms-and-signal}/tailwind.config.js (100%) rename apps/{angular/32-change-detection-bug => signal/forms-and-signal}/tsconfig.app.json (100%) rename apps/{angular/59-content-projection-defer => signal/forms-and-signal}/tsconfig.editor.json (100%) rename apps/signal/{51-function-call-effect => forms-and-signal}/tsconfig.json (100%) rename apps/{rxjs/11-high-order-operator-bug => signal/function-call-effect}/.eslintrc.json (100%) rename apps/signal/{51-function-call-effect => function-call-effect}/README.md (100%) rename apps/signal/{51-function-call-effect => function-call-effect}/project.json (100%) rename apps/signal/{51-function-call-effect => function-call-effect}/src/app/action.component.ts (100%) rename apps/signal/{51-function-call-effect => function-call-effect}/src/app/app.component.ts (100%) rename apps/signal/{43-signal-input => function-call-effect}/src/app/app.config.ts (100%) rename apps/signal/{51-function-call-effect => function-call-effect}/src/app/user.service.ts (100%) rename apps/{performance/35-memoization => signal/function-call-effect}/src/assets/.gitkeep (100%) rename apps/{performance/12-optimize-change-detection => signal/function-call-effect}/src/favicon.ico (100%) rename apps/signal/{51-function-call-effect => function-call-effect}/src/index.html (100%) rename apps/{performance/34-default-vs-onpush => signal/function-call-effect}/src/main.ts (100%) rename apps/{forms/48-avoid-losing-form-data => signal/function-call-effect}/src/styles.scss (100%) rename apps/{nx/42-static-vs-dynamic-import => signal/function-call-effect}/tailwind.config.js (100%) rename apps/{angular/33-decoupling-components => signal/function-call-effect}/tsconfig.app.json (100%) rename apps/{forms/48-avoid-losing-form-data => signal/function-call-effect}/tsconfig.editor.json (100%) rename apps/signal/{53-big-signal-performance => function-call-effect}/tsconfig.json (100%) rename apps/{performance/40-web-workers => signal/pipe-observable-to-signal}/.eslintrc.json (100%) rename apps/signal/{54-pipe-observable-to-signal => pipe-observable-to-signal}/README.md (100%) rename apps/signal/{54-pipe-observable-to-signal => pipe-observable-to-signal}/project.json (100%) rename apps/signal/{54-pipe-observable-to-signal => pipe-observable-to-signal}/src/app/app.component.ts (100%) rename apps/signal/{54-pipe-observable-to-signal => pipe-observable-to-signal}/src/app/currency.pipe.ts (100%) rename apps/signal/{54-pipe-observable-to-signal => pipe-observable-to-signal}/src/app/currency.service.ts (100%) rename apps/signal/{54-pipe-observable-to-signal => pipe-observable-to-signal}/src/app/product-row.component.ts (100%) rename apps/signal/{54-pipe-observable-to-signal => pipe-observable-to-signal}/src/app/product.model.ts (100%) rename apps/{performance/36-ngfor-optimization => signal/pipe-observable-to-signal}/src/assets/.gitkeep (100%) rename apps/{performance/34-default-vs-onpush => signal/pipe-observable-to-signal}/src/favicon.ico (100%) rename apps/signal/{54-pipe-observable-to-signal => pipe-observable-to-signal}/src/index.html (100%) rename apps/{performance/12-optimize-change-detection => signal/pipe-observable-to-signal}/src/main.ts (100%) rename apps/signal/{54-pipe-observable-to-signal => pipe-observable-to-signal}/src/styles.scss (100%) rename apps/{performance/34-default-vs-onpush => signal/pipe-observable-to-signal}/tailwind.config.js (100%) rename apps/{angular/39-injection-token => signal/pipe-observable-to-signal}/tsconfig.app.json (100%) rename apps/{rxjs/49-hold-to-save-button => signal/pipe-observable-to-signal}/tsconfig.editor.json (100%) rename apps/signal/{54-pipe-observable-to-signal => pipe-observable-to-signal}/tsconfig.json (100%) rename apps/{rxjs/49-hold-to-save-button => signal/signal-input}/.eslintrc.json (100%) rename apps/signal/{43-signal-input => signal-input}/README.md (100%) rename apps/signal/{43-signal-input => signal-input}/project.json (100%) rename apps/signal/{43-signal-input => signal-input}/src/app/app.component.ts (100%) rename apps/signal/{50-bug-in-effect => signal-input}/src/app/app.config.ts (100%) rename apps/signal/{43-signal-input => signal-input}/src/app/user.component.ts (100%) rename apps/{performance/37-optimize-big-list => signal/signal-input}/src/assets/.gitkeep (100%) rename apps/{performance/35-memoization => signal/signal-input}/src/favicon.ico (100%) rename apps/signal/{43-signal-input => signal-input}/src/index.html (100%) rename apps/{performance/35-memoization => signal/signal-input}/src/main.ts (100%) rename apps/{nx/42-static-vs-dynamic-import => signal/signal-input}/src/styles.scss (100%) rename apps/{performance/35-memoization => signal/signal-input}/tailwind.config.js (100%) rename apps/{angular/44-view-transition => signal/signal-input}/tsconfig.app.json (100%) rename apps/{nx/42-static-vs-dynamic-import => signal/signal-input}/tsconfig.editor.json (100%) rename apps/{nx/42-static-vs-dynamic-import => signal/signal-input}/tsconfig.json (100%) rename apps/{performance/35-memoization => standalone/module-to-standalone}/.eslintrc.json (100%) rename apps/{angular/31-module-to-standalone => standalone/module-to-standalone}/README.md (100%) rename apps/{angular/31-module-to-standalone => standalone/module-to-standalone}/project.json (100%) rename apps/{angular/31-module-to-standalone => standalone/module-to-standalone}/src/app/app.component.ts (100%) rename apps/{angular/31-module-to-standalone => standalone/module-to-standalone}/src/app/app.module.ts (100%) rename apps/{performance/40-web-workers => standalone/module-to-standalone}/src/assets/.gitkeep (100%) rename apps/{performance/36-ngfor-optimization => standalone/module-to-standalone}/src/favicon.ico (100%) rename apps/{angular/31-module-to-standalone => standalone/module-to-standalone}/src/index.html (100%) rename apps/{angular/52-lazy-load-component => standalone/module-to-standalone}/src/main.ts (100%) rename apps/{performance/34-default-vs-onpush => standalone/module-to-standalone}/src/styles.scss (100%) rename apps/{angular/31-module-to-standalone => standalone/module-to-standalone}/tailwind.config.js (100%) create mode 100644 apps/standalone/module-to-standalone/tsconfig.app.json rename apps/{angular/31-module-to-standalone => standalone/module-to-standalone}/tsconfig.editor.json (71%) rename apps/{angular/33-decoupling-components => standalone/module-to-standalone}/tsconfig.json (100%) delete mode 100644 apps/testing/17-router/.eslintrc.json delete mode 100644 apps/testing/17-router/README.md delete mode 100644 apps/testing/17-router/cypress.config.ts delete mode 100644 apps/testing/17-router/cypress/fixtures/example.json delete mode 100644 apps/testing/17-router/cypress/support/commands.ts delete mode 100644 apps/testing/17-router/cypress/support/component-index.html delete mode 100644 apps/testing/17-router/cypress/support/component.ts delete mode 100644 apps/testing/17-router/cypress/tsconfig.json delete mode 100644 apps/testing/17-router/jest.config.ts delete mode 100644 apps/testing/17-router/project.json delete mode 100644 apps/testing/17-router/src/app/app.component.cy.ts delete mode 100644 apps/testing/17-router/src/app/app.component.spec.ts delete mode 100644 apps/testing/17-router/src/app/app.component.ts delete mode 100644 apps/testing/17-router/src/app/app.config.ts delete mode 100644 apps/testing/17-router/src/app/app.routes.ts delete mode 100644 apps/testing/17-router/src/app/book.guard.ts delete mode 100644 apps/testing/17-router/src/app/book.model.ts delete mode 100644 apps/testing/17-router/src/app/no-book-search.component.ts delete mode 100644 apps/testing/17-router/src/app/search.component.ts delete mode 100644 apps/testing/17-router/src/app/shelf.component.ts delete mode 100644 apps/testing/17-router/src/assets/.gitkeep delete mode 100644 apps/testing/17-router/src/favicon.ico delete mode 100644 apps/testing/17-router/src/index.html delete mode 100644 apps/testing/17-router/src/main.ts delete mode 100644 apps/testing/17-router/src/styles.scss delete mode 100644 apps/testing/17-router/src/test-setup.ts delete mode 100644 apps/testing/17-router/tsconfig.app.json delete mode 100644 apps/testing/17-router/tsconfig.editor.json delete mode 100644 apps/testing/17-router/tsconfig.json delete mode 100644 apps/testing/17-router/tsconfig.spec.json delete mode 100644 apps/testing/18-nested-components/.eslintrc.json delete mode 100644 apps/testing/18-nested-components/README.md delete mode 100644 apps/testing/18-nested-components/cypress.config.ts delete mode 100644 apps/testing/18-nested-components/cypress/fixtures/example.json delete mode 100644 apps/testing/18-nested-components/cypress/support/commands.ts delete mode 100644 apps/testing/18-nested-components/cypress/support/component-index.html delete mode 100644 apps/testing/18-nested-components/cypress/support/component.ts delete mode 100644 apps/testing/18-nested-components/cypress/tsconfig.json delete mode 100644 apps/testing/18-nested-components/jest.config.ts delete mode 100644 apps/testing/18-nested-components/project.json delete mode 100644 apps/testing/18-nested-components/src/app/app.component.ts delete mode 100644 apps/testing/18-nested-components/src/app/child.component.cy.ts delete mode 100644 apps/testing/18-nested-components/src/app/child.component.spec.ts delete mode 100644 apps/testing/18-nested-components/src/app/child.component.ts delete mode 100644 apps/testing/18-nested-components/src/app/http.service.ts delete mode 100644 apps/testing/18-nested-components/src/assets/.gitkeep delete mode 100644 apps/testing/18-nested-components/src/favicon.ico delete mode 100644 apps/testing/18-nested-components/src/index.html delete mode 100644 apps/testing/18-nested-components/src/main.ts delete mode 100644 apps/testing/18-nested-components/src/styles.scss delete mode 100644 apps/testing/18-nested-components/src/test-setup.ts delete mode 100644 apps/testing/18-nested-components/tsconfig.app.json delete mode 100644 apps/testing/18-nested-components/tsconfig.editor.json delete mode 100644 apps/testing/18-nested-components/tsconfig.json delete mode 100644 apps/testing/19-input-output/.eslintrc.json delete mode 100644 apps/testing/19-input-output/README.md delete mode 100644 apps/testing/19-input-output/cypress.config.ts delete mode 100644 apps/testing/19-input-output/cypress/fixtures/example.json delete mode 100644 apps/testing/19-input-output/cypress/support/commands.ts delete mode 100644 apps/testing/19-input-output/cypress/support/component-index.html delete mode 100644 apps/testing/19-input-output/cypress/support/component.ts delete mode 100644 apps/testing/19-input-output/cypress/tsconfig.json delete mode 100644 apps/testing/19-input-output/jest.config.ts delete mode 100644 apps/testing/19-input-output/project.json delete mode 100644 apps/testing/19-input-output/src/app/app.component.ts delete mode 100644 apps/testing/19-input-output/src/app/counter.component.cy.ts delete mode 100644 apps/testing/19-input-output/src/app/counter.component.spec.ts delete mode 100644 apps/testing/19-input-output/src/app/counter.component.ts delete mode 100644 apps/testing/19-input-output/src/assets/.gitkeep delete mode 100644 apps/testing/19-input-output/src/favicon.ico delete mode 100644 apps/testing/19-input-output/src/index.html delete mode 100644 apps/testing/19-input-output/src/main.ts delete mode 100644 apps/testing/19-input-output/src/styles.scss delete mode 100644 apps/testing/19-input-output/src/test-setup.ts delete mode 100644 apps/testing/19-input-output/tsconfig.app.json delete mode 100644 apps/testing/19-input-output/tsconfig.editor.json delete mode 100644 apps/testing/19-input-output/tsconfig.json delete mode 100644 apps/testing/19-input-output/tsconfig.spec.json delete mode 100644 apps/testing/20-modal/.eslintrc.json delete mode 100644 apps/testing/20-modal/README.md delete mode 100644 apps/testing/20-modal/cypress.config.ts delete mode 100644 apps/testing/20-modal/cypress/fixtures/example.json delete mode 100644 apps/testing/20-modal/cypress/support/commands.ts delete mode 100644 apps/testing/20-modal/cypress/support/component-index.html delete mode 100644 apps/testing/20-modal/cypress/support/component.ts delete mode 100644 apps/testing/20-modal/cypress/tsconfig.json delete mode 100644 apps/testing/20-modal/jest.config.ts delete mode 100644 apps/testing/20-modal/project.json delete mode 100644 apps/testing/20-modal/src/app/app.component.cy.ts delete mode 100644 apps/testing/20-modal/src/app/app.component.spec.ts delete mode 100644 apps/testing/20-modal/src/app/app.component.ts delete mode 100644 apps/testing/20-modal/src/app/app.config.ts delete mode 100644 apps/testing/20-modal/src/app/error.dialog.ts delete mode 100644 apps/testing/20-modal/src/app/profil-confirmation.dialog.ts delete mode 100644 apps/testing/20-modal/src/assets/.gitkeep delete mode 100644 apps/testing/20-modal/src/favicon.ico delete mode 100644 apps/testing/20-modal/src/index.html delete mode 100644 apps/testing/20-modal/src/main.ts delete mode 100644 apps/testing/20-modal/src/styles.scss delete mode 100644 apps/testing/20-modal/src/test-setup.ts delete mode 100644 apps/testing/20-modal/tailwind.config.js delete mode 100644 apps/testing/20-modal/tsconfig.app.json delete mode 100644 apps/testing/20-modal/tsconfig.editor.json delete mode 100644 apps/testing/20-modal/tsconfig.json delete mode 100644 apps/testing/20-modal/tsconfig.spec.json delete mode 100644 apps/testing/23-harness/.eslintrc.json delete mode 100644 apps/testing/23-harness/README.md delete mode 100644 apps/testing/23-harness/jest.config.ts delete mode 100644 apps/testing/23-harness/project.json delete mode 100644 apps/testing/23-harness/src/app/app.component.ts delete mode 100644 apps/testing/23-harness/src/app/app.config.ts delete mode 100644 apps/testing/23-harness/src/app/child.component.spec.ts delete mode 100644 apps/testing/23-harness/src/app/child.component.ts delete mode 100644 apps/testing/23-harness/src/assets/.gitkeep delete mode 100644 apps/testing/23-harness/src/favicon.ico delete mode 100644 apps/testing/23-harness/src/index.html delete mode 100644 apps/testing/23-harness/src/main.ts delete mode 100644 apps/testing/23-harness/src/styles.scss delete mode 100644 apps/testing/23-harness/src/test-setup.ts delete mode 100644 apps/testing/23-harness/tailwind.config.js delete mode 100644 apps/testing/23-harness/tsconfig.app.json delete mode 100644 apps/testing/23-harness/tsconfig.editor.json delete mode 100644 apps/testing/23-harness/tsconfig.json delete mode 100644 apps/testing/23-harness/tsconfig.spec.json delete mode 100644 apps/testing/24-harness-creation/.eslintrc.json delete mode 100644 apps/testing/24-harness-creation/README.md delete mode 100644 apps/testing/24-harness-creation/jest.config.ts delete mode 100644 apps/testing/24-harness-creation/project.json delete mode 100644 apps/testing/24-harness-creation/src/app/app.component.spec.ts delete mode 100644 apps/testing/24-harness-creation/src/app/app.component.ts delete mode 100644 apps/testing/24-harness-creation/src/app/app.config.ts delete mode 100644 apps/testing/24-harness-creation/src/app/slider.component.ts delete mode 100644 apps/testing/24-harness-creation/src/app/slider.harness.ts delete mode 100644 apps/testing/24-harness-creation/src/assets/.gitkeep delete mode 100644 apps/testing/24-harness-creation/src/favicon.ico delete mode 100644 apps/testing/24-harness-creation/src/index.html delete mode 100644 apps/testing/24-harness-creation/src/main.ts delete mode 100644 apps/testing/24-harness-creation/src/styles.scss delete mode 100644 apps/testing/24-harness-creation/src/test-setup.ts delete mode 100644 apps/testing/24-harness-creation/tailwind.config.js delete mode 100644 apps/testing/24-harness-creation/tsconfig.app.json delete mode 100644 apps/testing/24-harness-creation/tsconfig.editor.json delete mode 100644 apps/testing/24-harness-creation/tsconfig.json delete mode 100644 apps/testing/24-harness-creation/tsconfig.spec.json delete mode 100644 apps/testing/28-checkbox/.eslintrc.json delete mode 100644 apps/testing/28-checkbox/README.md delete mode 100644 apps/testing/28-checkbox/jest.config.ts delete mode 100644 apps/testing/28-checkbox/project.json delete mode 100644 apps/testing/28-checkbox/src/app/app.component.spec.ts delete mode 100644 apps/testing/28-checkbox/src/app/app.component.ts delete mode 100644 apps/testing/28-checkbox/src/assets/.gitkeep delete mode 100644 apps/testing/28-checkbox/src/favicon.ico delete mode 100644 apps/testing/28-checkbox/src/index.html delete mode 100644 apps/testing/28-checkbox/src/main.ts delete mode 100644 apps/testing/28-checkbox/src/styles.scss delete mode 100644 apps/testing/28-checkbox/src/test-setup.ts delete mode 100644 apps/testing/28-checkbox/tailwind.config.js delete mode 100644 apps/testing/28-checkbox/tsconfig.app.json delete mode 100644 apps/testing/28-checkbox/tsconfig.editor.json delete mode 100644 apps/testing/28-checkbox/tsconfig.json delete mode 100644 apps/testing/28-checkbox/tsconfig.spec.json delete mode 100644 apps/testing/29-real-life-application/.eslintrc.json delete mode 100644 apps/testing/29-real-life-application/README.md delete mode 100644 apps/testing/29-real-life-application/cypress.config.ts delete mode 100644 apps/testing/29-real-life-application/cypress/fixtures/example.json delete mode 100644 apps/testing/29-real-life-application/cypress/support/commands.ts delete mode 100644 apps/testing/29-real-life-application/cypress/support/component-index.html delete mode 100644 apps/testing/29-real-life-application/cypress/support/component.ts delete mode 100644 apps/testing/29-real-life-application/cypress/tsconfig.json delete mode 100644 apps/testing/29-real-life-application/jest.config.ts delete mode 100644 apps/testing/29-real-life-application/project.json delete mode 100644 apps/testing/29-real-life-application/src/app/app.component.ts delete mode 100644 apps/testing/29-real-life-application/src/app/app.config.ts delete mode 100644 apps/testing/29-real-life-application/src/app/app.route.ts delete mode 100644 apps/testing/29-real-life-application/src/app/backend.service.ts delete mode 100644 apps/testing/29-real-life-application/src/app/detail/detail.component.ts delete mode 100644 apps/testing/29-real-life-application/src/app/detail/detail.store.ts delete mode 100644 apps/testing/29-real-life-application/src/app/list/list.component.spec.ts delete mode 100644 apps/testing/29-real-life-application/src/app/list/list.component.ts delete mode 100644 apps/testing/29-real-life-application/src/app/list/ticket.store.spec.ts delete mode 100644 apps/testing/29-real-life-application/src/app/list/ticket.store.ts delete mode 100644 apps/testing/29-real-life-application/src/app/list/ui/add.component.ts delete mode 100644 apps/testing/29-real-life-application/src/app/list/ui/row.component.spec.ts delete mode 100644 apps/testing/29-real-life-application/src/app/list/ui/row.component.ts delete mode 100644 apps/testing/29-real-life-application/src/assets/.gitkeep delete mode 100644 apps/testing/29-real-life-application/src/favicon.ico delete mode 100644 apps/testing/29-real-life-application/src/index.html delete mode 100644 apps/testing/29-real-life-application/src/main.ts delete mode 100644 apps/testing/29-real-life-application/src/styles.scss delete mode 100644 apps/testing/29-real-life-application/src/test-setup.ts delete mode 100644 apps/testing/29-real-life-application/tailwind.config.js delete mode 100644 apps/testing/29-real-life-application/tsconfig.app.json delete mode 100644 apps/testing/29-real-life-application/tsconfig.editor.json delete mode 100644 apps/testing/29-real-life-application/tsconfig.json delete mode 100644 apps/testing/29-real-life-application/tsconfig.spec.json delete mode 100644 apps/typescript/15-function-overload/.eslintrc.json delete mode 100644 apps/typescript/15-function-overload/README.md delete mode 100644 apps/typescript/15-function-overload/project.json delete mode 100644 apps/typescript/15-function-overload/src/app/app.component.ts delete mode 100644 apps/typescript/15-function-overload/src/app/vehicle.utils.ts delete mode 100644 apps/typescript/15-function-overload/src/assets/.gitkeep delete mode 100644 apps/typescript/15-function-overload/src/favicon.ico delete mode 100644 apps/typescript/15-function-overload/src/index.html delete mode 100644 apps/typescript/15-function-overload/src/main.ts delete mode 100644 apps/typescript/15-function-overload/src/styles.scss delete mode 100644 apps/typescript/15-function-overload/tsconfig.app.json delete mode 100644 apps/typescript/15-function-overload/tsconfig.editor.json delete mode 100644 apps/typescript/15-function-overload/tsconfig.json delete mode 100644 apps/typescript/47-enums-vs-union-types/.eslintrc.json delete mode 100644 apps/typescript/47-enums-vs-union-types/README.md delete mode 100644 apps/typescript/47-enums-vs-union-types/project.json delete mode 100644 apps/typescript/47-enums-vs-union-types/src/app/app.component.ts delete mode 100644 apps/typescript/47-enums-vs-union-types/src/app/app.config.ts delete mode 100644 apps/typescript/47-enums-vs-union-types/src/assets/.gitkeep delete mode 100644 apps/typescript/47-enums-vs-union-types/src/favicon.ico delete mode 100644 apps/typescript/47-enums-vs-union-types/src/index.html delete mode 100644 apps/typescript/47-enums-vs-union-types/src/main.ts delete mode 100644 apps/typescript/47-enums-vs-union-types/src/styles.scss delete mode 100644 apps/typescript/47-enums-vs-union-types/tailwind.config.js delete mode 100644 apps/typescript/47-enums-vs-union-types/tsconfig.app.json delete mode 100644 apps/typescript/47-enums-vs-union-types/tsconfig.editor.json delete mode 100644 apps/typescript/47-enums-vs-union-types/tsconfig.json diff --git a/apps/angular/13-highly-customizable-css/README.md b/apps/angular/13-highly-customizable-css/README.md deleted file mode 100644 index d63171ae6..000000000 --- a/apps/angular/13-highly-customizable-css/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Highly Customizable CSS - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-highly-customizable-css -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/13-styling/). diff --git a/apps/angular/13-highly-customizable-css/project.json b/apps/angular/13-highly-customizable-css/project.json deleted file mode 100644 index c20d3bb48..000000000 --- a/apps/angular/13-highly-customizable-css/project.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "angular-highly-customizable-css", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/angular/13-highly-customizable-css/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/13-highly-customizable-css", - "index": "apps/angular/13-highly-customizable-css/src/index.html", - "main": "apps/angular/13-highly-customizable-css/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/13-highly-customizable-css/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/13-highly-customizable-css/src/favicon.ico", - "apps/angular/13-highly-customizable-css/src/assets" - ], - "styles": ["apps/angular/13-highly-customizable-css/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-highly-customizable-css:build:production" - }, - "development": { - "buildTarget": "angular-highly-customizable-css:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-highly-customizable-css:build" - } - } - } -} diff --git a/apps/angular/13-highly-customizable-css/src/app/page.component.ts b/apps/angular/13-highly-customizable-css/src/app/page.component.ts deleted file mode 100644 index 029ca52d2..000000000 --- a/apps/angular/13-highly-customizable-css/src/app/page.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-disable @angular-eslint/component-selector */ -import { Component } from '@angular/core'; -import { TextStaticComponent } from './static-text.component'; -import { TextComponent } from './text.component'; - -@Component({ - selector: 'page', - imports: [TextStaticComponent, TextComponent], - template: ` - - - - This is a blue text - `, -}) -export class PageComponent {} diff --git a/apps/angular/13-highly-customizable-css/src/app/static-text.component.ts b/apps/angular/13-highly-customizable-css/src/app/static-text.component.ts deleted file mode 100644 index 703e2a538..000000000 --- a/apps/angular/13-highly-customizable-css/src/app/static-text.component.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* eslint-disable @angular-eslint/component-selector */ -import { Component, computed, input } from '@angular/core'; -import { TextComponent } from './text.component'; - -export type StaticTextType = 'normal' | 'warning' | 'error'; - -@Component({ - selector: 'static-text', - imports: [TextComponent], - template: ` - This is a static text - `, -}) -export class TextStaticComponent { - type = input('normal'); - - font = computed(() => { - switch (this.type()) { - case 'error': - return 30; - case 'warning': - return 25; - default: - return 10; - } - }); - - color = computed(() => { - switch (this.type()) { - case 'error': - return 'red'; - case 'warning': - return 'orange'; - default: - return 'black'; - } - }); -} diff --git a/apps/angular/13-highly-customizable-css/src/app/text.component.ts b/apps/angular/13-highly-customizable-css/src/app/text.component.ts deleted file mode 100644 index 07e3e6255..000000000 --- a/apps/angular/13-highly-customizable-css/src/app/text.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* eslint-disable @angular-eslint/component-selector */ -import { Component, input } from '@angular/core'; - -@Component({ - selector: 'text', - template: ` -

- -

- `, -}) -export class TextComponent { - font = input(10); - color = input('black'); -} diff --git a/apps/angular/13-highly-customizable-css/src/index.html b/apps/angular/13-highly-customizable-css/src/index.html deleted file mode 100644 index e4a84b456..000000000 --- a/apps/angular/13-highly-customizable-css/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - angular-highly-customizable-css - - - - - - - - diff --git a/apps/angular/13-highly-customizable-css/src/main.ts b/apps/angular/13-highly-customizable-css/src/main.ts deleted file mode 100644 index 698b48462..000000000 --- a/apps/angular/13-highly-customizable-css/src/main.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { PageComponent } from './app/page.component'; - -bootstrapApplication(PageComponent).catch((err) => console.error(err)); diff --git a/apps/angular/32-change-detection-bug/README.md b/apps/angular/32-change-detection-bug/README.md deleted file mode 100644 index 41e533388..000000000 --- a/apps/angular/32-change-detection-bug/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Change Detection Bug - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-change-detection-bug -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/performance/32-bug-cd/). diff --git a/apps/angular/32-change-detection-bug/jest.config.ts b/apps/angular/32-change-detection-bug/jest.config.ts deleted file mode 100644 index d0412f028..000000000 --- a/apps/angular/32-change-detection-bug/jest.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'angular-change-detection-bug', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - coverageDirectory: '../../../coverage/apps/angular/32-change-detection-bug', - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/angular/32-change-detection-bug/project.json b/apps/angular/32-change-detection-bug/project.json deleted file mode 100644 index 977b76334..000000000 --- a/apps/angular/32-change-detection-bug/project.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "angular-change-detection-bug", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/32-change-detection-bug/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/32-change-detection-bug", - "index": "apps/angular/32-change-detection-bug/src/index.html", - "main": "apps/angular/32-change-detection-bug/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/32-change-detection-bug/tsconfig.app.json", - "assets": [ - "apps/angular/32-change-detection-bug/src/favicon.ico", - "apps/angular/32-change-detection-bug/src/assets" - ], - "styles": ["apps/angular/32-change-detection-bug/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-change-detection-bug:build:production" - }, - "development": { - "buildTarget": "angular-change-detection-bug:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-change-detection-bug:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/angular/32-change-detection-bug/src/app/app.component.ts b/apps/angular/32-change-detection-bug/src/app/app.component.ts deleted file mode 100644 index 217999c3a..000000000 --- a/apps/angular/32-change-detection-bug/src/app/app.component.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Component } from '@angular/core'; -import { RouterOutlet } from '@angular/router'; - -@Component({ - imports: [RouterOutlet], - selector: 'app-root', - template: ` -

My Application

-
- -
- -
-
- `, - host: { - class: 'flex flex-col gap-2', - }, -}) -export class AppComponent {} diff --git a/apps/angular/32-change-detection-bug/src/app/app.config.ts b/apps/angular/32-change-detection-bug/src/app/app.config.ts deleted file mode 100644 index 0071d5c42..000000000 --- a/apps/angular/32-change-detection-bug/src/app/app.config.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { ApplicationConfig } from '@angular/core'; -import { provideRouter } from '@angular/router'; -import { BarComponent } from './bar.component'; -import { FooComponent } from './foo.component'; -import { MainNavigationComponent } from './main-navigation.component'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideRouter([ - { - path: '', - component: MainNavigationComponent, - outlet: 'side', - }, - { - path: '', - pathMatch: 'full', - redirectTo: 'foo', - }, - { - path: 'foo', - component: FooComponent, - }, - { - path: 'bar', - component: BarComponent, - }, - ]), - ], -}; diff --git a/apps/angular/32-change-detection-bug/src/app/bar.component.ts b/apps/angular/32-change-detection-bug/src/app/bar.component.ts deleted file mode 100644 index 81981f99d..000000000 --- a/apps/angular/32-change-detection-bug/src/app/bar.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-bar', - template: ` - BarComponent - `, -}) -export class BarComponent {} diff --git a/apps/angular/32-change-detection-bug/src/app/fake.service.ts b/apps/angular/32-change-detection-bug/src/app/fake.service.ts deleted file mode 100644 index 7640edfb2..000000000 --- a/apps/angular/32-change-detection-bug/src/app/fake.service.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Injectable } from '@angular/core'; -import { delay, of } from 'rxjs'; - -@Injectable({ providedIn: 'root' }) -export class FakeServiceService { - getInfoFromBackend = () => of('Client app').pipe(delay(500)); -} diff --git a/apps/angular/32-change-detection-bug/src/app/foo.component.ts b/apps/angular/32-change-detection-bug/src/app/foo.component.ts deleted file mode 100644 index 1fcb24326..000000000 --- a/apps/angular/32-change-detection-bug/src/app/foo.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-foo', - template: ` - Foo Component - `, -}) -export class FooComponent {} diff --git a/apps/angular/32-change-detection-bug/src/app/main-navigation.component.ts b/apps/angular/32-change-detection-bug/src/app/main-navigation.component.ts deleted file mode 100644 index 1a3a5e93a..000000000 --- a/apps/angular/32-change-detection-bug/src/app/main-navigation.component.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Component, inject, input } from '@angular/core'; -import { toSignal } from '@angular/core/rxjs-interop'; -import { RouterLink, RouterLinkActive } from '@angular/router'; -import { FakeServiceService } from './fake.service'; - -interface MenuItem { - path: string; - name: string; -} - -@Component({ - selector: 'app-nav', - imports: [RouterLink, RouterLinkActive], - template: ` - @for (menu of menus(); track menu.path) { - - {{ menu.name }} - - } - `, - styles: [ - ` - a.isSelected { - @apply bg-gray-600 text-white; - } - `, - ], - host: { - class: 'flex flex-col p-2 gap-2', - }, -}) -export class NavigationComponent { - menus = input.required(); -} - -@Component({ - imports: [NavigationComponent], - template: ` - @if (info() !== null) { - - } @else { - - } - `, - host: {}, -}) -export class MainNavigationComponent { - private fakeBackend = inject(FakeServiceService); - - readonly info = toSignal(this.fakeBackend.getInfoFromBackend(), { - initialValue: null, - }); - - getMenu(prop: string) { - return [ - { path: '/foo', name: `Foo ${prop}` }, - { path: '/bar', name: `Bar ${prop}` }, - ]; - } -} diff --git a/apps/angular/32-change-detection-bug/src/index.html b/apps/angular/32-change-detection-bug/src/index.html deleted file mode 100644 index 350759387..000000000 --- a/apps/angular/32-change-detection-bug/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - angular-change-detection-bug - - - - - - - - diff --git a/apps/angular/33-decoupling-components/README.md b/apps/angular/33-decoupling-components/README.md deleted file mode 100644 index 4af70458f..000000000 --- a/apps/angular/33-decoupling-components/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Decoupling Components - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-decoupling-components -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/33-decoupling/). diff --git a/apps/angular/33-decoupling-components/project.json b/apps/angular/33-decoupling-components/project.json deleted file mode 100644 index c4140b61b..000000000 --- a/apps/angular/33-decoupling-components/project.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "angular-decoupling-components", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/33-decoupling-components/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/33-decoupling-components", - "index": "apps/angular/33-decoupling-components/src/index.html", - "main": "apps/angular/33-decoupling-components/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/33-decoupling-components/tsconfig.app.json", - "assets": [ - "apps/angular/33-decoupling-components/src/favicon.ico", - "apps/angular/33-decoupling-components/src/assets" - ], - "styles": ["apps/angular/33-decoupling-components/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-decoupling-components:build:production" - }, - "development": { - "buildTarget": "angular-decoupling-components:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-decoupling-components:build" - } - } - } -} diff --git a/apps/angular/33-decoupling-components/src/app/app.component.ts b/apps/angular/33-decoupling-components/src/app/app.component.ts deleted file mode 100644 index 0d78f4d34..000000000 --- a/apps/angular/33-decoupling-components/src/app/app.component.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { BtnDisabledDirective } from '@angular-challenges/decoupling/brain'; -import { BtnHelmetDirective } from '@angular-challenges/decoupling/helmet'; -import { Component } from '@angular/core'; - -@Component({ - imports: [BtnDisabledDirective, BtnHelmetDirective], - selector: 'app-root', - template: ` - - `, -}) -export class AppComponent {} diff --git a/apps/angular/33-decoupling-components/src/index.html b/apps/angular/33-decoupling-components/src/index.html deleted file mode 100644 index b946b0cfd..000000000 --- a/apps/angular/33-decoupling-components/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - angular-decoupling-components - - - - - - - - diff --git a/apps/angular/33-decoupling-components/tsconfig.editor.json b/apps/angular/33-decoupling-components/tsconfig.editor.json deleted file mode 100644 index bff9e55cb..000000000 --- a/apps/angular/33-decoupling-components/tsconfig.editor.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": [ - "src/**/*.ts", - "../../../libs/decoupling/brain/src/lib/button-disabled.directive.ts", - "../../../libs/decoupling/helmet/src/lib/btn-style.directive.ts" - ], - "compilerOptions": { - "types": [] - } -} diff --git a/apps/angular/39-injection-token/.eslintrc.json b/apps/angular/39-injection-token/.eslintrc.json deleted file mode 100644 index bd4886462..000000000 --- a/apps/angular/39-injection-token/.eslintrc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": {}, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/angular/39-injection-token/README.md b/apps/angular/39-injection-token/README.md deleted file mode 100644 index a96eb9c6e..000000000 --- a/apps/angular/39-injection-token/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# InjectionToken - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-injection-token -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/39-injection-token/). diff --git a/apps/angular/39-injection-token/jest.config.ts b/apps/angular/39-injection-token/jest.config.ts deleted file mode 100644 index 541d663e7..000000000 --- a/apps/angular/39-injection-token/jest.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'angular-injection-token', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - coverageDirectory: '../../../coverage/apps/angular/39-injection-token', - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/angular/39-injection-token/project.json b/apps/angular/39-injection-token/project.json deleted file mode 100644 index 135c0c0f6..000000000 --- a/apps/angular/39-injection-token/project.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "angular-injection-token", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/39-injection-token/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/39-injection-token", - "index": "apps/angular/39-injection-token/src/index.html", - "main": "apps/angular/39-injection-token/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/39-injection-token/tsconfig.app.json", - "assets": [ - "apps/angular/39-injection-token/src/favicon.ico", - "apps/angular/39-injection-token/src/assets" - ], - "styles": ["apps/angular/39-injection-token/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-injection-token:build:production" - }, - "development": { - "buildTarget": "angular-injection-token:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-injection-token:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/angular/39-injection-token/src/app/app.component.ts b/apps/angular/39-injection-token/src/app/app.component.ts deleted file mode 100644 index 280dc090a..000000000 --- a/apps/angular/39-injection-token/src/app/app.component.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Component } from '@angular/core'; -import { RouterLink, RouterOutlet } from '@angular/router'; - -@Component({ - imports: [RouterOutlet, RouterLink], - selector: 'app-root', - template: ` -
- - -
- - `, - host: { - class: 'p-10 flex flex-col', - }, -}) -export class AppComponent {} diff --git a/apps/angular/39-injection-token/src/app/app.config.ts b/apps/angular/39-injection-token/src/app/app.config.ts deleted file mode 100644 index 4d6c3cf61..000000000 --- a/apps/angular/39-injection-token/src/app/app.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ApplicationConfig } from '@angular/core'; -import { provideRouter } from '@angular/router'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideRouter([ - { path: '', pathMatch: 'full', redirectTo: 'video' }, - { path: 'video', loadComponent: () => import('./video.component') }, - { path: 'phone', loadComponent: () => import('./phone.component') }, - ]), - ], -}; diff --git a/apps/angular/39-injection-token/src/app/data.ts b/apps/angular/39-injection-token/src/app/data.ts deleted file mode 100644 index 393edd0fa..000000000 --- a/apps/angular/39-injection-token/src/app/data.ts +++ /dev/null @@ -1 +0,0 @@ -export const DEFAULT_TIMER = 1000; diff --git a/apps/angular/39-injection-token/src/app/phone.component.ts b/apps/angular/39-injection-token/src/app/phone.component.ts deleted file mode 100644 index 41ee3cfc0..000000000 --- a/apps/angular/39-injection-token/src/app/phone.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component } from '@angular/core'; -import { TimerContainerComponent } from './timer-container.component'; - -@Component({ - selector: 'app-phone', - imports: [TimerContainerComponent], - template: ` -
- Phone Call Timer: -

(should be 2000s)

-
- - `, -}) -export default class PhoneComponent {} diff --git a/apps/angular/39-injection-token/src/app/timer-container.component.ts b/apps/angular/39-injection-token/src/app/timer-container.component.ts deleted file mode 100644 index 67db6059a..000000000 --- a/apps/angular/39-injection-token/src/app/timer-container.component.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Component } from '@angular/core'; -import { DEFAULT_TIMER } from './data'; -import { TimerComponent } from './timer.component'; -@Component({ - selector: 'timer-container', - imports: [TimerComponent], - template: ` -
- Timer container: -

(timer is {{ timer }}s)

-
- - `, - host: { - class: 'border rounded-md flex p-4 gap-10', - }, -}) -export class TimerContainerComponent { - timer = DEFAULT_TIMER; -} diff --git a/apps/angular/39-injection-token/src/app/timer.component.ts b/apps/angular/39-injection-token/src/app/timer.component.ts deleted file mode 100644 index 335a077bf..000000000 --- a/apps/angular/39-injection-token/src/app/timer.component.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Component } from '@angular/core'; -import { toSignal } from '@angular/core/rxjs-interop'; -import { interval } from 'rxjs'; -import { DEFAULT_TIMER } from './data'; - -@Component({ - selector: 'timer', - template: ` - Timer running {{ timer() }} - `, -}) -export class TimerComponent { - timer = toSignal(interval(DEFAULT_TIMER)); -} diff --git a/apps/angular/39-injection-token/src/app/video.component.ts b/apps/angular/39-injection-token/src/app/video.component.ts deleted file mode 100644 index ba0a218b4..000000000 --- a/apps/angular/39-injection-token/src/app/video.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component } from '@angular/core'; -import { TimerContainerComponent } from './timer-container.component'; - -@Component({ - selector: 'app-video', - imports: [TimerContainerComponent], - template: ` -
- Video Call Timer: -

(should be the default 1000s)

-
- - `, -}) -export default class VideoComponent {} diff --git a/apps/angular/39-injection-token/src/index.html b/apps/angular/39-injection-token/src/index.html deleted file mode 100644 index 3c35787c9..000000000 --- a/apps/angular/39-injection-token/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - angular-injection-token - - - - - - - - diff --git a/apps/angular/4-typed-context-outlet/README.md b/apps/angular/4-typed-context-outlet/README.md deleted file mode 100644 index e81915167..000000000 --- a/apps/angular/4-typed-context-outlet/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Typed ContextOutlet - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-typed-context-outlet -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/4-context-outlet-typed/). diff --git a/apps/angular/4-typed-context-outlet/project.json b/apps/angular/4-typed-context-outlet/project.json deleted file mode 100644 index 273bca97d..000000000 --- a/apps/angular/4-typed-context-outlet/project.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "angular-typed-context-outlet", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/angular/4-typed-context-outlet/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/4-typed-context-outlet", - "index": "apps/angular/4-typed-context-outlet/src/index.html", - "main": "apps/angular/4-typed-context-outlet/src/main.ts", - "polyfills": "apps/angular/4-typed-context-outlet/src/polyfills.ts", - "tsConfig": "apps/angular/4-typed-context-outlet/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/4-typed-context-outlet/src/favicon.ico", - "apps/angular/4-typed-context-outlet/src/assets" - ], - "styles": ["apps/angular/4-typed-context-outlet/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-typed-context-outlet:build:production" - }, - "development": { - "buildTarget": "angular-typed-context-outlet:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-typed-context-outlet:build" - } - } - } -} diff --git a/apps/angular/4-typed-context-outlet/src/app/app.component.ts b/apps/angular/4-typed-context-outlet/src/app/app.component.ts deleted file mode 100644 index d608bec2c..000000000 --- a/apps/angular/4-typed-context-outlet/src/app/app.component.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { ListComponent } from './list.component'; -import { PersonComponent } from './person.component'; - -@Component({ - imports: [PersonComponent, ListComponent], - selector: 'app-root', - template: ` - - - {{ name }}: {{ age }} - - - - - - {{ student.name }}: {{ student.age }} - {{ i }} - - - - - - {{ city.name }}: {{ city.country }} - {{ i }} - - - `, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class AppComponent { - person = { - name: 'toto', - age: 3, - }; - - students = [ - { name: 'toto', age: 3 }, - { name: 'titi', age: 4 }, - ]; - - cities = [ - { name: 'Paris', country: 'France' }, - { name: 'Berlin', country: 'Germany' }, - ]; -} diff --git a/apps/angular/4-typed-context-outlet/src/app/list.component.ts b/apps/angular/4-typed-context-outlet/src/app/list.component.ts deleted file mode 100644 index 57fa4e361..000000000 --- a/apps/angular/4-typed-context-outlet/src/app/list.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { NgTemplateOutlet } from '@angular/common'; -import { - ChangeDetectionStrategy, - Component, - contentChild, - input, - TemplateRef, -} from '@angular/core'; - -@Component({ - selector: 'list', - template: ` - @for (item of list(); track $index) { - - } - - No Template - `, - changeDetection: ChangeDetectionStrategy.OnPush, - imports: [NgTemplateOutlet], -}) -export class ListComponent { - list = input.required(); - - listTemplateRef = contentChild('listRef', { read: TemplateRef }); -} diff --git a/apps/angular/4-typed-context-outlet/src/app/person.component.ts b/apps/angular/4-typed-context-outlet/src/app/person.component.ts deleted file mode 100644 index d9f5e7520..000000000 --- a/apps/angular/4-typed-context-outlet/src/app/person.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NgTemplateOutlet } from '@angular/common'; -import { Component, contentChild, input, TemplateRef } from '@angular/core'; - -@Component({ - imports: [NgTemplateOutlet], - selector: 'person', - template: ` - - - No Template - `, -}) -export class PersonComponent { - person = input.required<{ name: string; age: number }>(); - - personTemplateRef = contentChild('personRef', { read: TemplateRef }); -} diff --git a/apps/angular/4-typed-context-outlet/src/index.html b/apps/angular/4-typed-context-outlet/src/index.html deleted file mode 100644 index a9c0b5484..000000000 --- a/apps/angular/4-typed-context-outlet/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - angular-typed-context-outlet - - - - - - - - diff --git a/apps/angular/44-view-transition/.eslintrc.json b/apps/angular/44-view-transition/.eslintrc.json deleted file mode 100644 index 3a7370250..000000000 --- a/apps/angular/44-view-transition/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/angular/45-react-in-angular/README.md b/apps/angular/45-react-in-angular/README.md deleted file mode 100644 index 0a8679ac4..000000000 --- a/apps/angular/45-react-in-angular/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# React in angular - -> author: wandrille-guesdon - -### Run Application - -```bash -npx nx serve angular-react-in-angular -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/45-react-in-angular/). diff --git a/apps/angular/45-react-in-angular/jest.config.ts b/apps/angular/45-react-in-angular/jest.config.ts deleted file mode 100644 index cda19a635..000000000 --- a/apps/angular/45-react-in-angular/jest.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'angular-react-in-angular', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - coverageDirectory: '../../../coverage/apps/angular/45-react-in-angular', - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/angular/45-react-in-angular/project.json b/apps/angular/45-react-in-angular/project.json deleted file mode 100644 index 8a3bf02fc..000000000 --- a/apps/angular/45-react-in-angular/project.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "angular-react-in-angular", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/45-react-in-angular/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/45-react-in-angular", - "index": "apps/angular/45-react-in-angular/src/index.html", - "browser": "apps/angular/45-react-in-angular/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/45-react-in-angular/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/45-react-in-angular/src/favicon.ico", - "apps/angular/45-react-in-angular/src/assets" - ], - "styles": ["apps/angular/45-react-in-angular/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-react-in-angular:build:production" - }, - "development": { - "buildTarget": "angular-react-in-angular:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-react-in-angular:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/angular/45-react-in-angular/src/app/app.component.ts b/apps/angular/45-react-in-angular/src/app/app.component.ts deleted file mode 100644 index 87b9675cc..000000000 --- a/apps/angular/45-react-in-angular/src/app/app.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, signal } from '@angular/core'; -import { PostComponent } from './react/post.component'; - -type Post = { title: string; description: string }; - -@Component({ - imports: [PostComponent], - selector: 'app-root', - template: ` -
-
- @for (post of posts; track post.title) { -
- -
- } -
-
- Selected Post: - - {{ selectedPost()?.title ?? '-' }} - -
-
- `, - styles: [''], -}) -export class AppComponent { - readonly posts = [ - { - title: 'A Deep Dive into Angular', - description: - "Explore Angular's core features, its evolution, and best practices in development for creating dynamic, efficient web applications in our comprehensive guide.", - pictureLink: - 'https://images.unsplash.com/photo-1471958680802-1345a694ba6d', - }, - { - title: 'The Perfect Combination', - description: - 'Unveil the power of combining Angular & React in web development, maximizing efficiency and flexibility for building scalable, sophisticated applications.', - pictureLink: - 'https://images.unsplash.com/photo-1518717202715-9fa9d099f58a', - }, - { - title: 'Taking Angular to the Next Level', - description: - "Discover how integrating React with Angular elevates web development, blending Angular's structure with React's UI prowess for advanced applications.", - pictureLink: - 'https://images.unsplash.com/photo-1532103050105-860af53bc6aa', - }, - ]; - - readonly selectedPost = signal(null); - - selectPost(post: Post) { - this.selectedPost.set(post); - } -} diff --git a/apps/angular/45-react-in-angular/src/app/react/ReactPost.tsx b/apps/angular/45-react-in-angular/src/app/react/ReactPost.tsx deleted file mode 100644 index 3f6b9e4cd..000000000 --- a/apps/angular/45-react-in-angular/src/app/react/ReactPost.tsx +++ /dev/null @@ -1,29 +0,0 @@ -// import React from 'react'; - -export default function ReactPost(props: { - title?: string; - description?: string; - pictureLink?: string; - selected?: boolean; - handleClick: () => void; -}) { - return ( -
-
- {props.title} -
-
{props.title}
-

{props.description}

- -
-
-
- ); -} diff --git a/apps/angular/45-react-in-angular/src/app/react/post.component.ts b/apps/angular/45-react-in-angular/src/app/react/post.component.ts deleted file mode 100644 index d5eb2cedf..000000000 --- a/apps/angular/45-react-in-angular/src/app/react/post.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, EventEmitter, input, Output } from '@angular/core'; - -type Post = { title: string; description: string; pictureLink: string }; - -@Component({ - selector: 'app-post', - template: ` -
- `, - styles: [''], -}) -export class PostComponent { - post = input(undefined); - isSelected = input(false); - @Output() selectPost = new EventEmitter(); -} diff --git a/apps/angular/45-react-in-angular/src/index.html b/apps/angular/45-react-in-angular/src/index.html deleted file mode 100644 index 9d9dd3923..000000000 --- a/apps/angular/45-react-in-angular/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - angular-react-in-angular - - - - - - - - diff --git a/apps/angular/5-crud-application/tsconfig.spec.json b/apps/angular/5-crud-application/tsconfig.spec.json deleted file mode 100644 index b9534b857..000000000 --- a/apps/angular/5-crud-application/tsconfig.spec.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] -} diff --git a/apps/angular/52-lazy-load-component/tsconfig.spec.json b/apps/angular/52-lazy-load-component/tsconfig.spec.json deleted file mode 100644 index 1a4817a7d..000000000 --- a/apps/angular/52-lazy-load-component/tsconfig.spec.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/angular/55-back-button-navigation/README.md b/apps/angular/55-back-button-navigation/README.md deleted file mode 100644 index 2534d270c..000000000 --- a/apps/angular/55-back-button-navigation/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Back-Button-Navigation - -> author: ioannis-tsironis - -### Run Application - -```bash -npx nx serve angular-back-button-navigation -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/55-back-button-navigation/). diff --git a/apps/angular/55-back-button-navigation/jest.config.ts b/apps/angular/55-back-button-navigation/jest.config.ts deleted file mode 100644 index 845a03a01..000000000 --- a/apps/angular/55-back-button-navigation/jest.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'angular-back-button-navigation', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - coverageDirectory: '../../../coverage/apps/angular/55-back-button-navigation', - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/angular/55-back-button-navigation/project.json b/apps/angular/55-back-button-navigation/project.json deleted file mode 100644 index e6c824729..000000000 --- a/apps/angular/55-back-button-navigation/project.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "name": "angular-back-button-navigation", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/55-back-button-navigation/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/55-back-button-navigation", - "index": "apps/angular/55-back-button-navigation/src/index.html", - "browser": "apps/angular/55-back-button-navigation/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/55-back-button-navigation/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "apps/angular/55-back-button-navigation/public" - } - ], - "styles": [ - "apps/angular/55-back-button-navigation/src/styles.scss", - "node_modules/@angular/material/prebuilt-themes/indigo-pink.css" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-back-button-navigation:build:production" - }, - "development": { - "buildTarget": "angular-back-button-navigation:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-back-button-navigation:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/angular/55-back-button-navigation/src/app/app.component.html b/apps/angular/55-back-button-navigation/src/app/app.component.html deleted file mode 100644 index 0680b43f9..000000000 --- a/apps/angular/55-back-button-navigation/src/app/app.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/angular/55-back-button-navigation/src/app/app.component.ts b/apps/angular/55-back-button-navigation/src/app/app.component.ts deleted file mode 100644 index baffdae25..000000000 --- a/apps/angular/55-back-button-navigation/src/app/app.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from '@angular/core'; -import { RouterLink, RouterOutlet } from '@angular/router'; - -@Component({ - imports: [RouterOutlet, RouterLink], - selector: 'app-root', - templateUrl: './app.component.html', -}) -export class AppComponent {} diff --git a/apps/angular/55-back-button-navigation/src/app/app.config.ts b/apps/angular/55-back-button-navigation/src/app/app.config.ts deleted file mode 100644 index 440cdf2c3..000000000 --- a/apps/angular/55-back-button-navigation/src/app/app.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; -import { provideRouter } from '@angular/router'; -import { APP_ROUTES } from './app.routes'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideZoneChangeDetection({ eventCoalescing: true }), - provideRouter(APP_ROUTES), - ], -}; diff --git a/apps/angular/55-back-button-navigation/src/app/app.routes.ts b/apps/angular/55-back-button-navigation/src/app/app.routes.ts deleted file mode 100644 index 7deecd57a..000000000 --- a/apps/angular/55-back-button-navigation/src/app/app.routes.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Routes } from '@angular/router'; -import { HomeComponent } from './home/home.component'; -import { SensitiveActionComponent } from './sensitive-action/sensitive-action.component'; -import { SimpleActionComponent } from './simple-action/simple-action.component'; - -export const APP_ROUTES: Routes = [ - { - path: '', - pathMatch: 'full', - redirectTo: 'home', - }, - { - path: 'home', - component: HomeComponent, - }, - { - path: 'simple-action', - component: SimpleActionComponent, - }, - { - path: 'sensitive-action', - component: SensitiveActionComponent, - }, -]; diff --git a/apps/angular/55-back-button-navigation/src/app/dialog/dialog.component.html b/apps/angular/55-back-button-navigation/src/app/dialog/dialog.component.html deleted file mode 100644 index ff00ea965..000000000 --- a/apps/angular/55-back-button-navigation/src/app/dialog/dialog.component.html +++ /dev/null @@ -1,6 +0,0 @@ -

Delete file

-Would you like to delete cat.jpeg? - - - - diff --git a/apps/angular/55-back-button-navigation/src/app/dialog/dialog.component.ts b/apps/angular/55-back-button-navigation/src/app/dialog/dialog.component.ts deleted file mode 100644 index 9a9dd0fef..000000000 --- a/apps/angular/55-back-button-navigation/src/app/dialog/dialog.component.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { - MatDialogActions, - MatDialogClose, - MatDialogContent, - MatDialogRef, - MatDialogTitle, -} from '@angular/material/dialog'; - -@Component({ - selector: 'app-dialog-dialog', - templateUrl: './dialog.component.html', - imports: [ - MatButtonModule, - MatDialogActions, - MatDialogClose, - MatDialogTitle, - MatDialogContent, - ], - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class DialogComponent { - readonly dialogRef = inject(MatDialogRef); -} diff --git a/apps/angular/55-back-button-navigation/src/app/home/home.component.html b/apps/angular/55-back-button-navigation/src/app/home/home.component.html deleted file mode 100644 index cce9e6d4f..000000000 --- a/apps/angular/55-back-button-navigation/src/app/home/home.component.html +++ /dev/null @@ -1,7 +0,0 @@ - - Go to simple dialog action page - - - - Go to sensitive dialog action page - diff --git a/apps/angular/55-back-button-navigation/src/app/home/home.component.ts b/apps/angular/55-back-button-navigation/src/app/home/home.component.ts deleted file mode 100644 index 18c4147b1..000000000 --- a/apps/angular/55-back-button-navigation/src/app/home/home.component.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterLink } from '@angular/router'; - -@Component({ - imports: [MatButtonModule, RouterLink], - selector: 'app-home', - templateUrl: './home.component.html', -}) -export class HomeComponent {} diff --git a/apps/angular/55-back-button-navigation/src/app/sensitive-action/sensitive-action.component.html b/apps/angular/55-back-button-navigation/src/app/sensitive-action/sensitive-action.component.html deleted file mode 100644 index bcb7382e9..000000000 --- a/apps/angular/55-back-button-navigation/src/app/sensitive-action/sensitive-action.component.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/apps/angular/55-back-button-navigation/src/app/sensitive-action/sensitive-action.component.ts b/apps/angular/55-back-button-navigation/src/app/sensitive-action/sensitive-action.component.ts deleted file mode 100644 index a97282c33..000000000 --- a/apps/angular/55-back-button-navigation/src/app/sensitive-action/sensitive-action.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Component, inject } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { MatDialog } from '@angular/material/dialog'; -import { DialogComponent } from '../dialog/dialog.component'; - -@Component({ - imports: [MatButtonModule], - selector: 'app-sensitive-action', - templateUrl: './sensitive-action.component.html', -}) -export class SensitiveActionComponent { - readonly #dialog = inject(MatDialog); - - openDialog(): void { - this.#dialog.open(DialogComponent, { - width: '250px', - }); - } -} diff --git a/apps/angular/55-back-button-navigation/src/app/simple-action/simple-action.component.html b/apps/angular/55-back-button-navigation/src/app/simple-action/simple-action.component.html deleted file mode 100644 index 95f63e65e..000000000 --- a/apps/angular/55-back-button-navigation/src/app/simple-action/simple-action.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/angular/55-back-button-navigation/src/app/simple-action/simple-action.component.ts b/apps/angular/55-back-button-navigation/src/app/simple-action/simple-action.component.ts deleted file mode 100644 index fe97e7368..000000000 --- a/apps/angular/55-back-button-navigation/src/app/simple-action/simple-action.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Component, inject } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { MatDialog } from '@angular/material/dialog'; -import { DialogComponent } from '../dialog/dialog.component'; - -@Component({ - imports: [MatButtonModule], - selector: 'app-simple-action', - templateUrl: './simple-action.component.html', -}) -export class SimpleActionComponent { - readonly #dialog = inject(MatDialog); - - openDialog(): void { - this.#dialog.open(DialogComponent, { - width: '250px', - }); - } -} diff --git a/apps/angular/55-back-button-navigation/src/index.html b/apps/angular/55-back-button-navigation/src/index.html deleted file mode 100644 index 4e657d614..000000000 --- a/apps/angular/55-back-button-navigation/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - angular-back-button-navigation - - - - - - - - diff --git a/apps/angular/55-back-button-navigation/src/styles.scss b/apps/angular/55-back-button-navigation/src/styles.scss deleted file mode 100644 index acd290007..000000000 --- a/apps/angular/55-back-button-navigation/src/styles.scss +++ /dev/null @@ -1,29 +0,0 @@ -@use '@angular/material' as mat; - -/* You can add global styles to this file, and also import other style files */ - -@tailwind base; -@tailwind components; -@tailwind utilities; - -@include mat.elevation-classes(); -@include mat.app-background(); - -$theme-primary: mat.m2-define-palette(mat.$m2-indigo-palette); -$theme-accent: mat.m2-define-palette(mat.$m2-pink-palette, A200, A100, A400); - -$theme-warn: mat.m2-define-palette(mat.$m2-red-palette); - -$theme: mat.m2-define-light-theme( - ( - color: ( - primary: $theme-primary, - accent: $theme-accent, - warn: $theme-warn, - ), - typography: mat.m2-define-typography-config(), - ) -); - -@include mat.dialog-theme($theme); -@include mat.button-theme($theme); diff --git a/apps/angular/57-content-projection-default/tsconfig.app.json b/apps/angular/57-content-projection-default/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/angular/57-content-projection-default/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/angular/58-content-projection-condition/README.md b/apps/angular/58-content-projection-condition/README.md deleted file mode 100644 index 755bd8854..000000000 --- a/apps/angular/58-content-projection-condition/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Content Projection Condition - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-content-projection-condition -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/58-content-projection-condition/). diff --git a/apps/angular/58-content-projection-condition/project.json b/apps/angular/58-content-projection-condition/project.json deleted file mode 100644 index b268984a2..000000000 --- a/apps/angular/58-content-projection-condition/project.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "name": "angular-content-projection-condition", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/58-content-projection-condition/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/58-content-projection-condition", - "index": "apps/angular/58-content-projection-condition/src/index.html", - "browser": "apps/angular/58-content-projection-condition/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/58-content-projection-condition/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "apps/angular/58-content-projection-condition/public" - } - ], - "styles": [ - "apps/angular/58-content-projection-condition/src/styles.scss" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "4kb", - "maximumError": "8kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-content-projection-condition:build:production" - }, - "development": { - "buildTarget": "angular-content-projection-condition:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-content-projection-condition:build" - } - }, - "lint": { - "executor": "@nx/eslint:lint" - }, - "serve-static": { - "executor": "@nx/web:file-server", - "options": { - "buildTarget": "angular-content-projection-condition:build", - "staticFilePath": "dist/apps/angular/58-content-projection-condition/browser", - "spa": true - } - } - } -} diff --git a/apps/angular/58-content-projection-condition/src/app/app.component.ts b/apps/angular/58-content-projection-condition/src/app/app.component.ts deleted file mode 100644 index afad56f22..000000000 --- a/apps/angular/58-content-projection-condition/src/app/app.component.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { CardComponent } from './card.component'; - -@Component({ - imports: [CardComponent], - selector: 'app-root', - template: ` - -
Card 1
-
Message 1
-
- -
Card 2
-
Message 2
-
- `, - host: { - class: 'p-4 block flex flex-col gap-1', - }, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class AppComponent {} diff --git a/apps/angular/58-content-projection-condition/src/app/app.config.ts b/apps/angular/58-content-projection-condition/src/app/app.config.ts deleted file mode 100644 index 034603cfd..000000000 --- a/apps/angular/58-content-projection-condition/src/app/app.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; - -export const appConfig: ApplicationConfig = { - providers: [provideZoneChangeDetection({ eventCoalescing: true })], -}; diff --git a/apps/angular/58-content-projection-condition/src/app/card.component.ts b/apps/angular/58-content-projection-condition/src/app/card.component.ts deleted file mode 100644 index 46925977c..000000000 --- a/apps/angular/58-content-projection-condition/src/app/card.component.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ChangeDetectionStrategy, Component, input } from '@angular/core'; - -@Component({ - selector: 'app-card', - template: ` - @if (small()) { - - - } @else { -
-
- -
- -
- } - `, - changeDetection: ChangeDetectionStrategy.OnPush, - host: { - class: 'p-4 border border-grey rounded-sm flex flex-col w-[200px]', - }, -}) -export class CardComponent { - small = input(false); -} diff --git a/apps/angular/58-content-projection-condition/src/index.html b/apps/angular/58-content-projection-condition/src/index.html deleted file mode 100644 index f1768ec71..000000000 --- a/apps/angular/58-content-projection-condition/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - angular-content-projection-condition - - - - - - - - diff --git a/apps/angular/58-content-projection-condition/tsconfig.app.json b/apps/angular/58-content-projection-condition/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/angular/58-content-projection-condition/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/angular/58-content-projection-condition/tsconfig.json b/apps/angular/58-content-projection-condition/tsconfig.json deleted file mode 100644 index 1b86db04e..000000000 --- a/apps/angular/58-content-projection-condition/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./tsconfig.app.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/angular/59-content-projection-defer/.eslintrc.json b/apps/angular/59-content-projection-defer/.eslintrc.json deleted file mode 100644 index 995177b5b..000000000 --- a/apps/angular/59-content-projection-defer/.eslintrc.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ], - "rules": { - "@angular-eslint/component-class-suffix": "off", - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - } - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/angular/59-content-projection-defer/README.md b/apps/angular/59-content-projection-defer/README.md deleted file mode 100644 index f726842d1..000000000 --- a/apps/angular/59-content-projection-defer/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# content-projection-defer - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-content-projection-defer -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/59-content-projection-defer/). diff --git a/apps/angular/59-content-projection-defer/project.json b/apps/angular/59-content-projection-defer/project.json deleted file mode 100644 index efd270b03..000000000 --- a/apps/angular/59-content-projection-defer/project.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "angular-content-projection-defer", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/59-content-projection-defer/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/59-content-projection-defer", - "index": "apps/angular/59-content-projection-defer/src/index.html", - "browser": "apps/angular/59-content-projection-defer/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/59-content-projection-defer/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "apps/angular/59-content-projection-defer/public" - } - ], - "styles": ["apps/angular/59-content-projection-defer/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "4kb", - "maximumError": "8kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-content-projection-defer:build:production" - }, - "development": { - "buildTarget": "angular-content-projection-defer:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-content-projection-defer:build" - } - }, - "lint": { - "executor": "@nx/eslint:lint" - }, - "serve-static": { - "executor": "@nx/web:file-server", - "options": { - "buildTarget": "angular-content-projection-defer:build", - "staticFilePath": "dist/apps/angular/59-content-projection-defer/browser", - "spa": true - } - } - } -} diff --git a/apps/angular/59-content-projection-defer/src/app/app.component.ts b/apps/angular/59-content-projection-defer/src/app/app.component.ts deleted file mode 100644 index ae40bc880..000000000 --- a/apps/angular/59-content-projection-defer/src/app/app.component.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { RouterLink, RouterOutlet } from '@angular/router'; - -@Component({ - imports: [RouterOutlet, RouterLink], - selector: 'app-root', - template: ` -
- - -
- - `, - changeDetection: ChangeDetectionStrategy.OnPush, - host: { - class: 'flex flex-col gap-2 ', - }, -}) -export class AppComponent {} diff --git a/apps/angular/59-content-projection-defer/src/app/app.config.ts b/apps/angular/59-content-projection-defer/src/app/app.config.ts deleted file mode 100644 index faf4d099a..000000000 --- a/apps/angular/59-content-projection-defer/src/app/app.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { provideHttpClient } from '@angular/common/http'; -import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; -import { provideRouter } from '@angular/router'; -import { appRoutes } from './app.routes'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideZoneChangeDetection({ eventCoalescing: true }), - provideRouter(appRoutes), - provideHttpClient(), - ], -}; diff --git a/apps/angular/59-content-projection-defer/src/app/app.routes.ts b/apps/angular/59-content-projection-defer/src/app/app.routes.ts deleted file mode 100644 index 3ca1b67cc..000000000 --- a/apps/angular/59-content-projection-defer/src/app/app.routes.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Route } from '@angular/router'; - -export const appRoutes: Route[] = [ - { - path: 'page-1', - loadComponent: () => import('./page-1').then((m) => m.Page1), - }, - { - path: 'page-2', - loadComponent: () => import('./page-2').then((m) => m.Page2), - }, - { path: '**', redirectTo: 'page-1' }, -]; diff --git a/apps/angular/59-content-projection-defer/src/app/expandable-card.ts b/apps/angular/59-content-projection-defer/src/app/expandable-card.ts deleted file mode 100644 index 8f446ed80..000000000 --- a/apps/angular/59-content-projection-defer/src/app/expandable-card.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; - -@Component({ - selector: 'app-expandable-card', - template: ` - - -
- -
- `, - changeDetection: ChangeDetectionStrategy.OnPush, - host: { - class: 'flex flex-col gap-2 ', - }, -}) -export class ExpandableCard { - public isExpanded = signal(false); -} diff --git a/apps/angular/59-content-projection-defer/src/app/page-1.ts b/apps/angular/59-content-projection-defer/src/app/page-1.ts deleted file mode 100644 index 868d76959..000000000 --- a/apps/angular/59-content-projection-defer/src/app/page-1.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; - -@Component({ - selector: 'app-page-1', - template: ` - page1 - `, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class Page1 {} diff --git a/apps/angular/59-content-projection-defer/src/app/page-2.ts b/apps/angular/59-content-projection-defer/src/app/page-2.ts deleted file mode 100644 index 5665466d8..000000000 --- a/apps/angular/59-content-projection-defer/src/app/page-2.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { httpResource } from '@angular/common/http'; -import { - ChangeDetectionStrategy, - Component, - ResourceStatus, -} from '@angular/core'; -import { ExpandableCard } from './expandable-card'; - -interface Post { - id: number; - title: string; - body: string; - userId: number; -} - -@Component({ - selector: 'app-page-2', - template: ` - page2 - -
Load Post
-
- @if (postResource.isLoading()) { - Loading... - } @else if (postResource.status() === ResourceStatus.Error) { - Error... - } @else { - @for (post of postResource.value(); track post.id) { -
{{ post.title }}
- } - } -
-
- `, - changeDetection: ChangeDetectionStrategy.OnPush, - imports: [ExpandableCard], -}) -export class Page2 { - public postResource = httpResource( - 'https://jsonplaceholder.typicode.com/posts', - ); - protected readonly ResourceStatus = ResourceStatus; -} diff --git a/apps/angular/59-content-projection-defer/src/index.html b/apps/angular/59-content-projection-defer/src/index.html deleted file mode 100644 index 79f435fa6..000000000 --- a/apps/angular/59-content-projection-defer/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - angular-content-projection-defer - - - - - - - - diff --git a/apps/angular/59-content-projection-defer/tsconfig.app.json b/apps/angular/59-content-projection-defer/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/angular/59-content-projection-defer/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/angular/59-content-projection-defer/tsconfig.json b/apps/angular/59-content-projection-defer/tsconfig.json deleted file mode 100644 index 1b86db04e..000000000 --- a/apps/angular/59-content-projection-defer/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./tsconfig.app.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/angular/6-structural-directive/tsconfig.app.json b/apps/angular/6-structural-directive/tsconfig.app.json deleted file mode 100644 index 2a1ca1b8d..000000000 --- a/apps/angular/6-structural-directive/tsconfig.app.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "target": "ES2022", - "useDefineForClassFields": false, - "moduleResolution": "bundler" - }, - "files": ["src/main.ts", "src/polyfills.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] -} diff --git a/apps/angular/8-pure-pipe/tsconfig.app.json b/apps/angular/8-pure-pipe/tsconfig.app.json deleted file mode 100644 index 2a1ca1b8d..000000000 --- a/apps/angular/8-pure-pipe/tsconfig.app.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "target": "ES2022", - "useDefineForClassFields": false, - "moduleResolution": "bundler" - }, - "files": ["src/main.ts", "src/polyfills.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] -} diff --git a/apps/angular/9-wrap-function-pipe/src/polyfills.ts b/apps/angular/9-wrap-function-pipe/src/polyfills.ts deleted file mode 100644 index e4555ed11..000000000 --- a/apps/angular/9-wrap-function-pipe/src/polyfills.ts +++ /dev/null @@ -1,52 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes recent versions of Safari, Chrome (including - * Opera), Edge on the desktop, and iOS and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - * because those flags need to be set before `zone.js` being loaded, and webpack - * will put import in the top of bundle, so user need to create a separate file - * in this directory (for example: zone-flags.ts), and put the following flags - * into that file, and then add the following code before importing zone.js. - * import './zone-flags'; - * - * The flags allowed in zone-flags.ts are listed here. - * - * The following flags will work for all browsers. - * - * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - * - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - * - * (window as any).__Zone_enable_cross_context_check = true; - * - */ - -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ -import 'zone.js'; // Included with Angular CLI. - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ diff --git a/apps/angular/9-wrap-function-pipe/tsconfig.app.json b/apps/angular/9-wrap-function-pipe/tsconfig.app.json deleted file mode 100644 index 2a1ca1b8d..000000000 --- a/apps/angular/9-wrap-function-pipe/tsconfig.app.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "target": "ES2022", - "useDefineForClassFields": false, - "moduleResolution": "bundler" - }, - "files": ["src/main.ts", "src/polyfills.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] -} diff --git a/apps/angular/9-wrap-function-pipe/tsconfig.json b/apps/angular/9-wrap-function-pipe/tsconfig.json deleted file mode 100644 index b2dbbf22e..000000000 --- a/apps/angular/9-wrap-function-pipe/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "extends": "../../../tsconfig.base.json", - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "compilerOptions": { - "target": "es2020", - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/angular/10-utility-wrapper-pipe/.eslintrc.json b/apps/animations/simple-animations/.eslintrc.json similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/.eslintrc.json rename to apps/animations/simple-animations/.eslintrc.json diff --git a/apps/angular/46-simple-animations/README.md b/apps/animations/simple-animations/README.md similarity index 100% rename from apps/angular/46-simple-animations/README.md rename to apps/animations/simple-animations/README.md diff --git a/apps/angular/46-simple-animations/jest.config.ts b/apps/animations/simple-animations/jest.config.ts similarity index 100% rename from apps/angular/46-simple-animations/jest.config.ts rename to apps/animations/simple-animations/jest.config.ts diff --git a/apps/angular/46-simple-animations/project.json b/apps/animations/simple-animations/project.json similarity index 100% rename from apps/angular/46-simple-animations/project.json rename to apps/animations/simple-animations/project.json diff --git a/apps/angular/46-simple-animations/src/app/app.component.ts b/apps/animations/simple-animations/src/app/app.component.ts similarity index 100% rename from apps/angular/46-simple-animations/src/app/app.component.ts rename to apps/animations/simple-animations/src/app/app.component.ts diff --git a/apps/angular/45-react-in-angular/src/app/app.config.ts b/apps/animations/simple-animations/src/app/app.config.ts similarity index 100% rename from apps/angular/45-react-in-angular/src/app/app.config.ts rename to apps/animations/simple-animations/src/app/app.config.ts diff --git a/apps/angular/1-projection/src/assets/.gitkeep b/apps/animations/simple-animations/src/assets/.gitkeep similarity index 100% rename from apps/angular/1-projection/src/assets/.gitkeep rename to apps/animations/simple-animations/src/assets/.gitkeep diff --git a/apps/angular/1-projection/src/favicon.ico b/apps/animations/simple-animations/src/favicon.ico similarity index 100% rename from apps/angular/1-projection/src/favicon.ico rename to apps/animations/simple-animations/src/favicon.ico diff --git a/apps/angular/46-simple-animations/src/index.html b/apps/animations/simple-animations/src/index.html similarity index 100% rename from apps/angular/46-simple-animations/src/index.html rename to apps/animations/simple-animations/src/index.html diff --git a/apps/angular/22-router-input/src/main.ts b/apps/animations/simple-animations/src/main.ts similarity index 100% rename from apps/angular/22-router-input/src/main.ts rename to apps/animations/simple-animations/src/main.ts diff --git a/apps/angular/21-anchor-navigation/src/styles.scss b/apps/animations/simple-animations/src/styles.scss similarity index 100% rename from apps/angular/21-anchor-navigation/src/styles.scss rename to apps/animations/simple-animations/src/styles.scss diff --git a/apps/angular/32-change-detection-bug/src/test-setup.ts b/apps/animations/simple-animations/src/test-setup.ts similarity index 100% rename from apps/angular/32-change-detection-bug/src/test-setup.ts rename to apps/animations/simple-animations/src/test-setup.ts diff --git a/apps/angular/1-projection/tailwind.config.js b/apps/animations/simple-animations/tailwind.config.js similarity index 100% rename from apps/angular/1-projection/tailwind.config.js rename to apps/animations/simple-animations/tailwind.config.js diff --git a/apps/animations/simple-animations/tsconfig.app.json b/apps/animations/simple-animations/tsconfig.app.json new file mode 100644 index 000000000..3bb4877ea --- /dev/null +++ b/apps/animations/simple-animations/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": [ + "src/main.ts" + ], + "include": ["src/**/*.d.ts"], + "exclude": [ + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/angular/21-anchor-navigation/tsconfig.editor.json b/apps/animations/simple-animations/tsconfig.editor.json similarity index 100% rename from apps/angular/21-anchor-navigation/tsconfig.editor.json rename to apps/animations/simple-animations/tsconfig.editor.json diff --git a/apps/angular/45-react-in-angular/tsconfig.json b/apps/animations/simple-animations/tsconfig.json similarity index 100% rename from apps/angular/45-react-in-angular/tsconfig.json rename to apps/animations/simple-animations/tsconfig.json diff --git a/apps/forms/41-control-value-accessor/tsconfig.spec.json b/apps/animations/simple-animations/tsconfig.spec.json similarity index 80% rename from apps/forms/41-control-value-accessor/tsconfig.spec.json rename to apps/animations/simple-animations/tsconfig.spec.json index 1a4817a7d..9cfdcdeb3 100644 --- a/apps/forms/41-control-value-accessor/tsconfig.spec.json +++ b/apps/animations/simple-animations/tsconfig.spec.json @@ -5,9 +5,11 @@ "module": "commonjs", "types": ["jest", "node", "@testing-library/jest-dom"] }, - "files": ["src/test-setup.ts"], + "files": [ + "src/test-setup.ts" + ], "include": [ - "jest.config.ts", + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts" diff --git a/apps/angular/4-typed-context-outlet/.eslintrc.json b/apps/animations/view-transition/.eslintrc.json similarity index 100% rename from apps/angular/4-typed-context-outlet/.eslintrc.json rename to apps/animations/view-transition/.eslintrc.json diff --git a/apps/angular/44-view-transition/README.md b/apps/animations/view-transition/README.md similarity index 100% rename from apps/angular/44-view-transition/README.md rename to apps/animations/view-transition/README.md diff --git a/apps/angular/44-view-transition/project.json b/apps/animations/view-transition/project.json similarity index 100% rename from apps/angular/44-view-transition/project.json rename to apps/animations/view-transition/project.json diff --git a/apps/angular/44-view-transition/src/app/app.component.ts b/apps/animations/view-transition/src/app/app.component.ts similarity index 100% rename from apps/angular/44-view-transition/src/app/app.component.ts rename to apps/animations/view-transition/src/app/app.component.ts diff --git a/apps/angular/44-view-transition/src/app/app.config.ts b/apps/animations/view-transition/src/app/app.config.ts similarity index 100% rename from apps/angular/44-view-transition/src/app/app.config.ts rename to apps/animations/view-transition/src/app/app.config.ts diff --git a/apps/angular/44-view-transition/src/app/blog/blog.component.ts b/apps/animations/view-transition/src/app/blog/blog.component.ts similarity index 100% rename from apps/angular/44-view-transition/src/app/blog/blog.component.ts rename to apps/animations/view-transition/src/app/blog/blog.component.ts diff --git a/apps/angular/44-view-transition/src/app/blog/thumbnail-header.component.ts b/apps/animations/view-transition/src/app/blog/thumbnail-header.component.ts similarity index 100% rename from apps/angular/44-view-transition/src/app/blog/thumbnail-header.component.ts rename to apps/animations/view-transition/src/app/blog/thumbnail-header.component.ts diff --git a/apps/angular/44-view-transition/src/app/blog/thumbnail.component.ts b/apps/animations/view-transition/src/app/blog/thumbnail.component.ts similarity index 100% rename from apps/angular/44-view-transition/src/app/blog/thumbnail.component.ts rename to apps/animations/view-transition/src/app/blog/thumbnail.component.ts diff --git a/apps/angular/44-view-transition/src/app/data.ts b/apps/animations/view-transition/src/app/data.ts similarity index 100% rename from apps/angular/44-view-transition/src/app/data.ts rename to apps/animations/view-transition/src/app/data.ts diff --git a/apps/angular/44-view-transition/src/app/post.model.ts b/apps/animations/view-transition/src/app/post.model.ts similarity index 100% rename from apps/angular/44-view-transition/src/app/post.model.ts rename to apps/animations/view-transition/src/app/post.model.ts diff --git a/apps/angular/44-view-transition/src/app/post/post-header.component.ts b/apps/animations/view-transition/src/app/post/post-header.component.ts similarity index 100% rename from apps/angular/44-view-transition/src/app/post/post-header.component.ts rename to apps/animations/view-transition/src/app/post/post-header.component.ts diff --git a/apps/angular/44-view-transition/src/app/post/post.component.ts b/apps/animations/view-transition/src/app/post/post.component.ts similarity index 100% rename from apps/angular/44-view-transition/src/app/post/post.component.ts rename to apps/animations/view-transition/src/app/post/post.component.ts diff --git a/apps/angular/10-utility-wrapper-pipe/src/assets/.gitkeep b/apps/animations/view-transition/src/assets/.gitkeep similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/src/assets/.gitkeep rename to apps/animations/view-transition/src/assets/.gitkeep diff --git a/apps/angular/44-view-transition/src/assets/angular.webp b/apps/animations/view-transition/src/assets/angular.webp similarity index 100% rename from apps/angular/44-view-transition/src/assets/angular.webp rename to apps/animations/view-transition/src/assets/angular.webp diff --git a/apps/angular/44-view-transition/src/assets/guard.full.webp b/apps/animations/view-transition/src/assets/guard.full.webp similarity index 100% rename from apps/angular/44-view-transition/src/assets/guard.full.webp rename to apps/animations/view-transition/src/assets/guard.full.webp diff --git a/apps/angular/44-view-transition/src/assets/highly-custom.full.webp b/apps/animations/view-transition/src/assets/highly-custom.full.webp similarity index 100% rename from apps/angular/44-view-transition/src/assets/highly-custom.full.webp rename to apps/animations/view-transition/src/assets/highly-custom.full.webp diff --git a/apps/angular/44-view-transition/src/assets/profil.webp b/apps/animations/view-transition/src/assets/profil.webp similarity index 100% rename from apps/angular/44-view-transition/src/assets/profil.webp rename to apps/animations/view-transition/src/assets/profil.webp diff --git a/apps/angular/44-view-transition/src/assets/signal-cd.full.webp b/apps/animations/view-transition/src/assets/signal-cd.full.webp similarity index 100% rename from apps/angular/44-view-transition/src/assets/signal-cd.full.webp rename to apps/animations/view-transition/src/assets/signal-cd.full.webp diff --git a/apps/angular/10-utility-wrapper-pipe/src/favicon.ico b/apps/animations/view-transition/src/favicon.ico similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/src/favicon.ico rename to apps/animations/view-transition/src/favicon.ico diff --git a/apps/angular/44-view-transition/src/index.html b/apps/animations/view-transition/src/index.html similarity index 100% rename from apps/angular/44-view-transition/src/index.html rename to apps/animations/view-transition/src/index.html diff --git a/apps/angular/32-change-detection-bug/src/main.ts b/apps/animations/view-transition/src/main.ts similarity index 100% rename from apps/angular/32-change-detection-bug/src/main.ts rename to apps/animations/view-transition/src/main.ts diff --git a/apps/angular/1-projection/src/styles.scss b/apps/animations/view-transition/src/styles.scss similarity index 100% rename from apps/angular/1-projection/src/styles.scss rename to apps/animations/view-transition/src/styles.scss diff --git a/apps/angular/21-anchor-navigation/tailwind.config.js b/apps/animations/view-transition/tailwind.config.js similarity index 100% rename from apps/angular/21-anchor-navigation/tailwind.config.js rename to apps/animations/view-transition/tailwind.config.js diff --git a/apps/angular/46-simple-animations/tsconfig.app.json b/apps/animations/view-transition/tsconfig.app.json similarity index 87% rename from apps/angular/46-simple-animations/tsconfig.app.json rename to apps/animations/view-transition/tsconfig.app.json index 8b5631268..403fe4f54 100644 --- a/apps/angular/46-simple-animations/tsconfig.app.json +++ b/apps/animations/view-transition/tsconfig.app.json @@ -5,7 +5,9 @@ "types": [], "moduleResolution": "bundler" }, - "files": ["src/main.ts"], + "files": [ + "src/main.ts" + ], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] } diff --git a/apps/angular/13-highly-customizable-css/tsconfig.editor.json b/apps/animations/view-transition/tsconfig.editor.json similarity index 100% rename from apps/angular/13-highly-customizable-css/tsconfig.editor.json rename to apps/animations/view-transition/tsconfig.editor.json diff --git a/apps/angular/44-view-transition/tsconfig.json b/apps/animations/view-transition/tsconfig.json similarity index 100% rename from apps/angular/44-view-transition/tsconfig.json rename to apps/animations/view-transition/tsconfig.json diff --git a/apps/angular/13-highly-customizable-css/.eslintrc.json b/apps/best-practices/default-vs-onpush/.eslintrc.json similarity index 100% rename from apps/angular/13-highly-customizable-css/.eslintrc.json rename to apps/best-practices/default-vs-onpush/.eslintrc.json diff --git a/apps/performance/34-default-vs-onpush/README.md b/apps/best-practices/default-vs-onpush/README.md similarity index 100% rename from apps/performance/34-default-vs-onpush/README.md rename to apps/best-practices/default-vs-onpush/README.md diff --git a/apps/performance/34-default-vs-onpush/project.json b/apps/best-practices/default-vs-onpush/project.json similarity index 100% rename from apps/performance/34-default-vs-onpush/project.json rename to apps/best-practices/default-vs-onpush/project.json diff --git a/apps/performance/34-default-vs-onpush/src/app/app.component.ts b/apps/best-practices/default-vs-onpush/src/app/app.component.ts similarity index 100% rename from apps/performance/34-default-vs-onpush/src/app/app.component.ts rename to apps/best-practices/default-vs-onpush/src/app/app.component.ts diff --git a/apps/performance/34-default-vs-onpush/src/app/app.config.ts b/apps/best-practices/default-vs-onpush/src/app/app.config.ts similarity index 100% rename from apps/performance/34-default-vs-onpush/src/app/app.config.ts rename to apps/best-practices/default-vs-onpush/src/app/app.config.ts diff --git a/apps/performance/34-default-vs-onpush/src/app/person-list.component.ts b/apps/best-practices/default-vs-onpush/src/app/person-list.component.ts similarity index 100% rename from apps/performance/34-default-vs-onpush/src/app/person-list.component.ts rename to apps/best-practices/default-vs-onpush/src/app/person-list.component.ts diff --git a/apps/performance/34-default-vs-onpush/src/app/random.component.ts b/apps/best-practices/default-vs-onpush/src/app/random.component.ts similarity index 100% rename from apps/performance/34-default-vs-onpush/src/app/random.component.ts rename to apps/best-practices/default-vs-onpush/src/app/random.component.ts diff --git a/apps/angular/13-highly-customizable-css/src/assets/.gitkeep b/apps/best-practices/default-vs-onpush/src/assets/.gitkeep similarity index 100% rename from apps/angular/13-highly-customizable-css/src/assets/.gitkeep rename to apps/best-practices/default-vs-onpush/src/assets/.gitkeep diff --git a/apps/angular/13-highly-customizable-css/src/favicon.ico b/apps/best-practices/default-vs-onpush/src/favicon.ico similarity index 100% rename from apps/angular/13-highly-customizable-css/src/favicon.ico rename to apps/best-practices/default-vs-onpush/src/favicon.ico diff --git a/apps/performance/34-default-vs-onpush/src/index.html b/apps/best-practices/default-vs-onpush/src/index.html similarity index 100% rename from apps/performance/34-default-vs-onpush/src/index.html rename to apps/best-practices/default-vs-onpush/src/index.html diff --git a/apps/angular/39-injection-token/src/main.ts b/apps/best-practices/default-vs-onpush/src/main.ts similarity index 100% rename from apps/angular/39-injection-token/src/main.ts rename to apps/best-practices/default-vs-onpush/src/main.ts diff --git a/apps/angular/31-module-to-standalone/src/styles.scss b/apps/best-practices/default-vs-onpush/src/styles.scss similarity index 100% rename from apps/angular/31-module-to-standalone/src/styles.scss rename to apps/best-practices/default-vs-onpush/src/styles.scss diff --git a/apps/angular/32-change-detection-bug/tailwind.config.js b/apps/best-practices/default-vs-onpush/tailwind.config.js similarity index 100% rename from apps/angular/32-change-detection-bug/tailwind.config.js rename to apps/best-practices/default-vs-onpush/tailwind.config.js diff --git a/apps/angular/45-react-in-angular/tsconfig.app.json b/apps/best-practices/default-vs-onpush/tsconfig.app.json similarity index 87% rename from apps/angular/45-react-in-angular/tsconfig.app.json rename to apps/best-practices/default-vs-onpush/tsconfig.app.json index 8b5631268..403fe4f54 100644 --- a/apps/angular/45-react-in-angular/tsconfig.app.json +++ b/apps/best-practices/default-vs-onpush/tsconfig.app.json @@ -5,7 +5,9 @@ "types": [], "moduleResolution": "bundler" }, - "files": ["src/main.ts"], + "files": [ + "src/main.ts" + ], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] } diff --git a/apps/performance/34-default-vs-onpush/tsconfig.editor.json b/apps/best-practices/default-vs-onpush/tsconfig.editor.json similarity index 61% rename from apps/performance/34-default-vs-onpush/tsconfig.editor.json rename to apps/best-practices/default-vs-onpush/tsconfig.editor.json index 146b6d2da..d8c1efdf0 100644 --- a/apps/performance/34-default-vs-onpush/tsconfig.editor.json +++ b/apps/best-practices/default-vs-onpush/tsconfig.editor.json @@ -2,7 +2,7 @@ "extends": "./tsconfig.json", "include": [ "src/**/*.ts", - "../../../libs/shared/directives/src/lib/cd-flashing.directive.ts" + "../../../libs/shared/directives/src/lib/cd-flashing.directive.ts" ], "compilerOptions": { "types": [] diff --git a/apps/angular/13-highly-customizable-css/tsconfig.json b/apps/best-practices/default-vs-onpush/tsconfig.json similarity index 100% rename from apps/angular/13-highly-customizable-css/tsconfig.json rename to apps/best-practices/default-vs-onpush/tsconfig.json diff --git a/apps/angular/45-react-in-angular/.eslintrc.json b/apps/best-practices/lazy-load-component/.eslintrc.json similarity index 100% rename from apps/angular/45-react-in-angular/.eslintrc.json rename to apps/best-practices/lazy-load-component/.eslintrc.json diff --git a/apps/angular/52-lazy-load-component/README.md b/apps/best-practices/lazy-load-component/README.md similarity index 100% rename from apps/angular/52-lazy-load-component/README.md rename to apps/best-practices/lazy-load-component/README.md diff --git a/apps/angular/52-lazy-load-component/jest.config.ts b/apps/best-practices/lazy-load-component/jest.config.ts similarity index 100% rename from apps/angular/52-lazy-load-component/jest.config.ts rename to apps/best-practices/lazy-load-component/jest.config.ts diff --git a/apps/angular/52-lazy-load-component/project.json b/apps/best-practices/lazy-load-component/project.json similarity index 100% rename from apps/angular/52-lazy-load-component/project.json rename to apps/best-practices/lazy-load-component/project.json diff --git a/apps/angular/52-lazy-load-component/src/app/app.component.ts b/apps/best-practices/lazy-load-component/src/app/app.component.ts similarity index 100% rename from apps/angular/52-lazy-load-component/src/app/app.component.ts rename to apps/best-practices/lazy-load-component/src/app/app.component.ts diff --git a/apps/angular/52-lazy-load-component/src/app/app.module.ts b/apps/best-practices/lazy-load-component/src/app/app.module.ts similarity index 100% rename from apps/angular/52-lazy-load-component/src/app/app.module.ts rename to apps/best-practices/lazy-load-component/src/app/app.module.ts diff --git a/apps/angular/52-lazy-load-component/src/app/placeholder.component.ts b/apps/best-practices/lazy-load-component/src/app/placeholder.component.ts similarity index 100% rename from apps/angular/52-lazy-load-component/src/app/placeholder.component.ts rename to apps/best-practices/lazy-load-component/src/app/placeholder.component.ts diff --git a/apps/angular/52-lazy-load-component/src/app/top.component.ts b/apps/best-practices/lazy-load-component/src/app/top.component.ts similarity index 100% rename from apps/angular/52-lazy-load-component/src/app/top.component.ts rename to apps/best-practices/lazy-load-component/src/app/top.component.ts diff --git a/apps/angular/16-master-dependency-injection/src/assets/.gitkeep b/apps/best-practices/lazy-load-component/src/assets/.gitkeep similarity index 100% rename from apps/angular/16-master-dependency-injection/src/assets/.gitkeep rename to apps/best-practices/lazy-load-component/src/assets/.gitkeep diff --git a/apps/angular/16-master-dependency-injection/src/favicon.ico b/apps/best-practices/lazy-load-component/src/favicon.ico similarity index 100% rename from apps/angular/16-master-dependency-injection/src/favicon.ico rename to apps/best-practices/lazy-load-component/src/favicon.ico diff --git a/apps/angular/52-lazy-load-component/src/index.html b/apps/best-practices/lazy-load-component/src/index.html similarity index 100% rename from apps/angular/52-lazy-load-component/src/index.html rename to apps/best-practices/lazy-load-component/src/index.html diff --git a/apps/angular/31-module-to-standalone/src/main.ts b/apps/best-practices/lazy-load-component/src/main.ts similarity index 100% rename from apps/angular/31-module-to-standalone/src/main.ts rename to apps/best-practices/lazy-load-component/src/main.ts diff --git a/apps/angular/32-change-detection-bug/src/styles.scss b/apps/best-practices/lazy-load-component/src/styles.scss similarity index 100% rename from apps/angular/32-change-detection-bug/src/styles.scss rename to apps/best-practices/lazy-load-component/src/styles.scss diff --git a/apps/angular/39-injection-token/src/test-setup.ts b/apps/best-practices/lazy-load-component/src/test-setup.ts similarity index 100% rename from apps/angular/39-injection-token/src/test-setup.ts rename to apps/best-practices/lazy-load-component/src/test-setup.ts diff --git a/apps/angular/33-decoupling-components/tailwind.config.js b/apps/best-practices/lazy-load-component/tailwind.config.js similarity index 100% rename from apps/angular/33-decoupling-components/tailwind.config.js rename to apps/best-practices/lazy-load-component/tailwind.config.js diff --git a/apps/best-practices/lazy-load-component/tsconfig.app.json b/apps/best-practices/lazy-load-component/tsconfig.app.json new file mode 100644 index 000000000..3bb4877ea --- /dev/null +++ b/apps/best-practices/lazy-load-component/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": [ + "src/main.ts" + ], + "include": ["src/**/*.d.ts"], + "exclude": [ + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/signal/50-bug-in-effect/tsconfig.editor.json b/apps/best-practices/lazy-load-component/tsconfig.editor.json similarity index 53% rename from apps/signal/50-bug-in-effect/tsconfig.editor.json rename to apps/best-practices/lazy-load-component/tsconfig.editor.json index a8ac182c0..b10364017 100644 --- a/apps/signal/50-bug-in-effect/tsconfig.editor.json +++ b/apps/best-practices/lazy-load-component/tsconfig.editor.json @@ -2,5 +2,6 @@ "extends": "./tsconfig.json", "include": ["src/**/*.ts"], "compilerOptions": {}, - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] + "exclude": [ + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] } diff --git a/apps/angular/52-lazy-load-component/tsconfig.json b/apps/best-practices/lazy-load-component/tsconfig.json similarity index 100% rename from apps/angular/52-lazy-load-component/tsconfig.json rename to apps/best-practices/lazy-load-component/tsconfig.json diff --git a/apps/angular/55-back-button-navigation/tsconfig.spec.json b/apps/best-practices/lazy-load-component/tsconfig.spec.json similarity index 80% rename from apps/angular/55-back-button-navigation/tsconfig.spec.json rename to apps/best-practices/lazy-load-component/tsconfig.spec.json index 1a4817a7d..9cfdcdeb3 100644 --- a/apps/angular/55-back-button-navigation/tsconfig.spec.json +++ b/apps/best-practices/lazy-load-component/tsconfig.spec.json @@ -5,9 +5,11 @@ "module": "commonjs", "types": ["jest", "node", "@testing-library/jest-dom"] }, - "files": ["src/test-setup.ts"], + "files": [ + "src/test-setup.ts" + ], "include": [ - "jest.config.ts", + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts" diff --git a/apps/angular/21-anchor-navigation/.eslintrc.json b/apps/best-practices/memoization/.eslintrc.json similarity index 100% rename from apps/angular/21-anchor-navigation/.eslintrc.json rename to apps/best-practices/memoization/.eslintrc.json diff --git a/apps/performance/35-memoization/README.md b/apps/best-practices/memoization/README.md similarity index 100% rename from apps/performance/35-memoization/README.md rename to apps/best-practices/memoization/README.md diff --git a/apps/performance/35-memoization/project.json b/apps/best-practices/memoization/project.json similarity index 100% rename from apps/performance/35-memoization/project.json rename to apps/best-practices/memoization/project.json diff --git a/apps/performance/35-memoization/src/app/app.component.ts b/apps/best-practices/memoization/src/app/app.component.ts similarity index 100% rename from apps/performance/35-memoization/src/app/app.component.ts rename to apps/best-practices/memoization/src/app/app.component.ts diff --git a/apps/performance/35-memoization/src/app/app.config.ts b/apps/best-practices/memoization/src/app/app.config.ts similarity index 100% rename from apps/performance/35-memoization/src/app/app.config.ts rename to apps/best-practices/memoization/src/app/app.config.ts diff --git a/apps/performance/35-memoization/src/app/generateList.ts b/apps/best-practices/memoization/src/app/generateList.ts similarity index 100% rename from apps/performance/35-memoization/src/app/generateList.ts rename to apps/best-practices/memoization/src/app/generateList.ts diff --git a/apps/performance/35-memoization/src/app/person-list.component.ts b/apps/best-practices/memoization/src/app/person-list.component.ts similarity index 100% rename from apps/performance/35-memoization/src/app/person-list.component.ts rename to apps/best-practices/memoization/src/app/person-list.component.ts diff --git a/apps/performance/35-memoization/src/app/person.model.ts b/apps/best-practices/memoization/src/app/person.model.ts similarity index 100% rename from apps/performance/35-memoization/src/app/person.model.ts rename to apps/best-practices/memoization/src/app/person.model.ts diff --git a/apps/angular/21-anchor-navigation/src/assets/.gitkeep b/apps/best-practices/memoization/src/assets/.gitkeep similarity index 100% rename from apps/angular/21-anchor-navigation/src/assets/.gitkeep rename to apps/best-practices/memoization/src/assets/.gitkeep diff --git a/apps/angular/21-anchor-navigation/src/favicon.ico b/apps/best-practices/memoization/src/favicon.ico similarity index 100% rename from apps/angular/21-anchor-navigation/src/favicon.ico rename to apps/best-practices/memoization/src/favicon.ico diff --git a/apps/performance/35-memoization/src/index.html b/apps/best-practices/memoization/src/index.html similarity index 100% rename from apps/performance/35-memoization/src/index.html rename to apps/best-practices/memoization/src/index.html diff --git a/apps/angular/44-view-transition/src/main.ts b/apps/best-practices/memoization/src/main.ts similarity index 100% rename from apps/angular/44-view-transition/src/main.ts rename to apps/best-practices/memoization/src/main.ts diff --git a/apps/angular/33-decoupling-components/src/styles.scss b/apps/best-practices/memoization/src/styles.scss similarity index 100% rename from apps/angular/33-decoupling-components/src/styles.scss rename to apps/best-practices/memoization/src/styles.scss diff --git a/apps/angular/39-injection-token/tailwind.config.js b/apps/best-practices/memoization/tailwind.config.js similarity index 100% rename from apps/angular/39-injection-token/tailwind.config.js rename to apps/best-practices/memoization/tailwind.config.js diff --git a/apps/angular/52-lazy-load-component/tsconfig.app.json b/apps/best-practices/memoization/tsconfig.app.json similarity index 87% rename from apps/angular/52-lazy-load-component/tsconfig.app.json rename to apps/best-practices/memoization/tsconfig.app.json index 8b5631268..403fe4f54 100644 --- a/apps/angular/52-lazy-load-component/tsconfig.app.json +++ b/apps/best-practices/memoization/tsconfig.app.json @@ -5,7 +5,9 @@ "types": [], "moduleResolution": "bundler" }, - "files": ["src/main.ts"], + "files": [ + "src/main.ts" + ], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] } diff --git a/apps/angular/16-master-dependency-injection/tsconfig.editor.json b/apps/best-practices/memoization/tsconfig.editor.json similarity index 100% rename from apps/angular/16-master-dependency-injection/tsconfig.editor.json rename to apps/best-practices/memoization/tsconfig.editor.json diff --git a/apps/angular/16-master-dependency-injection/tsconfig.json b/apps/best-practices/memoization/tsconfig.json similarity index 100% rename from apps/angular/16-master-dependency-injection/tsconfig.json rename to apps/best-practices/memoization/tsconfig.json diff --git a/apps/angular/22-router-input/.eslintrc.json b/apps/best-practices/ngfor-optimization/.eslintrc.json similarity index 100% rename from apps/angular/22-router-input/.eslintrc.json rename to apps/best-practices/ngfor-optimization/.eslintrc.json diff --git a/apps/performance/36-ngfor-optimization/README.md b/apps/best-practices/ngfor-optimization/README.md similarity index 100% rename from apps/performance/36-ngfor-optimization/README.md rename to apps/best-practices/ngfor-optimization/README.md diff --git a/apps/performance/36-ngfor-optimization/jest.config.ts b/apps/best-practices/ngfor-optimization/jest.config.ts similarity index 100% rename from apps/performance/36-ngfor-optimization/jest.config.ts rename to apps/best-practices/ngfor-optimization/jest.config.ts diff --git a/apps/performance/36-ngfor-optimization/project.json b/apps/best-practices/ngfor-optimization/project.json similarity index 100% rename from apps/performance/36-ngfor-optimization/project.json rename to apps/best-practices/ngfor-optimization/project.json diff --git a/apps/performance/36-ngfor-optimization/src/app/app.component.ts b/apps/best-practices/ngfor-optimization/src/app/app.component.ts similarity index 100% rename from apps/performance/36-ngfor-optimization/src/app/app.component.ts rename to apps/best-practices/ngfor-optimization/src/app/app.component.ts diff --git a/apps/performance/36-ngfor-optimization/src/app/app.config.ts b/apps/best-practices/ngfor-optimization/src/app/app.config.ts similarity index 100% rename from apps/performance/36-ngfor-optimization/src/app/app.config.ts rename to apps/best-practices/ngfor-optimization/src/app/app.config.ts diff --git a/apps/performance/36-ngfor-optimization/src/app/generateList.ts b/apps/best-practices/ngfor-optimization/src/app/generateList.ts similarity index 100% rename from apps/performance/36-ngfor-optimization/src/app/generateList.ts rename to apps/best-practices/ngfor-optimization/src/app/generateList.ts diff --git a/apps/performance/36-ngfor-optimization/src/app/list.service.ts b/apps/best-practices/ngfor-optimization/src/app/list.service.ts similarity index 100% rename from apps/performance/36-ngfor-optimization/src/app/list.service.ts rename to apps/best-practices/ngfor-optimization/src/app/list.service.ts diff --git a/apps/performance/36-ngfor-optimization/src/app/person-list.component.ts b/apps/best-practices/ngfor-optimization/src/app/person-list.component.ts similarity index 100% rename from apps/performance/36-ngfor-optimization/src/app/person-list.component.ts rename to apps/best-practices/ngfor-optimization/src/app/person-list.component.ts diff --git a/apps/performance/36-ngfor-optimization/src/app/person.model.ts b/apps/best-practices/ngfor-optimization/src/app/person.model.ts similarity index 100% rename from apps/performance/36-ngfor-optimization/src/app/person.model.ts rename to apps/best-practices/ngfor-optimization/src/app/person.model.ts diff --git a/apps/angular/22-router-input/src/assets/.gitkeep b/apps/best-practices/ngfor-optimization/src/assets/.gitkeep similarity index 100% rename from apps/angular/22-router-input/src/assets/.gitkeep rename to apps/best-practices/ngfor-optimization/src/assets/.gitkeep diff --git a/apps/angular/22-router-input/src/favicon.ico b/apps/best-practices/ngfor-optimization/src/favicon.ico similarity index 100% rename from apps/angular/22-router-input/src/favicon.ico rename to apps/best-practices/ngfor-optimization/src/favicon.ico diff --git a/apps/performance/36-ngfor-optimization/src/index.html b/apps/best-practices/ngfor-optimization/src/index.html similarity index 100% rename from apps/performance/36-ngfor-optimization/src/index.html rename to apps/best-practices/ngfor-optimization/src/index.html diff --git a/apps/angular/45-react-in-angular/src/main.ts b/apps/best-practices/ngfor-optimization/src/main.ts similarity index 100% rename from apps/angular/45-react-in-angular/src/main.ts rename to apps/best-practices/ngfor-optimization/src/main.ts diff --git a/apps/angular/39-injection-token/src/styles.scss b/apps/best-practices/ngfor-optimization/src/styles.scss similarity index 100% rename from apps/angular/39-injection-token/src/styles.scss rename to apps/best-practices/ngfor-optimization/src/styles.scss diff --git a/apps/angular/45-react-in-angular/src/test-setup.ts b/apps/best-practices/ngfor-optimization/src/test-setup.ts similarity index 100% rename from apps/angular/45-react-in-angular/src/test-setup.ts rename to apps/best-practices/ngfor-optimization/src/test-setup.ts diff --git a/apps/angular/44-view-transition/tailwind.config.js b/apps/best-practices/ngfor-optimization/tailwind.config.js similarity index 100% rename from apps/angular/44-view-transition/tailwind.config.js rename to apps/best-practices/ngfor-optimization/tailwind.config.js diff --git a/apps/best-practices/ngfor-optimization/tsconfig.app.json b/apps/best-practices/ngfor-optimization/tsconfig.app.json new file mode 100644 index 000000000..3bb4877ea --- /dev/null +++ b/apps/best-practices/ngfor-optimization/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": [ + "src/main.ts" + ], + "include": ["src/**/*.d.ts"], + "exclude": [ + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/angular/32-change-detection-bug/tsconfig.editor.json b/apps/best-practices/ngfor-optimization/tsconfig.editor.json similarity index 100% rename from apps/angular/32-change-detection-bug/tsconfig.editor.json rename to apps/best-practices/ngfor-optimization/tsconfig.editor.json diff --git a/apps/angular/21-anchor-navigation/tsconfig.json b/apps/best-practices/ngfor-optimization/tsconfig.json similarity index 100% rename from apps/angular/21-anchor-navigation/tsconfig.json rename to apps/best-practices/ngfor-optimization/tsconfig.json diff --git a/apps/angular/46-simple-animations/tsconfig.spec.json b/apps/best-practices/ngfor-optimization/tsconfig.spec.json similarity index 80% rename from apps/angular/46-simple-animations/tsconfig.spec.json rename to apps/best-practices/ngfor-optimization/tsconfig.spec.json index 1a4817a7d..9cfdcdeb3 100644 --- a/apps/angular/46-simple-animations/tsconfig.spec.json +++ b/apps/best-practices/ngfor-optimization/tsconfig.spec.json @@ -5,9 +5,11 @@ "module": "commonjs", "types": ["jest", "node", "@testing-library/jest-dom"] }, - "files": ["src/test-setup.ts"], + "files": [ + "src/test-setup.ts" + ], "include": [ - "jest.config.ts", + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts" diff --git a/apps/angular/31-module-to-standalone/.eslintrc.json b/apps/best-practices/optimize-change-detection/.eslintrc.json similarity index 100% rename from apps/angular/31-module-to-standalone/.eslintrc.json rename to apps/best-practices/optimize-change-detection/.eslintrc.json diff --git a/apps/performance/12-optimize-change-detection/README.md b/apps/best-practices/optimize-change-detection/README.md similarity index 100% rename from apps/performance/12-optimize-change-detection/README.md rename to apps/best-practices/optimize-change-detection/README.md diff --git a/apps/performance/12-optimize-change-detection/jest.config.ts b/apps/best-practices/optimize-change-detection/jest.config.ts similarity index 100% rename from apps/performance/12-optimize-change-detection/jest.config.ts rename to apps/best-practices/optimize-change-detection/jest.config.ts diff --git a/apps/performance/12-optimize-change-detection/project.json b/apps/best-practices/optimize-change-detection/project.json similarity index 100% rename from apps/performance/12-optimize-change-detection/project.json rename to apps/best-practices/optimize-change-detection/project.json diff --git a/apps/performance/12-optimize-change-detection/src/app/app.component.ts b/apps/best-practices/optimize-change-detection/src/app/app.component.ts similarity index 100% rename from apps/performance/12-optimize-change-detection/src/app/app.component.ts rename to apps/best-practices/optimize-change-detection/src/app/app.component.ts diff --git a/apps/angular/31-module-to-standalone/src/assets/.gitkeep b/apps/best-practices/optimize-change-detection/src/assets/.gitkeep similarity index 100% rename from apps/angular/31-module-to-standalone/src/assets/.gitkeep rename to apps/best-practices/optimize-change-detection/src/assets/.gitkeep diff --git a/apps/angular/31-module-to-standalone/src/favicon.ico b/apps/best-practices/optimize-change-detection/src/favicon.ico similarity index 100% rename from apps/angular/31-module-to-standalone/src/favicon.ico rename to apps/best-practices/optimize-change-detection/src/favicon.ico diff --git a/apps/performance/12-optimize-change-detection/src/index.html b/apps/best-practices/optimize-change-detection/src/index.html similarity index 100% rename from apps/performance/12-optimize-change-detection/src/index.html rename to apps/best-practices/optimize-change-detection/src/index.html diff --git a/apps/angular/1-projection/src/main.ts b/apps/best-practices/optimize-change-detection/src/main.ts similarity index 100% rename from apps/angular/1-projection/src/main.ts rename to apps/best-practices/optimize-change-detection/src/main.ts diff --git a/apps/angular/10-utility-wrapper-pipe/src/styles.scss b/apps/best-practices/optimize-change-detection/src/styles.scss similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/src/styles.scss rename to apps/best-practices/optimize-change-detection/src/styles.scss diff --git a/apps/angular/1-projection/src/test-setup.ts b/apps/best-practices/optimize-change-detection/src/test-setup.ts similarity index 100% rename from apps/angular/1-projection/src/test-setup.ts rename to apps/best-practices/optimize-change-detection/src/test-setup.ts diff --git a/apps/best-practices/optimize-change-detection/tsconfig.app.json b/apps/best-practices/optimize-change-detection/tsconfig.app.json new file mode 100644 index 000000000..3bb4877ea --- /dev/null +++ b/apps/best-practices/optimize-change-detection/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": [ + "src/main.ts" + ], + "include": ["src/**/*.d.ts"], + "exclude": [ + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/angular/39-injection-token/tsconfig.editor.json b/apps/best-practices/optimize-change-detection/tsconfig.editor.json similarity index 100% rename from apps/angular/39-injection-token/tsconfig.editor.json rename to apps/best-practices/optimize-change-detection/tsconfig.editor.json diff --git a/apps/angular/32-change-detection-bug/tsconfig.json b/apps/best-practices/optimize-change-detection/tsconfig.json similarity index 100% rename from apps/angular/32-change-detection-bug/tsconfig.json rename to apps/best-practices/optimize-change-detection/tsconfig.json diff --git a/apps/performance/12-optimize-change-detection/tsconfig.spec.json b/apps/best-practices/optimize-change-detection/tsconfig.spec.json similarity index 78% rename from apps/performance/12-optimize-change-detection/tsconfig.spec.json rename to apps/best-practices/optimize-change-detection/tsconfig.spec.json index ca14cc622..173fe9a7d 100644 --- a/apps/performance/12-optimize-change-detection/tsconfig.spec.json +++ b/apps/best-practices/optimize-change-detection/tsconfig.spec.json @@ -5,9 +5,11 @@ "module": "commonjs", "types": ["jest", "node"] }, - "files": ["src/test-setup.ts"], + "files": [ + "src/test-setup.ts" + ], "include": [ - "jest.config.ts", + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts" diff --git a/apps/angular/46-simple-animations/.eslintrc.json b/apps/components-and-templates/content-projection-default/.eslintrc.json similarity index 100% rename from apps/angular/46-simple-animations/.eslintrc.json rename to apps/components-and-templates/content-projection-default/.eslintrc.json diff --git a/apps/angular/57-content-projection-default/README.md b/apps/components-and-templates/content-projection-default/README.md similarity index 100% rename from apps/angular/57-content-projection-default/README.md rename to apps/components-and-templates/content-projection-default/README.md diff --git a/apps/angular/57-content-projection-default/project.json b/apps/components-and-templates/content-projection-default/project.json similarity index 100% rename from apps/angular/57-content-projection-default/project.json rename to apps/components-and-templates/content-projection-default/project.json diff --git a/apps/angular/32-change-detection-bug/src/favicon.ico b/apps/components-and-templates/content-projection-default/public/favicon.ico similarity index 100% rename from apps/angular/32-change-detection-bug/src/favicon.ico rename to apps/components-and-templates/content-projection-default/public/favicon.ico diff --git a/apps/angular/57-content-projection-default/src/app/app.component.ts b/apps/components-and-templates/content-projection-default/src/app/app.component.ts similarity index 100% rename from apps/angular/57-content-projection-default/src/app/app.component.ts rename to apps/components-and-templates/content-projection-default/src/app/app.component.ts diff --git a/apps/angular/57-content-projection-default/src/app/app.config.ts b/apps/components-and-templates/content-projection-default/src/app/app.config.ts similarity index 100% rename from apps/angular/57-content-projection-default/src/app/app.config.ts rename to apps/components-and-templates/content-projection-default/src/app/app.config.ts diff --git a/apps/angular/57-content-projection-default/src/app/card.component.ts b/apps/components-and-templates/content-projection-default/src/app/card.component.ts similarity index 100% rename from apps/angular/57-content-projection-default/src/app/card.component.ts rename to apps/components-and-templates/content-projection-default/src/app/card.component.ts diff --git a/apps/angular/57-content-projection-default/src/index.html b/apps/components-and-templates/content-projection-default/src/index.html similarity index 100% rename from apps/angular/57-content-projection-default/src/index.html rename to apps/components-and-templates/content-projection-default/src/index.html diff --git a/apps/angular/46-simple-animations/src/main.ts b/apps/components-and-templates/content-projection-default/src/main.ts similarity index 100% rename from apps/angular/46-simple-animations/src/main.ts rename to apps/components-and-templates/content-projection-default/src/main.ts diff --git a/apps/angular/45-react-in-angular/src/styles.scss b/apps/components-and-templates/content-projection-default/src/styles.scss similarity index 100% rename from apps/angular/45-react-in-angular/src/styles.scss rename to apps/components-and-templates/content-projection-default/src/styles.scss diff --git a/apps/angular/45-react-in-angular/tailwind.config.js b/apps/components-and-templates/content-projection-default/tailwind.config.js similarity index 100% rename from apps/angular/45-react-in-angular/tailwind.config.js rename to apps/components-and-templates/content-projection-default/tailwind.config.js diff --git a/apps/angular/55-back-button-navigation/tsconfig.app.json b/apps/components-and-templates/content-projection-default/tsconfig.app.json similarity index 87% rename from apps/angular/55-back-button-navigation/tsconfig.app.json rename to apps/components-and-templates/content-projection-default/tsconfig.app.json index 8b5631268..403fe4f54 100644 --- a/apps/angular/55-back-button-navigation/tsconfig.app.json +++ b/apps/components-and-templates/content-projection-default/tsconfig.app.json @@ -5,7 +5,9 @@ "types": [], "moduleResolution": "bundler" }, - "files": ["src/main.ts"], + "files": [ + "src/main.ts" + ], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] } diff --git a/apps/angular/52-lazy-load-component/tsconfig.editor.json b/apps/components-and-templates/content-projection-default/tsconfig.editor.json similarity index 100% rename from apps/angular/52-lazy-load-component/tsconfig.editor.json rename to apps/components-and-templates/content-projection-default/tsconfig.editor.json diff --git a/apps/angular/57-content-projection-default/tsconfig.json b/apps/components-and-templates/content-projection-default/tsconfig.json similarity index 100% rename from apps/angular/57-content-projection-default/tsconfig.json rename to apps/components-and-templates/content-projection-default/tsconfig.json diff --git a/apps/angular/5-crud-application/.eslintrc.json b/apps/components-and-templates/crud-application/.eslintrc.json similarity index 100% rename from apps/angular/5-crud-application/.eslintrc.json rename to apps/components-and-templates/crud-application/.eslintrc.json diff --git a/apps/angular/5-crud-application/README.md b/apps/components-and-templates/crud-application/README.md similarity index 100% rename from apps/angular/5-crud-application/README.md rename to apps/components-and-templates/crud-application/README.md diff --git a/apps/angular/5-crud-application/jest.config.ts b/apps/components-and-templates/crud-application/jest.config.ts similarity index 100% rename from apps/angular/5-crud-application/jest.config.ts rename to apps/components-and-templates/crud-application/jest.config.ts diff --git a/apps/angular/5-crud-application/project.json b/apps/components-and-templates/crud-application/project.json similarity index 100% rename from apps/angular/5-crud-application/project.json rename to apps/components-and-templates/crud-application/project.json diff --git a/apps/angular/5-crud-application/src/app/app.component.ts b/apps/components-and-templates/crud-application/src/app/app.component.ts similarity index 100% rename from apps/angular/5-crud-application/src/app/app.component.ts rename to apps/components-and-templates/crud-application/src/app/app.component.ts diff --git a/apps/angular/5-crud-application/src/app/app.config.ts b/apps/components-and-templates/crud-application/src/app/app.config.ts similarity index 100% rename from apps/angular/5-crud-application/src/app/app.config.ts rename to apps/components-and-templates/crud-application/src/app/app.config.ts diff --git a/apps/angular/32-change-detection-bug/src/assets/.gitkeep b/apps/components-and-templates/crud-application/src/assets/.gitkeep similarity index 100% rename from apps/angular/32-change-detection-bug/src/assets/.gitkeep rename to apps/components-and-templates/crud-application/src/assets/.gitkeep diff --git a/apps/angular/33-decoupling-components/src/favicon.ico b/apps/components-and-templates/crud-application/src/favicon.ico similarity index 100% rename from apps/angular/33-decoupling-components/src/favicon.ico rename to apps/components-and-templates/crud-application/src/favicon.ico diff --git a/apps/angular/5-crud-application/src/index.html b/apps/components-and-templates/crud-application/src/index.html similarity index 100% rename from apps/angular/5-crud-application/src/index.html rename to apps/components-and-templates/crud-application/src/index.html diff --git a/apps/angular/5-crud-application/src/main.ts b/apps/components-and-templates/crud-application/src/main.ts similarity index 100% rename from apps/angular/5-crud-application/src/main.ts rename to apps/components-and-templates/crud-application/src/main.ts diff --git a/apps/angular/1-projection/src/polyfills.ts b/apps/components-and-templates/crud-application/src/polyfills.ts similarity index 100% rename from apps/angular/1-projection/src/polyfills.ts rename to apps/components-and-templates/crud-application/src/polyfills.ts diff --git a/apps/angular/5-crud-application/src/styles.scss b/apps/components-and-templates/crud-application/src/styles.scss similarity index 100% rename from apps/angular/5-crud-application/src/styles.scss rename to apps/components-and-templates/crud-application/src/styles.scss diff --git a/apps/angular/46-simple-animations/src/test-setup.ts b/apps/components-and-templates/crud-application/src/test-setup.ts similarity index 100% rename from apps/angular/46-simple-animations/src/test-setup.ts rename to apps/components-and-templates/crud-application/src/test-setup.ts diff --git a/apps/components-and-templates/crud-application/tsconfig.app.json b/apps/components-and-templates/crud-application/tsconfig.app.json new file mode 100644 index 000000000..35bb97a53 --- /dev/null +++ b/apps/components-and-templates/crud-application/tsconfig.app.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "target": "ES2022", + "useDefineForClassFields": false, + "moduleResolution": "bundler" + }, + "files": [ + "src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.d.ts"], + "exclude": [ + "jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] +} diff --git a/apps/angular/10-utility-wrapper-pipe/tsconfig.editor.json b/apps/components-and-templates/crud-application/tsconfig.editor.json similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/tsconfig.editor.json rename to apps/components-and-templates/crud-application/tsconfig.editor.json diff --git a/apps/angular/1-projection/tsconfig.json b/apps/components-and-templates/crud-application/tsconfig.json similarity index 100% rename from apps/angular/1-projection/tsconfig.json rename to apps/components-and-templates/crud-application/tsconfig.json diff --git a/apps/testing/18-nested-components/tsconfig.spec.json b/apps/components-and-templates/crud-application/tsconfig.spec.json similarity index 61% rename from apps/testing/18-nested-components/tsconfig.spec.json rename to apps/components-and-templates/crud-application/tsconfig.spec.json index c0c092e1e..4d9c75e39 100644 --- a/apps/testing/18-nested-components/tsconfig.spec.json +++ b/apps/components-and-templates/crud-application/tsconfig.spec.json @@ -5,11 +5,9 @@ "module": "commonjs", "types": ["jest", "node", "@testing-library/jest-dom"] }, - "files": ["src/test-setup.ts"], + "files": [ + "src/test-setup.ts" + ], "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] + "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] } diff --git a/apps/angular/1-projection/.eslintrc.json b/apps/components-and-templates/projection/.eslintrc.json similarity index 100% rename from apps/angular/1-projection/.eslintrc.json rename to apps/components-and-templates/projection/.eslintrc.json diff --git a/apps/angular/1-projection/README.md b/apps/components-and-templates/projection/README.md similarity index 100% rename from apps/angular/1-projection/README.md rename to apps/components-and-templates/projection/README.md diff --git a/apps/angular/1-projection/jest.config.ts b/apps/components-and-templates/projection/jest.config.ts similarity index 100% rename from apps/angular/1-projection/jest.config.ts rename to apps/components-and-templates/projection/jest.config.ts diff --git a/apps/angular/1-projection/project.json b/apps/components-and-templates/projection/project.json similarity index 100% rename from apps/angular/1-projection/project.json rename to apps/components-and-templates/projection/project.json diff --git a/apps/angular/1-projection/src/app/app.component.ts b/apps/components-and-templates/projection/src/app/app.component.ts similarity index 100% rename from apps/angular/1-projection/src/app/app.component.ts rename to apps/components-and-templates/projection/src/app/app.component.ts diff --git a/apps/angular/1-projection/src/app/component/city-card/city-card.component.ts b/apps/components-and-templates/projection/src/app/component/city-card/city-card.component.ts similarity index 100% rename from apps/angular/1-projection/src/app/component/city-card/city-card.component.ts rename to apps/components-and-templates/projection/src/app/component/city-card/city-card.component.ts diff --git a/apps/angular/1-projection/src/app/component/student-card/student-card.component.ts b/apps/components-and-templates/projection/src/app/component/student-card/student-card.component.ts similarity index 100% rename from apps/angular/1-projection/src/app/component/student-card/student-card.component.ts rename to apps/components-and-templates/projection/src/app/component/student-card/student-card.component.ts diff --git a/apps/angular/1-projection/src/app/component/teacher-card/teacher-card.component.ts b/apps/components-and-templates/projection/src/app/component/teacher-card/teacher-card.component.ts similarity index 100% rename from apps/angular/1-projection/src/app/component/teacher-card/teacher-card.component.ts rename to apps/components-and-templates/projection/src/app/component/teacher-card/teacher-card.component.ts diff --git a/apps/angular/1-projection/src/app/data-access/city.store.ts b/apps/components-and-templates/projection/src/app/data-access/city.store.ts similarity index 100% rename from apps/angular/1-projection/src/app/data-access/city.store.ts rename to apps/components-and-templates/projection/src/app/data-access/city.store.ts diff --git a/apps/angular/1-projection/src/app/data-access/fake-http.service.ts b/apps/components-and-templates/projection/src/app/data-access/fake-http.service.ts similarity index 100% rename from apps/angular/1-projection/src/app/data-access/fake-http.service.ts rename to apps/components-and-templates/projection/src/app/data-access/fake-http.service.ts diff --git a/apps/angular/1-projection/src/app/data-access/student.store.ts b/apps/components-and-templates/projection/src/app/data-access/student.store.ts similarity index 100% rename from apps/angular/1-projection/src/app/data-access/student.store.ts rename to apps/components-and-templates/projection/src/app/data-access/student.store.ts diff --git a/apps/angular/1-projection/src/app/data-access/teacher.store.ts b/apps/components-and-templates/projection/src/app/data-access/teacher.store.ts similarity index 100% rename from apps/angular/1-projection/src/app/data-access/teacher.store.ts rename to apps/components-and-templates/projection/src/app/data-access/teacher.store.ts diff --git a/apps/angular/1-projection/src/app/model/card.model.ts b/apps/components-and-templates/projection/src/app/model/card.model.ts similarity index 100% rename from apps/angular/1-projection/src/app/model/card.model.ts rename to apps/components-and-templates/projection/src/app/model/card.model.ts diff --git a/apps/angular/1-projection/src/app/model/city.model.ts b/apps/components-and-templates/projection/src/app/model/city.model.ts similarity index 100% rename from apps/angular/1-projection/src/app/model/city.model.ts rename to apps/components-and-templates/projection/src/app/model/city.model.ts diff --git a/apps/angular/1-projection/src/app/model/student.model.ts b/apps/components-and-templates/projection/src/app/model/student.model.ts similarity index 100% rename from apps/angular/1-projection/src/app/model/student.model.ts rename to apps/components-and-templates/projection/src/app/model/student.model.ts diff --git a/apps/angular/1-projection/src/app/model/teacher.model.ts b/apps/components-and-templates/projection/src/app/model/teacher.model.ts similarity index 100% rename from apps/angular/1-projection/src/app/model/teacher.model.ts rename to apps/components-and-templates/projection/src/app/model/teacher.model.ts diff --git a/apps/angular/1-projection/src/app/ui/card/card.component.ts b/apps/components-and-templates/projection/src/app/ui/card/card.component.ts similarity index 100% rename from apps/angular/1-projection/src/app/ui/card/card.component.ts rename to apps/components-and-templates/projection/src/app/ui/card/card.component.ts diff --git a/apps/angular/1-projection/src/app/ui/list-item/list-item.component.ts b/apps/components-and-templates/projection/src/app/ui/list-item/list-item.component.ts similarity index 100% rename from apps/angular/1-projection/src/app/ui/list-item/list-item.component.ts rename to apps/components-and-templates/projection/src/app/ui/list-item/list-item.component.ts diff --git a/apps/angular/33-decoupling-components/src/assets/.gitkeep b/apps/components-and-templates/projection/src/assets/.gitkeep similarity index 100% rename from apps/angular/33-decoupling-components/src/assets/.gitkeep rename to apps/components-and-templates/projection/src/assets/.gitkeep diff --git a/apps/angular/1-projection/src/assets/img/city.png b/apps/components-and-templates/projection/src/assets/img/city.png similarity index 100% rename from apps/angular/1-projection/src/assets/img/city.png rename to apps/components-and-templates/projection/src/assets/img/city.png diff --git a/apps/angular/1-projection/src/assets/img/student.webp b/apps/components-and-templates/projection/src/assets/img/student.webp similarity index 100% rename from apps/angular/1-projection/src/assets/img/student.webp rename to apps/components-and-templates/projection/src/assets/img/student.webp diff --git a/apps/angular/1-projection/src/assets/img/teacher.png b/apps/components-and-templates/projection/src/assets/img/teacher.png similarity index 100% rename from apps/angular/1-projection/src/assets/img/teacher.png rename to apps/components-and-templates/projection/src/assets/img/teacher.png diff --git a/apps/angular/1-projection/src/assets/svg/trash.svg b/apps/components-and-templates/projection/src/assets/svg/trash.svg similarity index 100% rename from apps/angular/1-projection/src/assets/svg/trash.svg rename to apps/components-and-templates/projection/src/assets/svg/trash.svg diff --git a/apps/angular/39-injection-token/src/favicon.ico b/apps/components-and-templates/projection/src/favicon.ico similarity index 100% rename from apps/angular/39-injection-token/src/favicon.ico rename to apps/components-and-templates/projection/src/favicon.ico diff --git a/apps/angular/1-projection/src/index.html b/apps/components-and-templates/projection/src/index.html similarity index 100% rename from apps/angular/1-projection/src/index.html rename to apps/components-and-templates/projection/src/index.html diff --git a/apps/angular/10-utility-wrapper-pipe/src/main.ts b/apps/components-and-templates/projection/src/main.ts similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/src/main.ts rename to apps/components-and-templates/projection/src/main.ts diff --git a/apps/angular/10-utility-wrapper-pipe/src/polyfills.ts b/apps/components-and-templates/projection/src/polyfills.ts similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/src/polyfills.ts rename to apps/components-and-templates/projection/src/polyfills.ts diff --git a/apps/angular/44-view-transition/src/styles.scss b/apps/components-and-templates/projection/src/styles.scss similarity index 100% rename from apps/angular/44-view-transition/src/styles.scss rename to apps/components-and-templates/projection/src/styles.scss diff --git a/apps/angular/21-anchor-navigation/src/test-setup.ts b/apps/components-and-templates/projection/src/test-setup.ts similarity index 100% rename from apps/angular/21-anchor-navigation/src/test-setup.ts rename to apps/components-and-templates/projection/src/test-setup.ts diff --git a/apps/angular/46-simple-animations/tailwind.config.js b/apps/components-and-templates/projection/tailwind.config.js similarity index 100% rename from apps/angular/46-simple-animations/tailwind.config.js rename to apps/components-and-templates/projection/tailwind.config.js diff --git a/apps/components-and-templates/projection/tsconfig.app.json b/apps/components-and-templates/projection/tsconfig.app.json new file mode 100644 index 000000000..35bb97a53 --- /dev/null +++ b/apps/components-and-templates/projection/tsconfig.app.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "target": "ES2022", + "useDefineForClassFields": false, + "moduleResolution": "bundler" + }, + "files": [ + "src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.d.ts"], + "exclude": [ + "jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] +} diff --git a/apps/angular/1-projection/tsconfig.editor.json b/apps/components-and-templates/projection/tsconfig.editor.json similarity index 100% rename from apps/angular/1-projection/tsconfig.editor.json rename to apps/components-and-templates/projection/tsconfig.editor.json diff --git a/apps/angular/5-crud-application/tsconfig.json b/apps/components-and-templates/projection/tsconfig.json similarity index 100% rename from apps/angular/5-crud-application/tsconfig.json rename to apps/components-and-templates/projection/tsconfig.json diff --git a/apps/angular/1-projection/tsconfig.spec.json b/apps/components-and-templates/projection/tsconfig.spec.json similarity index 55% rename from apps/angular/1-projection/tsconfig.spec.json rename to apps/components-and-templates/projection/tsconfig.spec.json index 7aa46d88c..38992e485 100644 --- a/apps/angular/1-projection/tsconfig.spec.json +++ b/apps/components-and-templates/projection/tsconfig.spec.json @@ -5,6 +5,9 @@ "module": "commonjs", "types": ["jest", "node"] }, - "files": ["src/test-setup.ts"], - "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] + "files": [ + "src/test-setup.ts" + ], + "include": [ + "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] } diff --git a/apps/angular/16-master-dependency-injection/.eslintrc.json b/apps/dependency-injection/master-dependency-injection/.eslintrc.json similarity index 100% rename from apps/angular/16-master-dependency-injection/.eslintrc.json rename to apps/dependency-injection/master-dependency-injection/.eslintrc.json diff --git a/apps/angular/16-master-dependency-injection/README.md b/apps/dependency-injection/master-dependency-injection/README.md similarity index 100% rename from apps/angular/16-master-dependency-injection/README.md rename to apps/dependency-injection/master-dependency-injection/README.md diff --git a/apps/angular/16-master-dependency-injection/project.json b/apps/dependency-injection/master-dependency-injection/project.json similarity index 100% rename from apps/angular/16-master-dependency-injection/project.json rename to apps/dependency-injection/master-dependency-injection/project.json diff --git a/apps/angular/16-master-dependency-injection/src/app/app.component.ts b/apps/dependency-injection/master-dependency-injection/src/app/app.component.ts similarity index 100% rename from apps/angular/16-master-dependency-injection/src/app/app.component.ts rename to apps/dependency-injection/master-dependency-injection/src/app/app.component.ts diff --git a/apps/angular/16-master-dependency-injection/src/app/currency.pipe.ts b/apps/dependency-injection/master-dependency-injection/src/app/currency.pipe.ts similarity index 100% rename from apps/angular/16-master-dependency-injection/src/app/currency.pipe.ts rename to apps/dependency-injection/master-dependency-injection/src/app/currency.pipe.ts diff --git a/apps/angular/16-master-dependency-injection/src/app/currency.service.ts b/apps/dependency-injection/master-dependency-injection/src/app/currency.service.ts similarity index 100% rename from apps/angular/16-master-dependency-injection/src/app/currency.service.ts rename to apps/dependency-injection/master-dependency-injection/src/app/currency.service.ts diff --git a/apps/angular/16-master-dependency-injection/src/app/product.model.ts b/apps/dependency-injection/master-dependency-injection/src/app/product.model.ts similarity index 100% rename from apps/angular/16-master-dependency-injection/src/app/product.model.ts rename to apps/dependency-injection/master-dependency-injection/src/app/product.model.ts diff --git a/apps/angular/39-injection-token/src/assets/.gitkeep b/apps/dependency-injection/master-dependency-injection/src/assets/.gitkeep similarity index 100% rename from apps/angular/39-injection-token/src/assets/.gitkeep rename to apps/dependency-injection/master-dependency-injection/src/assets/.gitkeep diff --git a/apps/angular/4-typed-context-outlet/src/favicon.ico b/apps/dependency-injection/master-dependency-injection/src/favicon.ico similarity index 100% rename from apps/angular/4-typed-context-outlet/src/favicon.ico rename to apps/dependency-injection/master-dependency-injection/src/favicon.ico diff --git a/apps/angular/16-master-dependency-injection/src/index.html b/apps/dependency-injection/master-dependency-injection/src/index.html similarity index 100% rename from apps/angular/16-master-dependency-injection/src/index.html rename to apps/dependency-injection/master-dependency-injection/src/index.html diff --git a/apps/angular/16-master-dependency-injection/src/main.ts b/apps/dependency-injection/master-dependency-injection/src/main.ts similarity index 100% rename from apps/angular/16-master-dependency-injection/src/main.ts rename to apps/dependency-injection/master-dependency-injection/src/main.ts diff --git a/apps/angular/16-master-dependency-injection/src/styles.scss b/apps/dependency-injection/master-dependency-injection/src/styles.scss similarity index 100% rename from apps/angular/16-master-dependency-injection/src/styles.scss rename to apps/dependency-injection/master-dependency-injection/src/styles.scss diff --git a/apps/dependency-injection/master-dependency-injection/tsconfig.app.json b/apps/dependency-injection/master-dependency-injection/tsconfig.app.json new file mode 100644 index 000000000..403fe4f54 --- /dev/null +++ b/apps/dependency-injection/master-dependency-injection/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": [ + "src/main.ts" + ], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/angular/22-router-input/tsconfig.editor.json b/apps/dependency-injection/master-dependency-injection/tsconfig.editor.json similarity index 100% rename from apps/angular/22-router-input/tsconfig.editor.json rename to apps/dependency-injection/master-dependency-injection/tsconfig.editor.json diff --git a/apps/angular/22-router-input/tsconfig.json b/apps/dependency-injection/master-dependency-injection/tsconfig.json similarity index 100% rename from apps/angular/22-router-input/tsconfig.json rename to apps/dependency-injection/master-dependency-injection/tsconfig.json diff --git a/apps/angular/52-lazy-load-component/.eslintrc.json b/apps/directives-and-pipes/pure-pipe/.eslintrc.json similarity index 100% rename from apps/angular/52-lazy-load-component/.eslintrc.json rename to apps/directives-and-pipes/pure-pipe/.eslintrc.json diff --git a/apps/angular/8-pure-pipe/README.md b/apps/directives-and-pipes/pure-pipe/README.md similarity index 100% rename from apps/angular/8-pure-pipe/README.md rename to apps/directives-and-pipes/pure-pipe/README.md diff --git a/apps/angular/8-pure-pipe/project.json b/apps/directives-and-pipes/pure-pipe/project.json similarity index 100% rename from apps/angular/8-pure-pipe/project.json rename to apps/directives-and-pipes/pure-pipe/project.json diff --git a/apps/angular/8-pure-pipe/src/app/app.component.ts b/apps/directives-and-pipes/pure-pipe/src/app/app.component.ts similarity index 100% rename from apps/angular/8-pure-pipe/src/app/app.component.ts rename to apps/directives-and-pipes/pure-pipe/src/app/app.component.ts diff --git a/apps/angular/44-view-transition/src/assets/.gitkeep b/apps/directives-and-pipes/pure-pipe/src/assets/.gitkeep similarity index 100% rename from apps/angular/44-view-transition/src/assets/.gitkeep rename to apps/directives-and-pipes/pure-pipe/src/assets/.gitkeep diff --git a/apps/angular/44-view-transition/src/favicon.ico b/apps/directives-and-pipes/pure-pipe/src/favicon.ico similarity index 100% rename from apps/angular/44-view-transition/src/favicon.ico rename to apps/directives-and-pipes/pure-pipe/src/favicon.ico diff --git a/apps/angular/8-pure-pipe/src/index.html b/apps/directives-and-pipes/pure-pipe/src/index.html similarity index 100% rename from apps/angular/8-pure-pipe/src/index.html rename to apps/directives-and-pipes/pure-pipe/src/index.html diff --git a/apps/angular/33-decoupling-components/src/main.ts b/apps/directives-and-pipes/pure-pipe/src/main.ts similarity index 100% rename from apps/angular/33-decoupling-components/src/main.ts rename to apps/directives-and-pipes/pure-pipe/src/main.ts diff --git a/apps/angular/4-typed-context-outlet/src/polyfills.ts b/apps/directives-and-pipes/pure-pipe/src/polyfills.ts similarity index 100% rename from apps/angular/4-typed-context-outlet/src/polyfills.ts rename to apps/directives-and-pipes/pure-pipe/src/polyfills.ts diff --git a/apps/angular/13-highly-customizable-css/src/styles.scss b/apps/directives-and-pipes/pure-pipe/src/styles.scss similarity index 100% rename from apps/angular/13-highly-customizable-css/src/styles.scss rename to apps/directives-and-pipes/pure-pipe/src/styles.scss diff --git a/apps/angular/1-projection/tsconfig.app.json b/apps/directives-and-pipes/pure-pipe/tsconfig.app.json similarity index 85% rename from apps/angular/1-projection/tsconfig.app.json rename to apps/directives-and-pipes/pure-pipe/tsconfig.app.json index 2a1ca1b8d..d576a6fb8 100644 --- a/apps/angular/1-projection/tsconfig.app.json +++ b/apps/directives-and-pipes/pure-pipe/tsconfig.app.json @@ -7,7 +7,8 @@ "useDefineForClassFields": false, "moduleResolution": "bundler" }, - "files": ["src/main.ts", "src/polyfills.ts"], + "files": [ + "src/main.ts", "src/polyfills.ts"], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] } diff --git a/apps/angular/4-typed-context-outlet/tsconfig.editor.json b/apps/directives-and-pipes/pure-pipe/tsconfig.editor.json similarity index 100% rename from apps/angular/4-typed-context-outlet/tsconfig.editor.json rename to apps/directives-and-pipes/pure-pipe/tsconfig.editor.json diff --git a/apps/angular/10-utility-wrapper-pipe/tsconfig.json b/apps/directives-and-pipes/pure-pipe/tsconfig.json similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/tsconfig.json rename to apps/directives-and-pipes/pure-pipe/tsconfig.json diff --git a/apps/angular/55-back-button-navigation/.eslintrc.json b/apps/directives-and-pipes/structural-directive/.eslintrc.json similarity index 100% rename from apps/angular/55-back-button-navigation/.eslintrc.json rename to apps/directives-and-pipes/structural-directive/.eslintrc.json diff --git a/apps/angular/6-structural-directive/README.md b/apps/directives-and-pipes/structural-directive/README.md similarity index 100% rename from apps/angular/6-structural-directive/README.md rename to apps/directives-and-pipes/structural-directive/README.md diff --git a/apps/angular/6-structural-directive/project.json b/apps/directives-and-pipes/structural-directive/project.json similarity index 100% rename from apps/angular/6-structural-directive/project.json rename to apps/directives-and-pipes/structural-directive/project.json diff --git a/apps/angular/6-structural-directive/src/app/app.component.ts b/apps/directives-and-pipes/structural-directive/src/app/app.component.ts similarity index 100% rename from apps/angular/6-structural-directive/src/app/app.component.ts rename to apps/directives-and-pipes/structural-directive/src/app/app.component.ts diff --git a/apps/angular/6-structural-directive/src/app/app.config.ts b/apps/directives-and-pipes/structural-directive/src/app/app.config.ts similarity index 100% rename from apps/angular/6-structural-directive/src/app/app.config.ts rename to apps/directives-and-pipes/structural-directive/src/app/app.config.ts diff --git a/apps/angular/6-structural-directive/src/app/button.component.ts b/apps/directives-and-pipes/structural-directive/src/app/button.component.ts similarity index 100% rename from apps/angular/6-structural-directive/src/app/button.component.ts rename to apps/directives-and-pipes/structural-directive/src/app/button.component.ts diff --git a/apps/angular/6-structural-directive/src/app/dashboard/admin.component.ts b/apps/directives-and-pipes/structural-directive/src/app/dashboard/admin.component.ts similarity index 100% rename from apps/angular/6-structural-directive/src/app/dashboard/admin.component.ts rename to apps/directives-and-pipes/structural-directive/src/app/dashboard/admin.component.ts diff --git a/apps/angular/6-structural-directive/src/app/dashboard/manager.component.ts b/apps/directives-and-pipes/structural-directive/src/app/dashboard/manager.component.ts similarity index 100% rename from apps/angular/6-structural-directive/src/app/dashboard/manager.component.ts rename to apps/directives-and-pipes/structural-directive/src/app/dashboard/manager.component.ts diff --git a/apps/angular/6-structural-directive/src/app/information.component.ts b/apps/directives-and-pipes/structural-directive/src/app/information.component.ts similarity index 100% rename from apps/angular/6-structural-directive/src/app/information.component.ts rename to apps/directives-and-pipes/structural-directive/src/app/information.component.ts diff --git a/apps/angular/6-structural-directive/src/app/login.component.ts b/apps/directives-and-pipes/structural-directive/src/app/login.component.ts similarity index 100% rename from apps/angular/6-structural-directive/src/app/login.component.ts rename to apps/directives-and-pipes/structural-directive/src/app/login.component.ts diff --git a/apps/angular/6-structural-directive/src/app/routes.ts b/apps/directives-and-pipes/structural-directive/src/app/routes.ts similarity index 100% rename from apps/angular/6-structural-directive/src/app/routes.ts rename to apps/directives-and-pipes/structural-directive/src/app/routes.ts diff --git a/apps/angular/6-structural-directive/src/app/user.model.ts b/apps/directives-and-pipes/structural-directive/src/app/user.model.ts similarity index 100% rename from apps/angular/6-structural-directive/src/app/user.model.ts rename to apps/directives-and-pipes/structural-directive/src/app/user.model.ts diff --git a/apps/angular/6-structural-directive/src/app/user.store.ts b/apps/directives-and-pipes/structural-directive/src/app/user.store.ts similarity index 100% rename from apps/angular/6-structural-directive/src/app/user.store.ts rename to apps/directives-and-pipes/structural-directive/src/app/user.store.ts diff --git a/apps/angular/45-react-in-angular/src/assets/.gitkeep b/apps/directives-and-pipes/structural-directive/src/assets/.gitkeep similarity index 100% rename from apps/angular/45-react-in-angular/src/assets/.gitkeep rename to apps/directives-and-pipes/structural-directive/src/assets/.gitkeep diff --git a/apps/angular/45-react-in-angular/src/favicon.ico b/apps/directives-and-pipes/structural-directive/src/favicon.ico similarity index 100% rename from apps/angular/45-react-in-angular/src/favicon.ico rename to apps/directives-and-pipes/structural-directive/src/favicon.ico diff --git a/apps/angular/6-structural-directive/src/index.html b/apps/directives-and-pipes/structural-directive/src/index.html similarity index 100% rename from apps/angular/6-structural-directive/src/index.html rename to apps/directives-and-pipes/structural-directive/src/index.html diff --git a/apps/angular/21-anchor-navigation/src/main.ts b/apps/directives-and-pipes/structural-directive/src/main.ts similarity index 100% rename from apps/angular/21-anchor-navigation/src/main.ts rename to apps/directives-and-pipes/structural-directive/src/main.ts diff --git a/apps/angular/5-crud-application/src/polyfills.ts b/apps/directives-and-pipes/structural-directive/src/polyfills.ts similarity index 100% rename from apps/angular/5-crud-application/src/polyfills.ts rename to apps/directives-and-pipes/structural-directive/src/polyfills.ts diff --git a/apps/angular/46-simple-animations/src/styles.scss b/apps/directives-and-pipes/structural-directive/src/styles.scss similarity index 100% rename from apps/angular/46-simple-animations/src/styles.scss rename to apps/directives-and-pipes/structural-directive/src/styles.scss diff --git a/apps/angular/52-lazy-load-component/tailwind.config.js b/apps/directives-and-pipes/structural-directive/tailwind.config.js similarity index 100% rename from apps/angular/52-lazy-load-component/tailwind.config.js rename to apps/directives-and-pipes/structural-directive/tailwind.config.js diff --git a/apps/angular/5-crud-application/tsconfig.app.json b/apps/directives-and-pipes/structural-directive/tsconfig.app.json similarity index 85% rename from apps/angular/5-crud-application/tsconfig.app.json rename to apps/directives-and-pipes/structural-directive/tsconfig.app.json index 2a1ca1b8d..d576a6fb8 100644 --- a/apps/angular/5-crud-application/tsconfig.app.json +++ b/apps/directives-and-pipes/structural-directive/tsconfig.app.json @@ -7,7 +7,8 @@ "useDefineForClassFields": false, "moduleResolution": "bundler" }, - "files": ["src/main.ts", "src/polyfills.ts"], + "files": [ + "src/main.ts", "src/polyfills.ts"], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] } diff --git a/apps/angular/5-crud-application/tsconfig.editor.json b/apps/directives-and-pipes/structural-directive/tsconfig.editor.json similarity index 100% rename from apps/angular/5-crud-application/tsconfig.editor.json rename to apps/directives-and-pipes/structural-directive/tsconfig.editor.json diff --git a/apps/angular/4-typed-context-outlet/tsconfig.json b/apps/directives-and-pipes/structural-directive/tsconfig.json similarity index 100% rename from apps/angular/4-typed-context-outlet/tsconfig.json rename to apps/directives-and-pipes/structural-directive/tsconfig.json diff --git a/apps/angular/57-content-projection-default/.eslintrc.json b/apps/directives-and-pipes/utility-wrapper-pipe/.eslintrc.json similarity index 100% rename from apps/angular/57-content-projection-default/.eslintrc.json rename to apps/directives-and-pipes/utility-wrapper-pipe/.eslintrc.json diff --git a/apps/angular/10-utility-wrapper-pipe/README.md b/apps/directives-and-pipes/utility-wrapper-pipe/README.md similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/README.md rename to apps/directives-and-pipes/utility-wrapper-pipe/README.md diff --git a/apps/angular/10-utility-wrapper-pipe/project.json b/apps/directives-and-pipes/utility-wrapper-pipe/project.json similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/project.json rename to apps/directives-and-pipes/utility-wrapper-pipe/project.json diff --git a/apps/angular/10-utility-wrapper-pipe/src/app/app.component.ts b/apps/directives-and-pipes/utility-wrapper-pipe/src/app/app.component.ts similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/src/app/app.component.ts rename to apps/directives-and-pipes/utility-wrapper-pipe/src/app/app.component.ts diff --git a/apps/angular/10-utility-wrapper-pipe/src/app/person.utils.ts b/apps/directives-and-pipes/utility-wrapper-pipe/src/app/person.utils.ts similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/src/app/person.utils.ts rename to apps/directives-and-pipes/utility-wrapper-pipe/src/app/person.utils.ts diff --git a/apps/angular/46-simple-animations/src/assets/.gitkeep b/apps/directives-and-pipes/utility-wrapper-pipe/src/assets/.gitkeep similarity index 100% rename from apps/angular/46-simple-animations/src/assets/.gitkeep rename to apps/directives-and-pipes/utility-wrapper-pipe/src/assets/.gitkeep diff --git a/apps/angular/46-simple-animations/src/favicon.ico b/apps/directives-and-pipes/utility-wrapper-pipe/src/favicon.ico similarity index 100% rename from apps/angular/46-simple-animations/src/favicon.ico rename to apps/directives-and-pipes/utility-wrapper-pipe/src/favicon.ico diff --git a/apps/angular/10-utility-wrapper-pipe/src/index.html b/apps/directives-and-pipes/utility-wrapper-pipe/src/index.html similarity index 100% rename from apps/angular/10-utility-wrapper-pipe/src/index.html rename to apps/directives-and-pipes/utility-wrapper-pipe/src/index.html diff --git a/apps/angular/4-typed-context-outlet/src/main.ts b/apps/directives-and-pipes/utility-wrapper-pipe/src/main.ts similarity index 100% rename from apps/angular/4-typed-context-outlet/src/main.ts rename to apps/directives-and-pipes/utility-wrapper-pipe/src/main.ts diff --git a/apps/angular/6-structural-directive/src/polyfills.ts b/apps/directives-and-pipes/utility-wrapper-pipe/src/polyfills.ts similarity index 100% rename from apps/angular/6-structural-directive/src/polyfills.ts rename to apps/directives-and-pipes/utility-wrapper-pipe/src/polyfills.ts diff --git a/apps/angular/22-router-input/src/styles.scss b/apps/directives-and-pipes/utility-wrapper-pipe/src/styles.scss similarity index 100% rename from apps/angular/22-router-input/src/styles.scss rename to apps/directives-and-pipes/utility-wrapper-pipe/src/styles.scss diff --git a/apps/angular/10-utility-wrapper-pipe/tsconfig.app.json b/apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.app.json similarity index 85% rename from apps/angular/10-utility-wrapper-pipe/tsconfig.app.json rename to apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.app.json index 2a1ca1b8d..d576a6fb8 100644 --- a/apps/angular/10-utility-wrapper-pipe/tsconfig.app.json +++ b/apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.app.json @@ -7,7 +7,8 @@ "useDefineForClassFields": false, "moduleResolution": "bundler" }, - "files": ["src/main.ts", "src/polyfills.ts"], + "files": [ + "src/main.ts", "src/polyfills.ts"], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] } diff --git a/apps/angular/6-structural-directive/tsconfig.editor.json b/apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.editor.json similarity index 100% rename from apps/angular/6-structural-directive/tsconfig.editor.json rename to apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.editor.json diff --git a/apps/angular/6-structural-directive/tsconfig.json b/apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.json similarity index 100% rename from apps/angular/6-structural-directive/tsconfig.json rename to apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.json diff --git a/apps/angular/58-content-projection-condition/.eslintrc.json b/apps/directives-and-pipes/wrap-function-pipe/.eslintrc.json similarity index 100% rename from apps/angular/58-content-projection-condition/.eslintrc.json rename to apps/directives-and-pipes/wrap-function-pipe/.eslintrc.json diff --git a/apps/angular/9-wrap-function-pipe/README.md b/apps/directives-and-pipes/wrap-function-pipe/README.md similarity index 100% rename from apps/angular/9-wrap-function-pipe/README.md rename to apps/directives-and-pipes/wrap-function-pipe/README.md diff --git a/apps/angular/9-wrap-function-pipe/project.json b/apps/directives-and-pipes/wrap-function-pipe/project.json similarity index 100% rename from apps/angular/9-wrap-function-pipe/project.json rename to apps/directives-and-pipes/wrap-function-pipe/project.json diff --git a/apps/angular/9-wrap-function-pipe/src/app/app.component.ts b/apps/directives-and-pipes/wrap-function-pipe/src/app/app.component.ts similarity index 100% rename from apps/angular/9-wrap-function-pipe/src/app/app.component.ts rename to apps/directives-and-pipes/wrap-function-pipe/src/app/app.component.ts diff --git a/apps/angular/5-crud-application/src/assets/.gitkeep b/apps/directives-and-pipes/wrap-function-pipe/src/assets/.gitkeep similarity index 100% rename from apps/angular/5-crud-application/src/assets/.gitkeep rename to apps/directives-and-pipes/wrap-function-pipe/src/assets/.gitkeep diff --git a/apps/angular/5-crud-application/src/favicon.ico b/apps/directives-and-pipes/wrap-function-pipe/src/favicon.ico similarity index 100% rename from apps/angular/5-crud-application/src/favicon.ico rename to apps/directives-and-pipes/wrap-function-pipe/src/favicon.ico diff --git a/apps/angular/9-wrap-function-pipe/src/index.html b/apps/directives-and-pipes/wrap-function-pipe/src/index.html similarity index 100% rename from apps/angular/9-wrap-function-pipe/src/index.html rename to apps/directives-and-pipes/wrap-function-pipe/src/index.html diff --git a/apps/angular/8-pure-pipe/src/main.ts b/apps/directives-and-pipes/wrap-function-pipe/src/main.ts similarity index 100% rename from apps/angular/8-pure-pipe/src/main.ts rename to apps/directives-and-pipes/wrap-function-pipe/src/main.ts diff --git a/apps/angular/8-pure-pipe/src/polyfills.ts b/apps/directives-and-pipes/wrap-function-pipe/src/polyfills.ts similarity index 100% rename from apps/angular/8-pure-pipe/src/polyfills.ts rename to apps/directives-and-pipes/wrap-function-pipe/src/polyfills.ts diff --git a/apps/angular/4-typed-context-outlet/src/styles.scss b/apps/directives-and-pipes/wrap-function-pipe/src/styles.scss similarity index 100% rename from apps/angular/4-typed-context-outlet/src/styles.scss rename to apps/directives-and-pipes/wrap-function-pipe/src/styles.scss diff --git a/apps/angular/4-typed-context-outlet/tsconfig.app.json b/apps/directives-and-pipes/wrap-function-pipe/tsconfig.app.json similarity index 85% rename from apps/angular/4-typed-context-outlet/tsconfig.app.json rename to apps/directives-and-pipes/wrap-function-pipe/tsconfig.app.json index 2a1ca1b8d..d576a6fb8 100644 --- a/apps/angular/4-typed-context-outlet/tsconfig.app.json +++ b/apps/directives-and-pipes/wrap-function-pipe/tsconfig.app.json @@ -7,7 +7,8 @@ "useDefineForClassFields": false, "moduleResolution": "bundler" }, - "files": ["src/main.ts", "src/polyfills.ts"], + "files": [ + "src/main.ts", "src/polyfills.ts"], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] } diff --git a/apps/angular/8-pure-pipe/tsconfig.editor.json b/apps/directives-and-pipes/wrap-function-pipe/tsconfig.editor.json similarity index 100% rename from apps/angular/8-pure-pipe/tsconfig.editor.json rename to apps/directives-and-pipes/wrap-function-pipe/tsconfig.editor.json diff --git a/apps/angular/8-pure-pipe/tsconfig.json b/apps/directives-and-pipes/wrap-function-pipe/tsconfig.json similarity index 100% rename from apps/angular/8-pure-pipe/tsconfig.json rename to apps/directives-and-pipes/wrap-function-pipe/tsconfig.json diff --git a/apps/forms/41-control-value-accessor/src/test-setup.ts b/apps/forms/41-control-value-accessor/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/forms/41-control-value-accessor/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/forms/41-control-value-accessor/tsconfig.app.json b/apps/forms/41-control-value-accessor/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/forms/41-control-value-accessor/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/forms/41-control-value-accessor/tsconfig.json b/apps/forms/41-control-value-accessor/tsconfig.json deleted file mode 100644 index 25ca437b4..000000000 --- a/apps/forms/41-control-value-accessor/tsconfig.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/forms/48-avoid-losing-form-data/tsconfig.app.json b/apps/forms/48-avoid-losing-form-data/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/forms/48-avoid-losing-form-data/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/angular/6-structural-directive/.eslintrc.json b/apps/forms/avoid-losing-form-data/.eslintrc.json similarity index 100% rename from apps/angular/6-structural-directive/.eslintrc.json rename to apps/forms/avoid-losing-form-data/.eslintrc.json diff --git a/apps/forms/48-avoid-losing-form-data/README.md b/apps/forms/avoid-losing-form-data/README.md similarity index 100% rename from apps/forms/48-avoid-losing-form-data/README.md rename to apps/forms/avoid-losing-form-data/README.md diff --git a/apps/forms/48-avoid-losing-form-data/project.json b/apps/forms/avoid-losing-form-data/project.json similarity index 100% rename from apps/forms/48-avoid-losing-form-data/project.json rename to apps/forms/avoid-losing-form-data/project.json diff --git a/apps/forms/48-avoid-losing-form-data/src/app/app.component.ts b/apps/forms/avoid-losing-form-data/src/app/app.component.ts similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/app/app.component.ts rename to apps/forms/avoid-losing-form-data/src/app/app.component.ts diff --git a/apps/forms/48-avoid-losing-form-data/src/app/app.config.ts b/apps/forms/avoid-losing-form-data/src/app/app.config.ts similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/app/app.config.ts rename to apps/forms/avoid-losing-form-data/src/app/app.config.ts diff --git a/apps/forms/48-avoid-losing-form-data/src/app/app.routes.ts b/apps/forms/avoid-losing-form-data/src/app/app.routes.ts similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/app/app.routes.ts rename to apps/forms/avoid-losing-form-data/src/app/app.routes.ts diff --git a/apps/forms/48-avoid-losing-form-data/src/app/pages/join.component.ts b/apps/forms/avoid-losing-form-data/src/app/pages/join.component.ts similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/app/pages/join.component.ts rename to apps/forms/avoid-losing-form-data/src/app/pages/join.component.ts diff --git a/apps/forms/48-avoid-losing-form-data/src/app/pages/page.component.ts b/apps/forms/avoid-losing-form-data/src/app/pages/page.component.ts similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/app/pages/page.component.ts rename to apps/forms/avoid-losing-form-data/src/app/pages/page.component.ts diff --git a/apps/forms/48-avoid-losing-form-data/src/app/ui/dialog.component.ts b/apps/forms/avoid-losing-form-data/src/app/ui/dialog.component.ts similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/app/ui/dialog.component.ts rename to apps/forms/avoid-losing-form-data/src/app/ui/dialog.component.ts diff --git a/apps/forms/48-avoid-losing-form-data/src/app/ui/form.component.ts b/apps/forms/avoid-losing-form-data/src/app/ui/form.component.ts similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/app/ui/form.component.ts rename to apps/forms/avoid-losing-form-data/src/app/ui/form.component.ts diff --git a/apps/forms/48-avoid-losing-form-data/src/app/ui/nav.component.ts b/apps/forms/avoid-losing-form-data/src/app/ui/nav.component.ts similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/app/ui/nav.component.ts rename to apps/forms/avoid-losing-form-data/src/app/ui/nav.component.ts diff --git a/apps/angular/52-lazy-load-component/src/assets/.gitkeep b/apps/forms/avoid-losing-form-data/src/assets/.gitkeep similarity index 100% rename from apps/angular/52-lazy-load-component/src/assets/.gitkeep rename to apps/forms/avoid-losing-form-data/src/assets/.gitkeep diff --git a/apps/angular/52-lazy-load-component/src/favicon.ico b/apps/forms/avoid-losing-form-data/src/favicon.ico similarity index 100% rename from apps/angular/52-lazy-load-component/src/favicon.ico rename to apps/forms/avoid-losing-form-data/src/favicon.ico diff --git a/apps/forms/48-avoid-losing-form-data/src/index.html b/apps/forms/avoid-losing-form-data/src/index.html similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/index.html rename to apps/forms/avoid-losing-form-data/src/index.html diff --git a/apps/angular/55-back-button-navigation/src/main.ts b/apps/forms/avoid-losing-form-data/src/main.ts similarity index 100% rename from apps/angular/55-back-button-navigation/src/main.ts rename to apps/forms/avoid-losing-form-data/src/main.ts diff --git a/apps/angular/52-lazy-load-component/src/styles.scss b/apps/forms/avoid-losing-form-data/src/styles.scss similarity index 100% rename from apps/angular/52-lazy-load-component/src/styles.scss rename to apps/forms/avoid-losing-form-data/src/styles.scss diff --git a/apps/forms/48-avoid-losing-form-data/tailwind.config.js b/apps/forms/avoid-losing-form-data/tailwind.config.js similarity index 100% rename from apps/forms/48-avoid-losing-form-data/tailwind.config.js rename to apps/forms/avoid-losing-form-data/tailwind.config.js diff --git a/apps/angular/13-highly-customizable-css/tsconfig.app.json b/apps/forms/avoid-losing-form-data/tsconfig.app.json similarity index 100% rename from apps/angular/13-highly-customizable-css/tsconfig.app.json rename to apps/forms/avoid-losing-form-data/tsconfig.app.json diff --git a/apps/angular/55-back-button-navigation/tsconfig.editor.json b/apps/forms/avoid-losing-form-data/tsconfig.editor.json similarity index 100% rename from apps/angular/55-back-button-navigation/tsconfig.editor.json rename to apps/forms/avoid-losing-form-data/tsconfig.editor.json diff --git a/apps/forms/48-avoid-losing-form-data/tsconfig.json b/apps/forms/avoid-losing-form-data/tsconfig.json similarity index 100% rename from apps/forms/48-avoid-losing-form-data/tsconfig.json rename to apps/forms/avoid-losing-form-data/tsconfig.json diff --git a/apps/angular/60-async-redirect/.eslintrc.json b/apps/forms/control-value-accessor/.eslintrc.json similarity index 100% rename from apps/angular/60-async-redirect/.eslintrc.json rename to apps/forms/control-value-accessor/.eslintrc.json diff --git a/apps/forms/41-control-value-accessor/README.md b/apps/forms/control-value-accessor/README.md similarity index 100% rename from apps/forms/41-control-value-accessor/README.md rename to apps/forms/control-value-accessor/README.md diff --git a/apps/forms/41-control-value-accessor/jest.config.ts b/apps/forms/control-value-accessor/jest.config.ts similarity index 100% rename from apps/forms/41-control-value-accessor/jest.config.ts rename to apps/forms/control-value-accessor/jest.config.ts diff --git a/apps/forms/41-control-value-accessor/project.json b/apps/forms/control-value-accessor/project.json similarity index 100% rename from apps/forms/41-control-value-accessor/project.json rename to apps/forms/control-value-accessor/project.json diff --git a/apps/forms/41-control-value-accessor/src/app/app.component.ts b/apps/forms/control-value-accessor/src/app/app.component.ts similarity index 100% rename from apps/forms/41-control-value-accessor/src/app/app.component.ts rename to apps/forms/control-value-accessor/src/app/app.component.ts diff --git a/apps/forms/41-control-value-accessor/src/app/feedback-form/feedback-form.component.html b/apps/forms/control-value-accessor/src/app/feedback-form/feedback-form.component.html similarity index 100% rename from apps/forms/41-control-value-accessor/src/app/feedback-form/feedback-form.component.html rename to apps/forms/control-value-accessor/src/app/feedback-form/feedback-form.component.html diff --git a/apps/forms/41-control-value-accessor/src/app/feedback-form/feedback-form.component.scss b/apps/forms/control-value-accessor/src/app/feedback-form/feedback-form.component.scss similarity index 100% rename from apps/forms/41-control-value-accessor/src/app/feedback-form/feedback-form.component.scss rename to apps/forms/control-value-accessor/src/app/feedback-form/feedback-form.component.scss diff --git a/apps/forms/41-control-value-accessor/src/app/feedback-form/feedback-form.component.ts b/apps/forms/control-value-accessor/src/app/feedback-form/feedback-form.component.ts similarity index 100% rename from apps/forms/41-control-value-accessor/src/app/feedback-form/feedback-form.component.ts rename to apps/forms/control-value-accessor/src/app/feedback-form/feedback-form.component.ts diff --git a/apps/forms/41-control-value-accessor/src/app/rating-control/rating-control.component.html b/apps/forms/control-value-accessor/src/app/rating-control/rating-control.component.html similarity index 100% rename from apps/forms/41-control-value-accessor/src/app/rating-control/rating-control.component.html rename to apps/forms/control-value-accessor/src/app/rating-control/rating-control.component.html diff --git a/apps/forms/41-control-value-accessor/src/app/rating-control/rating-control.component.scss b/apps/forms/control-value-accessor/src/app/rating-control/rating-control.component.scss similarity index 100% rename from apps/forms/41-control-value-accessor/src/app/rating-control/rating-control.component.scss rename to apps/forms/control-value-accessor/src/app/rating-control/rating-control.component.scss diff --git a/apps/forms/41-control-value-accessor/src/app/rating-control/rating-control.component.ts b/apps/forms/control-value-accessor/src/app/rating-control/rating-control.component.ts similarity index 100% rename from apps/forms/41-control-value-accessor/src/app/rating-control/rating-control.component.ts rename to apps/forms/control-value-accessor/src/app/rating-control/rating-control.component.ts diff --git a/apps/angular/6-structural-directive/src/assets/.gitkeep b/apps/forms/control-value-accessor/src/assets/.gitkeep similarity index 100% rename from apps/angular/6-structural-directive/src/assets/.gitkeep rename to apps/forms/control-value-accessor/src/assets/.gitkeep diff --git a/apps/angular/57-content-projection-default/public/favicon.ico b/apps/forms/control-value-accessor/src/favicon.ico similarity index 100% rename from apps/angular/57-content-projection-default/public/favicon.ico rename to apps/forms/control-value-accessor/src/favicon.ico diff --git a/apps/forms/41-control-value-accessor/src/index.html b/apps/forms/control-value-accessor/src/index.html similarity index 100% rename from apps/forms/41-control-value-accessor/src/index.html rename to apps/forms/control-value-accessor/src/index.html diff --git a/apps/angular/9-wrap-function-pipe/src/main.ts b/apps/forms/control-value-accessor/src/main.ts similarity index 100% rename from apps/angular/9-wrap-function-pipe/src/main.ts rename to apps/forms/control-value-accessor/src/main.ts diff --git a/apps/angular/57-content-projection-default/src/styles.scss b/apps/forms/control-value-accessor/src/styles.scss similarity index 100% rename from apps/angular/57-content-projection-default/src/styles.scss rename to apps/forms/control-value-accessor/src/styles.scss diff --git a/apps/angular/5-crud-application/src/test-setup.ts b/apps/forms/control-value-accessor/src/test-setup.ts similarity index 100% rename from apps/angular/5-crud-application/src/test-setup.ts rename to apps/forms/control-value-accessor/src/test-setup.ts diff --git a/apps/angular/55-back-button-navigation/tailwind.config.js b/apps/forms/control-value-accessor/tailwind.config.js similarity index 100% rename from apps/angular/55-back-button-navigation/tailwind.config.js rename to apps/forms/control-value-accessor/tailwind.config.js diff --git a/apps/angular/16-master-dependency-injection/tsconfig.app.json b/apps/forms/control-value-accessor/tsconfig.app.json similarity index 100% rename from apps/angular/16-master-dependency-injection/tsconfig.app.json rename to apps/forms/control-value-accessor/tsconfig.app.json diff --git a/apps/angular/45-react-in-angular/tsconfig.editor.json b/apps/forms/control-value-accessor/tsconfig.editor.json similarity index 100% rename from apps/angular/45-react-in-angular/tsconfig.editor.json rename to apps/forms/control-value-accessor/tsconfig.editor.json diff --git a/apps/angular/46-simple-animations/tsconfig.json b/apps/forms/control-value-accessor/tsconfig.json similarity index 100% rename from apps/angular/46-simple-animations/tsconfig.json rename to apps/forms/control-value-accessor/tsconfig.json diff --git a/apps/angular/39-injection-token/tsconfig.spec.json b/apps/forms/control-value-accessor/tsconfig.spec.json similarity index 100% rename from apps/angular/39-injection-token/tsconfig.spec.json rename to apps/forms/control-value-accessor/tsconfig.spec.json diff --git a/apps/nx/42-static-vs-dynamic-import/README.md b/apps/nx/42-static-vs-dynamic-import/README.md deleted file mode 100644 index a08abaa82..000000000 --- a/apps/nx/42-static-vs-dynamic-import/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Static vs Dynamic Import - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve nx-static-vs-dynamic-import -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/nx/42-static-dynamic-import/). diff --git a/apps/nx/42-static-vs-dynamic-import/project.json b/apps/nx/42-static-vs-dynamic-import/project.json deleted file mode 100644 index 68332bbc6..000000000 --- a/apps/nx/42-static-vs-dynamic-import/project.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "nx-static-vs-dynamic-import", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/nx/42-static-vs-dynamic-import/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/nx/42-static-vs-dynamic-import", - "index": "apps/nx/42-static-vs-dynamic-import/src/index.html", - "browser": "apps/nx/42-static-vs-dynamic-import/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/nx/42-static-vs-dynamic-import/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/nx/42-static-vs-dynamic-import/src/favicon.ico", - "apps/nx/42-static-vs-dynamic-import/src/assets" - ], - "styles": [ - "apps/nx/42-static-vs-dynamic-import/src/styles.scss", - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all", - "sourceMap": true - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "nx-static-vs-dynamic-import:build:production" - }, - "development": { - "buildTarget": "nx-static-vs-dynamic-import:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "nx-static-vs-dynamic-import:build" - } - } - } -} diff --git a/apps/nx/42-static-vs-dynamic-import/src/app/app.component.ts b/apps/nx/42-static-vs-dynamic-import/src/app/app.component.ts deleted file mode 100644 index 59be617e8..000000000 --- a/apps/nx/42-static-vs-dynamic-import/src/app/app.component.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { - UserComponent, - type User, -} from '@angular-challenges/static-dynamic-import/users'; -import { Component } from '@angular/core'; -import { RouterOutlet } from '@angular/router'; - -@Component({ - imports: [UserComponent, RouterOutlet], - selector: 'app-root', - template: ` - Author: - - - `, - host: { - class: 'flex flex-col', - }, -}) -export class AppComponent { - author: User = { - name: 'Thomas', - lastName: 'Laforge', - country: 'France', - }; -} diff --git a/apps/nx/42-static-vs-dynamic-import/src/app/app.config.ts b/apps/nx/42-static-vs-dynamic-import/src/app/app.config.ts deleted file mode 100644 index 6525263a3..000000000 --- a/apps/nx/42-static-vs-dynamic-import/src/app/app.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ApplicationConfig } from '@angular/core'; -import { provideAnimations } from '@angular/platform-browser/animations'; -import { provideRouter } from '@angular/router'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideAnimations(), - provideRouter([ - { - path: '', - loadComponent: () => - import('@angular-challenges/static-dynamic-import/users'), - }, - ]), - ], -}; diff --git a/apps/nx/42-static-vs-dynamic-import/src/index.html b/apps/nx/42-static-vs-dynamic-import/src/index.html deleted file mode 100644 index 1b4f2a84b..000000000 --- a/apps/nx/42-static-vs-dynamic-import/src/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - nx-static-vs-dynamic-import - - - - - - - - - diff --git a/apps/nx/42-static-vs-dynamic-import/tsconfig.app.json b/apps/nx/42-static-vs-dynamic-import/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/nx/42-static-vs-dynamic-import/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/performance/12-optimize-change-detection/src/styles.scss b/apps/performance/12-optimize-change-detection/src/styles.scss deleted file mode 100644 index 90d4ee007..000000000 --- a/apps/performance/12-optimize-change-detection/src/styles.scss +++ /dev/null @@ -1 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/performance/12-optimize-change-detection/tsconfig.app.json b/apps/performance/12-optimize-change-detection/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/performance/12-optimize-change-detection/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/performance/34-default-vs-onpush/tsconfig.app.json b/apps/performance/34-default-vs-onpush/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/performance/34-default-vs-onpush/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/performance/34-default-vs-onpush/tsconfig.json b/apps/performance/34-default-vs-onpush/tsconfig.json deleted file mode 100644 index 51c7908c5..000000000 --- a/apps/performance/34-default-vs-onpush/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/performance/35-memoization/src/styles.scss b/apps/performance/35-memoization/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/performance/35-memoization/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/performance/35-memoization/tsconfig.app.json b/apps/performance/35-memoization/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/performance/35-memoization/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/performance/35-memoization/tsconfig.editor.json b/apps/performance/35-memoization/tsconfig.editor.json deleted file mode 100644 index 4ee639340..000000000 --- a/apps/performance/35-memoization/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": [] - } -} diff --git a/apps/performance/35-memoization/tsconfig.json b/apps/performance/35-memoization/tsconfig.json deleted file mode 100644 index 51c7908c5..000000000 --- a/apps/performance/35-memoization/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/performance/36-ngfor-optimization/.eslintrc.json b/apps/performance/36-ngfor-optimization/.eslintrc.json deleted file mode 100644 index bf8df1428..000000000 --- a/apps/performance/36-ngfor-optimization/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/performance/36-ngfor-optimization/src/main.ts b/apps/performance/36-ngfor-optimization/src/main.ts deleted file mode 100644 index f3a7223da..000000000 --- a/apps/performance/36-ngfor-optimization/src/main.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; -import { appConfig } from './app/app.config'; - -bootstrapApplication(AppComponent, appConfig).catch((err) => - console.error(err), -); diff --git a/apps/performance/36-ngfor-optimization/src/styles.scss b/apps/performance/36-ngfor-optimization/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/performance/36-ngfor-optimization/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/performance/36-ngfor-optimization/src/test-setup.ts b/apps/performance/36-ngfor-optimization/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/performance/36-ngfor-optimization/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/performance/36-ngfor-optimization/tailwind.config.js b/apps/performance/36-ngfor-optimization/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/performance/36-ngfor-optimization/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/performance/36-ngfor-optimization/tsconfig.app.json b/apps/performance/36-ngfor-optimization/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/performance/36-ngfor-optimization/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/performance/36-ngfor-optimization/tsconfig.editor.json b/apps/performance/36-ngfor-optimization/tsconfig.editor.json deleted file mode 100644 index 8ae117d96..000000000 --- a/apps/performance/36-ngfor-optimization/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": ["jest", "node"] - } -} diff --git a/apps/performance/36-ngfor-optimization/tsconfig.json b/apps/performance/36-ngfor-optimization/tsconfig.json deleted file mode 100644 index e85865cf5..000000000 --- a/apps/performance/36-ngfor-optimization/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/performance/36-ngfor-optimization/tsconfig.spec.json b/apps/performance/36-ngfor-optimization/tsconfig.spec.json deleted file mode 100644 index 1a4817a7d..000000000 --- a/apps/performance/36-ngfor-optimization/tsconfig.spec.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/performance/37-optimize-big-list/.eslintrc.json b/apps/performance/37-optimize-big-list/.eslintrc.json deleted file mode 100644 index bf8df1428..000000000 --- a/apps/performance/37-optimize-big-list/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/performance/37-optimize-big-list/README.md b/apps/performance/37-optimize-big-list/README.md deleted file mode 100644 index 1d8e134c2..000000000 --- a/apps/performance/37-optimize-big-list/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# NgFor optimize big list - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve performance-optimize-big-list -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/performance/37-ngfor-biglist/). diff --git a/apps/performance/37-optimize-big-list/project.json b/apps/performance/37-optimize-big-list/project.json deleted file mode 100644 index 3ecb24d36..000000000 --- a/apps/performance/37-optimize-big-list/project.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "performance-optimize-big-list", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/performance/37-optimize-big-list/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/performance/37-optimize-big-list", - "index": "apps/performance/37-optimize-big-list/src/index.html", - "main": "apps/performance/37-optimize-big-list/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/performance/37-optimize-big-list/tsconfig.app.json", - "assets": [ - "apps/performance/37-optimize-big-list/src/favicon.ico", - "apps/performance/37-optimize-big-list/src/assets" - ], - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", - "apps/performance/37-optimize-big-list/src/styles.scss" - ], - "scripts": [], - "allowedCommonJsDependencies": ["seedrandom"] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "performance-optimize-big-list:build:production" - }, - "development": { - "buildTarget": "performance-optimize-big-list:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "performance-optimize-big-list:build" - } - } - } -} diff --git a/apps/performance/37-optimize-big-list/src/app/app.component.ts b/apps/performance/37-optimize-big-list/src/app/app.component.ts deleted file mode 100644 index a5f121b22..000000000 --- a/apps/performance/37-optimize-big-list/src/app/app.component.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Component, signal } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; -import { generateList } from './generateList'; -import { PersonService } from './list.service'; -import { PersonListComponent } from './person-list.component'; - -@Component({ - imports: [ - PersonListComponent, - FormsModule, - MatFormFieldModule, - MatInputModule, - ], - providers: [PersonService], - selector: 'app-root', - template: ` - - - @if (loadList()) { - - } - `, - host: { - class: 'flex items-center flex-col gap-5', - }, -}) -export class AppComponent { - readonly persons = signal(generateList()); - readonly loadList = signal(false); - - label = ''; -} diff --git a/apps/performance/37-optimize-big-list/src/app/app.config.ts b/apps/performance/37-optimize-big-list/src/app/app.config.ts deleted file mode 100644 index 59198e627..000000000 --- a/apps/performance/37-optimize-big-list/src/app/app.config.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ApplicationConfig } from '@angular/core'; -import { provideAnimations } from '@angular/platform-browser/animations'; - -export const appConfig: ApplicationConfig = { - providers: [provideAnimations()], -}; diff --git a/apps/performance/37-optimize-big-list/src/app/generateList.ts b/apps/performance/37-optimize-big-list/src/app/generateList.ts deleted file mode 100644 index 96bfb3722..000000000 --- a/apps/performance/37-optimize-big-list/src/app/generateList.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { randEmail, randFirstName } from '@ngneat/falso'; -import { Person } from './person.model'; - -export function generateList() { - const arr: Person[] = []; - - for (let i = 0; i < 100000; i++) { - arr.push({ - email: randEmail(), - name: randFirstName(), - }); - } - - return arr; -} diff --git a/apps/performance/37-optimize-big-list/src/app/list.service.ts b/apps/performance/37-optimize-big-list/src/app/list.service.ts deleted file mode 100644 index 9a54824d1..000000000 --- a/apps/performance/37-optimize-big-list/src/app/list.service.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Injectable, inject, signal } from '@angular/core'; -import { randEmail, randFirstName } from '@ngneat/falso'; -import { generateList } from './generateList'; -import { Person } from './person.model'; - -@Injectable() -export class PersonService { - private readonly fakeBackend = inject(FakeBackendService); - readonly persons = signal([]); - - loadPersons() { - this.persons.set(generateList()); - } - - deletePerson(email: string) { - this.persons.set( - this.fakeBackend - .returnNewList(this.persons()) - .filter((p) => p.email !== email), - ); - } - - updatePerson(email: string) { - this.persons.set( - this.fakeBackend - .returnNewList(this.persons()) - .map((p) => (p.email === email ? { email, name: randFirstName() } : p)), - ); - } - - addPerson(name: string) { - this.persons.set([ - { email: randEmail(), name }, - ...this.fakeBackend.returnNewList(this.persons()), - ]); - } -} - -@Injectable({ providedIn: 'root' }) -export class FakeBackendService { - returnNewList = (input: Person[]): Person[] => [ - ...input.map((i) => ({ ...i })), - ]; -} diff --git a/apps/performance/37-optimize-big-list/src/app/person-list.component.ts b/apps/performance/37-optimize-big-list/src/app/person-list.component.ts deleted file mode 100644 index 049630476..000000000 --- a/apps/performance/37-optimize-big-list/src/app/person-list.component.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ChangeDetectionStrategy, Component, input } from '@angular/core'; -import { Person } from './person.model'; - -@Component({ - selector: 'app-person-list', - template: ` -
-
- @for (person of persons(); track person.email) { -
-

{{ person.name }}

-

{{ person.email }}

-
- } -
-
- `, - host: { - class: 'w-full flex flex-col', - }, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class PersonListComponent { - persons = input(); -} diff --git a/apps/performance/37-optimize-big-list/src/app/person.model.ts b/apps/performance/37-optimize-big-list/src/app/person.model.ts deleted file mode 100644 index 0ccffbbf9..000000000 --- a/apps/performance/37-optimize-big-list/src/app/person.model.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface Person { - email: string; - name: string; -} diff --git a/apps/performance/37-optimize-big-list/src/favicon.ico b/apps/performance/37-optimize-big-list/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - performance-optimize-big-list - - - - - - - - diff --git a/apps/performance/37-optimize-big-list/src/main.ts b/apps/performance/37-optimize-big-list/src/main.ts deleted file mode 100644 index f3a7223da..000000000 --- a/apps/performance/37-optimize-big-list/src/main.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; -import { appConfig } from './app/app.config'; - -bootstrapApplication(AppComponent, appConfig).catch((err) => - console.error(err), -); diff --git a/apps/performance/37-optimize-big-list/src/styles.scss b/apps/performance/37-optimize-big-list/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/performance/37-optimize-big-list/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/performance/37-optimize-big-list/tailwind.config.js b/apps/performance/37-optimize-big-list/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/performance/37-optimize-big-list/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/performance/37-optimize-big-list/tsconfig.app.json b/apps/performance/37-optimize-big-list/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/performance/37-optimize-big-list/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/performance/37-optimize-big-list/tsconfig.editor.json b/apps/performance/37-optimize-big-list/tsconfig.editor.json deleted file mode 100644 index 4ee639340..000000000 --- a/apps/performance/37-optimize-big-list/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": [] - } -} diff --git a/apps/performance/37-optimize-big-list/tsconfig.json b/apps/performance/37-optimize-big-list/tsconfig.json deleted file mode 100644 index 51c7908c5..000000000 --- a/apps/performance/37-optimize-big-list/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/performance/40-web-workers/README.md b/apps/performance/40-web-workers/README.md deleted file mode 100644 index 067777a8f..000000000 --- a/apps/performance/40-web-workers/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Web workers - -> Author: Thomas Laforge - -### Run Application - -```bash -npx nx serve performance-web-workers -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/performance/40-christmas-web-worker/). diff --git a/apps/performance/40-web-workers/project.json b/apps/performance/40-web-workers/project.json deleted file mode 100644 index 99cb6756a..000000000 --- a/apps/performance/40-web-workers/project.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "performance-web-workers", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/performance/40-web-workers/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/performance/40-web-workers", - "index": "apps/performance/40-web-workers/src/index.html", - "browser": "apps/performance/40-web-workers/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/performance/40-web-workers/tsconfig.app.json", - "assets": [ - "apps/performance/40-web-workers/src/favicon.ico", - "apps/performance/40-web-workers/src/assets" - ], - "styles": ["apps/performance/40-web-workers/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "performance-web-workers:build:production" - }, - "development": { - "buildTarget": "performance-web-workers:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "performance-web-workers:build" - } - } - } -} diff --git a/apps/performance/40-web-workers/src/app/app.component.ts b/apps/performance/40-web-workers/src/app/app.component.ts deleted file mode 100644 index da63f1012..000000000 --- a/apps/performance/40-web-workers/src/app/app.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component, inject } from '@angular/core'; -import { HeavyCalculationService } from './heavy-calculation.service'; -import { UnknownPersonComponent } from './unknown-person/unknown-person.component'; - -@Component({ - imports: [UnknownPersonComponent], - providers: [HeavyCalculationService], - selector: 'app-root', - template: ` - - -
Progress: {{ loadingPercentage() }}%
- `, - host: { - class: `flex flex-col h-screen w-screen bg-[#1f75c0]`, - }, -}) -export class AppComponent { - private heavyCalculationService = inject(HeavyCalculationService); - - readonly loadingPercentage = this.heavyCalculationService.loadingPercentage; - - discover() { - this.heavyCalculationService.startLoading(); - } -} diff --git a/apps/performance/40-web-workers/src/app/heavy-calculation.service.ts b/apps/performance/40-web-workers/src/app/heavy-calculation.service.ts deleted file mode 100644 index 06dedd1a6..000000000 --- a/apps/performance/40-web-workers/src/app/heavy-calculation.service.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Injectable, computed, signal } from '@angular/core'; - -@Injectable() -export class HeavyCalculationService { - private finalLength = 664579; - private loadingLength = signal(0); - - loadingPercentage = computed( - () => (this.loadingLength() * 100) / this.finalLength, - ); - - startLoading() { - this.randomHeavyCalculationFunction(); - } - - private randomHeavyCalculationFunction() { - for (let num = 2; num <= 10000000; num++) { - let randomFlag = true; - for (let i = 2; i <= Math.sqrt(num); i++) { - if (num % i === 0) { - randomFlag = false; - break; - } - } - if (randomFlag) { - this.loadingLength.update((l) => l + 1); - } - } - } -} diff --git a/apps/performance/40-web-workers/src/app/unknown-person/unknown-person.component.css b/apps/performance/40-web-workers/src/app/unknown-person/unknown-person.component.css deleted file mode 100644 index edc1f75ad..000000000 --- a/apps/performance/40-web-workers/src/app/unknown-person/unknown-person.component.css +++ /dev/null @@ -1,225 +0,0 @@ -*, -*:before, -*:after { - padding: 0; - margin: 0; - box-sizing: border-box; -} -body { - background-color: #fff2c8; -} -.container { - width: 380px; - height: 500px; - position: absolute; - transform: translate(-50%, -50%); - top: 50%; - left: 50%; -} -.container *:before, -.container *:after { - position: absolute; - content: ''; -} -.santa { - height: 220px; - width: 200px; - background-color: #e84701; - border-radius: 80px; - position: absolute; - left: 115px; - top: 200px; -} -.santa:before, -.santa:after { - width: 40px; - margin: auto; - left: 0; - right: 0; - background-color: #fff2c8; -} -.santa:before { - height: 130px; -} -.santa:after { - height: 40px; - bottom: -15px; -} -.hand-l { - background-color: #e84701; - height: 90px; - width: 105px; - position: absolute; - right: -30px; - top: 20px; - border-radius: 0 80px 0 0; -} -.hand-l:before { - margin: auto; - width: 35px; - height: 15px; - background-color: #ffffff; - top: 85px; - left: 71px; -} -.hand-l:after { - height: 15px; - width: 30px; - background-color: #fad2af; - left: 74px; - top: 101px; - border-radius: 0 0 30px 30px; -} -.hand-r { - height: 150px; - width: 180px; - border: 30px solid transparent; - border-bottom: 40px solid #e84701; - position: absolute; - left: -100px; - bottom: 150px; - border-radius: 50%; - animation: wave 1.5s infinite; - transform-origin: right; -} -@keyframes wave { - 50% { - transform: rotate(15deg); - } -} -.hand-r:before { - width: 35px; - height: 15px; - background-color: #ffffff; - transform: rotate(-50deg); - top: 68px; - left: -22px; -} -.hand-r:after { - width: 30px; - height: 15px; - background-color: #fad2af; - transform: rotate(-50deg); - left: -31px; - top: 58px; - border-radius: 15px 15px 0 0; -} -.face { - position: absolute; - margin: auto; - height: 180px; - width: 180px; - background-color: #fad2af; - border: 25px solid #f2e6da; - border-radius: 50%; - left: 0; - right: 0; - bottom: 140px; -} -.beard { - position: absolute; - height: 90px; - width: 180px; - background-color: #ffffff; - border-radius: 0 0 90px 90px; - right: -25px; - bottom: -25px; -} -.beard:before { - width: 55px; - height: 25px; - background-color: #f2e6da; - border-radius: 20px 0; - left: 34px; -} -.beard:after { - height: 25px; - width: 55px; - background-color: #f2e6da; - border-radius: 0 20px; - right: 34px; -} -.eyes { - height: 12px; - width: 12px; - background-color: #0078ca; - border-radius: 50%; - position: absolute; - top: 40px; - left: 40px; - box-shadow: - 38px 0 #0078ca, - 19px 20px #f69697; -} -.eyes:before { - height: 12px; - width: 25px; - background-color: #ffffff; - border-radius: 10px 0; - left: -10px; - bottom: 20px; -} -.eyes:after { - height: 12px; - width: 25px; - background-color: #ffffff; - border-radius: 0 10px; - left: 32px; - bottom: 20px; -} -.hat { - position: absolute; - height: 60px; - width: 120px; - background-color: #e84701; - top: -98px; - left: 85px; - border-radius: 0 0 60px 60px; -} -.hat:before { - height: 40px; - width: 40px; - background-color: #ffffff; - left: 100px; - top: -15px; - border-radius: 50%; -} -.belt { - position: absolute; - width: 100%; - height: 30px; - background-color: #000000; - top: 100px; -} -.belt:before { - height: 100%; - width: 40px; - border: 7px solid #ffdc2e; - margin: auto; - left: 0; - right: 0; -} -.belt:after { - height: 5px; - width: 15px; - background-color: #ffdc2e; - left: 100px; - top: 12px; -} -.shoe { - height: 20px; - width: 20px; - background-color: #000000; - position: absolute; - top: 220px; - left: 60px; - border-radius: 20px 0 0 0; -} -.shoe:before { - height: 20px; - width: 20px; - background-color: #000000; - top: 0; - left: 60px; - border-radius: 0 20px 0 0; -} diff --git a/apps/performance/40-web-workers/src/app/unknown-person/unknown-person.component.ts b/apps/performance/40-web-workers/src/app/unknown-person/unknown-person.component.ts deleted file mode 100644 index 5a0d4bd96..000000000 --- a/apps/performance/40-web-workers/src/app/unknown-person/unknown-person.component.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Component, input } from '@angular/core'; - -@Component({ - selector: 'unknown-person', - template: ` -
- @if (step() !== 100) { -
- Who is here? -
- } -
-
Happy Christmas !!!
-
-
-
-
-
-
-
-
-
-
-
-
-
- `, - styleUrls: [`unknown-person.component.css`], -}) -export class UnknownPersonComponent { - step = input.required(); -} diff --git a/apps/performance/40-web-workers/src/favicon.ico b/apps/performance/40-web-workers/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - performance-web-worker - - - - - - - - diff --git a/apps/performance/40-web-workers/src/main.ts b/apps/performance/40-web-workers/src/main.ts deleted file mode 100644 index 31c5da482..000000000 --- a/apps/performance/40-web-workers/src/main.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; - -bootstrapApplication(AppComponent).catch((err) => console.error(err)); diff --git a/apps/performance/40-web-workers/src/styles.scss b/apps/performance/40-web-workers/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/performance/40-web-workers/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/performance/40-web-workers/tailwind.config.js b/apps/performance/40-web-workers/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/performance/40-web-workers/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/performance/40-web-workers/tsconfig.app.json b/apps/performance/40-web-workers/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/performance/40-web-workers/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/performance/40-web-workers/tsconfig.editor.json b/apps/performance/40-web-workers/tsconfig.editor.json deleted file mode 100644 index 4ee639340..000000000 --- a/apps/performance/40-web-workers/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": [] - } -} diff --git a/apps/performance/40-web-workers/tsconfig.json b/apps/performance/40-web-workers/tsconfig.json deleted file mode 100644 index 51c7908c5..000000000 --- a/apps/performance/40-web-workers/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/angular/32-change-detection-bug/.eslintrc.json b/apps/routing/anchor-navigation/.eslintrc.json similarity index 100% rename from apps/angular/32-change-detection-bug/.eslintrc.json rename to apps/routing/anchor-navigation/.eslintrc.json diff --git a/apps/angular/21-anchor-navigation/README.md b/apps/routing/anchor-navigation/README.md similarity index 100% rename from apps/angular/21-anchor-navigation/README.md rename to apps/routing/anchor-navigation/README.md diff --git a/apps/angular/21-anchor-navigation/jest.config.ts b/apps/routing/anchor-navigation/jest.config.ts similarity index 100% rename from apps/angular/21-anchor-navigation/jest.config.ts rename to apps/routing/anchor-navigation/jest.config.ts diff --git a/apps/angular/21-anchor-navigation/project.json b/apps/routing/anchor-navigation/project.json similarity index 100% rename from apps/angular/21-anchor-navigation/project.json rename to apps/routing/anchor-navigation/project.json diff --git a/apps/angular/21-anchor-navigation/src/app/app.component.ts b/apps/routing/anchor-navigation/src/app/app.component.ts similarity index 100% rename from apps/angular/21-anchor-navigation/src/app/app.component.ts rename to apps/routing/anchor-navigation/src/app/app.component.ts diff --git a/apps/angular/21-anchor-navigation/src/app/app.config.ts b/apps/routing/anchor-navigation/src/app/app.config.ts similarity index 100% rename from apps/angular/21-anchor-navigation/src/app/app.config.ts rename to apps/routing/anchor-navigation/src/app/app.config.ts diff --git a/apps/angular/21-anchor-navigation/src/app/app.routes.ts b/apps/routing/anchor-navigation/src/app/app.routes.ts similarity index 100% rename from apps/angular/21-anchor-navigation/src/app/app.routes.ts rename to apps/routing/anchor-navigation/src/app/app.routes.ts diff --git a/apps/angular/21-anchor-navigation/src/app/foo.component.ts b/apps/routing/anchor-navigation/src/app/foo.component.ts similarity index 100% rename from apps/angular/21-anchor-navigation/src/app/foo.component.ts rename to apps/routing/anchor-navigation/src/app/foo.component.ts diff --git a/apps/angular/21-anchor-navigation/src/app/home.component.ts b/apps/routing/anchor-navigation/src/app/home.component.ts similarity index 100% rename from apps/angular/21-anchor-navigation/src/app/home.component.ts rename to apps/routing/anchor-navigation/src/app/home.component.ts diff --git a/apps/angular/21-anchor-navigation/src/app/nav-button.component.ts b/apps/routing/anchor-navigation/src/app/nav-button.component.ts similarity index 100% rename from apps/angular/21-anchor-navigation/src/app/nav-button.component.ts rename to apps/routing/anchor-navigation/src/app/nav-button.component.ts diff --git a/apps/angular/8-pure-pipe/src/assets/.gitkeep b/apps/routing/anchor-navigation/src/assets/.gitkeep similarity index 100% rename from apps/angular/8-pure-pipe/src/assets/.gitkeep rename to apps/routing/anchor-navigation/src/assets/.gitkeep diff --git a/apps/angular/58-content-projection-condition/public/favicon.ico b/apps/routing/anchor-navigation/src/favicon.ico similarity index 100% rename from apps/angular/58-content-projection-condition/public/favicon.ico rename to apps/routing/anchor-navigation/src/favicon.ico diff --git a/apps/angular/21-anchor-navigation/src/index.html b/apps/routing/anchor-navigation/src/index.html similarity index 100% rename from apps/angular/21-anchor-navigation/src/index.html rename to apps/routing/anchor-navigation/src/index.html diff --git a/apps/angular/6-structural-directive/src/main.ts b/apps/routing/anchor-navigation/src/main.ts similarity index 100% rename from apps/angular/6-structural-directive/src/main.ts rename to apps/routing/anchor-navigation/src/main.ts diff --git a/apps/angular/58-content-projection-condition/src/styles.scss b/apps/routing/anchor-navigation/src/styles.scss similarity index 100% rename from apps/angular/58-content-projection-condition/src/styles.scss rename to apps/routing/anchor-navigation/src/styles.scss diff --git a/apps/performance/12-optimize-change-detection/src/test-setup.ts b/apps/routing/anchor-navigation/src/test-setup.ts similarity index 100% rename from apps/performance/12-optimize-change-detection/src/test-setup.ts rename to apps/routing/anchor-navigation/src/test-setup.ts diff --git a/apps/angular/57-content-projection-default/tailwind.config.js b/apps/routing/anchor-navigation/tailwind.config.js similarity index 100% rename from apps/angular/57-content-projection-default/tailwind.config.js rename to apps/routing/anchor-navigation/tailwind.config.js diff --git a/apps/routing/anchor-navigation/tsconfig.app.json b/apps/routing/anchor-navigation/tsconfig.app.json new file mode 100644 index 000000000..3bb4877ea --- /dev/null +++ b/apps/routing/anchor-navigation/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": [ + "src/main.ts" + ], + "include": ["src/**/*.d.ts"], + "exclude": [ + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/angular/46-simple-animations/tsconfig.editor.json b/apps/routing/anchor-navigation/tsconfig.editor.json similarity index 100% rename from apps/angular/46-simple-animations/tsconfig.editor.json rename to apps/routing/anchor-navigation/tsconfig.editor.json diff --git a/apps/angular/39-injection-token/tsconfig.json b/apps/routing/anchor-navigation/tsconfig.json similarity index 100% rename from apps/angular/39-injection-token/tsconfig.json rename to apps/routing/anchor-navigation/tsconfig.json diff --git a/apps/rxjs/14-race-condition/tsconfig.spec.json b/apps/routing/anchor-navigation/tsconfig.spec.json similarity index 78% rename from apps/rxjs/14-race-condition/tsconfig.spec.json rename to apps/routing/anchor-navigation/tsconfig.spec.json index ca14cc622..173fe9a7d 100644 --- a/apps/rxjs/14-race-condition/tsconfig.spec.json +++ b/apps/routing/anchor-navigation/tsconfig.spec.json @@ -5,9 +5,11 @@ "module": "commonjs", "types": ["jest", "node"] }, - "files": ["src/test-setup.ts"], + "files": [ + "src/test-setup.ts" + ], "include": [ - "jest.config.ts", + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts" diff --git a/apps/angular/8-pure-pipe/.eslintrc.json b/apps/routing/async-redirect/.eslintrc.json similarity index 100% rename from apps/angular/8-pure-pipe/.eslintrc.json rename to apps/routing/async-redirect/.eslintrc.json diff --git a/apps/angular/60-async-redirect/README.md b/apps/routing/async-redirect/README.md similarity index 100% rename from apps/angular/60-async-redirect/README.md rename to apps/routing/async-redirect/README.md diff --git a/apps/angular/60-async-redirect/project.json b/apps/routing/async-redirect/project.json similarity index 100% rename from apps/angular/60-async-redirect/project.json rename to apps/routing/async-redirect/project.json diff --git a/apps/angular/59-content-projection-defer/public/favicon.ico b/apps/routing/async-redirect/public/favicon.ico similarity index 100% rename from apps/angular/59-content-projection-defer/public/favicon.ico rename to apps/routing/async-redirect/public/favicon.ico diff --git a/apps/angular/60-async-redirect/src/app/admin-page.ts b/apps/routing/async-redirect/src/app/admin-page.ts similarity index 100% rename from apps/angular/60-async-redirect/src/app/admin-page.ts rename to apps/routing/async-redirect/src/app/admin-page.ts diff --git a/apps/angular/60-async-redirect/src/app/app.config.ts b/apps/routing/async-redirect/src/app/app.config.ts similarity index 100% rename from apps/angular/60-async-redirect/src/app/app.config.ts rename to apps/routing/async-redirect/src/app/app.config.ts diff --git a/apps/angular/60-async-redirect/src/app/app.ts b/apps/routing/async-redirect/src/app/app.ts similarity index 100% rename from apps/angular/60-async-redirect/src/app/app.ts rename to apps/routing/async-redirect/src/app/app.ts diff --git a/apps/angular/60-async-redirect/src/app/dashboard.ts b/apps/routing/async-redirect/src/app/dashboard.ts similarity index 100% rename from apps/angular/60-async-redirect/src/app/dashboard.ts rename to apps/routing/async-redirect/src/app/dashboard.ts diff --git a/apps/angular/60-async-redirect/src/app/profile-page.ts b/apps/routing/async-redirect/src/app/profile-page.ts similarity index 100% rename from apps/angular/60-async-redirect/src/app/profile-page.ts rename to apps/routing/async-redirect/src/app/profile-page.ts diff --git a/apps/angular/60-async-redirect/src/app/routes.ts b/apps/routing/async-redirect/src/app/routes.ts similarity index 100% rename from apps/angular/60-async-redirect/src/app/routes.ts rename to apps/routing/async-redirect/src/app/routes.ts diff --git a/apps/angular/60-async-redirect/src/app/user-page.ts b/apps/routing/async-redirect/src/app/user-page.ts similarity index 100% rename from apps/angular/60-async-redirect/src/app/user-page.ts rename to apps/routing/async-redirect/src/app/user-page.ts diff --git a/apps/angular/60-async-redirect/src/app/user-profile.service.ts b/apps/routing/async-redirect/src/app/user-profile.service.ts similarity index 100% rename from apps/angular/60-async-redirect/src/app/user-profile.service.ts rename to apps/routing/async-redirect/src/app/user-profile.service.ts diff --git a/apps/angular/60-async-redirect/src/index.html b/apps/routing/async-redirect/src/index.html similarity index 100% rename from apps/angular/60-async-redirect/src/index.html rename to apps/routing/async-redirect/src/index.html diff --git a/apps/angular/60-async-redirect/src/main.ts b/apps/routing/async-redirect/src/main.ts similarity index 100% rename from apps/angular/60-async-redirect/src/main.ts rename to apps/routing/async-redirect/src/main.ts diff --git a/apps/angular/59-content-projection-defer/src/styles.scss b/apps/routing/async-redirect/src/styles.scss similarity index 100% rename from apps/angular/59-content-projection-defer/src/styles.scss rename to apps/routing/async-redirect/src/styles.scss diff --git a/apps/angular/58-content-projection-condition/tailwind.config.js b/apps/routing/async-redirect/tailwind.config.js similarity index 100% rename from apps/angular/58-content-projection-condition/tailwind.config.js rename to apps/routing/async-redirect/tailwind.config.js diff --git a/apps/angular/60-async-redirect/tsconfig.app.json b/apps/routing/async-redirect/tsconfig.app.json similarity index 100% rename from apps/angular/60-async-redirect/tsconfig.app.json rename to apps/routing/async-redirect/tsconfig.app.json diff --git a/apps/angular/60-async-redirect/tsconfig.json b/apps/routing/async-redirect/tsconfig.json similarity index 100% rename from apps/angular/60-async-redirect/tsconfig.json rename to apps/routing/async-redirect/tsconfig.json diff --git a/apps/angular/33-decoupling-components/.eslintrc.json b/apps/routing/router-input/.eslintrc.json similarity index 100% rename from apps/angular/33-decoupling-components/.eslintrc.json rename to apps/routing/router-input/.eslintrc.json diff --git a/apps/angular/22-router-input/README.md b/apps/routing/router-input/README.md similarity index 100% rename from apps/angular/22-router-input/README.md rename to apps/routing/router-input/README.md diff --git a/apps/angular/22-router-input/project.json b/apps/routing/router-input/project.json similarity index 100% rename from apps/angular/22-router-input/project.json rename to apps/routing/router-input/project.json diff --git a/apps/angular/22-router-input/src/app/app.component.ts b/apps/routing/router-input/src/app/app.component.ts similarity index 100% rename from apps/angular/22-router-input/src/app/app.component.ts rename to apps/routing/router-input/src/app/app.component.ts diff --git a/apps/angular/22-router-input/src/app/app.config.ts b/apps/routing/router-input/src/app/app.config.ts similarity index 100% rename from apps/angular/22-router-input/src/app/app.config.ts rename to apps/routing/router-input/src/app/app.config.ts diff --git a/apps/angular/22-router-input/src/app/app.routes.ts b/apps/routing/router-input/src/app/app.routes.ts similarity index 100% rename from apps/angular/22-router-input/src/app/app.routes.ts rename to apps/routing/router-input/src/app/app.routes.ts diff --git a/apps/angular/22-router-input/src/app/home.component.ts b/apps/routing/router-input/src/app/home.component.ts similarity index 100% rename from apps/angular/22-router-input/src/app/home.component.ts rename to apps/routing/router-input/src/app/home.component.ts diff --git a/apps/angular/22-router-input/src/app/test.component.ts b/apps/routing/router-input/src/app/test.component.ts similarity index 100% rename from apps/angular/22-router-input/src/app/test.component.ts rename to apps/routing/router-input/src/app/test.component.ts diff --git a/apps/angular/9-wrap-function-pipe/src/assets/.gitkeep b/apps/routing/router-input/src/assets/.gitkeep similarity index 100% rename from apps/angular/9-wrap-function-pipe/src/assets/.gitkeep rename to apps/routing/router-input/src/assets/.gitkeep diff --git a/apps/angular/6-structural-directive/src/favicon.ico b/apps/routing/router-input/src/favicon.ico similarity index 100% rename from apps/angular/6-structural-directive/src/favicon.ico rename to apps/routing/router-input/src/favicon.ico diff --git a/apps/angular/22-router-input/src/index.html b/apps/routing/router-input/src/index.html similarity index 100% rename from apps/angular/22-router-input/src/index.html rename to apps/routing/router-input/src/index.html diff --git a/apps/angular/57-content-projection-default/src/main.ts b/apps/routing/router-input/src/main.ts similarity index 100% rename from apps/angular/57-content-projection-default/src/main.ts rename to apps/routing/router-input/src/main.ts diff --git a/apps/angular/8-pure-pipe/src/styles.scss b/apps/routing/router-input/src/styles.scss similarity index 100% rename from apps/angular/8-pure-pipe/src/styles.scss rename to apps/routing/router-input/src/styles.scss diff --git a/apps/routing/router-input/tsconfig.app.json b/apps/routing/router-input/tsconfig.app.json new file mode 100644 index 000000000..403fe4f54 --- /dev/null +++ b/apps/routing/router-input/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": [ + "src/main.ts" + ], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/angular/44-view-transition/tsconfig.editor.json b/apps/routing/router-input/tsconfig.editor.json similarity index 100% rename from apps/angular/44-view-transition/tsconfig.editor.json rename to apps/routing/router-input/tsconfig.editor.json diff --git a/apps/angular/31-module-to-standalone/tsconfig.json b/apps/routing/router-input/tsconfig.json similarity index 100% rename from apps/angular/31-module-to-standalone/tsconfig.json rename to apps/routing/router-input/tsconfig.json diff --git a/apps/rxjs/11-high-order-operator-bug/src/assets/.gitkeep b/apps/rxjs/11-high-order-operator-bug/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/rxjs/11-high-order-operator-bug/src/favicon.ico b/apps/rxjs/11-high-order-operator-bug/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 console.error(err)); diff --git a/apps/rxjs/11-high-order-operator-bug/src/styles.scss b/apps/rxjs/11-high-order-operator-bug/src/styles.scss deleted file mode 100644 index 90d4ee007..000000000 --- a/apps/rxjs/11-high-order-operator-bug/src/styles.scss +++ /dev/null @@ -1 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/rxjs/11-high-order-operator-bug/tsconfig.editor.json b/apps/rxjs/11-high-order-operator-bug/tsconfig.editor.json deleted file mode 100644 index 0f9036b03..000000000 --- a/apps/rxjs/11-high-order-operator-bug/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["**/*.ts"], - "compilerOptions": { - "types": [] - } -} diff --git a/apps/rxjs/14-race-condition/.eslintrc.json b/apps/rxjs/14-race-condition/.eslintrc.json deleted file mode 100644 index bf8df1428..000000000 --- a/apps/rxjs/14-race-condition/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/rxjs/14-race-condition/src/assets/.gitkeep b/apps/rxjs/14-race-condition/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/rxjs/14-race-condition/src/favicon.ico b/apps/rxjs/14-race-condition/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - console.error(err), -); diff --git a/apps/rxjs/38-catch-error/src/styles.scss b/apps/rxjs/38-catch-error/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/rxjs/38-catch-error/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/rxjs/38-catch-error/src/test-setup.ts b/apps/rxjs/38-catch-error/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/rxjs/38-catch-error/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/rxjs/38-catch-error/tailwind.config.js b/apps/rxjs/38-catch-error/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/rxjs/38-catch-error/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/rxjs/38-catch-error/tsconfig.app.json b/apps/rxjs/38-catch-error/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/rxjs/38-catch-error/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/rxjs/38-catch-error/tsconfig.editor.json b/apps/rxjs/38-catch-error/tsconfig.editor.json deleted file mode 100644 index 8ae117d96..000000000 --- a/apps/rxjs/38-catch-error/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": ["jest", "node"] - } -} diff --git a/apps/rxjs/38-catch-error/tsconfig.json b/apps/rxjs/38-catch-error/tsconfig.json deleted file mode 100644 index e85865cf5..000000000 --- a/apps/rxjs/38-catch-error/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/rxjs/38-catch-error/tsconfig.spec.json b/apps/rxjs/38-catch-error/tsconfig.spec.json deleted file mode 100644 index c0c092e1e..000000000 --- a/apps/rxjs/38-catch-error/tsconfig.spec.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/rxjs/49-hold-to-save-button/src/assets/.gitkeep b/apps/rxjs/49-hold-to-save-button/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/rxjs/49-hold-to-save-button/src/favicon.ico b/apps/rxjs/49-hold-to-save-button/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - console.error(err), -); diff --git a/apps/rxjs/49-hold-to-save-button/src/test-setup.ts b/apps/rxjs/49-hold-to-save-button/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/rxjs/49-hold-to-save-button/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/rxjs/49-hold-to-save-button/tailwind.config.js b/apps/rxjs/49-hold-to-save-button/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/rxjs/49-hold-to-save-button/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/rxjs/49-hold-to-save-button/tsconfig.app.json b/apps/rxjs/49-hold-to-save-button/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/rxjs/49-hold-to-save-button/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/rxjs/49-hold-to-save-button/tsconfig.json b/apps/rxjs/49-hold-to-save-button/tsconfig.json deleted file mode 100644 index 4383e7eb8..000000000 --- a/apps/rxjs/49-hold-to-save-button/tsconfig.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/rxjs/49-hold-to-save-button/tsconfig.spec.json b/apps/rxjs/49-hold-to-save-button/tsconfig.spec.json deleted file mode 100644 index 1a4817a7d..000000000 --- a/apps/rxjs/49-hold-to-save-button/tsconfig.spec.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/performance/12-optimize-change-detection/.eslintrc.json b/apps/rxjs/catch-error/.eslintrc.json similarity index 100% rename from apps/performance/12-optimize-change-detection/.eslintrc.json rename to apps/rxjs/catch-error/.eslintrc.json diff --git a/apps/rxjs/38-catch-error/README.md b/apps/rxjs/catch-error/README.md similarity index 100% rename from apps/rxjs/38-catch-error/README.md rename to apps/rxjs/catch-error/README.md diff --git a/apps/rxjs/38-catch-error/jest.config.ts b/apps/rxjs/catch-error/jest.config.ts similarity index 100% rename from apps/rxjs/38-catch-error/jest.config.ts rename to apps/rxjs/catch-error/jest.config.ts diff --git a/apps/rxjs/38-catch-error/project.json b/apps/rxjs/catch-error/project.json similarity index 100% rename from apps/rxjs/38-catch-error/project.json rename to apps/rxjs/catch-error/project.json diff --git a/apps/rxjs/38-catch-error/src/app/app.component.css b/apps/rxjs/catch-error/src/app/app.component.css similarity index 100% rename from apps/rxjs/38-catch-error/src/app/app.component.css rename to apps/rxjs/catch-error/src/app/app.component.css diff --git a/apps/rxjs/38-catch-error/src/app/app.component.spec.ts b/apps/rxjs/catch-error/src/app/app.component.spec.ts similarity index 100% rename from apps/rxjs/38-catch-error/src/app/app.component.spec.ts rename to apps/rxjs/catch-error/src/app/app.component.spec.ts diff --git a/apps/rxjs/38-catch-error/src/app/app.component.ts b/apps/rxjs/catch-error/src/app/app.component.ts similarity index 100% rename from apps/rxjs/38-catch-error/src/app/app.component.ts rename to apps/rxjs/catch-error/src/app/app.component.ts diff --git a/apps/rxjs/38-catch-error/src/app/app.config.ts b/apps/rxjs/catch-error/src/app/app.config.ts similarity index 100% rename from apps/rxjs/38-catch-error/src/app/app.config.ts rename to apps/rxjs/catch-error/src/app/app.config.ts diff --git a/apps/forms/41-control-value-accessor/src/assets/.gitkeep b/apps/rxjs/catch-error/src/assets/.gitkeep similarity index 100% rename from apps/forms/41-control-value-accessor/src/assets/.gitkeep rename to apps/rxjs/catch-error/src/assets/.gitkeep diff --git a/apps/angular/60-async-redirect/public/favicon.ico b/apps/rxjs/catch-error/src/favicon.ico similarity index 100% rename from apps/angular/60-async-redirect/public/favicon.ico rename to apps/rxjs/catch-error/src/favicon.ico diff --git a/apps/rxjs/38-catch-error/src/index.html b/apps/rxjs/catch-error/src/index.html similarity index 100% rename from apps/rxjs/38-catch-error/src/index.html rename to apps/rxjs/catch-error/src/index.html diff --git a/apps/angular/58-content-projection-condition/src/main.ts b/apps/rxjs/catch-error/src/main.ts similarity index 100% rename from apps/angular/58-content-projection-condition/src/main.ts rename to apps/rxjs/catch-error/src/main.ts diff --git a/apps/angular/6-structural-directive/src/styles.scss b/apps/rxjs/catch-error/src/styles.scss similarity index 100% rename from apps/angular/6-structural-directive/src/styles.scss rename to apps/rxjs/catch-error/src/styles.scss diff --git a/apps/angular/52-lazy-load-component/src/test-setup.ts b/apps/rxjs/catch-error/src/test-setup.ts similarity index 100% rename from apps/angular/52-lazy-load-component/src/test-setup.ts rename to apps/rxjs/catch-error/src/test-setup.ts diff --git a/apps/angular/59-content-projection-defer/tailwind.config.js b/apps/rxjs/catch-error/tailwind.config.js similarity index 100% rename from apps/angular/59-content-projection-defer/tailwind.config.js rename to apps/rxjs/catch-error/tailwind.config.js diff --git a/apps/angular/21-anchor-navigation/tsconfig.app.json b/apps/rxjs/catch-error/tsconfig.app.json similarity index 100% rename from apps/angular/21-anchor-navigation/tsconfig.app.json rename to apps/rxjs/catch-error/tsconfig.app.json diff --git a/apps/forms/41-control-value-accessor/tsconfig.editor.json b/apps/rxjs/catch-error/tsconfig.editor.json similarity index 100% rename from apps/forms/41-control-value-accessor/tsconfig.editor.json rename to apps/rxjs/catch-error/tsconfig.editor.json diff --git a/apps/performance/12-optimize-change-detection/tsconfig.json b/apps/rxjs/catch-error/tsconfig.json similarity index 100% rename from apps/performance/12-optimize-change-detection/tsconfig.json rename to apps/rxjs/catch-error/tsconfig.json diff --git a/apps/angular/32-change-detection-bug/tsconfig.spec.json b/apps/rxjs/catch-error/tsconfig.spec.json similarity index 100% rename from apps/angular/32-change-detection-bug/tsconfig.spec.json rename to apps/rxjs/catch-error/tsconfig.spec.json diff --git a/apps/angular/9-wrap-function-pipe/.eslintrc.json b/apps/rxjs/high-order-operator-bug/.eslintrc.json similarity index 100% rename from apps/angular/9-wrap-function-pipe/.eslintrc.json rename to apps/rxjs/high-order-operator-bug/.eslintrc.json diff --git a/apps/rxjs/11-high-order-operator-bug/README.md b/apps/rxjs/high-order-operator-bug/README.md similarity index 100% rename from apps/rxjs/11-high-order-operator-bug/README.md rename to apps/rxjs/high-order-operator-bug/README.md diff --git a/apps/rxjs/11-high-order-operator-bug/project.json b/apps/rxjs/high-order-operator-bug/project.json similarity index 100% rename from apps/rxjs/11-high-order-operator-bug/project.json rename to apps/rxjs/high-order-operator-bug/project.json diff --git a/apps/rxjs/11-high-order-operator-bug/src/app/app.component.ts b/apps/rxjs/high-order-operator-bug/src/app/app.component.ts similarity index 100% rename from apps/rxjs/11-high-order-operator-bug/src/app/app.component.ts rename to apps/rxjs/high-order-operator-bug/src/app/app.component.ts diff --git a/apps/rxjs/11-high-order-operator-bug/src/app/app.service.ts b/apps/rxjs/high-order-operator-bug/src/app/app.service.ts similarity index 100% rename from apps/rxjs/11-high-order-operator-bug/src/app/app.service.ts rename to apps/rxjs/high-order-operator-bug/src/app/app.service.ts diff --git a/apps/rxjs/11-high-order-operator-bug/src/app/localDB.service.ts b/apps/rxjs/high-order-operator-bug/src/app/localDB.service.ts similarity index 100% rename from apps/rxjs/11-high-order-operator-bug/src/app/localDB.service.ts rename to apps/rxjs/high-order-operator-bug/src/app/localDB.service.ts diff --git a/apps/forms/48-avoid-losing-form-data/src/assets/.gitkeep b/apps/rxjs/high-order-operator-bug/src/assets/.gitkeep similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/assets/.gitkeep rename to apps/rxjs/high-order-operator-bug/src/assets/.gitkeep diff --git a/apps/angular/8-pure-pipe/src/favicon.ico b/apps/rxjs/high-order-operator-bug/src/favicon.ico similarity index 100% rename from apps/angular/8-pure-pipe/src/favicon.ico rename to apps/rxjs/high-order-operator-bug/src/favicon.ico diff --git a/apps/rxjs/11-high-order-operator-bug/src/index.html b/apps/rxjs/high-order-operator-bug/src/index.html similarity index 100% rename from apps/rxjs/11-high-order-operator-bug/src/index.html rename to apps/rxjs/high-order-operator-bug/src/index.html diff --git a/apps/forms/41-control-value-accessor/src/main.ts b/apps/rxjs/high-order-operator-bug/src/main.ts similarity index 100% rename from apps/forms/41-control-value-accessor/src/main.ts rename to apps/rxjs/high-order-operator-bug/src/main.ts diff --git a/apps/angular/9-wrap-function-pipe/src/styles.scss b/apps/rxjs/high-order-operator-bug/src/styles.scss similarity index 100% rename from apps/angular/9-wrap-function-pipe/src/styles.scss rename to apps/rxjs/high-order-operator-bug/src/styles.scss diff --git a/apps/rxjs/11-high-order-operator-bug/tsconfig.app.json b/apps/rxjs/high-order-operator-bug/tsconfig.app.json similarity index 100% rename from apps/rxjs/11-high-order-operator-bug/tsconfig.app.json rename to apps/rxjs/high-order-operator-bug/tsconfig.app.json diff --git a/apps/angular/9-wrap-function-pipe/tsconfig.editor.json b/apps/rxjs/high-order-operator-bug/tsconfig.editor.json similarity index 100% rename from apps/angular/9-wrap-function-pipe/tsconfig.editor.json rename to apps/rxjs/high-order-operator-bug/tsconfig.editor.json diff --git a/apps/rxjs/11-high-order-operator-bug/tsconfig.json b/apps/rxjs/high-order-operator-bug/tsconfig.json similarity index 100% rename from apps/rxjs/11-high-order-operator-bug/tsconfig.json rename to apps/rxjs/high-order-operator-bug/tsconfig.json diff --git a/apps/forms/41-control-value-accessor/.eslintrc.json b/apps/rxjs/hold-to-save-button/.eslintrc.json similarity index 100% rename from apps/forms/41-control-value-accessor/.eslintrc.json rename to apps/rxjs/hold-to-save-button/.eslintrc.json diff --git a/apps/rxjs/49-hold-to-save-button/README.md b/apps/rxjs/hold-to-save-button/README.md similarity index 100% rename from apps/rxjs/49-hold-to-save-button/README.md rename to apps/rxjs/hold-to-save-button/README.md diff --git a/apps/rxjs/49-hold-to-save-button/jest.config.ts b/apps/rxjs/hold-to-save-button/jest.config.ts similarity index 100% rename from apps/rxjs/49-hold-to-save-button/jest.config.ts rename to apps/rxjs/hold-to-save-button/jest.config.ts diff --git a/apps/rxjs/49-hold-to-save-button/project.json b/apps/rxjs/hold-to-save-button/project.json similarity index 100% rename from apps/rxjs/49-hold-to-save-button/project.json rename to apps/rxjs/hold-to-save-button/project.json diff --git a/apps/rxjs/49-hold-to-save-button/src/app/app.component.ts b/apps/rxjs/hold-to-save-button/src/app/app.component.ts similarity index 100% rename from apps/rxjs/49-hold-to-save-button/src/app/app.component.ts rename to apps/rxjs/hold-to-save-button/src/app/app.component.ts diff --git a/apps/angular/46-simple-animations/src/app/app.config.ts b/apps/rxjs/hold-to-save-button/src/app/app.config.ts similarity index 100% rename from apps/angular/46-simple-animations/src/app/app.config.ts rename to apps/rxjs/hold-to-save-button/src/app/app.config.ts diff --git a/apps/nx/42-static-vs-dynamic-import/src/assets/.gitkeep b/apps/rxjs/hold-to-save-button/src/assets/.gitkeep similarity index 100% rename from apps/nx/42-static-vs-dynamic-import/src/assets/.gitkeep rename to apps/rxjs/hold-to-save-button/src/assets/.gitkeep diff --git a/apps/angular/9-wrap-function-pipe/src/favicon.ico b/apps/rxjs/hold-to-save-button/src/favicon.ico similarity index 100% rename from apps/angular/9-wrap-function-pipe/src/favicon.ico rename to apps/rxjs/hold-to-save-button/src/favicon.ico diff --git a/apps/rxjs/49-hold-to-save-button/src/index.html b/apps/rxjs/hold-to-save-button/src/index.html similarity index 100% rename from apps/rxjs/49-hold-to-save-button/src/index.html rename to apps/rxjs/hold-to-save-button/src/index.html diff --git a/apps/angular/59-content-projection-defer/src/main.ts b/apps/rxjs/hold-to-save-button/src/main.ts similarity index 100% rename from apps/angular/59-content-projection-defer/src/main.ts rename to apps/rxjs/hold-to-save-button/src/main.ts diff --git a/apps/rxjs/49-hold-to-save-button/src/styles.scss b/apps/rxjs/hold-to-save-button/src/styles.scss similarity index 100% rename from apps/rxjs/49-hold-to-save-button/src/styles.scss rename to apps/rxjs/hold-to-save-button/src/styles.scss diff --git a/apps/angular/55-back-button-navigation/src/test-setup.ts b/apps/rxjs/hold-to-save-button/src/test-setup.ts similarity index 100% rename from apps/angular/55-back-button-navigation/src/test-setup.ts rename to apps/rxjs/hold-to-save-button/src/test-setup.ts diff --git a/apps/angular/6-structural-directive/tailwind.config.js b/apps/rxjs/hold-to-save-button/tailwind.config.js similarity index 100% rename from apps/angular/6-structural-directive/tailwind.config.js rename to apps/rxjs/hold-to-save-button/tailwind.config.js diff --git a/apps/angular/22-router-input/tsconfig.app.json b/apps/rxjs/hold-to-save-button/tsconfig.app.json similarity index 100% rename from apps/angular/22-router-input/tsconfig.app.json rename to apps/rxjs/hold-to-save-button/tsconfig.app.json diff --git a/apps/angular/57-content-projection-default/tsconfig.editor.json b/apps/rxjs/hold-to-save-button/tsconfig.editor.json similarity index 100% rename from apps/angular/57-content-projection-default/tsconfig.editor.json rename to apps/rxjs/hold-to-save-button/tsconfig.editor.json diff --git a/apps/angular/55-back-button-navigation/tsconfig.json b/apps/rxjs/hold-to-save-button/tsconfig.json similarity index 100% rename from apps/angular/55-back-button-navigation/tsconfig.json rename to apps/rxjs/hold-to-save-button/tsconfig.json diff --git a/apps/angular/45-react-in-angular/tsconfig.spec.json b/apps/rxjs/hold-to-save-button/tsconfig.spec.json similarity index 100% rename from apps/angular/45-react-in-angular/tsconfig.spec.json rename to apps/rxjs/hold-to-save-button/tsconfig.spec.json diff --git a/apps/performance/34-default-vs-onpush/.eslintrc.json b/apps/rxjs/race-condition/.eslintrc.json similarity index 100% rename from apps/performance/34-default-vs-onpush/.eslintrc.json rename to apps/rxjs/race-condition/.eslintrc.json diff --git a/apps/rxjs/14-race-condition/README.md b/apps/rxjs/race-condition/README.md similarity index 100% rename from apps/rxjs/14-race-condition/README.md rename to apps/rxjs/race-condition/README.md diff --git a/apps/rxjs/14-race-condition/cypress.config.ts b/apps/rxjs/race-condition/cypress.config.ts similarity index 100% rename from apps/rxjs/14-race-condition/cypress.config.ts rename to apps/rxjs/race-condition/cypress.config.ts diff --git a/apps/rxjs/14-race-condition/cypress/fixtures/example.json b/apps/rxjs/race-condition/cypress/fixtures/example.json similarity index 100% rename from apps/rxjs/14-race-condition/cypress/fixtures/example.json rename to apps/rxjs/race-condition/cypress/fixtures/example.json diff --git a/apps/rxjs/14-race-condition/cypress/support/commands.ts b/apps/rxjs/race-condition/cypress/support/commands.ts similarity index 100% rename from apps/rxjs/14-race-condition/cypress/support/commands.ts rename to apps/rxjs/race-condition/cypress/support/commands.ts diff --git a/apps/rxjs/14-race-condition/cypress/support/component-index.html b/apps/rxjs/race-condition/cypress/support/component-index.html similarity index 100% rename from apps/rxjs/14-race-condition/cypress/support/component-index.html rename to apps/rxjs/race-condition/cypress/support/component-index.html diff --git a/apps/rxjs/14-race-condition/cypress/support/component.ts b/apps/rxjs/race-condition/cypress/support/component.ts similarity index 100% rename from apps/rxjs/14-race-condition/cypress/support/component.ts rename to apps/rxjs/race-condition/cypress/support/component.ts diff --git a/apps/rxjs/14-race-condition/cypress/tsconfig.json b/apps/rxjs/race-condition/cypress/tsconfig.json similarity index 100% rename from apps/rxjs/14-race-condition/cypress/tsconfig.json rename to apps/rxjs/race-condition/cypress/tsconfig.json diff --git a/apps/rxjs/14-race-condition/jest.config.ts b/apps/rxjs/race-condition/jest.config.ts similarity index 100% rename from apps/rxjs/14-race-condition/jest.config.ts rename to apps/rxjs/race-condition/jest.config.ts diff --git a/apps/rxjs/14-race-condition/project.json b/apps/rxjs/race-condition/project.json similarity index 100% rename from apps/rxjs/14-race-condition/project.json rename to apps/rxjs/race-condition/project.json diff --git a/apps/rxjs/14-race-condition/src/app/app.component.cy.ts b/apps/rxjs/race-condition/src/app/app.component.cy.ts similarity index 100% rename from apps/rxjs/14-race-condition/src/app/app.component.cy.ts rename to apps/rxjs/race-condition/src/app/app.component.cy.ts diff --git a/apps/rxjs/14-race-condition/src/app/app.component.ts b/apps/rxjs/race-condition/src/app/app.component.ts similarity index 100% rename from apps/rxjs/14-race-condition/src/app/app.component.ts rename to apps/rxjs/race-condition/src/app/app.component.ts diff --git a/apps/rxjs/14-race-condition/src/app/app.config.ts b/apps/rxjs/race-condition/src/app/app.config.ts similarity index 100% rename from apps/rxjs/14-race-condition/src/app/app.config.ts rename to apps/rxjs/race-condition/src/app/app.config.ts diff --git a/apps/rxjs/14-race-condition/src/app/topic-dialog.component.ts b/apps/rxjs/race-condition/src/app/topic-dialog.component.ts similarity index 100% rename from apps/rxjs/14-race-condition/src/app/topic-dialog.component.ts rename to apps/rxjs/race-condition/src/app/topic-dialog.component.ts diff --git a/apps/rxjs/14-race-condition/src/app/topic.service.ts b/apps/rxjs/race-condition/src/app/topic.service.ts similarity index 100% rename from apps/rxjs/14-race-condition/src/app/topic.service.ts rename to apps/rxjs/race-condition/src/app/topic.service.ts diff --git a/apps/performance/12-optimize-change-detection/src/assets/.gitkeep b/apps/rxjs/race-condition/src/assets/.gitkeep similarity index 100% rename from apps/performance/12-optimize-change-detection/src/assets/.gitkeep rename to apps/rxjs/race-condition/src/assets/.gitkeep diff --git a/apps/forms/41-control-value-accessor/src/favicon.ico b/apps/rxjs/race-condition/src/favicon.ico similarity index 100% rename from apps/forms/41-control-value-accessor/src/favicon.ico rename to apps/rxjs/race-condition/src/favicon.ico diff --git a/apps/rxjs/14-race-condition/src/index.html b/apps/rxjs/race-condition/src/index.html similarity index 100% rename from apps/rxjs/14-race-condition/src/index.html rename to apps/rxjs/race-condition/src/index.html diff --git a/apps/rxjs/14-race-condition/src/main.ts b/apps/rxjs/race-condition/src/main.ts similarity index 100% rename from apps/rxjs/14-race-condition/src/main.ts rename to apps/rxjs/race-condition/src/main.ts diff --git a/apps/rxjs/14-race-condition/src/styles.scss b/apps/rxjs/race-condition/src/styles.scss similarity index 100% rename from apps/rxjs/14-race-condition/src/styles.scss rename to apps/rxjs/race-condition/src/styles.scss diff --git a/apps/rxjs/14-race-condition/src/test-setup.ts b/apps/rxjs/race-condition/src/test-setup.ts similarity index 100% rename from apps/rxjs/14-race-condition/src/test-setup.ts rename to apps/rxjs/race-condition/src/test-setup.ts diff --git a/apps/rxjs/14-race-condition/tsconfig.app.json b/apps/rxjs/race-condition/tsconfig.app.json similarity index 100% rename from apps/rxjs/14-race-condition/tsconfig.app.json rename to apps/rxjs/race-condition/tsconfig.app.json diff --git a/apps/performance/12-optimize-change-detection/tsconfig.editor.json b/apps/rxjs/race-condition/tsconfig.editor.json similarity index 100% rename from apps/performance/12-optimize-change-detection/tsconfig.editor.json rename to apps/rxjs/race-condition/tsconfig.editor.json diff --git a/apps/rxjs/14-race-condition/tsconfig.json b/apps/rxjs/race-condition/tsconfig.json similarity index 100% rename from apps/rxjs/14-race-condition/tsconfig.json rename to apps/rxjs/race-condition/tsconfig.json diff --git a/apps/angular/21-anchor-navigation/tsconfig.spec.json b/apps/rxjs/race-condition/tsconfig.spec.json similarity index 100% rename from apps/angular/21-anchor-navigation/tsconfig.spec.json rename to apps/rxjs/race-condition/tsconfig.spec.json diff --git a/apps/signal/30-interop-rxjs-signal/.eslintrc.json b/apps/signal/30-interop-rxjs-signal/.eslintrc.json deleted file mode 100644 index bf8df1428..000000000 --- a/apps/signal/30-interop-rxjs-signal/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/signal/30-interop-rxjs-signal/README.md b/apps/signal/30-interop-rxjs-signal/README.md deleted file mode 100644 index f726d1b0f..000000000 --- a/apps/signal/30-interop-rxjs-signal/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Interoperability Rxjs/Signal - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve signal-interop-rxjs-signal -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/30-interop-rxjs-signal/). diff --git a/apps/signal/30-interop-rxjs-signal/jest.config.ts b/apps/signal/30-interop-rxjs-signal/jest.config.ts deleted file mode 100644 index 9f2001768..000000000 --- a/apps/signal/30-interop-rxjs-signal/jest.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'signal-interop-rxjs-signal', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - coverageDirectory: '../../../coverage/apps/signal/30-interop-rxjs-signal', - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/signal/30-interop-rxjs-signal/project.json b/apps/signal/30-interop-rxjs-signal/project.json deleted file mode 100644 index b03dd4c15..000000000 --- a/apps/signal/30-interop-rxjs-signal/project.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "name": "signal-interop-rxjs-signal", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/signal/30-interop-rxjs-signal/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/signal/30-interop-rxjs-signal", - "index": "apps/signal/30-interop-rxjs-signal/src/index.html", - "main": "apps/signal/30-interop-rxjs-signal/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/signal/30-interop-rxjs-signal/tsconfig.app.json", - "assets": [ - "apps/signal/30-interop-rxjs-signal/src/favicon.ico", - "apps/signal/30-interop-rxjs-signal/src/assets" - ], - "styles": [ - "apps/signal/30-interop-rxjs-signal/src/styles.scss", - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "signal-interop-rxjs-signal:build:production" - }, - "development": { - "buildTarget": "signal-interop-rxjs-signal:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "signal-interop-rxjs-signal:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/signal/30-interop-rxjs-signal/src/app/app.component.ts b/apps/signal/30-interop-rxjs-signal/src/app/app.component.ts deleted file mode 100644 index 54fa2b85d..000000000 --- a/apps/signal/30-interop-rxjs-signal/src/app/app.component.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Component } from '@angular/core'; -import { RouterOutlet } from '@angular/router'; - -@Component({ - imports: [RouterOutlet], - selector: 'app-root', - template: ` - - `, - styles: [''], -}) -export class AppComponent {} diff --git a/apps/signal/30-interop-rxjs-signal/src/app/app.config.ts b/apps/signal/30-interop-rxjs-signal/src/app/app.config.ts deleted file mode 100644 index 2885bb0de..000000000 --- a/apps/signal/30-interop-rxjs-signal/src/app/app.config.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { provideHttpClient } from '@angular/common/http'; -import { ApplicationConfig } from '@angular/core'; -import { provideAnimations } from '@angular/platform-browser/animations'; -import { provideRouter, withComponentInputBinding } from '@angular/router'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideHttpClient(), - provideAnimations(), - provideRouter( - [ - { - path: '', - pathMatch: 'full', - loadComponent: () => import('./list/photos.component'), - }, - { - path: 'detail', - loadComponent: () => import('./detail/detail.component'), - }, - { - path: '**', - redirectTo: '', - }, - ], - withComponentInputBinding(), - ), - ], -}; diff --git a/apps/signal/30-interop-rxjs-signal/src/app/detail/detail.component.ts b/apps/signal/30-interop-rxjs-signal/src/app/detail/detail.component.ts deleted file mode 100644 index 070bf7d7c..000000000 --- a/apps/signal/30-interop-rxjs-signal/src/app/detail/detail.component.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { DatePipe } from '@angular/common'; -import { Component, Input as RouterInput } from '@angular/core'; -import { RouterLink } from '@angular/router'; -import { Photo } from '../photo.model'; - -@Component({ - selector: 'app-photos', - imports: [DatePipe, RouterLink], - template: ` - {{ photo.title }} -

- Title: - {{ photo.title }} -

-

- Owner: - {{ photo.ownername }} -

-

- Date: - {{ photo.datetaken | date }} -

-

- Tags: - {{ photo.tags }} -

- - - `, - host: { - class: 'p-5 block', - }, -}) -export default class DetailComponent { - @RouterInput({ - required: true, - transform: (value: string) => JSON.parse(decodeURIComponent(value)), - }) - photo!: Photo; -} diff --git a/apps/signal/30-interop-rxjs-signal/src/app/list/photos.component.ts b/apps/signal/30-interop-rxjs-signal/src/app/list/photos.component.ts deleted file mode 100644 index 7ba115027..000000000 --- a/apps/signal/30-interop-rxjs-signal/src/app/list/photos.component.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { AsyncPipe } from '@angular/common'; -import { Component, inject, OnInit } from '@angular/core'; -import { FormControl, ReactiveFormsModule } from '@angular/forms'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { RouterLinkWithHref } from '@angular/router'; -import { provideComponentStore } from '@ngrx/component-store'; -import { - debounceTime, - distinctUntilChanged, - Observable, - skipWhile, - tap, -} from 'rxjs'; -import { Photo } from '../photo.model'; -import { PhotoStore } from './photos.store'; - -@Component({ - selector: 'app-photos', - imports: [ - ReactiveFormsModule, - MatFormFieldModule, - MatProgressBarModule, - MatInputModule, - RouterLinkWithHref, - AsyncPipe, - ], - template: ` -

Photos

- - - Search - - - - @let vm = vm$ | async; -
-
- - - Page :{{ vm.page }} / {{ vm.pages }} -
- @if (vm.loading) { - - } - @if (vm.photos && vm.photos.length > 0) { -
    - @for ( - photo of vm.photos; - track photo.id; - let i = $index - ) { -
  • - - {{ photo.title }} - -
  • - } -
- } @else { -
No Photos found. Type a search word.
- } -
- {{ vm.error }} -
-
- `, - providers: [provideComponentStore(PhotoStore)], - host: { - class: 'p-5 block', - }, -}) -export default class PhotosComponent implements OnInit { - store = inject(PhotoStore); - readonly vm$: Observable<{ - photos: Photo[]; - search: string; - page: number; - pages: number; - endOfPage: boolean; - loading: boolean; - error: unknown; - }> = this.store.vm$.pipe( - tap(({ search }) => { - if (!this.formInit) { - this.search.setValue(search); - this.formInit = true; - } - }), - ); - - private formInit = false; - search = new FormControl(); - - ngOnInit(): void { - this.store.search( - this.search.valueChanges.pipe( - skipWhile(() => !this.formInit), - debounceTime(300), - distinctUntilChanged(), - ), - ); - } - - encode(photo: Photo) { - return encodeURIComponent(JSON.stringify(photo)); - } -} diff --git a/apps/signal/30-interop-rxjs-signal/src/app/list/photos.store.ts b/apps/signal/30-interop-rxjs-signal/src/app/list/photos.store.ts deleted file mode 100644 index f1315e87e..000000000 --- a/apps/signal/30-interop-rxjs-signal/src/app/list/photos.store.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { inject, Injectable } from '@angular/core'; -import { - ComponentStore, - OnStateInit, - OnStoreInit, -} from '@ngrx/component-store'; -import { tapResponse } from '@ngrx/operators'; -import { pipe } from 'rxjs'; -import { filter, mergeMap, tap } from 'rxjs/operators'; -import { Photo } from '../photo.model'; -import { PhotoService } from '../photos.service'; - -const PHOTO_STATE_KEY = 'photo_search'; - -export interface PhotoState { - photos: Photo[]; - search: string; - page: number; - pages: number; - loading: boolean; - error: unknown; -} - -const initialState: PhotoState = { - photos: [], - search: '', - page: 1, - pages: 1, - loading: false, - error: '', -}; - -@Injectable() -export class PhotoStore - extends ComponentStore - implements OnStoreInit, OnStateInit -{ - private photoService = inject(PhotoService); - - private readonly photos$ = this.select((s) => s.photos); - private readonly search$ = this.select((s) => s.search); - private readonly page$ = this.select((s) => s.page); - private readonly pages$ = this.select((s) => s.pages); - private readonly error$ = this.select((s) => s.error); - private readonly loading$ = this.select((s) => s.loading); - - private readonly endOfPage$ = this.select( - this.page$, - this.pages$, - (page, pages) => page === pages, - ); - - readonly vm$ = this.select( - { - photos: this.photos$, - search: this.search$, - page: this.page$, - pages: this.pages$, - endOfPage: this.endOfPage$, - loading: this.loading$, - error: this.error$, - }, - { debounce: true }, - ); - - ngrxOnStoreInit() { - const savedJSONState = localStorage.getItem(PHOTO_STATE_KEY); - if (savedJSONState === null) { - this.setState(initialState); - } else { - const savedState = JSON.parse(savedJSONState); - this.setState({ - ...initialState, - search: savedState.search, - page: savedState.page, - }); - } - } - - ngrxOnStateInit() { - this.searchPhotos( - this.select({ - search: this.search$, - page: this.page$, - }), - ); - } - - readonly search = this.updater( - (state, search: string): PhotoState => ({ - ...state, - search, - page: 1, - }), - ); - - readonly nextPage = this.updater( - (state): PhotoState => ({ - ...state, - page: state.page + 1, - }), - ); - - readonly previousPage = this.updater( - (state): PhotoState => ({ - ...state, - page: state.page - 1, - }), - ); - - readonly searchPhotos = this.effect<{ search: string; page: number }>( - pipe( - filter(({ search }) => search.length >= 3), - tap(() => this.patchState({ loading: true, error: '' })), - mergeMap(({ search, page }) => - this.photoService.searchPublicPhotos(search, page).pipe( - tapResponse( - ({ photos: { photo, pages } }) => { - this.patchState({ - loading: false, - photos: photo, - pages, - }); - localStorage.setItem( - PHOTO_STATE_KEY, - JSON.stringify({ search, page }), - ); - }, - (error: unknown) => this.patchState({ error, loading: false }), - ), - ), - ), - ), - ); -} diff --git a/apps/signal/30-interop-rxjs-signal/src/app/photo.model.ts b/apps/signal/30-interop-rxjs-signal/src/app/photo.model.ts deleted file mode 100644 index c3360fd7a..000000000 --- a/apps/signal/30-interop-rxjs-signal/src/app/photo.model.ts +++ /dev/null @@ -1,22 +0,0 @@ -export interface Photo { - id: string; - owner: string; - secret: string; - server: string; - farm: number; - title: string; - ispublic: number; - isfriend: number; - isfamily: number; - datetaken: string; - datetakengranularity: number; - datetakenunknown: string; - ownername: string; - tags: string; - url_q: string; - height_q: number; - width_q: number; - url_m: string; - height_m: number; - width_m: number; -} diff --git a/apps/signal/30-interop-rxjs-signal/src/app/photos.service.ts b/apps/signal/30-interop-rxjs-signal/src/app/photos.service.ts deleted file mode 100644 index c540118f6..000000000 --- a/apps/signal/30-interop-rxjs-signal/src/app/photos.service.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { HttpClient } from '@angular/common/http'; -import { Injectable, inject } from '@angular/core'; -import { Observable } from 'rxjs'; -import { Photo } from './photo.model'; - -export interface FlickrAPIResponse { - photos: { - page: number; - pages: number; - perpage: number; - total: number; - photo: Photo[]; - }; - stat: string; -} - -@Injectable({ providedIn: 'root' }) -export class PhotoService { - private http = inject(HttpClient); - - public searchPublicPhotos( - searchTerm: string, - page: number, - ): Observable { - return this.http.get( - 'https://www.flickr.com/services/rest/', - { - params: { - tags: searchTerm, - method: 'flickr.photos.search', - format: 'json', - nojsoncallback: '1', - tag_mode: 'all', - media: 'photos', - per_page: '30', - page, - extras: 'tags,date_taken,owner_name,url_q,url_m', - api_key: 'c3050d39a5bb308d9921bef0e15c437d', - }, - }, - ); - } -} diff --git a/apps/signal/30-interop-rxjs-signal/src/assets/.gitkeep b/apps/signal/30-interop-rxjs-signal/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/signal/30-interop-rxjs-signal/src/favicon.ico b/apps/signal/30-interop-rxjs-signal/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - signal-interop-rxjs-signal - - - - - - - - diff --git a/apps/signal/30-interop-rxjs-signal/src/main.ts b/apps/signal/30-interop-rxjs-signal/src/main.ts deleted file mode 100644 index f3a7223da..000000000 --- a/apps/signal/30-interop-rxjs-signal/src/main.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; -import { appConfig } from './app/app.config'; - -bootstrapApplication(AppComponent, appConfig).catch((err) => - console.error(err), -); diff --git a/apps/signal/30-interop-rxjs-signal/src/styles.scss b/apps/signal/30-interop-rxjs-signal/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/signal/30-interop-rxjs-signal/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/signal/30-interop-rxjs-signal/src/test-setup.ts b/apps/signal/30-interop-rxjs-signal/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/signal/30-interop-rxjs-signal/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/signal/30-interop-rxjs-signal/tailwind.config.js b/apps/signal/30-interop-rxjs-signal/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/signal/30-interop-rxjs-signal/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/signal/30-interop-rxjs-signal/tsconfig.app.json b/apps/signal/30-interop-rxjs-signal/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/signal/30-interop-rxjs-signal/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/signal/30-interop-rxjs-signal/tsconfig.editor.json b/apps/signal/30-interop-rxjs-signal/tsconfig.editor.json deleted file mode 100644 index 8ae117d96..000000000 --- a/apps/signal/30-interop-rxjs-signal/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": ["jest", "node"] - } -} diff --git a/apps/signal/30-interop-rxjs-signal/tsconfig.json b/apps/signal/30-interop-rxjs-signal/tsconfig.json deleted file mode 100644 index e85865cf5..000000000 --- a/apps/signal/30-interop-rxjs-signal/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/signal/30-interop-rxjs-signal/tsconfig.spec.json b/apps/signal/30-interop-rxjs-signal/tsconfig.spec.json deleted file mode 100644 index c0c092e1e..000000000 --- a/apps/signal/30-interop-rxjs-signal/tsconfig.spec.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/signal/43-signal-input/.eslintrc.json b/apps/signal/43-signal-input/.eslintrc.json deleted file mode 100644 index 8ebcbfd59..000000000 --- a/apps/signal/43-signal-input/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - } - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/signal/43-signal-input/src/assets/.gitkeep b/apps/signal/43-signal-input/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/signal/43-signal-input/src/favicon.ico b/apps/signal/43-signal-input/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - console.error(err), -); diff --git a/apps/signal/43-signal-input/src/styles.scss b/apps/signal/43-signal-input/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/signal/43-signal-input/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/signal/43-signal-input/tailwind.config.js b/apps/signal/43-signal-input/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/signal/43-signal-input/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/signal/43-signal-input/tsconfig.app.json b/apps/signal/43-signal-input/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/signal/43-signal-input/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/signal/43-signal-input/tsconfig.editor.json b/apps/signal/43-signal-input/tsconfig.editor.json deleted file mode 100644 index 4ee639340..000000000 --- a/apps/signal/43-signal-input/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": [] - } -} diff --git a/apps/signal/43-signal-input/tsconfig.json b/apps/signal/43-signal-input/tsconfig.json deleted file mode 100644 index b94f8837d..000000000 --- a/apps/signal/43-signal-input/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/signal/50-bug-in-effect/.eslintrc.json b/apps/signal/50-bug-in-effect/.eslintrc.json deleted file mode 100644 index 8ebcbfd59..000000000 --- a/apps/signal/50-bug-in-effect/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - } - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/signal/50-bug-in-effect/src/assets/.gitkeep b/apps/signal/50-bug-in-effect/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/signal/50-bug-in-effect/src/favicon.ico b/apps/signal/50-bug-in-effect/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - console.error(err), -); diff --git a/apps/signal/50-bug-in-effect/src/styles.scss b/apps/signal/50-bug-in-effect/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/signal/50-bug-in-effect/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/signal/50-bug-in-effect/tailwind.config.js b/apps/signal/50-bug-in-effect/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/signal/50-bug-in-effect/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/signal/50-bug-in-effect/tsconfig.app.json b/apps/signal/50-bug-in-effect/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/signal/50-bug-in-effect/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/signal/51-function-call-effect/.eslintrc.json b/apps/signal/51-function-call-effect/.eslintrc.json deleted file mode 100644 index 8ebcbfd59..000000000 --- a/apps/signal/51-function-call-effect/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - } - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/signal/51-function-call-effect/src/app/app.config.ts b/apps/signal/51-function-call-effect/src/app/app.config.ts deleted file mode 100644 index 81a6edde4..000000000 --- a/apps/signal/51-function-call-effect/src/app/app.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ApplicationConfig } from '@angular/core'; - -export const appConfig: ApplicationConfig = { - providers: [], -}; diff --git a/apps/signal/51-function-call-effect/src/assets/.gitkeep b/apps/signal/51-function-call-effect/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/signal/51-function-call-effect/src/favicon.ico b/apps/signal/51-function-call-effect/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - console.error(err), -); diff --git a/apps/signal/51-function-call-effect/src/styles.scss b/apps/signal/51-function-call-effect/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/signal/51-function-call-effect/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/signal/51-function-call-effect/tailwind.config.js b/apps/signal/51-function-call-effect/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/signal/51-function-call-effect/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/signal/51-function-call-effect/tsconfig.app.json b/apps/signal/51-function-call-effect/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/signal/51-function-call-effect/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/signal/51-function-call-effect/tsconfig.editor.json b/apps/signal/51-function-call-effect/tsconfig.editor.json deleted file mode 100644 index a8ac182c0..000000000 --- a/apps/signal/51-function-call-effect/tsconfig.editor.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": {}, - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/signal/53-big-signal-performance/.eslintrc.json b/apps/signal/53-big-signal-performance/.eslintrc.json deleted file mode 100644 index d3cd7997a..000000000 --- a/apps/signal/53-big-signal-performance/.eslintrc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ], - "rules": {} - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/signal/53-big-signal-performance/README.md b/apps/signal/53-big-signal-performance/README.md deleted file mode 100644 index 2b1b56672..000000000 --- a/apps/signal/53-big-signal-performance/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Big Signal Performance - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve signal-big-signal-performance -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/signal/52-big-signal-performance/). diff --git a/apps/signal/53-big-signal-performance/project.json b/apps/signal/53-big-signal-performance/project.json deleted file mode 100644 index 9795c4032..000000000 --- a/apps/signal/53-big-signal-performance/project.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "signal-big-signal-performance", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/signal/53-big-signal-performance/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/signal/53-big-signal-performance", - "index": "apps/signal/53-big-signal-performance/src/index.html", - "browser": "apps/signal/53-big-signal-performance/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/signal/53-big-signal-performance/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/signal/53-big-signal-performance/src/favicon.ico", - "apps/signal/53-big-signal-performance/src/assets" - ], - "styles": ["apps/signal/53-big-signal-performance/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "signal-big-signal-performance:build:production" - }, - "development": { - "buildTarget": "signal-big-signal-performance:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "signal-big-signal-performance:build" - } - } - } -} diff --git a/apps/signal/53-big-signal-performance/src/app/address.component.ts b/apps/signal/53-big-signal-performance/src/app/address.component.ts deleted file mode 100644 index f894d697e..000000000 --- a/apps/signal/53-big-signal-performance/src/app/address.component.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { CDFlashingDirective } from '@angular-challenges/shared/directives'; -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; -import { UserStore } from './user.service'; - -@Component({ - selector: 'address-user', - template: ` -
- Address: -
Street: {{ userService.user().address.street }}
-
ZipCode: {{ userService.user().address.zipCode }}
-
City: {{ userService.user().address.city }}
-
- `, - changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CDFlashingDirective], -}) -export class AddressComponent { - userService = inject(UserStore); -} diff --git a/apps/signal/53-big-signal-performance/src/app/app.component.ts b/apps/signal/53-big-signal-performance/src/app/app.component.ts deleted file mode 100644 index bf15a5dc2..000000000 --- a/apps/signal/53-big-signal-performance/src/app/app.component.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Component } from '@angular/core'; -import { AddressComponent } from './address.component'; -import { JobComponent } from './job.component'; -import { NameComponent } from './name.component'; -import { NoteComponent } from './note.component'; -import { UserFormComponent } from './user-form.component'; - -@Component({ - selector: 'app-root', - template: ` - - - - - - `, - styles: [''], - imports: [ - JobComponent, - NameComponent, - AddressComponent, - NoteComponent, - UserFormComponent, - ], -}) -export class AppComponent {} diff --git a/apps/signal/53-big-signal-performance/src/app/app.config.ts b/apps/signal/53-big-signal-performance/src/app/app.config.ts deleted file mode 100644 index 81a6edde4..000000000 --- a/apps/signal/53-big-signal-performance/src/app/app.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ApplicationConfig } from '@angular/core'; - -export const appConfig: ApplicationConfig = { - providers: [], -}; diff --git a/apps/signal/53-big-signal-performance/src/app/job.component.ts b/apps/signal/53-big-signal-performance/src/app/job.component.ts deleted file mode 100644 index d3186fc9f..000000000 --- a/apps/signal/53-big-signal-performance/src/app/job.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { CDFlashingDirective } from '@angular-challenges/shared/directives'; -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; -import { UserStore } from './user.service'; - -@Component({ - selector: 'job', - template: ` -
- Job: -
title: {{ userService.user().title }}
-
salary: {{ userService.user().salary }}
-
- `, - changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CDFlashingDirective], -}) -export class JobComponent { - userService = inject(UserStore); -} diff --git a/apps/signal/53-big-signal-performance/src/app/name.component.ts b/apps/signal/53-big-signal-performance/src/app/name.component.ts deleted file mode 100644 index f93b5675a..000000000 --- a/apps/signal/53-big-signal-performance/src/app/name.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { CDFlashingDirective } from '@angular-challenges/shared/directives'; -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; -import { UserStore } from './user.service'; - -@Component({ - selector: 'name', - template: ` -
- Name: {{ userService.user().name }} -
- `, - changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CDFlashingDirective], -}) -export class NameComponent { - userService = inject(UserStore); -} diff --git a/apps/signal/53-big-signal-performance/src/app/note.component.ts b/apps/signal/53-big-signal-performance/src/app/note.component.ts deleted file mode 100644 index dd0033962..000000000 --- a/apps/signal/53-big-signal-performance/src/app/note.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { CDFlashingDirective } from '@angular-challenges/shared/directives'; -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; -import { UserStore } from './user.service'; - -@Component({ - selector: 'note', - template: ` -
- Note: {{ userService.user().note }} -
- `, - changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CDFlashingDirective], -}) -export class NoteComponent { - userService = inject(UserStore); -} diff --git a/apps/signal/53-big-signal-performance/src/app/user-form.component.ts b/apps/signal/53-big-signal-performance/src/app/user-form.component.ts deleted file mode 100644 index d0f2164ce..000000000 --- a/apps/signal/53-big-signal-performance/src/app/user-form.component.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { UserStore } from './user.service'; - -@Component({ - selector: 'user-form', - imports: [ReactiveFormsModule], - template: ` -
-
- Name: - -
-
- Address: -
- street: - -
-
- zipCode: - -
-
- city: - -
-
-
- note: - -
-
- title: - -
-
- salary: - -
- -
- `, - host: { - class: 'block border border-gray-500 p-4 pt-10 m-4', - }, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class UserFormComponent { - userStore = inject(UserStore); - - form = new FormGroup({ - name: new FormControl(this.userStore.user().name, { nonNullable: true }), - street: new FormControl(this.userStore.user().address.street, { - nonNullable: true, - }), - zipCode: new FormControl(this.userStore.user().address.zipCode, { - nonNullable: true, - }), - city: new FormControl(this.userStore.user().address.city, { - nonNullable: true, - }), - note: new FormControl(this.userStore.user().note, { nonNullable: true }), - title: new FormControl(this.userStore.user().title, { nonNullable: true }), - salary: new FormControl(this.userStore.user().salary, { - nonNullable: true, - }), - }); - - submit() { - this.userStore.user.update((u) => ({ - ...u, - name: this.form.getRawValue().name, - address: { - ...u.address, - street: this.form.getRawValue().street, - zipCode: this.form.getRawValue().zipCode, - city: this.form.getRawValue().city, - }, - note: this.form.getRawValue().note, - title: this.form.getRawValue().title, - salary: this.form.getRawValue().salary, - })); - } -} diff --git a/apps/signal/53-big-signal-performance/src/app/user.service.ts b/apps/signal/53-big-signal-performance/src/app/user.service.ts deleted file mode 100644 index 4b3b7c512..000000000 --- a/apps/signal/53-big-signal-performance/src/app/user.service.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Injectable, signal } from '@angular/core'; - -@Injectable({ providedIn: 'root' }) -export class UserStore { - user = signal({ - name: 'Bob', - address: { - street: '', - zipCode: '', - city: '', - }, - note: '', - title: '', - salary: 0, - }); -} diff --git a/apps/signal/53-big-signal-performance/src/assets/.gitkeep b/apps/signal/53-big-signal-performance/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/signal/53-big-signal-performance/src/favicon.ico b/apps/signal/53-big-signal-performance/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - signal-big-signal-performance - - - - - - - - diff --git a/apps/signal/53-big-signal-performance/src/main.ts b/apps/signal/53-big-signal-performance/src/main.ts deleted file mode 100644 index f3a7223da..000000000 --- a/apps/signal/53-big-signal-performance/src/main.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; -import { appConfig } from './app/app.config'; - -bootstrapApplication(AppComponent, appConfig).catch((err) => - console.error(err), -); diff --git a/apps/signal/53-big-signal-performance/src/styles.scss b/apps/signal/53-big-signal-performance/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/signal/53-big-signal-performance/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/signal/53-big-signal-performance/tailwind.config.js b/apps/signal/53-big-signal-performance/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/signal/53-big-signal-performance/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/signal/53-big-signal-performance/tsconfig.app.json b/apps/signal/53-big-signal-performance/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/signal/53-big-signal-performance/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/signal/53-big-signal-performance/tsconfig.editor.json b/apps/signal/53-big-signal-performance/tsconfig.editor.json deleted file mode 100644 index a8ac182c0..000000000 --- a/apps/signal/53-big-signal-performance/tsconfig.editor.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": {}, - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/signal/54-pipe-observable-to-signal/.eslintrc.json b/apps/signal/54-pipe-observable-to-signal/.eslintrc.json deleted file mode 100644 index d3cd7997a..000000000 --- a/apps/signal/54-pipe-observable-to-signal/.eslintrc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ], - "rules": {} - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/signal/54-pipe-observable-to-signal/src/assets/.gitkeep b/apps/signal/54-pipe-observable-to-signal/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/signal/54-pipe-observable-to-signal/src/favicon.ico b/apps/signal/54-pipe-observable-to-signal/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 console.error(err)); diff --git a/apps/signal/54-pipe-observable-to-signal/tailwind.config.js b/apps/signal/54-pipe-observable-to-signal/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/signal/54-pipe-observable-to-signal/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/signal/54-pipe-observable-to-signal/tsconfig.app.json b/apps/signal/54-pipe-observable-to-signal/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/signal/54-pipe-observable-to-signal/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/signal/54-pipe-observable-to-signal/tsconfig.editor.json b/apps/signal/54-pipe-observable-to-signal/tsconfig.editor.json deleted file mode 100644 index a8ac182c0..000000000 --- a/apps/signal/54-pipe-observable-to-signal/tsconfig.editor.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": {}, - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/signal/56-forms-and-signal/.eslintrc.json b/apps/signal/56-forms-and-signal/.eslintrc.json deleted file mode 100644 index 8ebcbfd59..000000000 --- a/apps/signal/56-forms-and-signal/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - } - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/signal/56-forms-and-signal/public/favicon.ico b/apps/signal/56-forms-and-signal/public/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - console.error(err), -); diff --git a/apps/signal/56-forms-and-signal/src/styles.scss b/apps/signal/56-forms-and-signal/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/signal/56-forms-and-signal/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/signal/56-forms-and-signal/tailwind.config.js b/apps/signal/56-forms-and-signal/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/signal/56-forms-and-signal/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/signal/56-forms-and-signal/tsconfig.app.json b/apps/signal/56-forms-and-signal/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/signal/56-forms-and-signal/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/signal/56-forms-and-signal/tsconfig.editor.json b/apps/signal/56-forms-and-signal/tsconfig.editor.json deleted file mode 100644 index a8ac182c0..000000000 --- a/apps/signal/56-forms-and-signal/tsconfig.editor.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": {}, - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/signal/56-forms-and-signal/tsconfig.json b/apps/signal/56-forms-and-signal/tsconfig.json deleted file mode 100644 index 3df17b921..000000000 --- a/apps/signal/56-forms-and-signal/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./tsconfig.app.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/forms/48-avoid-losing-form-data/.eslintrc.json b/apps/signal/bug-in-effect/.eslintrc.json similarity index 100% rename from apps/forms/48-avoid-losing-form-data/.eslintrc.json rename to apps/signal/bug-in-effect/.eslintrc.json diff --git a/apps/signal/50-bug-in-effect/README.md b/apps/signal/bug-in-effect/README.md similarity index 100% rename from apps/signal/50-bug-in-effect/README.md rename to apps/signal/bug-in-effect/README.md diff --git a/apps/signal/50-bug-in-effect/project.json b/apps/signal/bug-in-effect/project.json similarity index 100% rename from apps/signal/50-bug-in-effect/project.json rename to apps/signal/bug-in-effect/project.json diff --git a/apps/signal/50-bug-in-effect/src/app/app.component.ts b/apps/signal/bug-in-effect/src/app/app.component.ts similarity index 100% rename from apps/signal/50-bug-in-effect/src/app/app.component.ts rename to apps/signal/bug-in-effect/src/app/app.component.ts diff --git a/apps/rxjs/49-hold-to-save-button/src/app/app.config.ts b/apps/signal/bug-in-effect/src/app/app.config.ts similarity index 100% rename from apps/rxjs/49-hold-to-save-button/src/app/app.config.ts rename to apps/signal/bug-in-effect/src/app/app.config.ts diff --git a/apps/performance/34-default-vs-onpush/src/assets/.gitkeep b/apps/signal/bug-in-effect/src/assets/.gitkeep similarity index 100% rename from apps/performance/34-default-vs-onpush/src/assets/.gitkeep rename to apps/signal/bug-in-effect/src/assets/.gitkeep diff --git a/apps/forms/48-avoid-losing-form-data/src/favicon.ico b/apps/signal/bug-in-effect/src/favicon.ico similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/favicon.ico rename to apps/signal/bug-in-effect/src/favicon.ico diff --git a/apps/signal/50-bug-in-effect/src/index.html b/apps/signal/bug-in-effect/src/index.html similarity index 100% rename from apps/signal/50-bug-in-effect/src/index.html rename to apps/signal/bug-in-effect/src/index.html diff --git a/apps/forms/48-avoid-losing-form-data/src/main.ts b/apps/signal/bug-in-effect/src/main.ts similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/main.ts rename to apps/signal/bug-in-effect/src/main.ts diff --git a/apps/angular/60-async-redirect/src/styles.scss b/apps/signal/bug-in-effect/src/styles.scss similarity index 100% rename from apps/angular/60-async-redirect/src/styles.scss rename to apps/signal/bug-in-effect/src/styles.scss diff --git a/apps/angular/60-async-redirect/tailwind.config.js b/apps/signal/bug-in-effect/tailwind.config.js similarity index 100% rename from apps/angular/60-async-redirect/tailwind.config.js rename to apps/signal/bug-in-effect/tailwind.config.js diff --git a/apps/angular/31-module-to-standalone/tsconfig.app.json b/apps/signal/bug-in-effect/tsconfig.app.json similarity index 100% rename from apps/angular/31-module-to-standalone/tsconfig.app.json rename to apps/signal/bug-in-effect/tsconfig.app.json diff --git a/apps/angular/58-content-projection-condition/tsconfig.editor.json b/apps/signal/bug-in-effect/tsconfig.editor.json similarity index 100% rename from apps/angular/58-content-projection-condition/tsconfig.editor.json rename to apps/signal/bug-in-effect/tsconfig.editor.json diff --git a/apps/signal/50-bug-in-effect/tsconfig.json b/apps/signal/bug-in-effect/tsconfig.json similarity index 100% rename from apps/signal/50-bug-in-effect/tsconfig.json rename to apps/signal/bug-in-effect/tsconfig.json diff --git a/apps/nx/42-static-vs-dynamic-import/.eslintrc.json b/apps/signal/forms-and-signal/.eslintrc.json similarity index 100% rename from apps/nx/42-static-vs-dynamic-import/.eslintrc.json rename to apps/signal/forms-and-signal/.eslintrc.json diff --git a/apps/signal/56-forms-and-signal/README.md b/apps/signal/forms-and-signal/README.md similarity index 100% rename from apps/signal/56-forms-and-signal/README.md rename to apps/signal/forms-and-signal/README.md diff --git a/apps/signal/56-forms-and-signal/project.json b/apps/signal/forms-and-signal/project.json similarity index 100% rename from apps/signal/56-forms-and-signal/project.json rename to apps/signal/forms-and-signal/project.json diff --git a/apps/nx/42-static-vs-dynamic-import/src/favicon.ico b/apps/signal/forms-and-signal/public/favicon.ico similarity index 100% rename from apps/nx/42-static-vs-dynamic-import/src/favicon.ico rename to apps/signal/forms-and-signal/public/favicon.ico diff --git a/apps/signal/56-forms-and-signal/src/app/app.component.ts b/apps/signal/forms-and-signal/src/app/app.component.ts similarity index 100% rename from apps/signal/56-forms-and-signal/src/app/app.component.ts rename to apps/signal/forms-and-signal/src/app/app.component.ts diff --git a/apps/signal/56-forms-and-signal/src/app/app.config.ts b/apps/signal/forms-and-signal/src/app/app.config.ts similarity index 100% rename from apps/signal/56-forms-and-signal/src/app/app.config.ts rename to apps/signal/forms-and-signal/src/app/app.config.ts diff --git a/apps/signal/56-forms-and-signal/src/app/app.routes.ts b/apps/signal/forms-and-signal/src/app/app.routes.ts similarity index 100% rename from apps/signal/56-forms-and-signal/src/app/app.routes.ts rename to apps/signal/forms-and-signal/src/app/app.routes.ts diff --git a/apps/signal/56-forms-and-signal/src/app/checkout.component.ts b/apps/signal/forms-and-signal/src/app/checkout.component.ts similarity index 100% rename from apps/signal/56-forms-and-signal/src/app/checkout.component.ts rename to apps/signal/forms-and-signal/src/app/checkout.component.ts diff --git a/apps/signal/56-forms-and-signal/src/app/dashboard.component.ts b/apps/signal/forms-and-signal/src/app/dashboard.component.ts similarity index 100% rename from apps/signal/56-forms-and-signal/src/app/dashboard.component.ts rename to apps/signal/forms-and-signal/src/app/dashboard.component.ts diff --git a/apps/signal/56-forms-and-signal/src/app/order.component.ts b/apps/signal/forms-and-signal/src/app/order.component.ts similarity index 100% rename from apps/signal/56-forms-and-signal/src/app/order.component.ts rename to apps/signal/forms-and-signal/src/app/order.component.ts diff --git a/apps/signal/56-forms-and-signal/src/app/payment.component.ts b/apps/signal/forms-and-signal/src/app/payment.component.ts similarity index 100% rename from apps/signal/56-forms-and-signal/src/app/payment.component.ts rename to apps/signal/forms-and-signal/src/app/payment.component.ts diff --git a/apps/signal/56-forms-and-signal/src/app/products.ts b/apps/signal/forms-and-signal/src/app/products.ts similarity index 100% rename from apps/signal/56-forms-and-signal/src/app/products.ts rename to apps/signal/forms-and-signal/src/app/products.ts diff --git a/apps/signal/56-forms-and-signal/src/index.html b/apps/signal/forms-and-signal/src/index.html similarity index 100% rename from apps/signal/56-forms-and-signal/src/index.html rename to apps/signal/forms-and-signal/src/index.html diff --git a/apps/nx/42-static-vs-dynamic-import/src/main.ts b/apps/signal/forms-and-signal/src/main.ts similarity index 100% rename from apps/nx/42-static-vs-dynamic-import/src/main.ts rename to apps/signal/forms-and-signal/src/main.ts diff --git a/apps/forms/41-control-value-accessor/src/styles.scss b/apps/signal/forms-and-signal/src/styles.scss similarity index 100% rename from apps/forms/41-control-value-accessor/src/styles.scss rename to apps/signal/forms-and-signal/src/styles.scss diff --git a/apps/forms/41-control-value-accessor/tailwind.config.js b/apps/signal/forms-and-signal/tailwind.config.js similarity index 100% rename from apps/forms/41-control-value-accessor/tailwind.config.js rename to apps/signal/forms-and-signal/tailwind.config.js diff --git a/apps/angular/32-change-detection-bug/tsconfig.app.json b/apps/signal/forms-and-signal/tsconfig.app.json similarity index 100% rename from apps/angular/32-change-detection-bug/tsconfig.app.json rename to apps/signal/forms-and-signal/tsconfig.app.json diff --git a/apps/angular/59-content-projection-defer/tsconfig.editor.json b/apps/signal/forms-and-signal/tsconfig.editor.json similarity index 100% rename from apps/angular/59-content-projection-defer/tsconfig.editor.json rename to apps/signal/forms-and-signal/tsconfig.editor.json diff --git a/apps/signal/51-function-call-effect/tsconfig.json b/apps/signal/forms-and-signal/tsconfig.json similarity index 100% rename from apps/signal/51-function-call-effect/tsconfig.json rename to apps/signal/forms-and-signal/tsconfig.json diff --git a/apps/rxjs/11-high-order-operator-bug/.eslintrc.json b/apps/signal/function-call-effect/.eslintrc.json similarity index 100% rename from apps/rxjs/11-high-order-operator-bug/.eslintrc.json rename to apps/signal/function-call-effect/.eslintrc.json diff --git a/apps/signal/51-function-call-effect/README.md b/apps/signal/function-call-effect/README.md similarity index 100% rename from apps/signal/51-function-call-effect/README.md rename to apps/signal/function-call-effect/README.md diff --git a/apps/signal/51-function-call-effect/project.json b/apps/signal/function-call-effect/project.json similarity index 100% rename from apps/signal/51-function-call-effect/project.json rename to apps/signal/function-call-effect/project.json diff --git a/apps/signal/51-function-call-effect/src/app/action.component.ts b/apps/signal/function-call-effect/src/app/action.component.ts similarity index 100% rename from apps/signal/51-function-call-effect/src/app/action.component.ts rename to apps/signal/function-call-effect/src/app/action.component.ts diff --git a/apps/signal/51-function-call-effect/src/app/app.component.ts b/apps/signal/function-call-effect/src/app/app.component.ts similarity index 100% rename from apps/signal/51-function-call-effect/src/app/app.component.ts rename to apps/signal/function-call-effect/src/app/app.component.ts diff --git a/apps/signal/43-signal-input/src/app/app.config.ts b/apps/signal/function-call-effect/src/app/app.config.ts similarity index 100% rename from apps/signal/43-signal-input/src/app/app.config.ts rename to apps/signal/function-call-effect/src/app/app.config.ts diff --git a/apps/signal/51-function-call-effect/src/app/user.service.ts b/apps/signal/function-call-effect/src/app/user.service.ts similarity index 100% rename from apps/signal/51-function-call-effect/src/app/user.service.ts rename to apps/signal/function-call-effect/src/app/user.service.ts diff --git a/apps/performance/35-memoization/src/assets/.gitkeep b/apps/signal/function-call-effect/src/assets/.gitkeep similarity index 100% rename from apps/performance/35-memoization/src/assets/.gitkeep rename to apps/signal/function-call-effect/src/assets/.gitkeep diff --git a/apps/performance/12-optimize-change-detection/src/favicon.ico b/apps/signal/function-call-effect/src/favicon.ico similarity index 100% rename from apps/performance/12-optimize-change-detection/src/favicon.ico rename to apps/signal/function-call-effect/src/favicon.ico diff --git a/apps/signal/51-function-call-effect/src/index.html b/apps/signal/function-call-effect/src/index.html similarity index 100% rename from apps/signal/51-function-call-effect/src/index.html rename to apps/signal/function-call-effect/src/index.html diff --git a/apps/performance/34-default-vs-onpush/src/main.ts b/apps/signal/function-call-effect/src/main.ts similarity index 100% rename from apps/performance/34-default-vs-onpush/src/main.ts rename to apps/signal/function-call-effect/src/main.ts diff --git a/apps/forms/48-avoid-losing-form-data/src/styles.scss b/apps/signal/function-call-effect/src/styles.scss similarity index 100% rename from apps/forms/48-avoid-losing-form-data/src/styles.scss rename to apps/signal/function-call-effect/src/styles.scss diff --git a/apps/nx/42-static-vs-dynamic-import/tailwind.config.js b/apps/signal/function-call-effect/tailwind.config.js similarity index 100% rename from apps/nx/42-static-vs-dynamic-import/tailwind.config.js rename to apps/signal/function-call-effect/tailwind.config.js diff --git a/apps/angular/33-decoupling-components/tsconfig.app.json b/apps/signal/function-call-effect/tsconfig.app.json similarity index 100% rename from apps/angular/33-decoupling-components/tsconfig.app.json rename to apps/signal/function-call-effect/tsconfig.app.json diff --git a/apps/forms/48-avoid-losing-form-data/tsconfig.editor.json b/apps/signal/function-call-effect/tsconfig.editor.json similarity index 100% rename from apps/forms/48-avoid-losing-form-data/tsconfig.editor.json rename to apps/signal/function-call-effect/tsconfig.editor.json diff --git a/apps/signal/53-big-signal-performance/tsconfig.json b/apps/signal/function-call-effect/tsconfig.json similarity index 100% rename from apps/signal/53-big-signal-performance/tsconfig.json rename to apps/signal/function-call-effect/tsconfig.json diff --git a/apps/performance/40-web-workers/.eslintrc.json b/apps/signal/pipe-observable-to-signal/.eslintrc.json similarity index 100% rename from apps/performance/40-web-workers/.eslintrc.json rename to apps/signal/pipe-observable-to-signal/.eslintrc.json diff --git a/apps/signal/54-pipe-observable-to-signal/README.md b/apps/signal/pipe-observable-to-signal/README.md similarity index 100% rename from apps/signal/54-pipe-observable-to-signal/README.md rename to apps/signal/pipe-observable-to-signal/README.md diff --git a/apps/signal/54-pipe-observable-to-signal/project.json b/apps/signal/pipe-observable-to-signal/project.json similarity index 100% rename from apps/signal/54-pipe-observable-to-signal/project.json rename to apps/signal/pipe-observable-to-signal/project.json diff --git a/apps/signal/54-pipe-observable-to-signal/src/app/app.component.ts b/apps/signal/pipe-observable-to-signal/src/app/app.component.ts similarity index 100% rename from apps/signal/54-pipe-observable-to-signal/src/app/app.component.ts rename to apps/signal/pipe-observable-to-signal/src/app/app.component.ts diff --git a/apps/signal/54-pipe-observable-to-signal/src/app/currency.pipe.ts b/apps/signal/pipe-observable-to-signal/src/app/currency.pipe.ts similarity index 100% rename from apps/signal/54-pipe-observable-to-signal/src/app/currency.pipe.ts rename to apps/signal/pipe-observable-to-signal/src/app/currency.pipe.ts diff --git a/apps/signal/54-pipe-observable-to-signal/src/app/currency.service.ts b/apps/signal/pipe-observable-to-signal/src/app/currency.service.ts similarity index 100% rename from apps/signal/54-pipe-observable-to-signal/src/app/currency.service.ts rename to apps/signal/pipe-observable-to-signal/src/app/currency.service.ts diff --git a/apps/signal/54-pipe-observable-to-signal/src/app/product-row.component.ts b/apps/signal/pipe-observable-to-signal/src/app/product-row.component.ts similarity index 100% rename from apps/signal/54-pipe-observable-to-signal/src/app/product-row.component.ts rename to apps/signal/pipe-observable-to-signal/src/app/product-row.component.ts diff --git a/apps/signal/54-pipe-observable-to-signal/src/app/product.model.ts b/apps/signal/pipe-observable-to-signal/src/app/product.model.ts similarity index 100% rename from apps/signal/54-pipe-observable-to-signal/src/app/product.model.ts rename to apps/signal/pipe-observable-to-signal/src/app/product.model.ts diff --git a/apps/performance/36-ngfor-optimization/src/assets/.gitkeep b/apps/signal/pipe-observable-to-signal/src/assets/.gitkeep similarity index 100% rename from apps/performance/36-ngfor-optimization/src/assets/.gitkeep rename to apps/signal/pipe-observable-to-signal/src/assets/.gitkeep diff --git a/apps/performance/34-default-vs-onpush/src/favicon.ico b/apps/signal/pipe-observable-to-signal/src/favicon.ico similarity index 100% rename from apps/performance/34-default-vs-onpush/src/favicon.ico rename to apps/signal/pipe-observable-to-signal/src/favicon.ico diff --git a/apps/signal/54-pipe-observable-to-signal/src/index.html b/apps/signal/pipe-observable-to-signal/src/index.html similarity index 100% rename from apps/signal/54-pipe-observable-to-signal/src/index.html rename to apps/signal/pipe-observable-to-signal/src/index.html diff --git a/apps/performance/12-optimize-change-detection/src/main.ts b/apps/signal/pipe-observable-to-signal/src/main.ts similarity index 100% rename from apps/performance/12-optimize-change-detection/src/main.ts rename to apps/signal/pipe-observable-to-signal/src/main.ts diff --git a/apps/signal/54-pipe-observable-to-signal/src/styles.scss b/apps/signal/pipe-observable-to-signal/src/styles.scss similarity index 100% rename from apps/signal/54-pipe-observable-to-signal/src/styles.scss rename to apps/signal/pipe-observable-to-signal/src/styles.scss diff --git a/apps/performance/34-default-vs-onpush/tailwind.config.js b/apps/signal/pipe-observable-to-signal/tailwind.config.js similarity index 100% rename from apps/performance/34-default-vs-onpush/tailwind.config.js rename to apps/signal/pipe-observable-to-signal/tailwind.config.js diff --git a/apps/angular/39-injection-token/tsconfig.app.json b/apps/signal/pipe-observable-to-signal/tsconfig.app.json similarity index 100% rename from apps/angular/39-injection-token/tsconfig.app.json rename to apps/signal/pipe-observable-to-signal/tsconfig.app.json diff --git a/apps/rxjs/49-hold-to-save-button/tsconfig.editor.json b/apps/signal/pipe-observable-to-signal/tsconfig.editor.json similarity index 100% rename from apps/rxjs/49-hold-to-save-button/tsconfig.editor.json rename to apps/signal/pipe-observable-to-signal/tsconfig.editor.json diff --git a/apps/signal/54-pipe-observable-to-signal/tsconfig.json b/apps/signal/pipe-observable-to-signal/tsconfig.json similarity index 100% rename from apps/signal/54-pipe-observable-to-signal/tsconfig.json rename to apps/signal/pipe-observable-to-signal/tsconfig.json diff --git a/apps/rxjs/49-hold-to-save-button/.eslintrc.json b/apps/signal/signal-input/.eslintrc.json similarity index 100% rename from apps/rxjs/49-hold-to-save-button/.eslintrc.json rename to apps/signal/signal-input/.eslintrc.json diff --git a/apps/signal/43-signal-input/README.md b/apps/signal/signal-input/README.md similarity index 100% rename from apps/signal/43-signal-input/README.md rename to apps/signal/signal-input/README.md diff --git a/apps/signal/43-signal-input/project.json b/apps/signal/signal-input/project.json similarity index 100% rename from apps/signal/43-signal-input/project.json rename to apps/signal/signal-input/project.json diff --git a/apps/signal/43-signal-input/src/app/app.component.ts b/apps/signal/signal-input/src/app/app.component.ts similarity index 100% rename from apps/signal/43-signal-input/src/app/app.component.ts rename to apps/signal/signal-input/src/app/app.component.ts diff --git a/apps/signal/50-bug-in-effect/src/app/app.config.ts b/apps/signal/signal-input/src/app/app.config.ts similarity index 100% rename from apps/signal/50-bug-in-effect/src/app/app.config.ts rename to apps/signal/signal-input/src/app/app.config.ts diff --git a/apps/signal/43-signal-input/src/app/user.component.ts b/apps/signal/signal-input/src/app/user.component.ts similarity index 100% rename from apps/signal/43-signal-input/src/app/user.component.ts rename to apps/signal/signal-input/src/app/user.component.ts diff --git a/apps/performance/37-optimize-big-list/src/assets/.gitkeep b/apps/signal/signal-input/src/assets/.gitkeep similarity index 100% rename from apps/performance/37-optimize-big-list/src/assets/.gitkeep rename to apps/signal/signal-input/src/assets/.gitkeep diff --git a/apps/performance/35-memoization/src/favicon.ico b/apps/signal/signal-input/src/favicon.ico similarity index 100% rename from apps/performance/35-memoization/src/favicon.ico rename to apps/signal/signal-input/src/favicon.ico diff --git a/apps/signal/43-signal-input/src/index.html b/apps/signal/signal-input/src/index.html similarity index 100% rename from apps/signal/43-signal-input/src/index.html rename to apps/signal/signal-input/src/index.html diff --git a/apps/performance/35-memoization/src/main.ts b/apps/signal/signal-input/src/main.ts similarity index 100% rename from apps/performance/35-memoization/src/main.ts rename to apps/signal/signal-input/src/main.ts diff --git a/apps/nx/42-static-vs-dynamic-import/src/styles.scss b/apps/signal/signal-input/src/styles.scss similarity index 100% rename from apps/nx/42-static-vs-dynamic-import/src/styles.scss rename to apps/signal/signal-input/src/styles.scss diff --git a/apps/performance/35-memoization/tailwind.config.js b/apps/signal/signal-input/tailwind.config.js similarity index 100% rename from apps/performance/35-memoization/tailwind.config.js rename to apps/signal/signal-input/tailwind.config.js diff --git a/apps/angular/44-view-transition/tsconfig.app.json b/apps/signal/signal-input/tsconfig.app.json similarity index 100% rename from apps/angular/44-view-transition/tsconfig.app.json rename to apps/signal/signal-input/tsconfig.app.json diff --git a/apps/nx/42-static-vs-dynamic-import/tsconfig.editor.json b/apps/signal/signal-input/tsconfig.editor.json similarity index 100% rename from apps/nx/42-static-vs-dynamic-import/tsconfig.editor.json rename to apps/signal/signal-input/tsconfig.editor.json diff --git a/apps/nx/42-static-vs-dynamic-import/tsconfig.json b/apps/signal/signal-input/tsconfig.json similarity index 100% rename from apps/nx/42-static-vs-dynamic-import/tsconfig.json rename to apps/signal/signal-input/tsconfig.json diff --git a/apps/performance/35-memoization/.eslintrc.json b/apps/standalone/module-to-standalone/.eslintrc.json similarity index 100% rename from apps/performance/35-memoization/.eslintrc.json rename to apps/standalone/module-to-standalone/.eslintrc.json diff --git a/apps/angular/31-module-to-standalone/README.md b/apps/standalone/module-to-standalone/README.md similarity index 100% rename from apps/angular/31-module-to-standalone/README.md rename to apps/standalone/module-to-standalone/README.md diff --git a/apps/angular/31-module-to-standalone/project.json b/apps/standalone/module-to-standalone/project.json similarity index 100% rename from apps/angular/31-module-to-standalone/project.json rename to apps/standalone/module-to-standalone/project.json diff --git a/apps/angular/31-module-to-standalone/src/app/app.component.ts b/apps/standalone/module-to-standalone/src/app/app.component.ts similarity index 100% rename from apps/angular/31-module-to-standalone/src/app/app.component.ts rename to apps/standalone/module-to-standalone/src/app/app.component.ts diff --git a/apps/angular/31-module-to-standalone/src/app/app.module.ts b/apps/standalone/module-to-standalone/src/app/app.module.ts similarity index 100% rename from apps/angular/31-module-to-standalone/src/app/app.module.ts rename to apps/standalone/module-to-standalone/src/app/app.module.ts diff --git a/apps/performance/40-web-workers/src/assets/.gitkeep b/apps/standalone/module-to-standalone/src/assets/.gitkeep similarity index 100% rename from apps/performance/40-web-workers/src/assets/.gitkeep rename to apps/standalone/module-to-standalone/src/assets/.gitkeep diff --git a/apps/performance/36-ngfor-optimization/src/favicon.ico b/apps/standalone/module-to-standalone/src/favicon.ico similarity index 100% rename from apps/performance/36-ngfor-optimization/src/favicon.ico rename to apps/standalone/module-to-standalone/src/favicon.ico diff --git a/apps/angular/31-module-to-standalone/src/index.html b/apps/standalone/module-to-standalone/src/index.html similarity index 100% rename from apps/angular/31-module-to-standalone/src/index.html rename to apps/standalone/module-to-standalone/src/index.html diff --git a/apps/angular/52-lazy-load-component/src/main.ts b/apps/standalone/module-to-standalone/src/main.ts similarity index 100% rename from apps/angular/52-lazy-load-component/src/main.ts rename to apps/standalone/module-to-standalone/src/main.ts diff --git a/apps/performance/34-default-vs-onpush/src/styles.scss b/apps/standalone/module-to-standalone/src/styles.scss similarity index 100% rename from apps/performance/34-default-vs-onpush/src/styles.scss rename to apps/standalone/module-to-standalone/src/styles.scss diff --git a/apps/angular/31-module-to-standalone/tailwind.config.js b/apps/standalone/module-to-standalone/tailwind.config.js similarity index 100% rename from apps/angular/31-module-to-standalone/tailwind.config.js rename to apps/standalone/module-to-standalone/tailwind.config.js diff --git a/apps/standalone/module-to-standalone/tsconfig.app.json b/apps/standalone/module-to-standalone/tsconfig.app.json new file mode 100644 index 000000000..403fe4f54 --- /dev/null +++ b/apps/standalone/module-to-standalone/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": [ + "src/main.ts" + ], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/angular/31-module-to-standalone/tsconfig.editor.json b/apps/standalone/module-to-standalone/tsconfig.editor.json similarity index 71% rename from apps/angular/31-module-to-standalone/tsconfig.editor.json rename to apps/standalone/module-to-standalone/tsconfig.editor.json index ccb35c609..91f5718dc 100644 --- a/apps/angular/31-module-to-standalone/tsconfig.editor.json +++ b/apps/standalone/module-to-standalone/tsconfig.editor.json @@ -2,7 +2,7 @@ "extends": "./tsconfig.json", "include": [ "src/**/*.ts", - "../../../libs/module-to-standalone/shell/src/lib/main-shell.routes.ts", + "../../../libs/module-to-standalone/shell/src/lib/main-shell.routes.ts", "../../../libs/module-to-standalone/shell/src/lib/main-shell.component.ts" ], "compilerOptions": { diff --git a/apps/angular/33-decoupling-components/tsconfig.json b/apps/standalone/module-to-standalone/tsconfig.json similarity index 100% rename from apps/angular/33-decoupling-components/tsconfig.json rename to apps/standalone/module-to-standalone/tsconfig.json diff --git a/apps/testing/17-router/.eslintrc.json b/apps/testing/17-router/.eslintrc.json deleted file mode 100644 index bf8df1428..000000000 --- a/apps/testing/17-router/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/testing/17-router/README.md b/apps/testing/17-router/README.md deleted file mode 100644 index fe9a75448..000000000 --- a/apps/testing/17-router/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Router - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve testing-router -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/testing/17-router/). diff --git a/apps/testing/17-router/cypress.config.ts b/apps/testing/17-router/cypress.config.ts deleted file mode 100644 index 3738464ee..000000000 --- a/apps/testing/17-router/cypress.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { nxComponentTestingPreset } from '@nx/angular/plugins/component-testing'; -import { defineConfig } from 'cypress'; - -export default defineConfig({ - component: { - ...nxComponentTestingPreset(__filename), - }, -}); diff --git a/apps/testing/17-router/cypress/fixtures/example.json b/apps/testing/17-router/cypress/fixtures/example.json deleted file mode 100644 index 02e425437..000000000 --- a/apps/testing/17-router/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} diff --git a/apps/testing/17-router/cypress/support/commands.ts b/apps/testing/17-router/cypress/support/commands.ts deleted file mode 100644 index b5d8a9582..000000000 --- a/apps/testing/17-router/cypress/support/commands.ts +++ /dev/null @@ -1,25 +0,0 @@ -/// -import { mount } from 'cypress/angular'; - -// *********************************************** -// This example commands.ts shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** - -declare global { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace Cypress { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - interface Chainable { - login(email: string, password: string): void; - mount: typeof mount; - } - } -} - -Cypress.Commands.add('mount', mount); diff --git a/apps/testing/17-router/cypress/support/component-index.html b/apps/testing/17-router/cypress/support/component-index.html deleted file mode 100644 index 208ea7126..000000000 --- a/apps/testing/17-router/cypress/support/component-index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - router-testing Components App - - -
- - diff --git a/apps/testing/17-router/cypress/support/component.ts b/apps/testing/17-router/cypress/support/component.ts deleted file mode 100644 index e7c3e3cbc..000000000 --- a/apps/testing/17-router/cypress/support/component.ts +++ /dev/null @@ -1,17 +0,0 @@ -// *********************************************************** -// This example support/component.ts is processed and -// loaded automatically before your subscription files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.ts using ES2015 syntax: -import './commands'; diff --git a/apps/testing/17-router/cypress/tsconfig.json b/apps/testing/17-router/cypress/tsconfig.json deleted file mode 100644 index 918d96378..000000000 --- a/apps/testing/17-router/cypress/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["cypress", "node"], - "sourceMap": false - }, - "include": [ - "support/**/*.ts", - "../cypress.config.ts", - "../**/*.cy.ts", - "../**/*.cy.tsx", - "../**/*.cy.js", - "../**/*.cy.jsx", - "../**/*.d.ts" - ] -} diff --git a/apps/testing/17-router/jest.config.ts b/apps/testing/17-router/jest.config.ts deleted file mode 100644 index 997c99f0e..000000000 --- a/apps/testing/17-router/jest.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'testing-router', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - globals: {}, - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/testing/17-router/project.json b/apps/testing/17-router/project.json deleted file mode 100644 index dba3c0666..000000000 --- a/apps/testing/17-router/project.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "name": "testing-router", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/testing/17-router/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/testing/17-router", - "index": "apps/testing/17-router/src/index.html", - "main": "apps/testing/17-router/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/testing/17-router/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/testing/17-router/src/favicon.ico", - "apps/testing/17-router/src/assets" - ], - "styles": ["apps/testing/17-router/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "testing-router:build:production" - }, - "development": { - "buildTarget": "testing-router:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "testing-router:build" - } - }, - "test": { - "outputs": [ - "{workspaceRoot}/coverage/{projectRoot}", - "{projectRoot}/coverage" - ], - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - }, - "component-test": { - "executor": "@nx/cypress:cypress", - "options": { - "cypressConfig": "apps/testing/17-router/cypress.config.ts", - "testingType": "component", - "skipServe": true, - "devServerTarget": "testing-router:build" - } - } - } -} diff --git a/apps/testing/17-router/src/app/app.component.cy.ts b/apps/testing/17-router/src/app/app.component.cy.ts deleted file mode 100644 index 50ce839a0..000000000 --- a/apps/testing/17-router/src/app/app.component.cy.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { AppComponent } from './app.component'; - -describe(AppComponent.name, () => { - describe('Given no search criteria', () => { - it('Then shows error message and disabled button', () => { - //todo - }); - }); - - describe('Given a search criteria with no book match', () => { - it('Then shows No book found', () => { - //todo - }); - }); - - describe('Given a search criteria with one book match', () => { - it('Then shows One book and no error', () => { - //todo - }); - }); - - describe('Given a search criteria in Uppercase with one book match', () => { - it('Then shows One book and no error', () => { - //todo - }); - }); - - describe('Given a search criteria with multple books matches', () => { - it('Then shows a list of books', () => { - //todo - }); - }); -}); diff --git a/apps/testing/17-router/src/app/app.component.spec.ts b/apps/testing/17-router/src/app/app.component.spec.ts deleted file mode 100644 index 6cf2f4aed..000000000 --- a/apps/testing/17-router/src/app/app.component.spec.ts +++ /dev/null @@ -1,31 +0,0 @@ -describe('AppComponent', () => { - describe('Given no search criteria', () => { - it('Then shows error message and disabled button', async () => { - //todo - }); - }); - - describe('Given a search criteria with no book match', () => { - it('Then shows No book found', async () => { - //todo - }); - }); - - describe('Given a search criteria with one book match', () => { - it('Then shows One book and no error', async () => { - //todo - }); - }); - - describe('Given a search criteria in Uppercase with one book match', () => { - it('Then shows One book and no error', async () => { - //todo - }); - }); - - describe('Given a search criteria with multple books matches', () => { - it('Then shows a list of books', async () => { - //todo - }); - }); -}); diff --git a/apps/testing/17-router/src/app/app.component.ts b/apps/testing/17-router/src/app/app.component.ts deleted file mode 100644 index cc6298f17..000000000 --- a/apps/testing/17-router/src/app/app.component.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Component } from '@angular/core'; -import { RouterLink, RouterOutlet } from '@angular/router'; - -@Component({ - imports: [RouterOutlet, RouterLink], - selector: 'app-root', - styles: [ - ` - h1 { - margin-bottom: 0; - } - nav a { - padding: 1rem; - text-decoration: none; - margin-top: 10px; - display: inline-block; - background-color: #e8e8e8; - color: #3d3d3d; - border-radius: 4px; - margin-bottom: 10px; - } - nav a:hover { - color: white; - background-color: #42545c; - } - nav a.active { - background-color: black; - } - `, - ], - template: ` -

Library

- - - - - `, -}) -export class AppComponent {} diff --git a/apps/testing/17-router/src/app/app.config.ts b/apps/testing/17-router/src/app/app.config.ts deleted file mode 100644 index 66ab7f73f..000000000 --- a/apps/testing/17-router/src/app/app.config.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ApplicationConfig } from '@angular/core'; -import { provideRouter } from '@angular/router'; -import { appRoutes } from './app.routes'; -export const appConfig: ApplicationConfig = { - providers: [provideRouter(appRoutes)], -}; diff --git a/apps/testing/17-router/src/app/app.routes.ts b/apps/testing/17-router/src/app/app.routes.ts deleted file mode 100644 index 92763142e..000000000 --- a/apps/testing/17-router/src/app/app.routes.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ActivatedRouteSnapshot, Route } from '@angular/router'; -import { bookGuard } from './book.guard'; - -export const appRoutes: Route[] = [ - { - path: '', - pathMatch: 'full', - redirectTo: 'search', - }, - { - path: 'search', - loadComponent: () => import('./search.component'), - }, - { - path: 'shelf', - canActivate: [(route: ActivatedRouteSnapshot) => bookGuard(route)], - loadComponent: () => import('./shelf.component'), - }, - { - path: 'no-result', - loadComponent: () => import('./no-book-search.component'), - }, - { - path: '**', - pathMatch: 'full', - redirectTo: 'search', - }, -]; diff --git a/apps/testing/17-router/src/app/book.guard.ts b/apps/testing/17-router/src/app/book.guard.ts deleted file mode 100644 index 1419047a2..000000000 --- a/apps/testing/17-router/src/app/book.guard.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { inject } from '@angular/core'; -import { ActivatedRouteSnapshot, Router } from '@angular/router'; -import { availableBooks } from './book.model'; - -export const bookGuard = ( - route: ActivatedRouteSnapshot, - router = inject(Router), -) => { - const searchParam = route.queryParams?.['book'].toLowerCase(); - - const isBookAvailable = - !!searchParam && - availableBooks.some( - (b) => - b.author.toLowerCase().includes(searchParam) || - b.name.toLowerCase().includes(searchParam), - ); - - return isBookAvailable || router.parseUrl('no-result'); -}; diff --git a/apps/testing/17-router/src/app/book.model.ts b/apps/testing/17-router/src/app/book.model.ts deleted file mode 100644 index 5cb7c8007..000000000 --- a/apps/testing/17-router/src/app/book.model.ts +++ /dev/null @@ -1,17 +0,0 @@ -export interface Book { - name: string; - author: string; -} - -export const availableBooks = [ - { name: 'To Kill a Mockingbird', author: 'Harper Lee' }, - { name: '1984', author: 'George Orwell' }, - { name: 'The Catcher in the Rye', author: 'J.D. Salinger' }, - { name: 'The Great Gats', author: 'F. Scott Fitzgerald' }, - { name: 'Pride and Prejudice', author: 'Jane Austen' }, - { name: 'The Hobbit', author: 'J.R.R. Tolkien' }, - { name: 'The Lord of the Rings', author: 'J.R.R. Tolkien' }, - { name: "Harry Potter and the Philosopher's Stone", author: 'J.K. Rowling' }, - { name: 'The Hunger Games', author: 'Suzanne Collins' }, - { name: 'Animal Farm', author: 'George Orwell' }, -]; diff --git a/apps/testing/17-router/src/app/no-book-search.component.ts b/apps/testing/17-router/src/app/no-book-search.component.ts deleted file mode 100644 index d16c7478d..000000000 --- a/apps/testing/17-router/src/app/no-book-search.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; - -@Component({ - template: ` -
No book found for this search
- `, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export default class ShelfComponent {} diff --git a/apps/testing/17-router/src/app/search.component.ts b/apps/testing/17-router/src/app/search.component.ts deleted file mode 100644 index b35db308c..000000000 --- a/apps/testing/17-router/src/app/search.component.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms'; -import { RouterLink, RouterLinkActive } from '@angular/router'; -import { availableBooks } from './book.model'; - -@Component({ - imports: [ReactiveFormsModule, RouterLink, RouterLinkActive], - styles: [ - ` - :host { - display: flex; - flex-direction: column; - gap: 10px; - } - - .error { - color: red; - } - - button { - width: 300px; - padding: 5px; - border-radius: 5px; - } - - .search label { - margin-right: 15px; - } - `, - ], - template: ` - - -
-

List of books available:

-
    - @for (book of books; track $index) { -
  • {{ book.name }} by {{ book.author }}
  • - } -
-
- `, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export default class SearchComponent { - searchBook = new FormControl('', Validators.required); - books = availableBooks; -} diff --git a/apps/testing/17-router/src/app/shelf.component.ts b/apps/testing/17-router/src/app/shelf.component.ts deleted file mode 100644 index 238d9836c..000000000 --- a/apps/testing/17-router/src/app/shelf.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { AsyncPipe } from '@angular/common'; -import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { map } from 'rxjs'; -import { availableBooks } from './book.model'; - -@Component({ - selector: 'app-shelf', - imports: [AsyncPipe], - template: ` -
    - @for (book of books | async; track book) { -
  • Borrowed Book: {{ book.name }} by {{ book.author }}
  • - } -
- `, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export default class ShelfComponent { - readonly books = inject(ActivatedRoute).queryParams.pipe( - map((params) => params?.['book'].toLowerCase()), - map((param) => - availableBooks.filter( - (b) => - b.name.toLowerCase().includes(param) || - b.author.toLowerCase().includes(param), - ), - ), - ); -} diff --git a/apps/testing/17-router/src/assets/.gitkeep b/apps/testing/17-router/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/testing/17-router/src/favicon.ico b/apps/testing/17-router/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - testing-router - - - - - - - - diff --git a/apps/testing/17-router/src/main.ts b/apps/testing/17-router/src/main.ts deleted file mode 100644 index 7961924bf..000000000 --- a/apps/testing/17-router/src/main.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { appConfig } from './app/app.config'; - -import { AppComponent } from './app/app.component'; - -bootstrapApplication(AppComponent, appConfig).catch((err) => - console.error(err), -); diff --git a/apps/testing/17-router/src/styles.scss b/apps/testing/17-router/src/styles.scss deleted file mode 100644 index 90d4ee007..000000000 --- a/apps/testing/17-router/src/styles.scss +++ /dev/null @@ -1 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/testing/17-router/src/test-setup.ts b/apps/testing/17-router/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/testing/17-router/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/testing/17-router/tsconfig.app.json b/apps/testing/17-router/tsconfig.app.json deleted file mode 100644 index 5fdad8685..000000000 --- a/apps/testing/17-router/tsconfig.app.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "cypress/**/*", - "cypress.config.ts", - "**/*.cy.ts", - "**/*.cy.js", - "**/*.cy.tsx", - "**/*.cy.jsx" - ] -} diff --git a/apps/testing/17-router/tsconfig.editor.json b/apps/testing/17-router/tsconfig.editor.json deleted file mode 100644 index 8ae117d96..000000000 --- a/apps/testing/17-router/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": ["jest", "node"] - } -} diff --git a/apps/testing/17-router/tsconfig.json b/apps/testing/17-router/tsconfig.json deleted file mode 100644 index 3879b94cd..000000000 --- a/apps/testing/17-router/tsconfig.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./cypress/tsconfig.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/testing/17-router/tsconfig.spec.json b/apps/testing/17-router/tsconfig.spec.json deleted file mode 100644 index c0c092e1e..000000000 --- a/apps/testing/17-router/tsconfig.spec.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/testing/18-nested-components/.eslintrc.json b/apps/testing/18-nested-components/.eslintrc.json deleted file mode 100644 index bd4886462..000000000 --- a/apps/testing/18-nested-components/.eslintrc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": {}, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/testing/18-nested-components/README.md b/apps/testing/18-nested-components/README.md deleted file mode 100644 index 659b9e365..000000000 --- a/apps/testing/18-nested-components/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Nested Components - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve testing-nested-components -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/testing/18-nested-comp/). diff --git a/apps/testing/18-nested-components/cypress.config.ts b/apps/testing/18-nested-components/cypress.config.ts deleted file mode 100644 index 3738464ee..000000000 --- a/apps/testing/18-nested-components/cypress.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { nxComponentTestingPreset } from '@nx/angular/plugins/component-testing'; -import { defineConfig } from 'cypress'; - -export default defineConfig({ - component: { - ...nxComponentTestingPreset(__filename), - }, -}); diff --git a/apps/testing/18-nested-components/cypress/fixtures/example.json b/apps/testing/18-nested-components/cypress/fixtures/example.json deleted file mode 100644 index 02e425437..000000000 --- a/apps/testing/18-nested-components/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} diff --git a/apps/testing/18-nested-components/cypress/support/commands.ts b/apps/testing/18-nested-components/cypress/support/commands.ts deleted file mode 100644 index b5d8a9582..000000000 --- a/apps/testing/18-nested-components/cypress/support/commands.ts +++ /dev/null @@ -1,25 +0,0 @@ -/// -import { mount } from 'cypress/angular'; - -// *********************************************** -// This example commands.ts shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** - -declare global { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace Cypress { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - interface Chainable { - login(email: string, password: string): void; - mount: typeof mount; - } - } -} - -Cypress.Commands.add('mount', mount); diff --git a/apps/testing/18-nested-components/cypress/support/component-index.html b/apps/testing/18-nested-components/cypress/support/component-index.html deleted file mode 100644 index f1b19ddbc..000000000 --- a/apps/testing/18-nested-components/cypress/support/component-index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - testing-nested Components App - - -
- - diff --git a/apps/testing/18-nested-components/cypress/support/component.ts b/apps/testing/18-nested-components/cypress/support/component.ts deleted file mode 100644 index e7c3e3cbc..000000000 --- a/apps/testing/18-nested-components/cypress/support/component.ts +++ /dev/null @@ -1,17 +0,0 @@ -// *********************************************************** -// This example support/component.ts is processed and -// loaded automatically before your subscription files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.ts using ES2015 syntax: -import './commands'; diff --git a/apps/testing/18-nested-components/cypress/tsconfig.json b/apps/testing/18-nested-components/cypress/tsconfig.json deleted file mode 100644 index 918d96378..000000000 --- a/apps/testing/18-nested-components/cypress/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["cypress", "node"], - "sourceMap": false - }, - "include": [ - "support/**/*.ts", - "../cypress.config.ts", - "../**/*.cy.ts", - "../**/*.cy.tsx", - "../**/*.cy.js", - "../**/*.cy.jsx", - "../**/*.d.ts" - ] -} diff --git a/apps/testing/18-nested-components/jest.config.ts b/apps/testing/18-nested-components/jest.config.ts deleted file mode 100644 index c77df55f9..000000000 --- a/apps/testing/18-nested-components/jest.config.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'testing-nested-components', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/testing/18-nested-components/project.json b/apps/testing/18-nested-components/project.json deleted file mode 100644 index aabd0f2db..000000000 --- a/apps/testing/18-nested-components/project.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "name": "testing-nested-components", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/testing/18-nested-components/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/testing/18-nested-components", - "index": "apps/testing/18-nested-components/src/index.html", - "main": "apps/testing/18-nested-components/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/testing/18-nested-components/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/testing/18-nested-components/src/favicon.ico", - "apps/testing/18-nested-components/src/assets" - ], - "styles": ["apps/testing/18-nested-components/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "testing-nested-components:build:production" - }, - "development": { - "buildTarget": "testing-nested-components:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "testing-nested-components:build" - } - }, - "test": { - "outputs": [ - "{workspaceRoot}/coverage/{projectRoot}", - "{projectRoot}/coverage" - ], - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - }, - "component-test": { - "executor": "@nx/cypress:cypress", - "options": { - "cypressConfig": "apps/testing/18-nested-components/cypress.config.ts", - "testingType": "component", - "skipServe": true, - "devServerTarget": "testing-nested-components:build" - } - } - } -} diff --git a/apps/testing/18-nested-components/src/app/app.component.ts b/apps/testing/18-nested-components/src/app/app.component.ts deleted file mode 100644 index 84b0df68a..000000000 --- a/apps/testing/18-nested-components/src/app/app.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Component } from '@angular/core'; -import { ChildComponent } from './child.component'; - -@Component({ - imports: [ChildComponent], - selector: 'app-root', - template: ` - - `, -}) -export class AppComponent {} diff --git a/apps/testing/18-nested-components/src/app/child.component.cy.ts b/apps/testing/18-nested-components/src/app/child.component.cy.ts deleted file mode 100644 index 1f20b225c..000000000 --- a/apps/testing/18-nested-components/src/app/child.component.cy.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { ChildComponent } from './child.component'; - -describe('ChildComponent', () => { - const setup = () => { - cy.mount(ChildComponent); - }; - describe('When typing nothing and clicking on Validate', () => { - test('Then show "Title is required" error message and no http request has been sent', async () => { - setup(); - }); - }); - - describe('When typing "Good" and clicking on Validate', () => { - test('Then show "Title is Good" message, no error message and send a http request to the backend', async () => { - setup(); - }); - }); -}); diff --git a/apps/testing/18-nested-components/src/app/child.component.spec.ts b/apps/testing/18-nested-components/src/app/child.component.spec.ts deleted file mode 100644 index d03b6e5b7..000000000 --- a/apps/testing/18-nested-components/src/app/child.component.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { render } from '@testing-library/angular'; -import { ChildComponent } from './child.component'; - -describe('ChildComponent', () => { - describe('When typing nothing and clicking on Validate', () => { - test('Then show "Title is required" error message and no http request has been sent', async () => { - await render(ChildComponent); - }); - }); - - describe('When typing "Good" and clicking on Validate', () => { - test('Then show "Title is Good" message, no error message and send a http request to the backend', async () => { - await render(ChildComponent); - }); - }); -}); diff --git a/apps/testing/18-nested-components/src/app/child.component.ts b/apps/testing/18-nested-components/src/app/child.component.ts deleted file mode 100644 index 7ead519f4..000000000 --- a/apps/testing/18-nested-components/src/app/child.component.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { - ChangeDetectionStrategy, - Component, - inject, - input, - output, -} from '@angular/core'; -import { FormControl, ReactiveFormsModule } from '@angular/forms'; -import { HttpService } from './http.service'; - -@Component({ - selector: 'app-input', - imports: [ReactiveFormsModule], - template: ` - - `, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class InputComponent { - title = new FormControl('', { nonNullable: true }); -} - -@Component({ - selector: 'result', - template: ` -

Title is {{ title() }}

- `, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class ResultComponent { - title = input(''); -} - -@Component({ - selector: 'app-button', - template: ` - - `, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class ButtonComponent { - validate = output(); -} - -@Component({ - selector: 'app-error', - template: ` -

Title is required !!!

- `, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class ErrorComponent {} - -@Component({ - selector: 'app-child', - imports: [], - template: ` - - - - @if (showError) { - - } - `, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class ChildComponent { - http = inject(HttpService); - - showError = false; - - submit(title: string) { - this.showError = false; - if (title === '') { - this.showError = true; - return; - } - - this.http.sendTitle(title); - } -} diff --git a/apps/testing/18-nested-components/src/app/http.service.ts b/apps/testing/18-nested-components/src/app/http.service.ts deleted file mode 100644 index 846be5598..000000000 --- a/apps/testing/18-nested-components/src/app/http.service.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Injectable } from '@angular/core'; - -@Injectable({ providedIn: 'root' }) -export class HttpService { - sendTitle(title: string) { - console.log(`${title} has been sent !!!`); - } -} diff --git a/apps/testing/18-nested-components/src/assets/.gitkeep b/apps/testing/18-nested-components/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/testing/18-nested-components/src/favicon.ico b/apps/testing/18-nested-components/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - testing-nested-components - - - - - - - - diff --git a/apps/testing/18-nested-components/src/main.ts b/apps/testing/18-nested-components/src/main.ts deleted file mode 100644 index 31c5da482..000000000 --- a/apps/testing/18-nested-components/src/main.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; - -bootstrapApplication(AppComponent).catch((err) => console.error(err)); diff --git a/apps/testing/18-nested-components/src/styles.scss b/apps/testing/18-nested-components/src/styles.scss deleted file mode 100644 index 90d4ee007..000000000 --- a/apps/testing/18-nested-components/src/styles.scss +++ /dev/null @@ -1 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/testing/18-nested-components/src/test-setup.ts b/apps/testing/18-nested-components/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/testing/18-nested-components/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/testing/18-nested-components/tsconfig.app.json b/apps/testing/18-nested-components/tsconfig.app.json deleted file mode 100644 index 5fdad8685..000000000 --- a/apps/testing/18-nested-components/tsconfig.app.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "cypress/**/*", - "cypress.config.ts", - "**/*.cy.ts", - "**/*.cy.js", - "**/*.cy.tsx", - "**/*.cy.jsx" - ] -} diff --git a/apps/testing/18-nested-components/tsconfig.editor.json b/apps/testing/18-nested-components/tsconfig.editor.json deleted file mode 100644 index 8ae117d96..000000000 --- a/apps/testing/18-nested-components/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": ["jest", "node"] - } -} diff --git a/apps/testing/18-nested-components/tsconfig.json b/apps/testing/18-nested-components/tsconfig.json deleted file mode 100644 index 3879b94cd..000000000 --- a/apps/testing/18-nested-components/tsconfig.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./cypress/tsconfig.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/testing/19-input-output/.eslintrc.json b/apps/testing/19-input-output/.eslintrc.json deleted file mode 100644 index bf8df1428..000000000 --- a/apps/testing/19-input-output/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/testing/19-input-output/README.md b/apps/testing/19-input-output/README.md deleted file mode 100644 index 59b5fff5d..000000000 --- a/apps/testing/19-input-output/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Input Output - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve testing-input-output -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/testing/19-input-output/). diff --git a/apps/testing/19-input-output/cypress.config.ts b/apps/testing/19-input-output/cypress.config.ts deleted file mode 100644 index 3738464ee..000000000 --- a/apps/testing/19-input-output/cypress.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { nxComponentTestingPreset } from '@nx/angular/plugins/component-testing'; -import { defineConfig } from 'cypress'; - -export default defineConfig({ - component: { - ...nxComponentTestingPreset(__filename), - }, -}); diff --git a/apps/testing/19-input-output/cypress/fixtures/example.json b/apps/testing/19-input-output/cypress/fixtures/example.json deleted file mode 100644 index 02e425437..000000000 --- a/apps/testing/19-input-output/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} diff --git a/apps/testing/19-input-output/cypress/support/commands.ts b/apps/testing/19-input-output/cypress/support/commands.ts deleted file mode 100644 index b5d8a9582..000000000 --- a/apps/testing/19-input-output/cypress/support/commands.ts +++ /dev/null @@ -1,25 +0,0 @@ -/// -import { mount } from 'cypress/angular'; - -// *********************************************** -// This example commands.ts shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** - -declare global { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace Cypress { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - interface Chainable { - login(email: string, password: string): void; - mount: typeof mount; - } - } -} - -Cypress.Commands.add('mount', mount); diff --git a/apps/testing/19-input-output/cypress/support/component-index.html b/apps/testing/19-input-output/cypress/support/component-index.html deleted file mode 100644 index 57debcfad..000000000 --- a/apps/testing/19-input-output/cypress/support/component-index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - testing-input-output Components App - - -
- - diff --git a/apps/testing/19-input-output/cypress/support/component.ts b/apps/testing/19-input-output/cypress/support/component.ts deleted file mode 100644 index e7c3e3cbc..000000000 --- a/apps/testing/19-input-output/cypress/support/component.ts +++ /dev/null @@ -1,17 +0,0 @@ -// *********************************************************** -// This example support/component.ts is processed and -// loaded automatically before your subscription files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.ts using ES2015 syntax: -import './commands'; diff --git a/apps/testing/19-input-output/cypress/tsconfig.json b/apps/testing/19-input-output/cypress/tsconfig.json deleted file mode 100644 index 918d96378..000000000 --- a/apps/testing/19-input-output/cypress/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["cypress", "node"], - "sourceMap": false - }, - "include": [ - "support/**/*.ts", - "../cypress.config.ts", - "../**/*.cy.ts", - "../**/*.cy.tsx", - "../**/*.cy.js", - "../**/*.cy.jsx", - "../**/*.d.ts" - ] -} diff --git a/apps/testing/19-input-output/jest.config.ts b/apps/testing/19-input-output/jest.config.ts deleted file mode 100644 index 63370e2a3..000000000 --- a/apps/testing/19-input-output/jest.config.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'testing-input-output', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/testing/19-input-output/project.json b/apps/testing/19-input-output/project.json deleted file mode 100644 index ae92fe796..000000000 --- a/apps/testing/19-input-output/project.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "name": "testing-input-output", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/testing/19-input-output/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/testing/19-input-output", - "index": "apps/testing/19-input-output/src/index.html", - "main": "apps/testing/19-input-output/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/testing/19-input-output/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/testing/19-input-output/src/favicon.ico", - "apps/testing/19-input-output/src/assets" - ], - "styles": ["apps/testing/19-input-output/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "testing-input-output:build:production" - }, - "development": { - "buildTarget": "testing-input-output:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "testing-input-output:build" - } - }, - "test": { - "outputs": [ - "{workspaceRoot}/coverage/{projectRoot}", - "{projectRoot}/coverage" - ], - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - }, - "component-test": { - "executor": "@nx/cypress:cypress", - "options": { - "cypressConfig": "apps/testing/19-input-output/cypress.config.ts", - "testingType": "component", - "skipServe": true, - "devServerTarget": "testing-input-output:build" - } - } - } -} diff --git a/apps/testing/19-input-output/src/app/app.component.ts b/apps/testing/19-input-output/src/app/app.component.ts deleted file mode 100644 index 7e9e0f78a..000000000 --- a/apps/testing/19-input-output/src/app/app.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component } from '@angular/core'; -import { CounterComponent } from './counter.component'; - -@Component({ - imports: [CounterComponent], - selector: 'app-root', - template: ` - - `, -}) -export class AppComponent { - log(counter: number) { - console.log('output log', counter); - } -} diff --git a/apps/testing/19-input-output/src/app/counter.component.cy.ts b/apps/testing/19-input-output/src/app/counter.component.cy.ts deleted file mode 100644 index 17a1815c8..000000000 --- a/apps/testing/19-input-output/src/app/counter.component.cy.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { CounterComponent } from './counter.component'; - -describe(CounterComponent.name, () => { - describe('Given an initualValue of 10', () => { - it('listen to output using createOutputSpy', () => { - cy.mount(CounterComponent); - }); - - it('listen to output using autoSpyOutputs', () => { - cy.mount(CounterComponent); - }); - }); -}); diff --git a/apps/testing/19-input-output/src/app/counter.component.spec.ts b/apps/testing/19-input-output/src/app/counter.component.spec.ts deleted file mode 100644 index 15110bcf6..000000000 --- a/apps/testing/19-input-output/src/app/counter.component.spec.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { render } from '@testing-library/angular'; -import { CounterComponent } from './counter.component'; - -describe('CounterComponent', () => { - describe('Given an initualValue of 10', () => { - test('Then counterValue is 10', async () => { - await render(CounterComponent); - }); - - describe('When clicking 5 times on increment button', () => { - test('Then counterValue is 15', async () => { - await render(CounterComponent); - }); - }); - - describe('When clicking 2 times on decrement button', () => { - test('Then counterValue is 8', async () => { - await render(CounterComponent); - }); - describe('When clicking on Send ', () => { - test('Then emitted value is 8', async () => { - await render(CounterComponent); - }); - }); - }); - }); -}); diff --git a/apps/testing/19-input-output/src/app/counter.component.ts b/apps/testing/19-input-output/src/app/counter.component.ts deleted file mode 100644 index df1eed103..000000000 --- a/apps/testing/19-input-output/src/app/counter.component.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { - ChangeDetectionStrategy, - Component, - input, - linkedSignal, - output, -} from '@angular/core'; - -@Component({ - selector: 'app-counter', - template: ` -

Counter: {{ counter() }}

- - - - `, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class CounterComponent { - initialValue = input.required(); - public counter = linkedSignal(() => this.initialValue()); - - send = output(); - - public increment = () => { - this.counter.set(this.counter() + 1); - }; - - public decrement = () => { - this.counter.set(this.counter() - 1); - }; -} diff --git a/apps/testing/19-input-output/src/assets/.gitkeep b/apps/testing/19-input-output/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/testing/19-input-output/src/favicon.ico b/apps/testing/19-input-output/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - testing-input-ouput - - - - - - - - diff --git a/apps/testing/19-input-output/src/main.ts b/apps/testing/19-input-output/src/main.ts deleted file mode 100644 index 31c5da482..000000000 --- a/apps/testing/19-input-output/src/main.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; - -bootstrapApplication(AppComponent).catch((err) => console.error(err)); diff --git a/apps/testing/19-input-output/src/styles.scss b/apps/testing/19-input-output/src/styles.scss deleted file mode 100644 index 90d4ee007..000000000 --- a/apps/testing/19-input-output/src/styles.scss +++ /dev/null @@ -1 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/testing/19-input-output/src/test-setup.ts b/apps/testing/19-input-output/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/testing/19-input-output/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/testing/19-input-output/tsconfig.app.json b/apps/testing/19-input-output/tsconfig.app.json deleted file mode 100644 index 5fdad8685..000000000 --- a/apps/testing/19-input-output/tsconfig.app.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "cypress/**/*", - "cypress.config.ts", - "**/*.cy.ts", - "**/*.cy.js", - "**/*.cy.tsx", - "**/*.cy.jsx" - ] -} diff --git a/apps/testing/19-input-output/tsconfig.editor.json b/apps/testing/19-input-output/tsconfig.editor.json deleted file mode 100644 index 8ae117d96..000000000 --- a/apps/testing/19-input-output/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": ["jest", "node"] - } -} diff --git a/apps/testing/19-input-output/tsconfig.json b/apps/testing/19-input-output/tsconfig.json deleted file mode 100644 index 3879b94cd..000000000 --- a/apps/testing/19-input-output/tsconfig.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./cypress/tsconfig.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/testing/19-input-output/tsconfig.spec.json b/apps/testing/19-input-output/tsconfig.spec.json deleted file mode 100644 index c0c092e1e..000000000 --- a/apps/testing/19-input-output/tsconfig.spec.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/testing/20-modal/.eslintrc.json b/apps/testing/20-modal/.eslintrc.json deleted file mode 100644 index bf8df1428..000000000 --- a/apps/testing/20-modal/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/testing/20-modal/README.md b/apps/testing/20-modal/README.md deleted file mode 100644 index 08737d5a0..000000000 --- a/apps/testing/20-modal/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Modal - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve testing-modal -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/testing/20-modal/). diff --git a/apps/testing/20-modal/cypress.config.ts b/apps/testing/20-modal/cypress.config.ts deleted file mode 100644 index 3738464ee..000000000 --- a/apps/testing/20-modal/cypress.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { nxComponentTestingPreset } from '@nx/angular/plugins/component-testing'; -import { defineConfig } from 'cypress'; - -export default defineConfig({ - component: { - ...nxComponentTestingPreset(__filename), - }, -}); diff --git a/apps/testing/20-modal/cypress/fixtures/example.json b/apps/testing/20-modal/cypress/fixtures/example.json deleted file mode 100644 index 02e425437..000000000 --- a/apps/testing/20-modal/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} diff --git a/apps/testing/20-modal/cypress/support/commands.ts b/apps/testing/20-modal/cypress/support/commands.ts deleted file mode 100644 index b5d8a9582..000000000 --- a/apps/testing/20-modal/cypress/support/commands.ts +++ /dev/null @@ -1,25 +0,0 @@ -/// -import { mount } from 'cypress/angular'; - -// *********************************************** -// This example commands.ts shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** - -declare global { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace Cypress { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - interface Chainable { - login(email: string, password: string): void; - mount: typeof mount; - } - } -} - -Cypress.Commands.add('mount', mount); diff --git a/apps/testing/20-modal/cypress/support/component-index.html b/apps/testing/20-modal/cypress/support/component-index.html deleted file mode 100644 index 7af656787..000000000 --- a/apps/testing/20-modal/cypress/support/component-index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - testing-modal Components App - - -
- - diff --git a/apps/testing/20-modal/cypress/support/component.ts b/apps/testing/20-modal/cypress/support/component.ts deleted file mode 100644 index e7c3e3cbc..000000000 --- a/apps/testing/20-modal/cypress/support/component.ts +++ /dev/null @@ -1,17 +0,0 @@ -// *********************************************************** -// This example support/component.ts is processed and -// loaded automatically before your subscription files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.ts using ES2015 syntax: -import './commands'; diff --git a/apps/testing/20-modal/cypress/tsconfig.json b/apps/testing/20-modal/cypress/tsconfig.json deleted file mode 100644 index 918d96378..000000000 --- a/apps/testing/20-modal/cypress/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["cypress", "node"], - "sourceMap": false - }, - "include": [ - "support/**/*.ts", - "../cypress.config.ts", - "../**/*.cy.ts", - "../**/*.cy.tsx", - "../**/*.cy.js", - "../**/*.cy.jsx", - "../**/*.d.ts" - ] -} diff --git a/apps/testing/20-modal/jest.config.ts b/apps/testing/20-modal/jest.config.ts deleted file mode 100644 index 809080bcc..000000000 --- a/apps/testing/20-modal/jest.config.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'testing-modal', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/testing/20-modal/project.json b/apps/testing/20-modal/project.json deleted file mode 100644 index 8892cc51c..000000000 --- a/apps/testing/20-modal/project.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "name": "testing-modal", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/testing/20-modal/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/testing/20-modal", - "index": "apps/testing/20-modal/src/index.html", - "main": "apps/testing/20-modal/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/testing/20-modal/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/testing/20-modal/src/favicon.ico", - "apps/testing/20-modal/src/assets" - ], - "styles": [ - "apps/testing/20-modal/src/styles.scss", - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "testing-modal:build:production" - }, - "development": { - "buildTarget": "testing-modal:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "testing-modal:build" - } - }, - "test": { - "outputs": [ - "{workspaceRoot}/coverage/{projectRoot}", - "{projectRoot}/coverage" - ], - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - }, - "component-test": { - "executor": "@nx/cypress:cypress", - "options": { - "cypressConfig": "apps/testing/20-modal/cypress.config.ts", - "testingType": "component", - "skipServe": true, - "devServerTarget": "testing-modal:build" - } - } - } -} diff --git a/apps/testing/20-modal/src/app/app.component.cy.ts b/apps/testing/20-modal/src/app/app.component.cy.ts deleted file mode 100644 index 4da98fbd1..000000000 --- a/apps/testing/20-modal/src/app/app.component.cy.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { AppComponent } from './app.component'; - -describe(AppComponent.name, () => { - const setup = () => { - cy.mount(AppComponent); - }; - - test('error modal is displayed if you click on "Confirm" without inputing a name', () => { - setup(); - }); - - test('error message is shown if you click "Cancel" in the confirmation modal after submitting a name', () => { - setup(); - }); - - test('confirm message is shown if you click "Confirm" in the confirmation modal after submitting a name', () => { - setup(); - }); -}); diff --git a/apps/testing/20-modal/src/app/app.component.spec.ts b/apps/testing/20-modal/src/app/app.component.spec.ts deleted file mode 100644 index d730b6e2b..000000000 --- a/apps/testing/20-modal/src/app/app.component.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { render } from '@testing-library/angular'; -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - test('error modal is displayed if you click on "Confirm" without inputing a name', async () => { - await render(AppComponent); - }); - - test('error message is shown if you click "Cancel" in the confirmation modal after submitting a name', async () => { - await render(AppComponent); - }); - - test('confirm message is shown if you click "Confirm" in the confirmation modal after submitting a name', async () => { - await render(AppComponent); - }); -}); diff --git a/apps/testing/20-modal/src/app/app.component.ts b/apps/testing/20-modal/src/app/app.component.ts deleted file mode 100644 index d5f35b4bf..000000000 --- a/apps/testing/20-modal/src/app/app.component.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { AsyncPipe } from '@angular/common'; -import { Component, inject } from '@angular/core'; -import { FormControl, ReactiveFormsModule } from '@angular/forms'; -import { MatButtonModule } from '@angular/material/button'; -import { MatDialog, MatDialogModule } from '@angular/material/dialog'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; -import { BehaviorSubject } from 'rxjs'; -import { ErrorDialog } from './error.dialog'; -import { ProfilConfirmationDialog } from './profil-confirmation.dialog'; -@Component({ - imports: [ - ReactiveFormsModule, - MatDialogModule, - MatFormFieldModule, - MatInputModule, - MatButtonModule, - AsyncPipe, - ], - selector: 'app-root', - host: { - class: 'p-4 block flex gap-4 items-center', - }, - template: ` - - Name - - - - -
{{ result$ | async }}
- `, -}) -export class AppComponent { - private modal = inject(MatDialog); - private result = new BehaviorSubject(''); - result$ = this.result.asObservable(); - - name = new FormControl('', { nonNullable: true }); - - confirm() { - if (!this.name.value) { - this.modal.open(ErrorDialog); - return; - } - - this.modal - .open(ProfilConfirmationDialog, { - data: { - name: this.name.value, - }, - }) - .afterClosed() - .subscribe((result) => - this.result.next( - result ? 'Name has been submitted' : 'Name is invalid !!', - ), - ); - } -} diff --git a/apps/testing/20-modal/src/app/app.config.ts b/apps/testing/20-modal/src/app/app.config.ts deleted file mode 100644 index 87a76cda5..000000000 --- a/apps/testing/20-modal/src/app/app.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ApplicationConfig } from '@angular/core'; -import { provideAnimations } from '@angular/platform-browser/animations'; -export const appConfig: ApplicationConfig = { - providers: [provideAnimations()], -}; diff --git a/apps/testing/20-modal/src/app/error.dialog.ts b/apps/testing/20-modal/src/app/error.dialog.ts deleted file mode 100644 index 251d5d513..000000000 --- a/apps/testing/20-modal/src/app/error.dialog.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* eslint-disable @angular-eslint/component-class-suffix */ -import { Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { MatDialogModule } from '@angular/material/dialog'; - -@Component({ - imports: [MatButtonModule, MatDialogModule], - template: ` -

Error

-
- You must enter a - name - first!! -
-
- -
- `, -}) -export class ErrorDialog {} diff --git a/apps/testing/20-modal/src/app/profil-confirmation.dialog.ts b/apps/testing/20-modal/src/app/profil-confirmation.dialog.ts deleted file mode 100644 index e77211e24..000000000 --- a/apps/testing/20-modal/src/app/profil-confirmation.dialog.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* eslint-disable @angular-eslint/component-class-suffix */ -import { Component, inject } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog'; - -@Component({ - imports: [MatButtonModule, MatDialogModule], - template: ` -

Profil

-
Name: {{ data.name }}
-
- - -
- `, -}) -export class ProfilConfirmationDialog { - data = inject(MAT_DIALOG_DATA); -} diff --git a/apps/testing/20-modal/src/assets/.gitkeep b/apps/testing/20-modal/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/testing/20-modal/src/favicon.ico b/apps/testing/20-modal/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 zcmeI332;U^%p|z7g|#(P)qFEA@4f!_@qOK2 z_lJl}!lhL!VT_U|uN7%8B2iKH??xhDa;*`g{yjTFWHvXn;2s{4R7kH|pKGdy(7z!K zgftM+Ku7~24TLlh(!g)gz|foI94G^t2^IO$uvX$3(OR0<_5L2sB)lMAMy|+`xodJ{ z_Uh_1m)~h?a;2W{dmhM;u!YGo=)OdmId_B<%^V^{ovI@y`7^g1_V9G}*f# zNzAtvou}I!W1#{M^@ROc(BZ! z+F!!_aR&Px3_reO(EW+TwlW~tv*2zr?iP7(d~a~yA|@*a89IUke+c472NXM0wiX{- zl`UrZC^1XYyf%1u)-Y)jj9;MZ!SLfd2Hl?o|80Su%Z?To_=^g_Jt0oa#CT*tjx>BI z16wec&AOWNK<#i0Qd=1O$fymLRoUR*%;h@*@v7}wApDl^w*h}!sYq%kw+DKDY)@&A z@9$ULEB3qkR#85`lb8#WZw=@})#kQig9oqy^I$dj&k4jU&^2(M3q{n1AKeGUKPFbr z1^<)aH;VsG@J|B&l>UtU#Ejv3GIqERzYgL@UOAWtW<{p#zy`WyJgpCy8$c_e%wYJL zyGHRRx38)HyjU3y{-4z6)pzb>&Q1pR)B&u01F-|&Gx4EZWK$nkUkOI|(D4UHOXg_- zw{OBf!oWQUn)Pe(=f=nt=zkmdjpO^o8ZZ9o_|4tW1ni+Un9iCW47*-ut$KQOww!;u z`0q)$s6IZO!~9$e_P9X!hqLxu`fpcL|2f^I5d4*a@Dq28;@2271v_N+5HqYZ>x;&O z05*7JT)mUe&%S0@UD)@&8SmQrMtsDfZT;fkdA!r(S=}Oz>iP)w=W508=Rc#nNn7ym z1;42c|8($ALY8#a({%1#IXbWn9-Y|0eDY$_L&j{63?{?AH{);EzcqfydD$@-B`Y3<%IIj7S7rK_N}je^=dEk%JQ4c z!tBdTPE3Tse;oYF>cnrapWq*o)m47X1`~6@(!Y29#>-#8zm&LXrXa(3=7Z)ElaQqj z-#0JJy3Fi(C#Rx(`=VXtJ63E2_bZGCz+QRa{W0e2(m3sI?LOcUBx)~^YCqZ{XEPX)C>G>U4tfqeH8L(3|pQR*zbL1 zT9e~4Tb5p9_G}$y4t`i*4t_Mr9QYvL9C&Ah*}t`q*}S+VYh0M6GxTTSXI)hMpMpIq zD1ImYqJLzbj0}~EpE-aH#VCH_udYEW#`P2zYmi&xSPs_{n6tBj=MY|-XrA;SGA_>y zGtU$?HXm$gYj*!N)_nQ59%lQdXtQZS3*#PC-{iB_sm+ytD*7j`D*k(P&IH2GHT}Eh z5697eQECVIGQAUe#eU2I!yI&%0CP#>%6MWV z@zS!p@+Y1i1b^QuuEF*13CuB zu69dve5k7&Wgb+^s|UB08Dr3u`h@yM0NTj4h7MnHo-4@xmyr7(*4$rpPwsCDZ@2be zRz9V^GnV;;?^Lk%ynzq&K(Aix`mWmW`^152Hoy$CTYVehpD-S1-W^#k#{0^L`V6CN+E z!w+xte;2vu4AmVNEFUOBmrBL>6MK@!O2*N|2=d|Y;oN&A&qv=qKn73lDD zI(+oJAdgv>Yr}8(&@ZuAZE%XUXmX(U!N+Z_sjL<1vjy1R+1IeHt`79fnYdOL{$ci7 z%3f0A*;Zt@ED&Gjm|OFTYBDe%bbo*xXAQsFz+Q`fVBH!N2)kaxN8P$c>sp~QXnv>b zwq=W3&Mtmih7xkR$YA)1Yi?avHNR6C99!u6fh=cL|KQ&PwF!n@ud^n(HNIImHD!h87!i*t?G|p0o+eelJ?B@A64_9%SBhNaJ64EvKgD&%LjLCYnNfc; znj?%*p@*?dq#NqcQFmmX($wms@CSAr9#>hUR^=I+=0B)vvGX%T&#h$kmX*s=^M2E!@N9#m?LhMvz}YB+kd zG~mbP|D(;{s_#;hsKK9lbVK&Lo734x7SIFJ9V_}2$@q?zm^7?*XH94w5Qae{7zOMUF z^?%F%)c1Y)Q?Iy?I>knw*8gYW#ok|2gdS=YYZLiD=CW|Nj;n^x!=S#iJ#`~Ld79+xXpVmUK^B(xO_vO!btA9y7w3L3-0j-y4 z?M-V{%z;JI`bk7yFDcP}OcCd*{Q9S5$iGA7*E1@tfkyjAi!;wP^O71cZ^Ep)qrQ)N z#wqw0_HS;T7x3y|`P==i3hEwK%|>fZ)c&@kgKO1~5<5xBSk?iZV?KI6&i72H6S9A* z=U(*e)EqEs?Oc04)V-~K5AUmh|62H4*`UAtItO$O(q5?6jj+K^oD!04r=6#dsxp?~}{`?&sXn#q2 zGuY~7>O2=!u@@Kfu7q=W*4egu@qPMRM>(eyYyaIE<|j%d=iWNdGsx%c!902v#ngNg z@#U-O_4xN$s_9?(`{>{>7~-6FgWpBpqXb`Ydc3OFL#&I}Irse9F_8R@4zSS*Y*o*B zXL?6*Aw!AfkNCgcr#*yj&p3ZDe2y>v$>FUdKIy_2N~}6AbHc7gA3`6$g@1o|dE>vz z4pl(j9;kyMsjaw}lO?(?Xg%4k!5%^t#@5n=WVc&JRa+XT$~#@rldvN3S1rEpU$;XgxVny7mki3 z-Hh|jUCHrUXuLr!)`w>wgO0N%KTB-1di>cj(x3Bav`7v z3G7EIbU$z>`Nad7Rk_&OT-W{;qg)-GXV-aJT#(ozdmnA~Rq3GQ_3mby(>q6Ocb-RgTUhTN)))x>m&eD;$J5Bg zo&DhY36Yg=J=$Z>t}RJ>o|@hAcwWzN#r(WJ52^g$lh^!63@hh+dR$&_dEGu&^CR*< z!oFqSqO@>xZ*nC2oiOd0eS*F^IL~W-rsrO`J`ej{=ou_q^_(<$&-3f^J z&L^MSYWIe{&pYq&9eGaArA~*kA - - - - testing-modal - - - - - - - - diff --git a/apps/testing/20-modal/src/main.ts b/apps/testing/20-modal/src/main.ts deleted file mode 100644 index 7961924bf..000000000 --- a/apps/testing/20-modal/src/main.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { appConfig } from './app/app.config'; - -import { AppComponent } from './app/app.component'; - -bootstrapApplication(AppComponent, appConfig).catch((err) => - console.error(err), -); diff --git a/apps/testing/20-modal/src/styles.scss b/apps/testing/20-modal/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/testing/20-modal/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/testing/20-modal/src/test-setup.ts b/apps/testing/20-modal/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/testing/20-modal/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/testing/20-modal/tailwind.config.js b/apps/testing/20-modal/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/testing/20-modal/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/testing/20-modal/tsconfig.app.json b/apps/testing/20-modal/tsconfig.app.json deleted file mode 100644 index 5fdad8685..000000000 --- a/apps/testing/20-modal/tsconfig.app.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "cypress/**/*", - "cypress.config.ts", - "**/*.cy.ts", - "**/*.cy.js", - "**/*.cy.tsx", - "**/*.cy.jsx" - ] -} diff --git a/apps/testing/20-modal/tsconfig.editor.json b/apps/testing/20-modal/tsconfig.editor.json deleted file mode 100644 index 8ae117d96..000000000 --- a/apps/testing/20-modal/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": ["jest", "node"] - } -} diff --git a/apps/testing/20-modal/tsconfig.json b/apps/testing/20-modal/tsconfig.json deleted file mode 100644 index 3879b94cd..000000000 --- a/apps/testing/20-modal/tsconfig.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./cypress/tsconfig.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/testing/20-modal/tsconfig.spec.json b/apps/testing/20-modal/tsconfig.spec.json deleted file mode 100644 index c0c092e1e..000000000 --- a/apps/testing/20-modal/tsconfig.spec.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/testing/23-harness/.eslintrc.json b/apps/testing/23-harness/.eslintrc.json deleted file mode 100644 index bf8df1428..000000000 --- a/apps/testing/23-harness/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/testing/23-harness/README.md b/apps/testing/23-harness/README.md deleted file mode 100644 index 541da1ac8..000000000 --- a/apps/testing/23-harness/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Harness - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve testing-harness -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/testing/23-harness/). diff --git a/apps/testing/23-harness/jest.config.ts b/apps/testing/23-harness/jest.config.ts deleted file mode 100644 index 2b9e6d44c..000000000 --- a/apps/testing/23-harness/jest.config.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'testing-harness', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/testing/23-harness/project.json b/apps/testing/23-harness/project.json deleted file mode 100644 index 4da50e6a4..000000000 --- a/apps/testing/23-harness/project.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "name": "testing-harness", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/testing/23-harness/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/testing/23-harness", - "index": "apps/testing/23-harness/src/index.html", - "main": "apps/testing/23-harness/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/testing/23-harness/tsconfig.app.json", - "assets": [ - "apps/testing/23-harness/src/favicon.ico", - "apps/testing/23-harness/src/assets" - ], - "styles": ["apps/testing/23-harness/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "testing-harness:build:production" - }, - "development": { - "buildTarget": "testing-harness:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "testing-harness:build" - } - }, - "test": { - "outputs": [ - "{workspaceRoot}/coverage/{projectRoot}", - "{projectRoot}/coverage" - ], - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/testing/23-harness/src/app/app.component.ts b/apps/testing/23-harness/src/app/app.component.ts deleted file mode 100644 index 7ecf1998d..000000000 --- a/apps/testing/23-harness/src/app/app.component.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Component } from '@angular/core'; -import { ChildComponent } from './child.component'; - -@Component({ - imports: [ChildComponent], - selector: 'app-root', - template: ` - - `, - styles: [''], -}) -export class AppComponent {} diff --git a/apps/testing/23-harness/src/app/app.config.ts b/apps/testing/23-harness/src/app/app.config.ts deleted file mode 100644 index 59198e627..000000000 --- a/apps/testing/23-harness/src/app/app.config.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ApplicationConfig } from '@angular/core'; -import { provideAnimations } from '@angular/platform-browser/animations'; - -export const appConfig: ApplicationConfig = { - providers: [provideAnimations()], -}; diff --git a/apps/testing/23-harness/src/app/child.component.spec.ts b/apps/testing/23-harness/src/app/child.component.spec.ts deleted file mode 100644 index 1c4b236c8..000000000 --- a/apps/testing/23-harness/src/app/child.component.spec.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { render } from '@testing-library/angular'; -import { ChildComponent } from './child.component'; - -describe('ChildComponent', () => { - describe('When init', () => { - test('Then show 1 slider, 3 checkboxes, 4 inputs, 2 buttons', async () => { - await render(ChildComponent); - }); - - test('Then initial value of slider thumb is 0', async () => { - await render(ChildComponent); - }); - }); - - describe('Given maxValue set to 109', () => { - test('Then slider max value is 109', async () => { - await render(ChildComponent); - }); - }); - - describe('When disabled checkbox is toggled', () => { - test('Then slider is disabled', async () => { - await render(ChildComponent); - }); - }); - - describe('Given step value set to 5, and When clicking on forward button two times', () => { - test('Then thumb value is 10', async () => { - await render(ChildComponent); - }); - }); - - describe('Given slider value set to 5, and step value to 6 and When clicking on back button', () => { - test('Then slider value is still 5', async () => { - await render(ChildComponent); - }); - }); -}); diff --git a/apps/testing/23-harness/src/app/child.component.ts b/apps/testing/23-harness/src/app/child.component.ts deleted file mode 100644 index 935f08f89..000000000 --- a/apps/testing/23-harness/src/app/child.component.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { Component } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { MatCardModule } from '@angular/material/card'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatIconModule } from '@angular/material/icon'; -import { MatInputModule } from '@angular/material/input'; -import { MatSliderModule } from '@angular/material/slider'; - -@Component({ - selector: 'app-child', - template: ` - - -

Slider configuration

- -
- - Value - - - - Min value - - - - Max value - - - - Step size - - -
- -
- Show ticks -
- -
- Show thumb label -
- -
- Disabled -
-
-
- - - -
- - - - - -
-
-
- `, - styles: [ - ` - .mat-mdc-slider { - max-width: 300px; - width: 100%; - } - - .mat-mdc-card + .mat-mdc-card { - margin-top: 8px; - } - `, - ], - imports: [ - MatCardModule, - MatFormFieldModule, - MatInputModule, - FormsModule, - MatCheckboxModule, - MatSliderModule, - MatIconModule, - ], -}) -export class ChildComponent { - disabled = false; - max = 100; - min = 0; - showTicks = false; - step = 1; - thumbLabel = false; - value = 0; - - back() { - if (this.value - this.step >= this.min) { - this.value -= this.step; - } - } - - forward() { - if (this.value + this.step <= this.max) { - this.value += this.step; - } - } -} diff --git a/apps/testing/23-harness/src/assets/.gitkeep b/apps/testing/23-harness/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/testing/23-harness/src/favicon.ico b/apps/testing/23-harness/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - testing-harness - - - - - - - - - diff --git a/apps/testing/23-harness/src/main.ts b/apps/testing/23-harness/src/main.ts deleted file mode 100644 index f3a7223da..000000000 --- a/apps/testing/23-harness/src/main.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; -import { appConfig } from './app/app.config'; - -bootstrapApplication(AppComponent, appConfig).catch((err) => - console.error(err), -); diff --git a/apps/testing/23-harness/src/styles.scss b/apps/testing/23-harness/src/styles.scss deleted file mode 100644 index 9a29b71e6..000000000 --- a/apps/testing/23-harness/src/styles.scss +++ /dev/null @@ -1,29 +0,0 @@ -@use '@angular/material' as mat; - -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ - -@include mat.elevation-classes(); -@include mat.app-background(); - -$theme-primary: mat.m2-define-palette(mat.$m2-indigo-palette); -$theme-accent: mat.m2-define-palette(mat.$m2-pink-palette, A200, A100, A400); - -$theme-warn: mat.m2-define-palette(mat.$m2-red-palette); - -$theme: mat.m2-define-light-theme( - ( - color: ( - primary: $theme-primary, - accent: $theme-accent, - warn: $theme-warn, - ), - typography: mat.m2-define-typography-config(), - ) -); - -@include mat.dialog-theme($theme); -@include mat.all-component-themes($theme); diff --git a/apps/testing/23-harness/src/test-setup.ts b/apps/testing/23-harness/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/testing/23-harness/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/testing/23-harness/tailwind.config.js b/apps/testing/23-harness/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/testing/23-harness/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/testing/23-harness/tsconfig.app.json b/apps/testing/23-harness/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/testing/23-harness/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/testing/23-harness/tsconfig.editor.json b/apps/testing/23-harness/tsconfig.editor.json deleted file mode 100644 index 67634012e..000000000 --- a/apps/testing/23-harness/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts", "jest.config.ts"], - "compilerOptions": { - "types": [] - } -} diff --git a/apps/testing/23-harness/tsconfig.json b/apps/testing/23-harness/tsconfig.json deleted file mode 100644 index 4e4cd748d..000000000 --- a/apps/testing/23-harness/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./tsconfig.spec.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/testing/23-harness/tsconfig.spec.json b/apps/testing/23-harness/tsconfig.spec.json deleted file mode 100644 index 758c12092..000000000 --- a/apps/testing/23-harness/tsconfig.spec.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "target": "es2016", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/testing/24-harness-creation/.eslintrc.json b/apps/testing/24-harness-creation/.eslintrc.json deleted file mode 100644 index bf8df1428..000000000 --- a/apps/testing/24-harness-creation/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/testing/24-harness-creation/README.md b/apps/testing/24-harness-creation/README.md deleted file mode 100644 index 928bb1aab..000000000 --- a/apps/testing/24-harness-creation/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Harness Creation - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve testing-harness-creation -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/testing/24-harness-creation/). diff --git a/apps/testing/24-harness-creation/jest.config.ts b/apps/testing/24-harness-creation/jest.config.ts deleted file mode 100644 index c4b9f08db..000000000 --- a/apps/testing/24-harness-creation/jest.config.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'testing-harness-creation', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/testing/24-harness-creation/project.json b/apps/testing/24-harness-creation/project.json deleted file mode 100644 index 60b0ddb8b..000000000 --- a/apps/testing/24-harness-creation/project.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "name": "testing-harness-creation", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/testing/24-harness-creation/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/testing/24-harness-creation", - "index": "apps/testing/24-harness-creation/src/index.html", - "main": "apps/testing/24-harness-creation/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/testing/24-harness-creation/tsconfig.app.json", - "assets": [ - "apps/testing/24-harness-creation/src/favicon.ico", - "apps/testing/24-harness-creation/src/assets" - ], - "styles": ["apps/testing/24-harness-creation/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "testing-harness-creation:build:production" - }, - "development": { - "buildTarget": "testing-harness-creation:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "testing-harness-creation:build" - } - }, - "test": { - "outputs": [ - "{workspaceRoot}/coverage/{projectRoot}", - "{projectRoot}/coverage" - ], - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/testing/24-harness-creation/src/app/app.component.spec.ts b/apps/testing/24-harness-creation/src/app/app.component.spec.ts deleted file mode 100644 index c8d9f4ba7..000000000 --- a/apps/testing/24-harness-creation/src/app/app.component.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { render } from '@testing-library/angular'; -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - describe('When clicking 2 times on plus button of first slider', () => { - test('Then value is 16', async () => { - await render(AppComponent); - }); - }); - - describe('When clicking 1 time on plus button and two times on minus button of first slider', () => { - test('Then value is still 10', async () => { - await render(AppComponent); - }); - }); - - describe('When clicking 4 times on plus button of slider 1', () => { - test('Then slider 2 is enabled', async () => { - await render(AppComponent); - }); - }); -}); diff --git a/apps/testing/24-harness-creation/src/app/app.component.ts b/apps/testing/24-harness-creation/src/app/app.component.ts deleted file mode 100644 index b1c16240e..000000000 --- a/apps/testing/24-harness-creation/src/app/app.component.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Component, signal } from '@angular/core'; -import { SliderComponent } from './slider.component'; - -@Component({ - imports: [SliderComponent], - selector: 'app-root', - template: ` -

Slider 1: {{ slider1Value() }}

- -

Slider 2: {{ slider2Value() }}

-

Enabled only if Slider 1 > 20

- - `, - styles: [''], -}) -export class AppComponent { - slider1Value = signal(10); - slider2Value = signal(0); -} diff --git a/apps/testing/24-harness-creation/src/app/app.config.ts b/apps/testing/24-harness-creation/src/app/app.config.ts deleted file mode 100644 index 59198e627..000000000 --- a/apps/testing/24-harness-creation/src/app/app.config.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ApplicationConfig } from '@angular/core'; -import { provideAnimations } from '@angular/platform-browser/animations'; - -export const appConfig: ApplicationConfig = { - providers: [provideAnimations()], -}; diff --git a/apps/testing/24-harness-creation/src/app/slider.component.ts b/apps/testing/24-harness-creation/src/app/slider.component.ts deleted file mode 100644 index 28615728f..000000000 --- a/apps/testing/24-harness-creation/src/app/slider.component.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { Component, input, OnInit, output, signal } from '@angular/core'; -import { FormsModule } from '@angular/forms'; -import { MatCardModule } from '@angular/material/card'; -import { MatIconModule } from '@angular/material/icon'; -import { MatSliderModule } from '@angular/material/slider'; - -@Component({ - selector: 'app-slider', - template: ` - - -
- - {{ minValue() }} - - - - {{ maxValue() }} - -
-
-
- `, - styles: [ - ` - .mat-mdc-slider { - max-width: 300px; - width: 100%; - } - - .mat-mdc-card { - margin-top: 8px; - flex-direction: row; - } - `, - ], - imports: [MatCardModule, MatSliderModule, MatIconModule, FormsModule], -}) -export class SliderComponent implements OnInit { - step = input(1); - minValue = input(0); - maxValue = input(100); - disabled = input(false); - - value = signal(0); - valueChange = output(); - - ngOnInit(): void { - this.value.set(this.minValue()); - } - - back() { - if (this.value() - this.step() >= this.minValue()) { - this.value.update((v) => v - this.step()); - } - } - - forward() { - if (this.value() + this.step() <= this.maxValue()) { - this.value.update((v) => v + this.step()); - } - } -} diff --git a/apps/testing/24-harness-creation/src/app/slider.harness.ts b/apps/testing/24-harness-creation/src/app/slider.harness.ts deleted file mode 100644 index a2ab6c0df..000000000 --- a/apps/testing/24-harness-creation/src/app/slider.harness.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ComponentHarness } from '@angular/cdk/testing'; - -export class MySliderHarness extends ComponentHarness { - static hostSelector = 'app-slider'; -} diff --git a/apps/testing/24-harness-creation/src/assets/.gitkeep b/apps/testing/24-harness-creation/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/testing/24-harness-creation/src/favicon.ico b/apps/testing/24-harness-creation/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - testing-harness-creation - - - - - - - - - diff --git a/apps/testing/24-harness-creation/src/main.ts b/apps/testing/24-harness-creation/src/main.ts deleted file mode 100644 index f3a7223da..000000000 --- a/apps/testing/24-harness-creation/src/main.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; -import { appConfig } from './app/app.config'; - -bootstrapApplication(AppComponent, appConfig).catch((err) => - console.error(err), -); diff --git a/apps/testing/24-harness-creation/src/styles.scss b/apps/testing/24-harness-creation/src/styles.scss deleted file mode 100644 index 1430d2f9b..000000000 --- a/apps/testing/24-harness-creation/src/styles.scss +++ /dev/null @@ -1,30 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ -@use '@angular/material' as mat; - -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ - -@include mat.elevation-classes(); -@include mat.app-background(); - -$theme-primary: mat.m2-define-palette(mat.$m2-indigo-palette); -$theme-accent: mat.m2-define-palette(mat.$m2-pink-palette, A200, A100, A400); - -$theme-warn: mat.m2-define-palette(mat.$m2-red-palette); - -$theme: mat.m2-define-light-theme( - ( - color: ( - primary: $theme-primary, - accent: $theme-accent, - warn: $theme-warn, - ), - typography: mat.m2-define-typography-config(), - ) -); - -@include mat.dialog-theme($theme); -@include mat.all-component-themes($theme); diff --git a/apps/testing/24-harness-creation/src/test-setup.ts b/apps/testing/24-harness-creation/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/testing/24-harness-creation/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/testing/24-harness-creation/tailwind.config.js b/apps/testing/24-harness-creation/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/testing/24-harness-creation/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/testing/24-harness-creation/tsconfig.app.json b/apps/testing/24-harness-creation/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/testing/24-harness-creation/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/testing/24-harness-creation/tsconfig.editor.json b/apps/testing/24-harness-creation/tsconfig.editor.json deleted file mode 100644 index 4ee639340..000000000 --- a/apps/testing/24-harness-creation/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": [] - } -} diff --git a/apps/testing/24-harness-creation/tsconfig.json b/apps/testing/24-harness-creation/tsconfig.json deleted file mode 100644 index 4e4cd748d..000000000 --- a/apps/testing/24-harness-creation/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./tsconfig.spec.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/testing/24-harness-creation/tsconfig.spec.json b/apps/testing/24-harness-creation/tsconfig.spec.json deleted file mode 100644 index 758c12092..000000000 --- a/apps/testing/24-harness-creation/tsconfig.spec.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "target": "es2016", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/testing/28-checkbox/.eslintrc.json b/apps/testing/28-checkbox/.eslintrc.json deleted file mode 100644 index bf8df1428..000000000 --- a/apps/testing/28-checkbox/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/testing/28-checkbox/README.md b/apps/testing/28-checkbox/README.md deleted file mode 100644 index 905db5f52..000000000 --- a/apps/testing/28-checkbox/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Checkbox - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve testing-checkbox -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/testing/28-checkbox/). diff --git a/apps/testing/28-checkbox/jest.config.ts b/apps/testing/28-checkbox/jest.config.ts deleted file mode 100644 index c27a02c1e..000000000 --- a/apps/testing/28-checkbox/jest.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'testing-checkbox', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - coverageDirectory: '../../../coverage/apps/testing/28-checkbox', - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/testing/28-checkbox/project.json b/apps/testing/28-checkbox/project.json deleted file mode 100644 index 2ef8a3cc1..000000000 --- a/apps/testing/28-checkbox/project.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "testing-checkbox", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/testing/28-checkbox/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/testing/28-checkbox", - "index": "apps/testing/28-checkbox/src/index.html", - "main": "apps/testing/28-checkbox/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/testing/28-checkbox/tsconfig.app.json", - "assets": [ - "apps/testing/28-checkbox/src/favicon.ico", - "apps/testing/28-checkbox/src/assets" - ], - "styles": ["apps/testing/28-checkbox/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "testing-checkbox:build:production" - }, - "development": { - "buildTarget": "testing-checkbox:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "testing-checkbox:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/testing/28-checkbox/src/app/app.component.spec.ts b/apps/testing/28-checkbox/src/app/app.component.spec.ts deleted file mode 100644 index bb64b9283..000000000 --- a/apps/testing/28-checkbox/src/app/app.component.spec.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { render } from '@testing-library/angular'; -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - describe('When checking the checkbox', () => { - it('Then button is enabled', async () => { - await render(AppComponent); - }); - }); -}); diff --git a/apps/testing/28-checkbox/src/app/app.component.ts b/apps/testing/28-checkbox/src/app/app.component.ts deleted file mode 100644 index d23f1700b..000000000 --- a/apps/testing/28-checkbox/src/app/app.component.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-root', - template: ` - - - - `, -}) -export class AppComponent { - check = false; - - toggleCheck() { - this.check = !this.check; - } -} diff --git a/apps/testing/28-checkbox/src/assets/.gitkeep b/apps/testing/28-checkbox/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/testing/28-checkbox/src/favicon.ico b/apps/testing/28-checkbox/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - testing-checkbox - - - - - - - - diff --git a/apps/testing/28-checkbox/src/main.ts b/apps/testing/28-checkbox/src/main.ts deleted file mode 100644 index 31c5da482..000000000 --- a/apps/testing/28-checkbox/src/main.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; - -bootstrapApplication(AppComponent).catch((err) => console.error(err)); diff --git a/apps/testing/28-checkbox/src/styles.scss b/apps/testing/28-checkbox/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/testing/28-checkbox/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/testing/28-checkbox/src/test-setup.ts b/apps/testing/28-checkbox/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/testing/28-checkbox/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/testing/28-checkbox/tailwind.config.js b/apps/testing/28-checkbox/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/testing/28-checkbox/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/testing/28-checkbox/tsconfig.app.json b/apps/testing/28-checkbox/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/testing/28-checkbox/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/testing/28-checkbox/tsconfig.editor.json b/apps/testing/28-checkbox/tsconfig.editor.json deleted file mode 100644 index 8ae117d96..000000000 --- a/apps/testing/28-checkbox/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": ["jest", "node"] - } -} diff --git a/apps/testing/28-checkbox/tsconfig.json b/apps/testing/28-checkbox/tsconfig.json deleted file mode 100644 index e85865cf5..000000000 --- a/apps/testing/28-checkbox/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/testing/28-checkbox/tsconfig.spec.json b/apps/testing/28-checkbox/tsconfig.spec.json deleted file mode 100644 index c0c092e1e..000000000 --- a/apps/testing/28-checkbox/tsconfig.spec.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/testing/29-real-life-application/.eslintrc.json b/apps/testing/29-real-life-application/.eslintrc.json deleted file mode 100644 index bf8df1428..000000000 --- a/apps/testing/29-real-life-application/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/testing/29-real-life-application/README.md b/apps/testing/29-real-life-application/README.md deleted file mode 100644 index 8dcfe21e6..000000000 --- a/apps/testing/29-real-life-application/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Real-life Application - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve testing-real-life-application -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/testing/29-real-application/). diff --git a/apps/testing/29-real-life-application/cypress.config.ts b/apps/testing/29-real-life-application/cypress.config.ts deleted file mode 100644 index 3738464ee..000000000 --- a/apps/testing/29-real-life-application/cypress.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { nxComponentTestingPreset } from '@nx/angular/plugins/component-testing'; -import { defineConfig } from 'cypress'; - -export default defineConfig({ - component: { - ...nxComponentTestingPreset(__filename), - }, -}); diff --git a/apps/testing/29-real-life-application/cypress/fixtures/example.json b/apps/testing/29-real-life-application/cypress/fixtures/example.json deleted file mode 100644 index 02e425437..000000000 --- a/apps/testing/29-real-life-application/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} diff --git a/apps/testing/29-real-life-application/cypress/support/commands.ts b/apps/testing/29-real-life-application/cypress/support/commands.ts deleted file mode 100644 index b5d8a9582..000000000 --- a/apps/testing/29-real-life-application/cypress/support/commands.ts +++ /dev/null @@ -1,25 +0,0 @@ -/// -import { mount } from 'cypress/angular'; - -// *********************************************** -// This example commands.ts shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** - -declare global { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace Cypress { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - interface Chainable { - login(email: string, password: string): void; - mount: typeof mount; - } - } -} - -Cypress.Commands.add('mount', mount); diff --git a/apps/testing/29-real-life-application/cypress/support/component-index.html b/apps/testing/29-real-life-application/cypress/support/component-index.html deleted file mode 100644 index 2315c8b59..000000000 --- a/apps/testing/29-real-life-application/cypress/support/component-index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - testing-real-life-application Components App - - -
- - diff --git a/apps/testing/29-real-life-application/cypress/support/component.ts b/apps/testing/29-real-life-application/cypress/support/component.ts deleted file mode 100644 index e7c3e3cbc..000000000 --- a/apps/testing/29-real-life-application/cypress/support/component.ts +++ /dev/null @@ -1,17 +0,0 @@ -// *********************************************************** -// This example support/component.ts is processed and -// loaded automatically before your subscription files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.ts using ES2015 syntax: -import './commands'; diff --git a/apps/testing/29-real-life-application/cypress/tsconfig.json b/apps/testing/29-real-life-application/cypress/tsconfig.json deleted file mode 100644 index 918d96378..000000000 --- a/apps/testing/29-real-life-application/cypress/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["cypress", "node"], - "sourceMap": false - }, - "include": [ - "support/**/*.ts", - "../cypress.config.ts", - "../**/*.cy.ts", - "../**/*.cy.tsx", - "../**/*.cy.js", - "../**/*.cy.jsx", - "../**/*.d.ts" - ] -} diff --git a/apps/testing/29-real-life-application/jest.config.ts b/apps/testing/29-real-life-application/jest.config.ts deleted file mode 100644 index b78a06561..000000000 --- a/apps/testing/29-real-life-application/jest.config.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'testing-real-life-application', - preset: '../../../jest.preset.js', - setupFilesAfterEnv: ['/src/test-setup.ts'], - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], - snapshotSerializers: [ - 'jest-preset-angular/build/serializers/no-ng-attributes', - 'jest-preset-angular/build/serializers/ng-snapshot', - 'jest-preset-angular/build/serializers/html-comment', - ], -}; diff --git a/apps/testing/29-real-life-application/project.json b/apps/testing/29-real-life-application/project.json deleted file mode 100644 index 25833bf4c..000000000 --- a/apps/testing/29-real-life-application/project.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "name": "testing-real-life-application", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/testing/29-real-life-application/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/testing/29-real-life-application", - "index": "apps/testing/29-real-life-application/src/index.html", - "main": "apps/testing/29-real-life-application/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/testing/29-real-life-application/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/testing/29-real-life-application/src/favicon.ico", - "apps/testing/29-real-life-application/src/assets" - ], - "styles": [ - "apps/testing/29-real-life-application/src/styles.scss", - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "testing-real-life-application:build:production" - }, - "development": { - "buildTarget": "testing-real-life-application:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "testing-real-life-application:build" - } - }, - "test": { - "outputs": [ - "{workspaceRoot}/coverage/{projectRoot}", - "{projectRoot}/coverage" - ], - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - }, - "component-test": { - "executor": "@nx/cypress:cypress", - "options": { - "cypressConfig": "apps/testing/29-real-life-application/cypress.config.ts", - "testingType": "component", - "skipServe": true, - "devServerTarget": "testing-real-life-application:build" - } - } - } -} diff --git a/apps/testing/29-real-life-application/src/app/app.component.ts b/apps/testing/29-real-life-application/src/app/app.component.ts deleted file mode 100644 index a4b00aaec..000000000 --- a/apps/testing/29-real-life-application/src/app/app.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Component } from '@angular/core'; -import { RouterOutlet } from '@angular/router'; - -@Component({ - selector: 'app-root', - imports: [RouterOutlet], - template: ` - - `, -}) -export class AppComponent {} diff --git a/apps/testing/29-real-life-application/src/app/app.config.ts b/apps/testing/29-real-life-application/src/app/app.config.ts deleted file mode 100644 index 2812399d0..000000000 --- a/apps/testing/29-real-life-application/src/app/app.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ApplicationConfig } from '@angular/core'; -import { provideAnimations } from '@angular/platform-browser/animations'; -import { provideRouter } from '@angular/router'; -import { APP_ROUTES } from './app.route'; -export const appConfig: ApplicationConfig = { - providers: [provideAnimations(), provideRouter(APP_ROUTES)], -}; diff --git a/apps/testing/29-real-life-application/src/app/app.route.ts b/apps/testing/29-real-life-application/src/app/app.route.ts deleted file mode 100644 index f9104ef8e..000000000 --- a/apps/testing/29-real-life-application/src/app/app.route.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Routes } from '@angular/router'; - -export const PARAM_TICKET_ID = 'ticketId'; - -export const APP_ROUTES: Routes = [ - { - path: '', - pathMatch: 'full', - redirectTo: 'list', - }, - { - path: 'list', - loadComponent: () => - import('./list/list.component').then((m) => m.ListComponent), - }, - { - path: `detail/:${PARAM_TICKET_ID}`, - loadComponent: () => - import('./detail/detail.component').then((m) => m.DetailComponent), - }, - { - path: '**', - redirectTo: 'list', - }, -]; diff --git a/apps/testing/29-real-life-application/src/app/backend.service.ts b/apps/testing/29-real-life-application/src/app/backend.service.ts deleted file mode 100644 index 08929eda4..000000000 --- a/apps/testing/29-real-life-application/src/app/backend.service.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Observable, delay, of, throwError } from 'rxjs'; - -export type User = { - id: number; - name: string; -}; - -export interface BaseTicket { - id: number; - description: string; - completed: boolean; -} - -export interface Ticket extends BaseTicket { - assigneeId: number | null; -} - -export interface TicketUser extends BaseTicket { - assignee: string; -} - -function randomDelay() { - return Math.random() * 1000; -} - -@Injectable({ providedIn: 'root' }) -export class BackendService { - storedTickets: Ticket[] = [ - { - id: 0, - description: 'Install a monitor arm', - assigneeId: 111, - completed: false, - }, - { - id: 1, - description: 'Move the desk to the new location', - assigneeId: 111, - completed: false, - }, - ]; - - storedUsers: User[] = [ - { id: 111, name: 'Thomas' }, - { id: 222, name: 'Jack' }, - ]; - - lastId = 1; - - private findTicketById = (id: number) => - this.storedTickets.find((ticket) => ticket.id === +id); - - private findUserById = (id: number) => - this.storedUsers.find((user) => user.id === +id); - - tickets() { - return of(this.storedTickets).pipe(delay(randomDelay())); - } - - ticket(id: number): Observable { - return of(this.findTicketById(id)).pipe(delay(randomDelay())); - } - - users() { - return of(this.storedUsers).pipe(delay(randomDelay())); - } - - user(id: number) { - return of(this.findUserById(id)).pipe(delay(randomDelay())); - } - - newTicket(payload: { description: string }) { - const newTicket: Ticket = { - id: ++this.lastId, - description: payload.description, - assigneeId: null, - completed: false, - }; - - this.storedTickets = this.storedTickets.concat(newTicket); - - return of(newTicket).pipe(delay(randomDelay())); - } - - assign(ticketId: number, userId: number) { - return this.update(ticketId, { assigneeId: userId }); - } - - complete(ticketId: number, completed: boolean) { - return this.update(ticketId, { completed }); - } - - update(ticketId: number, updates: Partial>) { - const foundTicket = this.findTicketById(ticketId); - - if (!foundTicket) { - return throwError(() => new Error('ticket not found')); - } - - const updatedTicket = { ...foundTicket, ...updates }; - - this.storedTickets = this.storedTickets.map((t) => - t.id === ticketId ? updatedTicket : t, - ); - - return of(updatedTicket).pipe(delay(randomDelay())); - } -} diff --git a/apps/testing/29-real-life-application/src/app/detail/detail.component.ts b/apps/testing/29-real-life-application/src/app/detail/detail.component.ts deleted file mode 100644 index 0f88f0bf2..000000000 --- a/apps/testing/29-real-life-application/src/app/detail/detail.component.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { AsyncPipe } from '@angular/common'; -import { Component, inject } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { RouterLink } from '@angular/router'; -import { provideComponentStore } from '@ngrx/component-store'; -import { DetailStore } from './detail.store'; - -@Component({ - selector: 'app-detail', - imports: [MatButtonModule, RouterLink, MatProgressBarModule, AsyncPipe], - template: ` -

Ticket Detail:

- @if (vm$ | async; as vm) { - @if (vm.loading) { - - } - @if (vm.ticket) { -
-
- Ticket: - {{ vm.ticket.id }} -
-
- Description: - {{ vm.ticket.description }} -
-
- AssigneeId: - {{ vm.ticket.assigneeId }} -
-
- Is done: - {{ vm.ticket.completed }} -
-
- } - } - - - `, - providers: [provideComponentStore(DetailStore)], - host: { - class: 'p-5 block', - }, -}) -export class DetailComponent { - vm$ = inject(DetailStore).vm$; -} diff --git a/apps/testing/29-real-life-application/src/app/detail/detail.store.ts b/apps/testing/29-real-life-application/src/app/detail/detail.store.ts deleted file mode 100644 index a5cf12eff..000000000 --- a/apps/testing/29-real-life-application/src/app/detail/detail.store.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { inject, Injectable } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { ComponentStore, OnStateInit } from '@ngrx/component-store'; -import { concatLatestFrom, tapResponse } from '@ngrx/operators'; -import { pipe } from 'rxjs'; -import { map, mergeMap, tap } from 'rxjs/operators'; -import { PARAM_TICKET_ID } from '../app.route'; -import { BackendService, Ticket } from '../backend.service'; - -export interface TicketState { - ticket?: Ticket; - loading: boolean; - error: unknown; -} - -const initialState: TicketState = { - loading: false, - error: '', -}; - -@Injectable() -export class DetailStore - extends ComponentStore - implements OnStateInit -{ - private readonly backend = inject(BackendService); - private readonly route = inject(ActivatedRoute); - - readonly ticket$ = this.select((state) => state.ticket); - readonly loading$ = this.select((state) => state.loading); - readonly error$ = this.select((state) => state.error); - - readonly vm$ = this.select({ - ticket: this.ticket$, - loading: this.loading$, - }); - - constructor() { - super(initialState); - } - - readonly loadTicket = this.effect( - pipe( - concatLatestFrom(() => - this.route.params.pipe(map((p) => p[PARAM_TICKET_ID])), - ), - tap(() => this.patchState({ loading: true, error: '' })), - mergeMap(([, id]) => - this.backend.ticket(id).pipe( - tapResponse( - (ticket) => - this.patchState({ - loading: false, - ticket, - }), - (error: unknown) => this.patchState({ error }), - ), - ), - ), - ), - ); - - ngrxOnStateInit() { - this.loadTicket(); - } -} diff --git a/apps/testing/29-real-life-application/src/app/list/list.component.spec.ts b/apps/testing/29-real-life-application/src/app/list/list.component.spec.ts deleted file mode 100644 index a03aca868..000000000 --- a/apps/testing/29-real-life-application/src/app/list/list.component.spec.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ReactiveFormsModule } from '@angular/forms'; -import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { RouterTestingModule } from '@angular/router/testing'; -import { of } from 'rxjs'; -import { BackendService } from '../backend.service'; -import { ListComponent } from './list.component'; - -const USERS = [ - { id: 1, name: 'titi' }, - { id: 2, name: 'george' }, -]; -const TICKETS = [ - { - id: 0, - description: 'Install a monitor arm', - assigneeId: 1, - completed: false, - }, - { - id: 1, - description: 'Coucou', - assigneeId: 1, - completed: false, - }, -]; - -describe('ListComponent', () => { - let component: ListComponent; - let fixture: ComponentFixture; - - //To change with a setup function - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [ - ListComponent, - ReactiveFormsModule, - RouterTestingModule, - NoopAnimationsModule, - ], - providers: [ - { - provide: BackendService, - useValue: { - users: () => of(USERS), - tickets: () => of(TICKETS), - }, - }, - ], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(ListComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - describe('Given Install inside the search input', () => { - it('Then one row is visible', async () => { - // - }); - }); - - describe('When typing a description and clicking on add a new ticket', () => { - describe('Given a success answer from API', () => { - it('Then ticket with the description is added to the list with unassigned status', async () => { - // - }); - }); - - describe('Given a failure answer from API', () => { - it('Then an error is displayed at the bottom of the list', async () => { - // - }); - }); - }); - - describe('When assigning first ticket to george', () => { - describe('Given a success answer from API', () => { - it('Then first ticket is assigned to George', async () => { - // - }); - }); - - describe('Given a failure answer from API', () => { - it('Then an error is displayed at the bottom of the list', async () => { - // - }); - }); - }); - - describe('When finishing first ticket', () => { - describe('Given a success answer from API', () => { - it('Then first ticket is done', async () => { - // - }); - }); - - describe('Given a failure answer from API', () => { - it('Then an error is displayed at the bottom of the list', async () => { - // - }); - }); - }); - - describe('When clicking on first ticket', () => { - it('Then we navigate to detail/0', async () => { - // - }); - }); -}); diff --git a/apps/testing/29-real-life-application/src/app/list/list.component.ts b/apps/testing/29-real-life-application/src/app/list/list.component.ts deleted file mode 100644 index 4c9957139..000000000 --- a/apps/testing/29-real-life-application/src/app/list/list.component.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { AsyncPipe } from '@angular/common'; -import { Component, inject, OnInit } from '@angular/core'; -import { FormControl, ReactiveFormsModule } from '@angular/forms'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; -import { MatProgressBarModule } from '@angular/material/progress-bar'; -import { provideComponentStore } from '@ngrx/component-store'; -import { TicketStore } from './ticket.store'; -import { AddComponent } from './ui/add.component'; -import { RowComponent } from './ui/row.component'; - -@Component({ - selector: 'app-list', - imports: [ - ReactiveFormsModule, - AddComponent, - RowComponent, - MatFormFieldModule, - MatProgressBarModule, - MatInputModule, - AsyncPipe, - ], - template: ` -

Tickets

- - - Search - - - - @if (vm$ | async; as vm) { - - - @if (vm.loading) { - - } -
    - @for (ticket of vm.tickets; track ticket.id) { - - } -
-
- {{ vm.error }} -
- } - `, - providers: [provideComponentStore(TicketStore)], - host: { - class: 'p-5 block', - }, -}) -export class ListComponent implements OnInit { - ticketStore = inject(TicketStore); - readonly vm$ = this.ticketStore.vm$; - - search = new FormControl(); - - ngOnInit(): void { - this.ticketStore.search(this.search.valueChanges); - } -} diff --git a/apps/testing/29-real-life-application/src/app/list/ticket.store.spec.ts b/apps/testing/29-real-life-application/src/app/list/ticket.store.spec.ts deleted file mode 100644 index 7155bb0d8..000000000 --- a/apps/testing/29-real-life-application/src/app/list/ticket.store.spec.ts +++ /dev/null @@ -1,29 +0,0 @@ -describe('TicketStore', () => { - describe('When init', () => { - it('Then calls backend.users', async () => { - // - }); - - it('Then calls backend.tickets', async () => { - // - }); - - describe('Given all api returns success response', () => { - it('Then tickets and users should be merged ', async () => { - // - }); - }); - - describe('Given users api returns failure response', () => { - it('Then tickets should not have any assignee', () => { - // - }); - }); - - describe('When adding a new ticket with success', () => { - it('Then ticket is added to the list', async () => { - // - }); - }); - }); -}); diff --git a/apps/testing/29-real-life-application/src/app/list/ticket.store.ts b/apps/testing/29-real-life-application/src/app/list/ticket.store.ts deleted file mode 100644 index 838b6038d..000000000 --- a/apps/testing/29-real-life-application/src/app/list/ticket.store.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { Injectable, inject } from '@angular/core'; -import { - ComponentStore, - OnStateInit, - OnStoreInit, -} from '@ngrx/component-store'; -import { tapResponse } from '@ngrx/operators'; -import { pipe } from 'rxjs'; -import { mergeMap, tap } from 'rxjs/operators'; -import { BackendService, Ticket, User } from '../backend.service'; - -export interface TicketState { - tickets: Ticket[]; - search: string; - users: User[]; - loading: boolean; - error: unknown; -} - -const initialState: TicketState = { - tickets: [], - search: '', - users: [], - loading: false, - error: '', -}; - -@Injectable() -export class TicketStore - extends ComponentStore - implements OnStoreInit, OnStateInit -{ - readonly users$ = this.select((state) => state.users); - readonly error$ = this.select((state) => state.error); - readonly loading$ = this.select((state) => state.loading); - private readonly ticketsInput$ = this.select((state) => state.tickets); - private readonly search$ = this.select((state) => state.search); - - private readonly ticketsUsers$ = this.select( - this.users$, - this.ticketsInput$, - (users, tickets) => - users && users.length > 0 - ? tickets.map((ticket) => ({ - ...ticket, - assignee: - users.find((user) => user.id === ticket.assigneeId)?.name ?? - 'unassigned', - })) - : tickets, - ); - - readonly tickets$ = this.select( - this.ticketsUsers$, - this.search$, - (tickets, search) => - tickets.filter((t) => - t.description.toLowerCase().includes(search.toLowerCase()), - ), - ); - - readonly vm$ = this.select( - { - tickets: this.tickets$, - users: this.users$, - loading: this.loading$, - error: this.error$, - }, - { debounce: true }, - ); - - readonly updateAssignee = this.updater((state, ticket: Ticket) => { - const newTickets = [...state.tickets]; - const index = newTickets.findIndex((t) => t.id === ticket.id); - newTickets[index] = ticket; - return { - ...state, - loading: false, - tickets: newTickets, - }; - }); - - readonly search = this.updater((state, search: string) => ({ - ...state, - search, - })); - - private backend = inject(BackendService); - - ngrxOnStoreInit() { - this.setState(initialState); - } - - ngrxOnStateInit() { - this.loadTickets(); - this.loadUsers(); - } - - readonly loadTickets = this.effect( - pipe( - tap(() => this.patchState({ loading: true, error: '' })), - mergeMap(() => - this.backend.tickets().pipe( - tapResponse( - (tickets) => - this.patchState({ - loading: false, - tickets, - }), - (error: unknown) => this.patchState({ error, loading: false }), - ), - ), - ), - ), - ); - - readonly loadUsers = this.effect( - pipe( - tap(() => this.patchState({ loading: true, error: '' })), - mergeMap(() => - this.backend.users().pipe( - tapResponse( - (users) => - this.patchState({ - loading: false, - users, - }), - (error: unknown) => this.patchState({ error, loading: false }), - ), - ), - ), - ), - ); - - readonly addTicket = this.effect( - pipe( - tap(() => this.patchState({ loading: true, error: '' })), - mergeMap((description) => - this.backend.newTicket({ description }).pipe( - tapResponse( - (newTicket) => - this.patchState((state: TicketState) => ({ - loading: false, - tickets: [...state.tickets, newTicket], - })), - (error: unknown) => this.patchState({ error, loading: false }), - ), - ), - ), - ), - ); - - readonly assignTicket = this.effect<{ userId: number; ticketId: number }>( - pipe( - tap(() => this.patchState({ loading: true, error: '' })), - mergeMap((info) => - this.backend.assign(info.ticketId, Number(info.userId)).pipe( - tapResponse( - (newTicket) => this.updateAssignee(newTicket), - (error: unknown) => this.patchState({ error, loading: false }), - ), - ), - ), - ), - ); - - readonly done = this.effect( - pipe( - tap(() => this.patchState({ loading: true, error: '' })), - mergeMap((ticketId) => - this.backend.complete(ticketId, true).pipe( - tapResponse( - (newTicket) => this.updateAssignee(newTicket), - (error: unknown) => this.patchState({ error, loading: false }), - ), - ), - ), - ), - ); -} diff --git a/apps/testing/29-real-life-application/src/app/list/ui/add.component.ts b/apps/testing/29-real-life-application/src/app/list/ui/add.component.ts deleted file mode 100644 index c66fb6d01..000000000 --- a/apps/testing/29-real-life-application/src/app/list/ui/add.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Component, input, output } from '@angular/core'; -import { - FormControl, - FormGroup, - ReactiveFormsModule, - Validators, -} from '@angular/forms'; -import { MatButtonModule } from '@angular/material/button'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; - -@Component({ - selector: 'app-add', - imports: [ - ReactiveFormsModule, - MatFormFieldModule, - MatInputModule, - MatButtonModule, - ], - template: ` -
- - Description - - @if (form.controls.description.hasError('required')) { - - Description is - required - - } - - -
- `, -}) -export class AddComponent { - loading = input(false); - - addTicket = output(); - - form = new FormGroup({ - description: new FormControl(null, Validators.required), - }); - - submit() { - if (this.form.valid) { - this.addTicket.emit(this.form.value.description ?? ''); - } - } -} diff --git a/apps/testing/29-real-life-application/src/app/list/ui/row.component.spec.ts b/apps/testing/29-real-life-application/src/app/list/ui/row.component.spec.ts deleted file mode 100644 index 6d9ce0fc3..000000000 --- a/apps/testing/29-real-life-application/src/app/list/ui/row.component.spec.ts +++ /dev/null @@ -1,41 +0,0 @@ -const USERS = [ - { id: 1, name: 'titi' }, - { id: 2, name: 'George' }, -]; -const TICKET_NOT_ASSIGNED = { - id: 0, - description: 'Install a monitor arm', - assignee: 'unassigned', - completed: false, -}; - -const TICKET_ASSIGNED = { - id: 1, - description: 'Install a monitor arm', - assignee: 'titi', - completed: false, -}; - -describe('RowComponent', () => { - describe('Given an unassigned ticket', () => { - describe('When we assign it to titi', () => { - it('Then assign event is emitted with ticketId 0 and userId 1', async () => { - // - }); - }); - }); - - describe('Given an assigned ticket', () => { - describe('When we click the done button', () => { - it('Then closeTicket event is emitted with ticketId 1 ', async () => { - // - }); - }); - }); - - describe('When clicking on ticket', () => { - it('Then navigation should be triggered with url detail/0', async () => { - // - }); - }); -}); diff --git a/apps/testing/29-real-life-application/src/app/list/ui/row.component.ts b/apps/testing/29-real-life-application/src/app/list/ui/row.component.ts deleted file mode 100644 index 5d80ea48c..000000000 --- a/apps/testing/29-real-life-application/src/app/list/ui/row.component.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { Component, input, output } from '@angular/core'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; -import { MatButtonModule } from '@angular/material/button'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; -import { MatSelectModule } from '@angular/material/select'; -import { RouterLink } from '@angular/router'; -import { Ticket, TicketUser, User } from '../../backend.service'; - -@Component({ - selector: 'app-row', - imports: [ - RouterLink, - ReactiveFormsModule, - MatFormFieldModule, - MatInputModule, - MatButtonModule, - MatSelectModule, - ], - template: ` -
  • - -
    -
    - - Assign to - - @for (user of users(); track user.id) { - - {{ user.name }} - - } - - - -
    - -
    -
  • - `, - host: { - class: 'p-4 border border-blue-500 rounded flex', - }, -}) -export class RowComponent { - ticket = input.required(); - users = input.required(); - - assign = output<{ userId: number; ticketId: number }>(); - closeTicket = output(); - - form = new FormGroup({ - assignee: new FormControl(0, { nonNullable: true }), - }); - - submit() { - this.assign.emit({ - ticketId: this.ticket().id, - userId: this.form.getRawValue().assignee, - }); - } -} diff --git a/apps/testing/29-real-life-application/src/assets/.gitkeep b/apps/testing/29-real-life-application/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/testing/29-real-life-application/src/favicon.ico b/apps/testing/29-real-life-application/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - testing-real-life-application - - - - - - - - diff --git a/apps/testing/29-real-life-application/src/main.ts b/apps/testing/29-real-life-application/src/main.ts deleted file mode 100644 index 7961924bf..000000000 --- a/apps/testing/29-real-life-application/src/main.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { appConfig } from './app/app.config'; - -import { AppComponent } from './app/app.component'; - -bootstrapApplication(AppComponent, appConfig).catch((err) => - console.error(err), -); diff --git a/apps/testing/29-real-life-application/src/styles.scss b/apps/testing/29-real-life-application/src/styles.scss deleted file mode 100644 index 6be9603e4..000000000 --- a/apps/testing/29-real-life-application/src/styles.scss +++ /dev/null @@ -1,13 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ -html, -body { - height: 100%; -} -body { - margin: 0; - font-family: Roboto, 'Helvetica Neue', sans-serif; -} diff --git a/apps/testing/29-real-life-application/src/test-setup.ts b/apps/testing/29-real-life-application/src/test-setup.ts deleted file mode 100644 index 15de72a3c..000000000 --- a/apps/testing/29-real-life-application/src/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@testing-library/jest-dom'; -import 'jest-preset-angular/setup-jest'; diff --git a/apps/testing/29-real-life-application/tailwind.config.js b/apps/testing/29-real-life-application/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/testing/29-real-life-application/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/testing/29-real-life-application/tsconfig.app.json b/apps/testing/29-real-life-application/tsconfig.app.json deleted file mode 100644 index 5fdad8685..000000000 --- a/apps/testing/29-real-life-application/tsconfig.app.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "cypress/**/*", - "cypress.config.ts", - "**/*.cy.ts", - "**/*.cy.js", - "**/*.cy.tsx", - "**/*.cy.jsx" - ] -} diff --git a/apps/testing/29-real-life-application/tsconfig.editor.json b/apps/testing/29-real-life-application/tsconfig.editor.json deleted file mode 100644 index 8ae117d96..000000000 --- a/apps/testing/29-real-life-application/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": ["jest", "node"] - } -} diff --git a/apps/testing/29-real-life-application/tsconfig.json b/apps/testing/29-real-life-application/tsconfig.json deleted file mode 100644 index c0f4e6dd3..000000000 --- a/apps/testing/29-real-life-application/tsconfig.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./cypress/tsconfig .json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/testing/29-real-life-application/tsconfig.spec.json b/apps/testing/29-real-life-application/tsconfig.spec.json deleted file mode 100644 index c0c092e1e..000000000 --- a/apps/testing/29-real-life-application/tsconfig.spec.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node", "@testing-library/jest-dom"] - }, - "files": ["src/test-setup.ts"], - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/typescript/15-function-overload/.eslintrc.json b/apps/typescript/15-function-overload/.eslintrc.json deleted file mode 100644 index bf8df1428..000000000 --- a/apps/typescript/15-function-overload/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/typescript/15-function-overload/README.md b/apps/typescript/15-function-overload/README.md deleted file mode 100644 index 96ce65e9d..000000000 --- a/apps/typescript/15-function-overload/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Function Overload - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve typescript-function-overload` -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/typescript/15-typescript-function-overload-fn/). diff --git a/apps/typescript/15-function-overload/project.json b/apps/typescript/15-function-overload/project.json deleted file mode 100644 index b36257d9d..000000000 --- a/apps/typescript/15-function-overload/project.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "typescript-function-overload", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/typescript/15-function-overload/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/typescript/15-function-overload", - "index": "apps/typescript/15-function-overload/src/index.html", - "main": "apps/typescript/15-function-overload/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/typescript/15-function-overload/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/typescript/15-function-overload/src/favicon.ico", - "apps/typescript/15-function-overload/src/assets" - ], - "styles": ["apps/typescript/15-function-overload/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "typescript-function-overload:build:production" - }, - "development": { - "buildTarget": "typescript-function-overload:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "typescript-function-overload:build" - } - } - } -} diff --git a/apps/typescript/15-function-overload/src/app/app.component.ts b/apps/typescript/15-function-overload/src/app/app.component.ts deleted file mode 100644 index 1f06369c1..000000000 --- a/apps/typescript/15-function-overload/src/app/app.component.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Component } from '@angular/core'; -import { createVehicle } from './vehicle.utils'; - -@Component({ - selector: 'app-root', - template: ``, -}) -export class AppComponent { - car = createVehicle('car', 'diesel'); - moto = createVehicle('moto', 'diesel'); - bus = createVehicle('bus', undefined, 20); - boat = createVehicle('boat', undefined, 300, true); - bicycle = createVehicle('bicycle'); -} diff --git a/apps/typescript/15-function-overload/src/app/vehicle.utils.ts b/apps/typescript/15-function-overload/src/app/vehicle.utils.ts deleted file mode 100644 index bec95c08d..000000000 --- a/apps/typescript/15-function-overload/src/app/vehicle.utils.ts +++ /dev/null @@ -1,55 +0,0 @@ -type VehicleType = 'bus' | 'car' | 'moto' | 'bicycle' | 'boat'; -type Fuel = 'diesel' | 'petrol' | 'electric'; - -interface Bicycle { - type: 'bicycle'; -} - -interface Car { - fuel: Fuel; - type: 'car'; -} - -interface Moto { - fuel: Fuel; - type: 'moto'; -} - -interface Bus { - capacity: number; - isPublicTransport: boolean; - type: 'bus'; -} - -interface Boat { - capacity: number; - type: 'boat'; -} - -type Vehicle = Bicycle | Car | Moto | Bus | Boat; - -export function createVehicle( - type: VehicleType, - fuel?: Fuel, - capacity?: number, - isPublicTransport?: boolean, -): Vehicle { - switch (type) { - case 'bicycle': - return { type }; - case 'car': - case 'moto': - if (!fuel) throw new Error(`fuel property is missing for type ${type}`); - return { fuel, type }; - case 'boat': - if (!capacity) - throw new Error(`capacity property is missing for type boat`); - return { capacity, type }; - case 'bus': - if (!capacity) - throw new Error(`capacity property is missing for type bus`); - if (!isPublicTransport) - throw new Error(`isPublicTransport property is missing for type bus`); - return { capacity, isPublicTransport, type }; - } -} diff --git a/apps/typescript/15-function-overload/src/assets/.gitkeep b/apps/typescript/15-function-overload/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/typescript/15-function-overload/src/favicon.ico b/apps/typescript/15-function-overload/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - typescript-function-overload - - - - - - - - diff --git a/apps/typescript/15-function-overload/src/main.ts b/apps/typescript/15-function-overload/src/main.ts deleted file mode 100644 index 31c5da482..000000000 --- a/apps/typescript/15-function-overload/src/main.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; - -bootstrapApplication(AppComponent).catch((err) => console.error(err)); diff --git a/apps/typescript/15-function-overload/src/styles.scss b/apps/typescript/15-function-overload/src/styles.scss deleted file mode 100644 index 90d4ee007..000000000 --- a/apps/typescript/15-function-overload/src/styles.scss +++ /dev/null @@ -1 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/typescript/15-function-overload/tsconfig.app.json b/apps/typescript/15-function-overload/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/typescript/15-function-overload/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/typescript/15-function-overload/tsconfig.editor.json b/apps/typescript/15-function-overload/tsconfig.editor.json deleted file mode 100644 index 4ee639340..000000000 --- a/apps/typescript/15-function-overload/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": [] - } -} diff --git a/apps/typescript/15-function-overload/tsconfig.json b/apps/typescript/15-function-overload/tsconfig.json deleted file mode 100644 index 51c7908c5..000000000 --- a/apps/typescript/15-function-overload/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/typescript/47-enums-vs-union-types/.eslintrc.json b/apps/typescript/47-enums-vs-union-types/.eslintrc.json deleted file mode 100644 index 8ebcbfd59..000000000 --- a/apps/typescript/47-enums-vs-union-types/.eslintrc.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts"], - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } - ] - } - }, - { - "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], - "rules": {} - } - ] -} diff --git a/apps/typescript/47-enums-vs-union-types/README.md b/apps/typescript/47-enums-vs-union-types/README.md deleted file mode 100644 index 99aa0acf2..000000000 --- a/apps/typescript/47-enums-vs-union-types/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Enums vs Union Types - -> author: sven-brodny - -### Run Application - -```bash -npx nx serve typescript-enums-vs-union-types -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/typescript/47-enums-vs-union-types/). diff --git a/apps/typescript/47-enums-vs-union-types/project.json b/apps/typescript/47-enums-vs-union-types/project.json deleted file mode 100644 index e5c3283d6..000000000 --- a/apps/typescript/47-enums-vs-union-types/project.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "typescript-enums-vs-union-types", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/typescript/47-enums-vs-union-types/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/typescript/47-enums-vs-union-types", - "index": "apps/typescript/47-enums-vs-union-types/src/index.html", - "browser": "apps/typescript/47-enums-vs-union-types/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/typescript/47-enums-vs-union-types/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/typescript/47-enums-vs-union-types/src/favicon.ico", - "apps/typescript/47-enums-vs-union-types/src/assets" - ], - "styles": ["apps/typescript/47-enums-vs-union-types/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "typescript-enums-vs-union-types:build:production" - }, - "development": { - "buildTarget": "typescript-enums-vs-union-types:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "typescript-enums-vs-union-types:build" - } - } - } -} diff --git a/apps/typescript/47-enums-vs-union-types/src/app/app.component.ts b/apps/typescript/47-enums-vs-union-types/src/app/app.component.ts deleted file mode 100644 index 05886724f..000000000 --- a/apps/typescript/47-enums-vs-union-types/src/app/app.component.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Component, computed, signal } from '@angular/core'; - -enum Difficulty { - EASY = 'easy', - NORMAL = 'normal', -} - -enum Direction { - LEFT = 'left', - RIGHT = 'right', -} - -@Component({ - imports: [], - selector: 'app-root', - template: ` -
    -
    - - -
    -

    Selected Difficulty: {{ difficultyLabel() }}

    -
    - -
    -
    - - -
    -

    {{ directionLabel() }}

    -
    - `, - styles: ` - section { - @apply mx-auto my-5 flex w-fit flex-col items-center gap-2; - - > div { - @apply flex w-fit gap-5; - } - } - - button { - @apply rounded-md border px-4 py-2; - } - `, -}) -export class AppComponent { - readonly Difficulty = Difficulty; - readonly difficulty = signal(Difficulty.EASY); - - readonly Direction = Direction; - readonly direction = signal(undefined); - - readonly difficultyLabel = computed(() => { - switch (this.difficulty()) { - case Difficulty.EASY: - return Difficulty.EASY; - case Difficulty.NORMAL: - return Difficulty.NORMAL; - } - }); - - readonly directionLabel = computed(() => { - const prefix = 'You chose to go'; - switch (this.direction()) { - case Direction.LEFT: - return `${prefix} ${Direction.LEFT}`; - case Direction.RIGHT: - return `${prefix} ${Direction.RIGHT}`; - default: - return 'Choose a direction!'; - } - }); -} diff --git a/apps/typescript/47-enums-vs-union-types/src/app/app.config.ts b/apps/typescript/47-enums-vs-union-types/src/app/app.config.ts deleted file mode 100644 index 81a6edde4..000000000 --- a/apps/typescript/47-enums-vs-union-types/src/app/app.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { ApplicationConfig } from '@angular/core'; - -export const appConfig: ApplicationConfig = { - providers: [], -}; diff --git a/apps/typescript/47-enums-vs-union-types/src/assets/.gitkeep b/apps/typescript/47-enums-vs-union-types/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/typescript/47-enums-vs-union-types/src/favicon.ico b/apps/typescript/47-enums-vs-union-types/src/favicon.ico deleted file mode 100644 index 317ebcb2336e0833a22dddf0ab287849f26fda57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 - - - - typescript-enums-vs-union-types - - - - - - - - diff --git a/apps/typescript/47-enums-vs-union-types/src/main.ts b/apps/typescript/47-enums-vs-union-types/src/main.ts deleted file mode 100644 index f3a7223da..000000000 --- a/apps/typescript/47-enums-vs-union-types/src/main.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { bootstrapApplication } from '@angular/platform-browser'; -import { AppComponent } from './app/app.component'; -import { appConfig } from './app/app.config'; - -bootstrapApplication(AppComponent, appConfig).catch((err) => - console.error(err), -); diff --git a/apps/typescript/47-enums-vs-union-types/src/styles.scss b/apps/typescript/47-enums-vs-union-types/src/styles.scss deleted file mode 100644 index 77e408aa8..000000000 --- a/apps/typescript/47-enums-vs-union-types/src/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* You can add global styles to this file, and also import other style files */ diff --git a/apps/typescript/47-enums-vs-union-types/tailwind.config.js b/apps/typescript/47-enums-vs-union-types/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/typescript/47-enums-vs-union-types/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/typescript/47-enums-vs-union-types/tsconfig.app.json b/apps/typescript/47-enums-vs-union-types/tsconfig.app.json deleted file mode 100644 index 8b5631268..000000000 --- a/apps/typescript/47-enums-vs-union-types/tsconfig.app.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": ["src/main.ts"], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/typescript/47-enums-vs-union-types/tsconfig.editor.json b/apps/typescript/47-enums-vs-union-types/tsconfig.editor.json deleted file mode 100644 index 4ee639340..000000000 --- a/apps/typescript/47-enums-vs-union-types/tsconfig.editor.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts"], - "compilerOptions": { - "types": [] - } -} diff --git a/apps/typescript/47-enums-vs-union-types/tsconfig.json b/apps/typescript/47-enums-vs-union-types/tsconfig.json deleted file mode 100644 index b94f8837d..000000000 --- a/apps/typescript/47-enums-vs-union-types/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} From 822c0474e830d0b34a72083e7fd0efccfd50fa31 Mon Sep 17 00:00:00 2001 From: Plotnikova Darya Date: Fri, 3 Oct 2025 15:10:00 +0500 Subject: [PATCH 2/7] Add injection token task --- .../injection-token/.eslintrc.json | 19 ++++ .../injection-token/README.md | 13 +++ .../injection-token/jest.config.ts | 22 +++++ .../injection-token/project.json | 83 ++++++++++++++++++ .../injection-token/src/app/app.component.ts | 22 +++++ .../injection-token/src/app/app.config.ts | 12 +++ .../injection-token/src/app/data.ts | 1 + .../src/app/phone.component.ts | 15 ++++ .../src/app/timer-container.component.ts | 20 +++++ .../src/app/timer.component.ts | 14 +++ .../src/app/video.component.ts | 15 ++++ .../injection-token/src/assets/.gitkeep | 0 .../injection-token/src/favicon.ico | Bin 0 -> 15086 bytes .../injection-token/src/index.html | 13 +++ .../injection-token/src/main.ts | 7 ++ .../injection-token/src/styles.scss | 5 ++ .../injection-token/src/test-setup.ts | 2 + .../injection-token/tailwind.config.js | 14 +++ .../injection-token/tsconfig.app.json | 11 +++ .../injection-token/tsconfig.editor.json | 7 ++ .../injection-token/tsconfig.json | 32 +++++++ .../injection-token/tsconfig.spec.json | 15 ++++ 22 files changed, 342 insertions(+) create mode 100644 apps/dependency-injection/injection-token/.eslintrc.json create mode 100644 apps/dependency-injection/injection-token/README.md create mode 100644 apps/dependency-injection/injection-token/jest.config.ts create mode 100644 apps/dependency-injection/injection-token/project.json create mode 100644 apps/dependency-injection/injection-token/src/app/app.component.ts create mode 100644 apps/dependency-injection/injection-token/src/app/app.config.ts create mode 100644 apps/dependency-injection/injection-token/src/app/data.ts create mode 100644 apps/dependency-injection/injection-token/src/app/phone.component.ts create mode 100644 apps/dependency-injection/injection-token/src/app/timer-container.component.ts create mode 100644 apps/dependency-injection/injection-token/src/app/timer.component.ts create mode 100644 apps/dependency-injection/injection-token/src/app/video.component.ts create mode 100644 apps/dependency-injection/injection-token/src/assets/.gitkeep create mode 100644 apps/dependency-injection/injection-token/src/favicon.ico create mode 100644 apps/dependency-injection/injection-token/src/index.html create mode 100644 apps/dependency-injection/injection-token/src/main.ts create mode 100644 apps/dependency-injection/injection-token/src/styles.scss create mode 100644 apps/dependency-injection/injection-token/src/test-setup.ts create mode 100644 apps/dependency-injection/injection-token/tailwind.config.js create mode 100644 apps/dependency-injection/injection-token/tsconfig.app.json create mode 100644 apps/dependency-injection/injection-token/tsconfig.editor.json create mode 100644 apps/dependency-injection/injection-token/tsconfig.json create mode 100644 apps/dependency-injection/injection-token/tsconfig.spec.json diff --git a/apps/dependency-injection/injection-token/.eslintrc.json b/apps/dependency-injection/injection-token/.eslintrc.json new file mode 100644 index 000000000..bd4886462 --- /dev/null +++ b/apps/dependency-injection/injection-token/.eslintrc.json @@ -0,0 +1,19 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "rules": {}, + "extends": [ + "plugin:@nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ] + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/apps/dependency-injection/injection-token/README.md b/apps/dependency-injection/injection-token/README.md new file mode 100644 index 000000000..a96eb9c6e --- /dev/null +++ b/apps/dependency-injection/injection-token/README.md @@ -0,0 +1,13 @@ +# InjectionToken + +> author: thomas-laforge + +### Run Application + +```bash +npx nx serve angular-injection-token +``` + +### Documentation and Instruction + +Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/39-injection-token/). diff --git a/apps/dependency-injection/injection-token/jest.config.ts b/apps/dependency-injection/injection-token/jest.config.ts new file mode 100644 index 000000000..541d663e7 --- /dev/null +++ b/apps/dependency-injection/injection-token/jest.config.ts @@ -0,0 +1,22 @@ +/* eslint-disable */ +export default { + displayName: 'angular-injection-token', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + coverageDirectory: '../../../coverage/apps/angular/39-injection-token', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/apps/dependency-injection/injection-token/project.json b/apps/dependency-injection/injection-token/project.json new file mode 100644 index 000000000..135c0c0f6 --- /dev/null +++ b/apps/dependency-injection/injection-token/project.json @@ -0,0 +1,83 @@ +{ + "name": "angular-injection-token", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "prefix": "app", + "sourceRoot": "apps/angular/39-injection-token/src", + "tags": [], + "targets": { + "build": { + "executor": "@angular-devkit/build-angular:browser", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/apps/angular/39-injection-token", + "index": "apps/angular/39-injection-token/src/index.html", + "main": "apps/angular/39-injection-token/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "apps/angular/39-injection-token/tsconfig.app.json", + "assets": [ + "apps/angular/39-injection-token/src/favicon.ico", + "apps/angular/39-injection-token/src/assets" + ], + "styles": ["apps/angular/39-injection-token/src/styles.scss"], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "executor": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-injection-token:build:production" + }, + "development": { + "buildTarget": "angular-injection-token:build:development" + } + }, + "defaultConfiguration": "development", + "continuous": true + }, + "extract-i18n": { + "executor": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-injection-token:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } +} diff --git a/apps/dependency-injection/injection-token/src/app/app.component.ts b/apps/dependency-injection/injection-token/src/app/app.component.ts new file mode 100644 index 000000000..280dc090a --- /dev/null +++ b/apps/dependency-injection/injection-token/src/app/app.component.ts @@ -0,0 +1,22 @@ +import { Component } from '@angular/core'; +import { RouterLink, RouterOutlet } from '@angular/router'; + +@Component({ + imports: [RouterOutlet, RouterLink], + selector: 'app-root', + template: ` +
    + + +
    + + `, + host: { + class: 'p-10 flex flex-col', + }, +}) +export class AppComponent {} diff --git a/apps/dependency-injection/injection-token/src/app/app.config.ts b/apps/dependency-injection/injection-token/src/app/app.config.ts new file mode 100644 index 000000000..4d6c3cf61 --- /dev/null +++ b/apps/dependency-injection/injection-token/src/app/app.config.ts @@ -0,0 +1,12 @@ +import { ApplicationConfig } from '@angular/core'; +import { provideRouter } from '@angular/router'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideRouter([ + { path: '', pathMatch: 'full', redirectTo: 'video' }, + { path: 'video', loadComponent: () => import('./video.component') }, + { path: 'phone', loadComponent: () => import('./phone.component') }, + ]), + ], +}; diff --git a/apps/dependency-injection/injection-token/src/app/data.ts b/apps/dependency-injection/injection-token/src/app/data.ts new file mode 100644 index 000000000..393edd0fa --- /dev/null +++ b/apps/dependency-injection/injection-token/src/app/data.ts @@ -0,0 +1 @@ +export const DEFAULT_TIMER = 1000; diff --git a/apps/dependency-injection/injection-token/src/app/phone.component.ts b/apps/dependency-injection/injection-token/src/app/phone.component.ts new file mode 100644 index 000000000..41ee3cfc0 --- /dev/null +++ b/apps/dependency-injection/injection-token/src/app/phone.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { TimerContainerComponent } from './timer-container.component'; + +@Component({ + selector: 'app-phone', + imports: [TimerContainerComponent], + template: ` +
    + Phone Call Timer: +

    (should be 2000s)

    +
    + + `, +}) +export default class PhoneComponent {} diff --git a/apps/dependency-injection/injection-token/src/app/timer-container.component.ts b/apps/dependency-injection/injection-token/src/app/timer-container.component.ts new file mode 100644 index 000000000..67db6059a --- /dev/null +++ b/apps/dependency-injection/injection-token/src/app/timer-container.component.ts @@ -0,0 +1,20 @@ +import { Component } from '@angular/core'; +import { DEFAULT_TIMER } from './data'; +import { TimerComponent } from './timer.component'; +@Component({ + selector: 'timer-container', + imports: [TimerComponent], + template: ` +
    + Timer container: +

    (timer is {{ timer }}s)

    +
    + + `, + host: { + class: 'border rounded-md flex p-4 gap-10', + }, +}) +export class TimerContainerComponent { + timer = DEFAULT_TIMER; +} diff --git a/apps/dependency-injection/injection-token/src/app/timer.component.ts b/apps/dependency-injection/injection-token/src/app/timer.component.ts new file mode 100644 index 000000000..335a077bf --- /dev/null +++ b/apps/dependency-injection/injection-token/src/app/timer.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { toSignal } from '@angular/core/rxjs-interop'; +import { interval } from 'rxjs'; +import { DEFAULT_TIMER } from './data'; + +@Component({ + selector: 'timer', + template: ` + Timer running {{ timer() }} + `, +}) +export class TimerComponent { + timer = toSignal(interval(DEFAULT_TIMER)); +} diff --git a/apps/dependency-injection/injection-token/src/app/video.component.ts b/apps/dependency-injection/injection-token/src/app/video.component.ts new file mode 100644 index 000000000..ba0a218b4 --- /dev/null +++ b/apps/dependency-injection/injection-token/src/app/video.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { TimerContainerComponent } from './timer-container.component'; + +@Component({ + selector: 'app-video', + imports: [TimerContainerComponent], + template: ` +
    + Video Call Timer: +

    (should be the default 1000s)

    +
    + + `, +}) +export default class VideoComponent {} diff --git a/apps/dependency-injection/injection-token/src/assets/.gitkeep b/apps/dependency-injection/injection-token/src/assets/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/apps/dependency-injection/injection-token/src/favicon.ico b/apps/dependency-injection/injection-token/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..317ebcb2336e0833a22dddf0ab287849f26fda57 GIT binary patch literal 15086 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 + + + + angular-injection-token + + + + + + + + diff --git a/apps/dependency-injection/injection-token/src/main.ts b/apps/dependency-injection/injection-token/src/main.ts new file mode 100644 index 000000000..f3a7223da --- /dev/null +++ b/apps/dependency-injection/injection-token/src/main.ts @@ -0,0 +1,7 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { AppComponent } from './app/app.component'; +import { appConfig } from './app/app.config'; + +bootstrapApplication(AppComponent, appConfig).catch((err) => + console.error(err), +); diff --git a/apps/dependency-injection/injection-token/src/styles.scss b/apps/dependency-injection/injection-token/src/styles.scss new file mode 100644 index 000000000..77e408aa8 --- /dev/null +++ b/apps/dependency-injection/injection-token/src/styles.scss @@ -0,0 +1,5 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* You can add global styles to this file, and also import other style files */ diff --git a/apps/dependency-injection/injection-token/src/test-setup.ts b/apps/dependency-injection/injection-token/src/test-setup.ts new file mode 100644 index 000000000..15de72a3c --- /dev/null +++ b/apps/dependency-injection/injection-token/src/test-setup.ts @@ -0,0 +1,2 @@ +import '@testing-library/jest-dom'; +import 'jest-preset-angular/setup-jest'; diff --git a/apps/dependency-injection/injection-token/tailwind.config.js b/apps/dependency-injection/injection-token/tailwind.config.js new file mode 100644 index 000000000..38183db2c --- /dev/null +++ b/apps/dependency-injection/injection-token/tailwind.config.js @@ -0,0 +1,14 @@ +const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ...createGlobPatternsForDependencies(__dirname), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/dependency-injection/injection-token/tsconfig.app.json b/apps/dependency-injection/injection-token/tsconfig.app.json new file mode 100644 index 000000000..8b5631268 --- /dev/null +++ b/apps/dependency-injection/injection-token/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/dependency-injection/injection-token/tsconfig.editor.json b/apps/dependency-injection/injection-token/tsconfig.editor.json new file mode 100644 index 000000000..8ae117d96 --- /dev/null +++ b/apps/dependency-injection/injection-token/tsconfig.editor.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/**/*.ts"], + "compilerOptions": { + "types": ["jest", "node"] + } +} diff --git a/apps/dependency-injection/injection-token/tsconfig.json b/apps/dependency-injection/injection-token/tsconfig.json new file mode 100644 index 000000000..e85865cf5 --- /dev/null +++ b/apps/dependency-injection/injection-token/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "target": "es2022", + "useDefineForClassFields": false, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" + }, + { + "path": "./tsconfig.editor.json" + } + ], + "extends": "../../../tsconfig.base.json", + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/apps/dependency-injection/injection-token/tsconfig.spec.json b/apps/dependency-injection/injection-token/tsconfig.spec.json new file mode 100644 index 000000000..1a4817a7d --- /dev/null +++ b/apps/dependency-injection/injection-token/tsconfig.spec.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node", "@testing-library/jest-dom"] + }, + "files": ["src/test-setup.ts"], + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} From 9fe453398995532c78084130c3ddd49d6ec8882f Mon Sep 17 00:00:00 2001 From: alxpsr Date: Fri, 5 Jun 2026 11:02:04 +0500 Subject: [PATCH 3/7] =?UTF-8?q?feat(arch):=20=D0=9F=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D1=83=D0=BA=D1=82=D1=83=D1=80=D1=8B=20=D1=80=D0=B5=D0=BF=D0=BE?= =?UTF-8?q?=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .husky/commit-msg | 6 +- .husky/pre-commit | 6 +- angular.json | 2800 ++++ apps/animations/simple-animations/README.md | 13 - .../animations/simple-animations/project.json | 81 - .../simple-animations/tsconfig.app.json | 14 - apps/animations/view-transition/README.md | 13 - apps/animations/view-transition/project.json | 70 - .../default-vs-onpush/README.md | 13 - .../default-vs-onpush/project.json | 76 - .../lazy-load-component/README.md | 13 - .../lazy-load-component/project.json | 81 - .../lazy-load-component/tsconfig.app.json | 14 - apps/best-practices/memoization/README.md | 13 - apps/best-practices/memoization/project.json | 76 - .../memoization/tailwind.config.js | 14 - .../ngfor-optimization/README.md | 13 - .../ngfor-optimization/project.json | 87 - .../ngfor-optimization/tailwind.config.js | 14 - .../ngfor-optimization/tsconfig.app.json | 14 - .../optimize-change-detection/README.md | 13 - .../optimize-change-detection/project.json | 86 - .../tsconfig.app.json | 14 - .../content-projection-default/README.md | 13 - .../content-projection-default/project.json | 82 - .../tailwind.config.js | 14 - .../crud-application/README.md | 13 - .../crud-application/project.json | 88 - .../crud-application/tsconfig.app.json | 15 - .../projection/README.md | 13 - .../projection/project.json | 85 - .../projection/tailwind.config.js | 14 - .../projection/tsconfig.app.json | 15 - .../injection-token/README.md | 13 - .../injection-token/project.json | 83 - .../injection-token/tailwind.config.js | 14 - .../master-dependency-injection/README.md | 13 - .../master-dependency-injection/project.json | 75 - .../tsconfig.app.json | 13 - apps/directives-and-pipes/pure-pipe/README.md | 13 - .../pure-pipe/project.json | 73 - .../structural-directive/README.md | 13 - .../structural-directive/project.json | 73 - .../structural-directive/tailwind.config.js | 14 - .../utility-wrapper-pipe/README.md | 13 - .../utility-wrapper-pipe/project.json | 73 - .../wrap-function-pipe/README.md | 13 - .../wrap-function-pipe/project.json | 73 - apps/forms/avoid-losing-form-data/README.md | 11 - .../forms/avoid-losing-form-data/project.json | 73 - apps/forms/control-value-accessor/README.md | 13 - .../forms/control-value-accessor/project.json | 81 - .../control-value-accessor/tailwind.config.js | 14 - apps/routing/anchor-navigation/README.md | 13 - apps/routing/anchor-navigation/project.json | 84 - .../anchor-navigation/tailwind.config.js | 14 - .../anchor-navigation/tsconfig.app.json | 14 - apps/routing/async-redirect/README.md | 13 - apps/routing/async-redirect/project.json | 82 - .../routing/async-redirect/tailwind.config.js | 14 - apps/routing/router-input/README.md | 13 - apps/routing/router-input/project.json | 72 - apps/routing/router-input/tsconfig.app.json | 13 - apps/rxjs/catch-error/README.md | 13 - apps/rxjs/catch-error/project.json | 83 - apps/rxjs/catch-error/tailwind.config.js | 14 - apps/rxjs/catch-error/tsconfig.json | 32 - apps/rxjs/high-order-operator-bug/README.md | 13 - .../rxjs/high-order-operator-bug/project.json | 74 - .../high-order-operator-bug/tsconfig.json | 29 - apps/rxjs/hold-to-save-button/README.md | 13 - apps/rxjs/hold-to-save-button/project.json | 81 - .../hold-to-save-button/tailwind.config.js | 14 - apps/rxjs/race-condition/README.md | 13 - apps/rxjs/race-condition/project.json | 93 - apps/signal/bug-in-effect/README.md | 13 - apps/signal/bug-in-effect/project.json | 70 - apps/signal/bug-in-effect/tailwind.config.js | 14 - apps/signal/forms-and-signal/README.md | 13 - apps/signal/forms-and-signal/project.json | 72 - .../forms-and-signal/tailwind.config.js | 14 - apps/signal/function-call-effect/README.md | 13 - apps/signal/function-call-effect/project.json | 70 - .../function-call-effect/tailwind.config.js | 14 - .../signal/function-call-effect/tsconfig.json | 30 - .../pipe-observable-to-signal/README.md | 13 - .../pipe-observable-to-signal/project.json | 70 - .../tailwind.config.js | 14 - .../pipe-observable-to-signal/tsconfig.json | 30 - apps/signal/signal-input/README.md | 13 - apps/signal/signal-input/project.json | 70 - apps/signal/signal-input/tailwind.config.js | 14 - apps/signal/signal-input/tsconfig.json | 30 - .../standalone/module-to-standalone/README.md | 13 - .../module-to-standalone/project.json | 72 - .../module-to-standalone/tsconfig.app.json | 13 - .../module-to-standalone/tsconfig.json | 29 - docs/.gitignore | 22 - docs/.vscode/extensions.json | 4 - docs/.vscode/launch.json | 11 - docs/.vscode/settings.json | 3 - docs/README.md | 52 - docs/astro.config.mjs | 124 - docs/package-lock.json | 11186 -------------- docs/package.json | 22 - docs/public/angular-challenge.ico | Bin 15406 -> 0 bytes docs/public/angular-challenge.webp | Bin 5386 -> 0 bytes docs/src/assets/4/unknown-person.png | Bin 48272 -> 0 bytes docs/src/assets/4/unknown-student.png | Bin 46530 -> 0 bytes docs/src/assets/PR-code-btn-modal.png | Bin 26148 -> 0 bytes docs/src/assets/PR-header.png | Bin 26895 -> 0 bytes docs/src/assets/angular-challenge.webp | Bin 5386 -> 0 bytes docs/src/assets/codespaces.png | Bin 32721 -> 0 bytes docs/src/assets/fork-sync.png | Bin 10722 -> 0 bytes docs/src/assets/header-github.png | Bin 10391 -> 0 bytes docs/src/assets/new-pull-request.png | Bin 60954 -> 0 bytes .../assets/performance/34/profiler-record.png | Bin 131843 -> 0 bytes .../performance/35/memoize-profiler.png | Bin 89089 -> 0 bytes docs/src/assets/performance/profiler-tab.png | Bin 54993 -> 0 bytes docs/src/assets/rxjs/49/prototype.gif | Bin 106408 -> 0 bytes docs/src/assets/sync-fork-update.png | Bin 72374 -> 0 bytes docs/src/components/ActionButtonFooter.astro | 56 - docs/src/components/Author.astro | 51 - docs/src/components/ChallengeFooter.astro | 105 - docs/src/components/ClipboardCopy.astro | 106 - docs/src/components/CommentSection.astro | 34 - docs/src/components/Content.astro | 45 - docs/src/components/ContributorsFooter.astro | 75 - docs/src/components/Hero.astro | 63 - docs/src/components/MobileMenuFooter.astro | 9 - docs/src/components/MyIcon.astro | 33 - docs/src/components/PageTitle.astro | 44 - docs/src/components/SiteTitle.astro | 20 - docs/src/components/SubscriptionForm.astro | 102 - docs/src/components/TableOfContents.astro | 9 - docs/src/components/VideoButton.astro | 26 - .../src/components/github/AnswerNumber.svelte | 20 - .../src/components/github/AnsweredUser.svelte | 74 - docs/src/components/github/GitHubStats.svelte | 170 - docs/src/components/github/SignUp.svelte | 66 - docs/src/components/github/SponsorUser.svelte | 40 - docs/src/components/github/github-store.ts | 39 - docs/src/components/github/tooltip.js | 45 - docs/src/components/icons.ts | 8 - .../leaderboard/LeaderboardAnswer.svelte | 138 - .../leaderboard/LeaderboardChallenge.svelte | 103 - .../leaderboard/LeaderboardCommit.svelte | 119 - .../src/components/leaderboard/Spinner.svelte | 33 - .../src/components/leaderboard/UserBox.svelte | 78 - .../src/content/authors/Ioannis-Tsironis.json | 5 - .../src/content/authors/devesh-chaudhari.json | 4 - docs/src/content/authors/lance-finney.json | 6 - .../content/authors/stanislav-gavrilov.json | 5 - docs/src/content/authors/sven-brodny.json | 5 - docs/src/content/authors/thomas-laforge.json | 6 - docs/src/content/authors/timothy-alcaide.json | 7 - .../content/authors/wandrille-guesdon.json | 5 - docs/src/content/config.ts | 77 - .../docs/challenges/angular/1-projection.md | 51 - .../angular/13-highly-customizable-css.md | 24 - .../angular/21-anchor-navigation.md | 21 - .../challenges/angular/22-router-input.md | 31 - .../angular/31-module-to-standalone.md | 29 - .../angular/32-change-detection-bug.md | 46 - .../angular/33-decoupling-components.md | 35 - .../angular/4-typed-context-outlet.md | 46 - .../challenges/angular/45-react-in-angular.md | 81 - .../angular/46-simple-animations.md | 49 - .../challenges/angular/5-crud-application.md | 56 - .../angular/52-lazy-load-component.md | 48 - .../angular/55-back-button-navigation.md | 56 - .../58-content-projection-condition.md | 38 - .../angular/59-content-projection-defer.md | 27 - .../challenges/angular/60-async-redirect.md | 23 - .../docs/challenges/angular/8-pure-pipe.md | 41 - .../forms/41-control-value-accessor.md | 43 - .../challenges/nx/25-generator-lib-ext.md | 56 - .../docs/challenges/nx/26-generator-comp.md | 148 - .../docs/challenges/nx/27-forbid-enum-rule.md | 27 - .../nx/42-static-vs-dynamic-import.md | 31 - .../12-optimize-change-detection.md | 41 - .../performance/34-default-vs-onpush.md | 57 - .../challenges/performance/35-memoization.md | 51 - .../performance/36-ngfor-optimization.md | 34 - .../performance/37-optimize-big-list.md | 39 - .../challenges/performance/40-web-worker.md | 36 - .../docs/challenges/performance/index.mdx | 71 - .../rxjs/11-high-order-operator-bug.md | 32 - .../docs/challenges/rxjs/14-race-condition.md | 30 - .../challenges/rxjs/38-rxjs-catch-error.md | 37 - .../signal/30-interop-rxjs-signal.md | 22 - .../docs/challenges/signal/43-signal-input.md | 55 - .../signal/53-big-signal-performance.md | 24 - .../docs/challenges/testing/17-router.md | 28 - .../testing/18-nested-components.md | 32 - .../challenges/testing/19-input-output.md | 33 - .../docs/challenges/testing/20-modal.md | 37 - .../docs/challenges/testing/23-harness.md | 30 - .../challenges/testing/24-harness-creation.md | 48 - .../docs/challenges/testing/28-checkbox.md | 30 - .../testing/29-real-life-application.md | 38 - .../content/docs/challenges/testing/index.mdx | 74 - .../typescript/15-function-overload.md | 27 - .../typescript/47-enums-vs-union-types.md | 80 - .../es/challenges/angular/1-projection.md | 42 - .../angular/10-utility-wrapper-pipe.md | 23 - .../angular/13-highly-customizable-css.md | 21 - .../angular/16-master-dependency-injection.md | 28 - .../angular/21-anchor-navigation.md | 20 - .../es/challenges/angular/22-router-input.md | 28 - .../angular/31-module-to-standalone.md | 29 - .../angular/32-change-detection-bug.md | 39 - .../angular/33-decoupling-components.md | 33 - .../challenges/angular/39-injection-token.md | 36 - .../angular/4-typed-context-outlet.md | 48 - .../challenges/angular/5-crud-application.md | 52 - .../angular/6-structural-directive.md | 63 - .../docs/es/challenges/angular/8-pure-pipe.md | 25 - .../angular/9-wrap-function-pipe.md | 25 - .../12-optimize-change-detection.md | 40 - .../performance/34-default-vs-onpush.md | 57 - .../challenges/performance/35-memoization.md | 52 - .../performance/36-ngfor-optimization.md | 33 - .../performance/37-optimize-big-list.md | 34 - .../docs/es/challenges/performance/index.mdx | 51 - .../signal/30-interop-rxjs-signal.md | 21 - .../content/docs/es/guides/checkout-answer.md | 38 - docs/src/content/docs/es/guides/contribute.md | 22 - .../docs/es/guides/create-challenge.md | 62 - docs/src/content/docs/es/guides/faq.md | 19 - .../content/docs/es/guides/getting-started.md | 60 - docs/src/content/docs/es/guides/rebase.md | 57 - .../docs/es/guides/resolve-challenge.md | 92 - docs/src/content/docs/es/index.mdx | 82 - .../fr/challenges/angular/1-projection.md | 47 - .../angular/21-anchor-navigation.md | 20 - .../fr/challenges/angular/22-router-input.md | 28 - .../angular/31-module-to-standalone.md | 29 - .../angular/46-simple-animations.md | 48 - .../challenges/angular/5-crud-application.md | 52 - .../docs/fr/challenges/angular/8-pure-pipe.md | 37 - .../content/docs/fr/guides/checkout-answer.md | 59 - docs/src/content/docs/fr/guides/contribute.md | 24 - .../docs/fr/guides/create-challenge.md | 68 - docs/src/content/docs/fr/guides/faq.md | 24 - .../content/docs/fr/guides/getting-started.md | 59 - docs/src/content/docs/fr/guides/rebase.md | 63 - .../docs/fr/guides/resolve-challenge.md | 101 - docs/src/content/docs/fr/index.mdx | 81 - .../content/docs/guides/checkout-answer.md | 57 - docs/src/content/docs/guides/contribute.md | 25 - .../content/docs/guides/create-challenge.md | 66 - docs/src/content/docs/guides/faq.md | 20 - .../content/docs/guides/getting-started.md | 82 - docs/src/content/docs/guides/rebase.md | 57 - .../content/docs/guides/resolve-challenge.md | 105 - docs/src/content/docs/index.mdx | 85 - docs/src/content/docs/leaderboard/answers.mdx | 13 - .../content/docs/leaderboard/challenges.mdx | 14 - docs/src/content/docs/leaderboard/commit.mdx | 14 - .../pt/challenges/angular/1-projection.md | 48 - .../angular/10-utility-wrapper-pipe.md | 36 - .../angular/13-highly-customizable-css.md | 21 - .../angular/16-master-dependency-injection.md | 28 - .../angular/21-anchor-navigation.md | 20 - .../pt/challenges/angular/22-router-input.md | 28 - .../angular/31-module-to-standalone.md | 29 - .../angular/32-change-detection-bug.md | 39 - .../challenges/angular/39-injection-token.md | 36 - .../angular/4-typed-context-outlet.md | 45 - .../challenges/angular/44-view-transition.md | 83 - .../challenges/angular/45-react-in-angular.md | 76 - .../angular/46-simple-animations.md | 56 - .../challenges/angular/5-crud-application.md | 52 - .../angular/6-structural-directive.md | 61 - .../docs/pt/challenges/angular/8-pure-pipe.md | 37 - .../angular/9-wrap-function-pipe.md | 37 - .../forms/41-control-value-accessor.md | 43 - .../pt/challenges/rxjs/38-rxjs-catch-error.md | 35 - .../signal/30-interop-rxjs-signal.md | 21 - .../pt/challenges/signal/43-signal-input.md | 53 - .../content/docs/pt/guides/checkout-answer.md | 50 - docs/src/content/docs/pt/guides/contribute.md | 22 - .../docs/pt/guides/create-challenge.md | 56 - docs/src/content/docs/pt/guides/faq.md | 19 - .../content/docs/pt/guides/getting-started.md | 59 - docs/src/content/docs/pt/guides/rebase.md | 57 - .../docs/pt/guides/resolve-challenge.md | 101 - docs/src/content/docs/pt/index.mdx | 97 - .../content/docs/pt/leaderboard/answers.mdx | 13 - .../docs/pt/leaderboard/challenges.mdx | 14 - .../content/docs/pt/leaderboard/commit.mdx | 14 - .../angular/4-typed-context-outlet.md | 42 - .../performance/37-optimize-big-list.md | 37 - .../challenges/performance/40-web-worker.md | 35 - .../docs/ru/challenges/performance/index.mdx | 51 - .../docs/ru/challenges/testing/17-router.md | 27 - .../testing/18-nested-components.md | 31 - .../ru/challenges/testing/19-input-output.md | 29 - .../docs/ru/challenges/testing/20-modal.md | 33 - .../docs/ru/challenges/testing/23-harness.md | 26 - .../challenges/testing/24-harness-creation.md | 46 - .../docs/ru/challenges/testing/28-checkbox.md | 27 - .../testing/29-real-life-application.md | 35 - .../docs/ru/challenges/testing/index.mdx | 73 - .../content/docs/ru/guides/checkout-answer.md | 51 - docs/src/content/docs/ru/guides/contribute.md | 22 - .../docs/ru/guides/create-challenge.md | 56 - docs/src/content/docs/ru/guides/faq.md | 19 - .../content/docs/ru/guides/getting-started.md | 61 - docs/src/content/docs/ru/guides/rebase.md | 57 - .../docs/ru/guides/resolve-challenge.md | 102 - docs/src/content/docs/ru/index.mdx | 87 - docs/src/content/docs/subscription/index.mdx | 10 - .../zh-cn/challenges/angular/1-projection.md | 52 - .../docs/zh-cn/guides/checkout-answer.md | 57 - .../content/docs/zh-cn/guides/contribute.md | 25 - .../docs/zh-cn/guides/create-challenge.md | 68 - docs/src/content/docs/zh-cn/guides/faq.md | 22 - .../docs/zh-cn/guides/getting-started.md | 83 - docs/src/content/docs/zh-cn/guides/rebase.md | 57 - .../docs/zh-cn/guides/resolve-challenge.md | 107 - docs/src/content/docs/zh-cn/index.mdx | 79 - .../docs/zh-cn/leaderboard/answers.mdx | 12 - .../docs/zh-cn/leaderboard/challenges.mdx | 13 - .../content/docs/zh-cn/leaderboard/commit.mdx | 13 - .../content/docs/zh-cn/subscription/index.mdx | 10 - .../challenges/angular/60-async-redirect.md | 23 - docs/src/content/i18n/en.json | 27 - docs/src/content/i18n/es.json | 67 - docs/src/content/i18n/fr.json | 27 - docs/src/content/i18n/pt.json | 28 - docs/src/content/i18n/ru.json | 28 - docs/src/content/i18n/zh-CN.json | 27 - .../challenges/angular/60-async-redirect.md | 23 - .../challenges/angular/60-async-redirect.md | 23 - .../challenges/angular/60-async-redirect.md | 23 - docs/src/env.d.ts | 2 - docs/src/pages/auth/authorize.js | 21 - docs/src/pages/auth/authorized.js | 58 - docs/src/pages/auth/refresh.js | 62 - docs/src/styles/custom-css.css | 192 - docs/src/utils/encrypt.ts | 15 - docs/svelte.config.js | 5 - docs/tsconfig.json | 7 - lessons/animations/lecture/advanced.md | 1 + lessons/animations/lecture/basics.md | 1 + .../tasks}/simple-animations/.eslintrc.json | 0 .../tasks/simple-animations/README.md | 8 + .../tasks}/simple-animations/jest.config.ts | 0 .../src/app/app.component.ts | 0 .../simple-animations/src/app/app.config.ts | 0 .../simple-animations/src/assets}/.gitkeep | 0 .../tasks}/simple-animations/src/favicon.ico | Bin .../tasks}/simple-animations/src/index.html | 0 .../tasks}/simple-animations/src/main.ts | 0 .../tasks}/simple-animations/src/styles.scss | 0 .../simple-animations/src/test-setup.ts | 0 .../simple-animations}/tailwind.config.js | 2 - .../simple-animations}/tsconfig.app.json | 0 .../simple-animations/tsconfig.editor.json | 0 .../tasks/simple-animations}/tsconfig.json | 8 +- .../simple-animations}/tsconfig.spec.json | 0 .../tasks}/view-transition/.eslintrc.json | 0 .../tasks/view-transition/README.md | 11 + .../view-transition/src/app/app.component.ts | 0 .../view-transition/src/app/app.config.ts | 0 .../src/app/blog/blog.component.ts | 0 .../app/blog/thumbnail-header.component.ts | 0 .../src/app/blog/thumbnail.component.ts | 0 .../tasks}/view-transition/src/app/data.ts | 0 .../view-transition/src/app/post.model.ts | 0 .../src/app/post/post-header.component.ts | 0 .../src/app/post/post.component.ts | 0 .../view-transition}/src/assets/.gitkeep | 0 .../view-transition/src/assets/angular.webp | Bin .../src/assets/guard.full.webp | Bin .../src/assets/highly-custom.full.webp | Bin .../view-transition/src/assets/profil.webp | Bin .../src/assets/signal-cd.full.webp | Bin .../tasks}/view-transition/src/favicon.ico | Bin .../tasks}/view-transition/src/index.html | 0 .../tasks}/view-transition/src/main.ts | 0 .../tasks}/view-transition/src/styles.scss | 0 .../tasks/view-transition}/tailwind.config.js | 2 - .../tasks/view-transition}/tsconfig.app.json | 0 .../view-transition/tsconfig.editor.json | 0 .../tasks/view-transition}/tsconfig.json | 6 +- lessons/best-practices/lecture/advanced.md | 1 + lessons/best-practices/lecture/basics.md | 1 + .../tasks}/default-vs-onpush/.eslintrc.json | 0 .../tasks/default-vs-onpush/README.md | 10 + .../src/app/app.component.ts | 0 .../default-vs-onpush/src/app/app.config.ts | 0 .../src/app/person-list.component.ts | 0 .../src/app/random.component.ts | 0 .../default-vs-onpush}/src/assets/.gitkeep | 0 .../tasks}/default-vs-onpush/src/favicon.ico | Bin .../tasks}/default-vs-onpush/src/index.html | 0 .../tasks}/default-vs-onpush/src/main.ts | 0 .../tasks}/default-vs-onpush/src/styles.scss | 0 .../default-vs-onpush}/tailwind.config.js | 2 - .../default-vs-onpush}/tsconfig.app.json | 0 .../default-vs-onpush/tsconfig.editor.json | 2 +- .../tasks/default-vs-onpush}/tsconfig.json | 2 +- .../tasks}/lazy-load-component/.eslintrc.json | 0 .../tasks/lazy-load-component/README.md | 9 + .../tasks}/lazy-load-component/jest.config.ts | 0 .../src/app/app.component.ts | 0 .../lazy-load-component/src/app/app.module.ts | 0 .../src/app/placeholder.component.ts | 0 .../src/app/top.component.ts | 0 .../lazy-load-component}/src/assets/.gitkeep | 0 .../lazy-load-component/src/favicon.ico | Bin .../tasks}/lazy-load-component/src/index.html | 0 .../tasks}/lazy-load-component/src/main.ts | 0 .../lazy-load-component/src/styles.scss | 0 .../lazy-load-component/src/test-setup.ts | 0 .../lazy-load-component}/tailwind.config.js | 2 - .../lazy-load-component}/tsconfig.app.json | 0 .../lazy-load-component}/tsconfig.editor.json | 0 .../tasks/lazy-load-component}/tsconfig.json | 8 +- .../lazy-load-component}/tsconfig.spec.json | 0 .../tasks}/memoization/.eslintrc.json | 0 .../tasks/memoization/README.md | 9 + .../memoization/src/app/app.component.ts | 0 .../tasks}/memoization/src/app/app.config.ts | 0 .../memoization/src/app/generateList.ts | 0 .../src/app/person-list.component.ts | 0 .../memoization/src/app/person.model.ts | 0 .../tasks/memoization}/src/assets/.gitkeep | 0 .../tasks}/memoization/src/favicon.ico | Bin .../tasks}/memoization/src/index.html | 0 .../tasks}/memoization/src/main.ts | 0 .../tasks}/memoization/src/styles.scss | 0 .../tasks/memoization/tailwind.config.js | 12 + .../tasks/memoization}/tsconfig.app.json | 0 .../tasks}/memoization/tsconfig.editor.json | 0 .../tasks/memoization}/tsconfig.json | 2 +- .../tasks}/ngfor-optimization/.eslintrc.json | 0 .../tasks/ngfor-optimization/README.md | 9 + .../tasks}/ngfor-optimization/jest.config.ts | 0 .../src/app/app.component.ts | 0 .../ngfor-optimization/src/app/app.config.ts | 0 .../src/app/generateList.ts | 0 .../src/app/list.service.ts | 0 .../src/app/person-list.component.ts | 0 .../src/app/person.model.ts | 0 .../ngfor-optimization}/src/assets/.gitkeep | 0 .../tasks}/ngfor-optimization/src/favicon.ico | Bin .../tasks}/ngfor-optimization/src/index.html | 0 .../tasks}/ngfor-optimization/src/main.ts | 0 .../tasks}/ngfor-optimization/src/styles.scss | 0 .../ngfor-optimization/src/test-setup.ts | 0 .../ngfor-optimization/tailwind.config.js | 12 + .../ngfor-optimization}/tsconfig.app.json | 0 .../ngfor-optimization/tsconfig.editor.json | 0 .../tasks/ngfor-optimization}/tsconfig.json | 2 +- .../ngfor-optimization}/tsconfig.spec.json | 0 .../optimize-change-detection/.eslintrc.json | 0 .../tasks/optimize-change-detection/README.md | 9 + .../optimize-change-detection/jest.config.ts | 0 .../src/app/app.component.ts | 0 .../src/assets/.gitkeep | 0 .../optimize-change-detection/src/favicon.ico | Bin .../optimize-change-detection/src/index.html | 0 .../optimize-change-detection/src/main.ts | 0 .../optimize-change-detection/src/styles.scss | 0 .../src/test-setup.ts | 0 .../tsconfig.app.json | 0 .../tsconfig.editor.json | 0 .../optimize-change-detection}/tsconfig.json | 2 +- .../tsconfig.spec.json | 0 .../lecture/advanced.md | 1 + .../lecture/basics.md | 1 + .../content-projection-default/.eslintrc.json | 0 .../content-projection-default/README.md | 11 + .../public/favicon.ico | Bin .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../src/app/card.component.ts | 0 .../content-projection-default/src/index.html | 0 .../content-projection-default/src/main.ts | 0 .../src/styles.scss | 0 .../tailwind.config.js | 12 + .../tsconfig.app.json | 0 .../tsconfig.editor.json | 0 .../content-projection-default/tsconfig.json | 2 +- .../tasks}/crud-application/.eslintrc.json | 0 .../tasks/crud-application/README.md | 9 + .../tasks}/crud-application/jest.config.ts | 0 .../crud-application/src/app/app.component.ts | 0 .../crud-application/src/app/app.config.ts | 0 .../crud-application}/src/assets/.gitkeep | 0 .../tasks}/crud-application/src/favicon.ico | Bin .../tasks}/crud-application/src/index.html | 0 .../tasks}/crud-application/src/main.ts | 0 .../tasks}/crud-application/src/polyfills.ts | 0 .../tasks}/crud-application/src/styles.scss | 0 .../tasks}/crud-application/src/test-setup.ts | 0 .../tasks/crud-application}/tsconfig.app.json | 3 +- .../crud-application/tsconfig.editor.json | 0 .../tasks}/crud-application/tsconfig.json | 2 +- .../crud-application/tsconfig.spec.json | 7 +- .../tasks}/projection/.eslintrc.json | 0 .../tasks/projection/README.md | 9 + .../tasks}/projection/jest.config.ts | 0 .../projection/src/app/app.component.ts | 0 .../city-card/city-card.component.ts | 0 .../student-card/student-card.component.ts | 0 .../teacher-card/teacher-card.component.ts | 0 .../src/app/data-access/city.store.ts | 0 .../src/app/data-access/fake-http.service.ts | 0 .../src/app/data-access/student.store.ts | 0 .../src/app/data-access/teacher.store.ts | 0 .../projection/src/app/model/card.model.ts | 0 .../projection/src/app/model/city.model.ts | 0 .../projection/src/app/model/student.model.ts | 0 .../projection/src/app/model/teacher.model.ts | 0 .../src/app/ui/card/card.component.ts | 0 .../app/ui/list-item/list-item.component.ts | 0 .../tasks/projection}/src/assets/.gitkeep | 0 .../tasks}/projection/src/assets/img/city.png | Bin .../projection/src/assets/img/student.webp | Bin .../projection/src/assets/img/teacher.png | Bin .../projection/src/assets/svg/trash.svg | 0 .../tasks}/projection/src/favicon.ico | Bin .../tasks}/projection/src/index.html | 0 .../tasks}/projection/src/main.ts | 0 .../tasks}/projection/src/polyfills.ts | 0 .../tasks}/projection/src/styles.scss | 0 .../tasks}/projection/src/test-setup.ts | 0 .../tasks/projection/tailwind.config.js | 12 + .../tasks/projection}/tsconfig.app.json | 3 +- .../tasks}/projection/tsconfig.editor.json | 0 .../tasks}/projection/tsconfig.json | 2 +- .../tasks}/projection/tsconfig.spec.json | 7 +- .../dependency-injection/lecture/advanced.md | 1 + .../dependency-injection/lecture/basics.md | 1 + .../tasks}/injection-token/.eslintrc.json | 0 .../tasks/injection-token/README.md | 10 + .../tasks}/injection-token/jest.config.ts | 0 .../injection-token/src/app/app.component.ts | 0 .../injection-token/src/app/app.config.ts | 0 .../tasks}/injection-token/src/app/data.ts | 0 .../src/app/phone.component.ts | 0 .../src/app/timer-container.component.ts | 0 .../src/app/timer.component.ts | 0 .../src/app/video.component.ts | 0 .../injection-token}/src/assets/.gitkeep | 0 .../tasks}/injection-token/src/favicon.ico | Bin .../tasks}/injection-token/src/index.html | 0 .../tasks}/injection-token/src/main.ts | 0 .../tasks}/injection-token/src/styles.scss | 0 .../tasks}/injection-token/src/test-setup.ts | 0 .../tasks/injection-token/tailwind.config.js | 12 + .../tasks/injection-token}/tsconfig.app.json | 0 .../injection-token/tsconfig.editor.json | 0 .../tasks/injection-token}/tsconfig.json | 2 +- .../tasks/injection-token}/tsconfig.spec.json | 6 +- .../.eslintrc.json | 0 .../master-dependency-injection/README.md | 11 + .../src/app/app.component.ts | 0 .../src/app/currency.pipe.ts | 0 .../src/app/currency.service.ts | 0 .../src/app/product.model.ts | 0 .../src/assets/.gitkeep | 0 .../src/favicon.ico | Bin .../src/index.html | 0 .../master-dependency-injection/src/main.ts | 0 .../src/styles.scss | 0 .../tsconfig.app.json | 0 .../tsconfig.editor.json | 0 .../master-dependency-injection/tsconfig.json | 2 +- .../directives-and-pipes/lecture/advanced.md | 1 + .../directives-and-pipes/lecture/basics.md | 1 + .../tasks}/pure-pipe/.eslintrc.json | 0 .../tasks/pure-pipe/README.md | 9 + .../tasks}/pure-pipe/src/app/app.component.ts | 0 .../tasks/pure-pipe}/src/assets/.gitkeep | 0 .../tasks}/pure-pipe/src/favicon.ico | Bin .../tasks}/pure-pipe/src/index.html | 0 .../tasks}/pure-pipe/src/main.ts | 0 .../tasks}/pure-pipe/src/polyfills.ts | 0 .../tasks}/pure-pipe/src/styles.scss | 0 .../tasks}/pure-pipe/tsconfig.app.json | 3 +- .../tasks}/pure-pipe/tsconfig.editor.json | 0 .../tasks/pure-pipe}/tsconfig.json | 2 +- .../structural-directive/.eslintrc.json | 0 .../tasks/structural-directive/README.md | 10 + .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../src/app/button.component.ts | 0 .../src/app/dashboard/admin.component.ts | 0 .../src/app/dashboard/manager.component.ts | 0 .../src/app/information.component.ts | 0 .../src/app/login.component.ts | 0 .../structural-directive/src/app/routes.ts | 0 .../src/app/user.model.ts | 0 .../src/app/user.store.ts | 0 .../structural-directive}/src/assets/.gitkeep | 0 .../structural-directive/src/favicon.ico | Bin .../structural-directive/src/index.html | 0 .../tasks}/structural-directive/src/main.ts | 0 .../structural-directive/src/polyfills.ts | 0 .../structural-directive/src/styles.scss | 0 .../structural-directive/tailwind.config.js | 12 + .../structural-directive/tsconfig.app.json | 3 +- .../structural-directive/tsconfig.editor.json | 0 .../tasks}/structural-directive/tsconfig.json | 2 +- .../utility-wrapper-pipe/.eslintrc.json | 0 .../tasks/utility-wrapper-pipe/README.md | 10 + .../src/app/app.component.ts | 0 .../src/app/person.utils.ts | 0 .../utility-wrapper-pipe}/src/assets/.gitkeep | 0 .../utility-wrapper-pipe/src/favicon.ico | Bin .../utility-wrapper-pipe/src/index.html | 0 .../tasks}/utility-wrapper-pipe/src/main.ts | 0 .../utility-wrapper-pipe/src/polyfills.ts | 0 .../utility-wrapper-pipe/src/styles.scss | 0 .../utility-wrapper-pipe/tsconfig.app.json | 13 + .../utility-wrapper-pipe/tsconfig.editor.json | 0 .../tasks/utility-wrapper-pipe}/tsconfig.json | 2 +- .../tasks}/wrap-function-pipe/.eslintrc.json | 0 .../tasks/wrap-function-pipe/README.md | 10 + .../src/app/app.component.ts | 0 .../wrap-function-pipe}/src/assets/.gitkeep | 0 .../tasks}/wrap-function-pipe/src/favicon.ico | Bin .../tasks}/wrap-function-pipe/src/index.html | 0 .../tasks}/wrap-function-pipe/src/main.ts | 0 .../wrap-function-pipe/src/polyfills.ts | 0 .../tasks}/wrap-function-pipe/src/styles.scss | 0 .../wrap-function-pipe/tsconfig.app.json | 13 + .../wrap-function-pipe/tsconfig.editor.json | 0 .../tasks/wrap-function-pipe}/tsconfig.json | 2 +- lessons/forms/lecture/advanced.md | 1 + lessons/forms/lecture/basics.md | 1 + .../avoid-losing-form-data/.eslintrc.json | 0 .../tasks/avoid-losing-form-data/README.md | 10 + .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../src/app/app.routes.ts | 0 .../src/app/pages/join.component.ts | 0 .../src/app/pages/page.component.ts | 0 .../src/app/ui/dialog.component.ts | 0 .../src/app/ui/form.component.ts | 0 .../src/app/ui/nav.component.ts | 0 .../src/assets/.gitkeep | 0 .../avoid-losing-form-data/src/favicon.ico | Bin .../avoid-losing-form-data/src/index.html | 0 .../tasks}/avoid-losing-form-data/src/main.ts | 0 .../avoid-losing-form-data/src/styles.scss | 0 .../avoid-losing-form-data/tailwind.config.js | 2 - .../avoid-losing-form-data}/tsconfig.app.json | 4 +- .../tsconfig.editor.json | 0 .../avoid-losing-form-data}/tsconfig.json | 6 +- .../control-value-accessor/.eslintrc.json | 0 .../tasks/control-value-accessor/README.md | 9 + .../control-value-accessor/jest.config.ts | 0 .../src/app/app.component.ts | 0 .../feedback-form.component.html | 0 .../feedback-form.component.scss | 0 .../feedback-form/feedback-form.component.ts | 0 .../rating-control.component.html | 0 .../rating-control.component.scss | 0 .../rating-control.component.ts | 0 .../src/assets/.gitkeep | 0 .../control-value-accessor/src/favicon.ico | Bin .../control-value-accessor/src/index.html | 0 .../tasks}/control-value-accessor/src/main.ts | 0 .../control-value-accessor/src/styles.scss | 0 .../control-value-accessor/src/test-setup.ts | 0 .../control-value-accessor/tailwind.config.js | 12 + .../control-value-accessor}/tsconfig.app.json | 4 +- .../tsconfig.editor.json | 0 .../control-value-accessor/tsconfig.json | 2 +- .../tsconfig.spec.json | 6 +- lessons/routing/lecture/advanced.md | 1 + lessons/routing/lecture/basics.md | 1 + .../tasks}/anchor-navigation/.eslintrc.json | 0 .../routing/tasks/anchor-navigation/README.md | 9 + .../tasks}/anchor-navigation/jest.config.ts | 0 .../src/app/app.component.ts | 0 .../anchor-navigation/src/app/app.config.ts | 0 .../anchor-navigation/src/app/app.routes.ts | 0 .../src/app/foo.component.ts | 0 .../src/app/home.component.ts | 0 .../src/app/nav-button.component.ts | 0 .../anchor-navigation}/src/assets/.gitkeep | 0 .../tasks}/anchor-navigation/src/favicon.ico | Bin .../tasks}/anchor-navigation/src/index.html | 0 .../tasks}/anchor-navigation/src/main.ts | 0 .../tasks}/anchor-navigation/src/styles.scss | 0 .../anchor-navigation/src/test-setup.ts | 0 .../anchor-navigation/tailwind.config.js | 12 + .../anchor-navigation}/tsconfig.app.json | 4 +- .../anchor-navigation/tsconfig.editor.json | 0 .../tasks}/anchor-navigation/tsconfig.json | 2 +- .../anchor-navigation/tsconfig.spec.json | 6 +- .../tasks}/async-redirect/.eslintrc.json | 0 .../routing/tasks/async-redirect/README.md | 10 + .../tasks}/async-redirect/public/favicon.ico | Bin .../async-redirect/src/app/admin-page.ts | 0 .../async-redirect/src/app/app.config.ts | 0 .../tasks}/async-redirect/src/app/app.ts | 0 .../async-redirect/src/app/dashboard.ts | 0 .../async-redirect/src/app/profile-page.ts | 0 .../tasks}/async-redirect/src/app/routes.ts | 0 .../async-redirect/src/app/user-page.ts | 0 .../src/app/user-profile.service.ts | 0 .../tasks}/async-redirect/src/index.html | 0 .../routing/tasks}/async-redirect/src/main.ts | 0 .../tasks}/async-redirect/src/styles.scss | 0 .../tasks/async-redirect/tailwind.config.js | 12 + .../tasks}/async-redirect/tsconfig.app.json | 0 .../tasks}/async-redirect/tsconfig.json | 2 +- .../tasks}/router-input/.eslintrc.json | 0 .../routing/tasks/router-input/README.md | 9 + .../router-input/src/app/app.component.ts | 0 .../tasks}/router-input/src/app/app.config.ts | 0 .../tasks}/router-input/src/app/app.routes.ts | 0 .../router-input/src/app/home.component.ts | 0 .../router-input/src/app/test.component.ts | 0 .../tasks/router-input}/src/assets/.gitkeep | 0 .../tasks}/router-input/src/favicon.ico | Bin .../tasks}/router-input/src/index.html | 0 .../routing/tasks}/router-input/src/main.ts | 0 .../tasks}/router-input/src/styles.scss | 0 .../tasks/router-input}/tsconfig.app.json | 4 +- .../tasks}/router-input/tsconfig.editor.json | 0 .../routing/tasks}/router-input/tsconfig.json | 2 +- lessons/rxjs/lecture/advanced.md | 1 + lessons/rxjs/lecture/basics.md | 1 + .../rxjs/tasks}/catch-error/.eslintrc.json | 0 .../rxjs/tasks/catch-error/README.md | 9 + .../rxjs/tasks}/catch-error/jest.config.ts | 0 .../catch-error/src/app/app.component.css | 0 .../catch-error/src/app/app.component.spec.ts | 0 .../catch-error/src/app/app.component.ts | 0 .../tasks}/catch-error/src/app/app.config.ts | 0 .../tasks/catch-error}/src/assets/.gitkeep | 0 .../rxjs/tasks}/catch-error/src/favicon.ico | Bin .../rxjs/tasks}/catch-error/src/index.html | 0 .../rxjs/tasks}/catch-error/src/main.ts | 0 .../rxjs/tasks}/catch-error/src/styles.scss | 0 .../rxjs/tasks}/catch-error/src/test-setup.ts | 0 .../rxjs/tasks/catch-error/tailwind.config.js | 12 + .../rxjs/tasks/catch-error/tsconfig.app.json | 11 + .../tasks}/catch-error/tsconfig.editor.json | 0 lessons/rxjs/tasks/catch-error/tsconfig.json | 32 + .../tasks}/catch-error/tsconfig.spec.json | 0 .../high-order-operator-bug/.eslintrc.json | 0 .../tasks/high-order-operator-bug/README.md | 9 + .../src/app/app.component.ts | 0 .../src/app/app.service.ts | 0 .../src/app/localDB.service.ts | 0 .../src/assets/.gitkeep | 0 .../high-order-operator-bug/src/favicon.ico | Bin .../high-order-operator-bug/src/index.html | 0 .../high-order-operator-bug/src/main.ts | 0 .../high-order-operator-bug/src/styles.scss | 0 .../high-order-operator-bug/tsconfig.app.json | 0 .../tsconfig.editor.json | 0 .../high-order-operator-bug/tsconfig.json | 29 + .../tasks}/hold-to-save-button/.eslintrc.json | 0 .../rxjs/tasks/hold-to-save-button/README.md | 11 + .../tasks}/hold-to-save-button/jest.config.ts | 0 .../src/app/app.component.ts | 0 .../hold-to-save-button/src/app/app.config.ts | 0 .../hold-to-save-button}/src/assets/.gitkeep | 0 .../hold-to-save-button/src/favicon.ico | Bin .../tasks}/hold-to-save-button/src/index.html | 0 .../tasks}/hold-to-save-button/src/main.ts | 0 .../hold-to-save-button/src/styles.scss | 0 .../hold-to-save-button/src/test-setup.ts | 0 .../hold-to-save-button/tailwind.config.js | 12 + .../hold-to-save-button/tsconfig.app.json | 11 + .../hold-to-save-button}/tsconfig.editor.json | 0 .../tasks}/hold-to-save-button/tsconfig.json | 2 +- .../hold-to-save-button}/tsconfig.spec.json | 6 +- .../rxjs/tasks}/race-condition/.eslintrc.json | 0 .../rxjs/tasks/race-condition/README.md | 9 + .../tasks}/race-condition/cypress.config.ts | 0 .../cypress/fixtures/example.json | 0 .../cypress/support/commands.ts | 0 .../cypress/support/component-index.html | 0 .../cypress/support/component.ts | 0 .../race-condition/cypress/tsconfig.json | 0 .../rxjs/tasks}/race-condition/jest.config.ts | 0 .../src/app/app.component.cy.ts | 0 .../race-condition/src/app/app.component.ts | 0 .../race-condition/src/app/app.config.ts | 0 .../src/app/topic-dialog.component.ts | 0 .../race-condition/src/app/topic.service.ts | 0 .../tasks/race-condition}/src/assets/.gitkeep | 0 .../tasks}/race-condition/src/favicon.ico | Bin .../rxjs/tasks}/race-condition/src/index.html | 0 .../rxjs/tasks}/race-condition/src/main.ts | 0 .../tasks}/race-condition/src/styles.scss | 0 .../tasks}/race-condition/src/test-setup.ts | 0 .../tasks}/race-condition/tsconfig.app.json | 0 .../race-condition/tsconfig.editor.json | 0 .../rxjs/tasks}/race-condition/tsconfig.json | 2 +- .../tasks/race-condition}/tsconfig.spec.json | 6 +- lessons/signal/lecture/advanced.md | 1 + lessons/signal/lecture/basics.md | 1 + .../tasks}/bug-in-effect/.eslintrc.json | 0 .../signal/tasks/bug-in-effect/README.md | 11 + .../bug-in-effect/src/app/app.component.ts | 0 .../bug-in-effect/src/app/app.config.ts | 0 .../tasks/bug-in-effect}/src/assets/.gitkeep | 0 .../tasks}/bug-in-effect/src/favicon.ico | Bin .../tasks}/bug-in-effect/src/index.html | 0 .../signal/tasks}/bug-in-effect/src/main.ts | 0 .../tasks}/bug-in-effect/src/styles.scss | 0 .../tasks/bug-in-effect/tailwind.config.js | 12 + .../tasks/bug-in-effect/tsconfig.app.json | 11 + .../tasks/bug-in-effect}/tsconfig.editor.json | 0 .../signal/tasks}/bug-in-effect/tsconfig.json | 2 +- .../tasks}/forms-and-signal/.eslintrc.json | 0 .../signal/tasks/forms-and-signal/README.md | 11 + .../forms-and-signal/public/favicon.ico | Bin .../forms-and-signal/src/app/app.component.ts | 0 .../forms-and-signal/src/app/app.config.ts | 0 .../forms-and-signal/src/app/app.routes.ts | 0 .../src/app/checkout.component.ts | 0 .../src/app/dashboard.component.ts | 0 .../src/app/order.component.ts | 0 .../src/app/payment.component.ts | 0 .../forms-and-signal/src/app/products.ts | 0 .../tasks}/forms-and-signal/src/index.html | 0 .../tasks}/forms-and-signal/src/main.ts | 0 .../tasks}/forms-and-signal/src/styles.scss | 0 .../tasks/forms-and-signal/tailwind.config.js | 12 + .../tasks/forms-and-signal/tsconfig.app.json | 11 + .../forms-and-signal}/tsconfig.editor.json | 0 .../tasks}/forms-and-signal/tsconfig.json | 2 +- .../function-call-effect/.eslintrc.json | 0 .../tasks/function-call-effect/README.md | 11 + .../src/app/action.component.ts | 0 .../src/app/app.component.ts | 0 .../src/app/app.config.ts | 0 .../src/app/user.service.ts | 0 .../function-call-effect}/src/assets/.gitkeep | 0 .../function-call-effect/src/favicon.ico | Bin .../function-call-effect/src/index.html | 0 .../tasks}/function-call-effect/src/main.ts | 0 .../function-call-effect/src/styles.scss | 0 .../function-call-effect/tailwind.config.js | 12 + .../function-call-effect/tsconfig.app.json | 11 + .../tsconfig.editor.json | 0 .../tasks/function-call-effect/tsconfig.json | 30 + .../pipe-observable-to-signal/.eslintrc.json | 0 .../tasks/pipe-observable-to-signal/README.md | 11 + .../src/app/app.component.ts | 0 .../src/app/currency.pipe.ts | 0 .../src/app/currency.service.ts | 0 .../src/app/product-row.component.ts | 0 .../src/app/product.model.ts | 0 .../src/assets/.gitkeep | 0 .../pipe-observable-to-signal/src/favicon.ico | Bin .../pipe-observable-to-signal/src/index.html | 0 .../pipe-observable-to-signal/src/main.ts | 0 .../pipe-observable-to-signal/src/styles.scss | 0 .../tailwind.config.js | 12 + .../tsconfig.app.json | 11 + .../tsconfig.editor.json | 3 +- .../pipe-observable-to-signal/tsconfig.json | 30 + .../signal/tasks}/signal-input/.eslintrc.json | 0 .../signal/tasks/signal-input/README.md | 9 + .../signal-input/src/app/app.component.ts | 0 .../tasks}/signal-input/src/app/app.config.ts | 0 .../signal-input/src/app/user.component.ts | 0 .../tasks/signal-input}/src/assets/.gitkeep | 0 .../tasks}/signal-input/src/favicon.ico | Bin .../signal/tasks}/signal-input/src/index.html | 0 .../signal/tasks}/signal-input/src/main.ts | 0 .../tasks}/signal-input/src/styles.scss | 0 .../tasks/signal-input/tailwind.config.js | 12 + .../tasks/signal-input/tsconfig.app.json | 11 + .../tasks}/signal-input/tsconfig.editor.json | 0 .../signal/tasks/signal-input/tsconfig.json | 30 + lessons/standalone/lecture/advanced.md | 1 + lessons/standalone/lecture/basics.md | 1 + .../module-to-standalone/.eslintrc.json | 0 .../tasks/module-to-standalone/README.md | 9 + .../src/app/app.component.ts | 0 .../src/app/app.module.ts | 0 .../module-to-standalone}/src/assets/.gitkeep | 0 .../module-to-standalone/src/favicon.ico | Bin .../module-to-standalone/src/index.html | 0 .../tasks}/module-to-standalone/src/main.ts | 0 .../module-to-standalone/src/styles.scss | 0 .../module-to-standalone/tailwind.config.js | 1 - .../module-to-standalone/tsconfig.app.json | 11 + .../module-to-standalone/tsconfig.editor.json | 2 +- .../tasks/module-to-standalone/tsconfig.json | 29 + .../challenge/files/readme/README.md__tmpl__ | 2 +- libs/cli/src/generators/readme/generator.ts | 2 +- libs/decoupling/brain/tsconfig.json | 2 +- libs/decoupling/core/tsconfig.json | 2 +- libs/decoupling/helmet/tsconfig.json | 2 +- .../admin/feature/tsconfig.json | 2 +- .../admin/shared/tsconfig.json | 2 +- .../core/providers/tsconfig.json | 2 +- .../core/service/tsconfig.json | 2 +- .../forbidden/tsconfig.json | 2 +- libs/module-to-standalone/home/tsconfig.json | 2 +- libs/module-to-standalone/shell/tsconfig.json | 2 +- .../user/contact/tsconfig.json | 2 +- .../user/home/tsconfig.json | 2 +- .../user/shell/tsconfig.json | 2 +- libs/shared/directives/tsconfig.json | 2 +- libs/shared/ui/tsconfig.json | 2 +- libs/shared/utils/tsconfig.json | 2 +- .../static-dynamic-import/users/tsconfig.json | 2 +- libs/testing-table/backend/tsconfig.json | 2 +- libs/testing-table/model/tsconfig.json | 2 +- nx.json | 159 - package-lock.json | 12874 +++++----------- package.json | 55 +- .../src/assets => scripts}/.gitkeep | 0 922 files changed, 8007 insertions(+), 33612 deletions(-) create mode 100644 angular.json delete mode 100644 apps/animations/simple-animations/README.md delete mode 100644 apps/animations/simple-animations/project.json delete mode 100644 apps/animations/simple-animations/tsconfig.app.json delete mode 100644 apps/animations/view-transition/README.md delete mode 100644 apps/animations/view-transition/project.json delete mode 100644 apps/best-practices/default-vs-onpush/README.md delete mode 100644 apps/best-practices/default-vs-onpush/project.json delete mode 100644 apps/best-practices/lazy-load-component/README.md delete mode 100644 apps/best-practices/lazy-load-component/project.json delete mode 100644 apps/best-practices/lazy-load-component/tsconfig.app.json delete mode 100644 apps/best-practices/memoization/README.md delete mode 100644 apps/best-practices/memoization/project.json delete mode 100644 apps/best-practices/memoization/tailwind.config.js delete mode 100644 apps/best-practices/ngfor-optimization/README.md delete mode 100644 apps/best-practices/ngfor-optimization/project.json delete mode 100644 apps/best-practices/ngfor-optimization/tailwind.config.js delete mode 100644 apps/best-practices/ngfor-optimization/tsconfig.app.json delete mode 100644 apps/best-practices/optimize-change-detection/README.md delete mode 100644 apps/best-practices/optimize-change-detection/project.json delete mode 100644 apps/best-practices/optimize-change-detection/tsconfig.app.json delete mode 100644 apps/components-and-templates/content-projection-default/README.md delete mode 100644 apps/components-and-templates/content-projection-default/project.json delete mode 100644 apps/components-and-templates/content-projection-default/tailwind.config.js delete mode 100644 apps/components-and-templates/crud-application/README.md delete mode 100644 apps/components-and-templates/crud-application/project.json delete mode 100644 apps/components-and-templates/crud-application/tsconfig.app.json delete mode 100644 apps/components-and-templates/projection/README.md delete mode 100644 apps/components-and-templates/projection/project.json delete mode 100644 apps/components-and-templates/projection/tailwind.config.js delete mode 100644 apps/components-and-templates/projection/tsconfig.app.json delete mode 100644 apps/dependency-injection/injection-token/README.md delete mode 100644 apps/dependency-injection/injection-token/project.json delete mode 100644 apps/dependency-injection/injection-token/tailwind.config.js delete mode 100644 apps/dependency-injection/master-dependency-injection/README.md delete mode 100644 apps/dependency-injection/master-dependency-injection/project.json delete mode 100644 apps/dependency-injection/master-dependency-injection/tsconfig.app.json delete mode 100644 apps/directives-and-pipes/pure-pipe/README.md delete mode 100644 apps/directives-and-pipes/pure-pipe/project.json delete mode 100644 apps/directives-and-pipes/structural-directive/README.md delete mode 100644 apps/directives-and-pipes/structural-directive/project.json delete mode 100644 apps/directives-and-pipes/structural-directive/tailwind.config.js delete mode 100644 apps/directives-and-pipes/utility-wrapper-pipe/README.md delete mode 100644 apps/directives-and-pipes/utility-wrapper-pipe/project.json delete mode 100644 apps/directives-and-pipes/wrap-function-pipe/README.md delete mode 100644 apps/directives-and-pipes/wrap-function-pipe/project.json delete mode 100644 apps/forms/avoid-losing-form-data/README.md delete mode 100644 apps/forms/avoid-losing-form-data/project.json delete mode 100644 apps/forms/control-value-accessor/README.md delete mode 100644 apps/forms/control-value-accessor/project.json delete mode 100644 apps/forms/control-value-accessor/tailwind.config.js delete mode 100644 apps/routing/anchor-navigation/README.md delete mode 100644 apps/routing/anchor-navigation/project.json delete mode 100644 apps/routing/anchor-navigation/tailwind.config.js delete mode 100644 apps/routing/anchor-navigation/tsconfig.app.json delete mode 100644 apps/routing/async-redirect/README.md delete mode 100644 apps/routing/async-redirect/project.json delete mode 100644 apps/routing/async-redirect/tailwind.config.js delete mode 100644 apps/routing/router-input/README.md delete mode 100644 apps/routing/router-input/project.json delete mode 100644 apps/routing/router-input/tsconfig.app.json delete mode 100644 apps/rxjs/catch-error/README.md delete mode 100644 apps/rxjs/catch-error/project.json delete mode 100644 apps/rxjs/catch-error/tailwind.config.js delete mode 100644 apps/rxjs/catch-error/tsconfig.json delete mode 100644 apps/rxjs/high-order-operator-bug/README.md delete mode 100644 apps/rxjs/high-order-operator-bug/project.json delete mode 100644 apps/rxjs/high-order-operator-bug/tsconfig.json delete mode 100644 apps/rxjs/hold-to-save-button/README.md delete mode 100644 apps/rxjs/hold-to-save-button/project.json delete mode 100644 apps/rxjs/hold-to-save-button/tailwind.config.js delete mode 100644 apps/rxjs/race-condition/README.md delete mode 100644 apps/rxjs/race-condition/project.json delete mode 100644 apps/signal/bug-in-effect/README.md delete mode 100644 apps/signal/bug-in-effect/project.json delete mode 100644 apps/signal/bug-in-effect/tailwind.config.js delete mode 100644 apps/signal/forms-and-signal/README.md delete mode 100644 apps/signal/forms-and-signal/project.json delete mode 100644 apps/signal/forms-and-signal/tailwind.config.js delete mode 100644 apps/signal/function-call-effect/README.md delete mode 100644 apps/signal/function-call-effect/project.json delete mode 100644 apps/signal/function-call-effect/tailwind.config.js delete mode 100644 apps/signal/function-call-effect/tsconfig.json delete mode 100644 apps/signal/pipe-observable-to-signal/README.md delete mode 100644 apps/signal/pipe-observable-to-signal/project.json delete mode 100644 apps/signal/pipe-observable-to-signal/tailwind.config.js delete mode 100644 apps/signal/pipe-observable-to-signal/tsconfig.json delete mode 100644 apps/signal/signal-input/README.md delete mode 100644 apps/signal/signal-input/project.json delete mode 100644 apps/signal/signal-input/tailwind.config.js delete mode 100644 apps/signal/signal-input/tsconfig.json delete mode 100644 apps/standalone/module-to-standalone/README.md delete mode 100644 apps/standalone/module-to-standalone/project.json delete mode 100644 apps/standalone/module-to-standalone/tsconfig.app.json delete mode 100644 apps/standalone/module-to-standalone/tsconfig.json delete mode 100644 docs/.gitignore delete mode 100644 docs/.vscode/extensions.json delete mode 100644 docs/.vscode/launch.json delete mode 100644 docs/.vscode/settings.json delete mode 100644 docs/README.md delete mode 100644 docs/astro.config.mjs delete mode 100644 docs/package-lock.json delete mode 100644 docs/package.json delete mode 100644 docs/public/angular-challenge.ico delete mode 100644 docs/public/angular-challenge.webp delete mode 100644 docs/src/assets/4/unknown-person.png delete mode 100644 docs/src/assets/4/unknown-student.png delete mode 100644 docs/src/assets/PR-code-btn-modal.png delete mode 100644 docs/src/assets/PR-header.png delete mode 100644 docs/src/assets/angular-challenge.webp delete mode 100644 docs/src/assets/codespaces.png delete mode 100644 docs/src/assets/fork-sync.png delete mode 100644 docs/src/assets/header-github.png delete mode 100644 docs/src/assets/new-pull-request.png delete mode 100644 docs/src/assets/performance/34/profiler-record.png delete mode 100644 docs/src/assets/performance/35/memoize-profiler.png delete mode 100644 docs/src/assets/performance/profiler-tab.png delete mode 100644 docs/src/assets/rxjs/49/prototype.gif delete mode 100644 docs/src/assets/sync-fork-update.png delete mode 100644 docs/src/components/ActionButtonFooter.astro delete mode 100644 docs/src/components/Author.astro delete mode 100644 docs/src/components/ChallengeFooter.astro delete mode 100644 docs/src/components/ClipboardCopy.astro delete mode 100644 docs/src/components/CommentSection.astro delete mode 100644 docs/src/components/Content.astro delete mode 100644 docs/src/components/ContributorsFooter.astro delete mode 100644 docs/src/components/Hero.astro delete mode 100644 docs/src/components/MobileMenuFooter.astro delete mode 100644 docs/src/components/MyIcon.astro delete mode 100644 docs/src/components/PageTitle.astro delete mode 100644 docs/src/components/SiteTitle.astro delete mode 100644 docs/src/components/SubscriptionForm.astro delete mode 100644 docs/src/components/TableOfContents.astro delete mode 100644 docs/src/components/VideoButton.astro delete mode 100644 docs/src/components/github/AnswerNumber.svelte delete mode 100644 docs/src/components/github/AnsweredUser.svelte delete mode 100644 docs/src/components/github/GitHubStats.svelte delete mode 100644 docs/src/components/github/SignUp.svelte delete mode 100644 docs/src/components/github/SponsorUser.svelte delete mode 100644 docs/src/components/github/github-store.ts delete mode 100644 docs/src/components/github/tooltip.js delete mode 100644 docs/src/components/icons.ts delete mode 100644 docs/src/components/leaderboard/LeaderboardAnswer.svelte delete mode 100644 docs/src/components/leaderboard/LeaderboardChallenge.svelte delete mode 100644 docs/src/components/leaderboard/LeaderboardCommit.svelte delete mode 100644 docs/src/components/leaderboard/Spinner.svelte delete mode 100644 docs/src/components/leaderboard/UserBox.svelte delete mode 100644 docs/src/content/authors/Ioannis-Tsironis.json delete mode 100644 docs/src/content/authors/devesh-chaudhari.json delete mode 100644 docs/src/content/authors/lance-finney.json delete mode 100644 docs/src/content/authors/stanislav-gavrilov.json delete mode 100644 docs/src/content/authors/sven-brodny.json delete mode 100644 docs/src/content/authors/thomas-laforge.json delete mode 100644 docs/src/content/authors/timothy-alcaide.json delete mode 100644 docs/src/content/authors/wandrille-guesdon.json delete mode 100644 docs/src/content/config.ts delete mode 100644 docs/src/content/docs/challenges/angular/1-projection.md delete mode 100644 docs/src/content/docs/challenges/angular/13-highly-customizable-css.md delete mode 100644 docs/src/content/docs/challenges/angular/21-anchor-navigation.md delete mode 100644 docs/src/content/docs/challenges/angular/22-router-input.md delete mode 100644 docs/src/content/docs/challenges/angular/31-module-to-standalone.md delete mode 100644 docs/src/content/docs/challenges/angular/32-change-detection-bug.md delete mode 100644 docs/src/content/docs/challenges/angular/33-decoupling-components.md delete mode 100644 docs/src/content/docs/challenges/angular/4-typed-context-outlet.md delete mode 100644 docs/src/content/docs/challenges/angular/45-react-in-angular.md delete mode 100644 docs/src/content/docs/challenges/angular/46-simple-animations.md delete mode 100644 docs/src/content/docs/challenges/angular/5-crud-application.md delete mode 100644 docs/src/content/docs/challenges/angular/52-lazy-load-component.md delete mode 100644 docs/src/content/docs/challenges/angular/55-back-button-navigation.md delete mode 100644 docs/src/content/docs/challenges/angular/58-content-projection-condition.md delete mode 100644 docs/src/content/docs/challenges/angular/59-content-projection-defer.md delete mode 100644 docs/src/content/docs/challenges/angular/60-async-redirect.md delete mode 100644 docs/src/content/docs/challenges/angular/8-pure-pipe.md delete mode 100644 docs/src/content/docs/challenges/forms/41-control-value-accessor.md delete mode 100644 docs/src/content/docs/challenges/nx/25-generator-lib-ext.md delete mode 100644 docs/src/content/docs/challenges/nx/26-generator-comp.md delete mode 100644 docs/src/content/docs/challenges/nx/27-forbid-enum-rule.md delete mode 100644 docs/src/content/docs/challenges/nx/42-static-vs-dynamic-import.md delete mode 100644 docs/src/content/docs/challenges/performance/12-optimize-change-detection.md delete mode 100644 docs/src/content/docs/challenges/performance/34-default-vs-onpush.md delete mode 100644 docs/src/content/docs/challenges/performance/35-memoization.md delete mode 100644 docs/src/content/docs/challenges/performance/36-ngfor-optimization.md delete mode 100644 docs/src/content/docs/challenges/performance/37-optimize-big-list.md delete mode 100644 docs/src/content/docs/challenges/performance/40-web-worker.md delete mode 100644 docs/src/content/docs/challenges/performance/index.mdx delete mode 100644 docs/src/content/docs/challenges/rxjs/11-high-order-operator-bug.md delete mode 100644 docs/src/content/docs/challenges/rxjs/14-race-condition.md delete mode 100644 docs/src/content/docs/challenges/rxjs/38-rxjs-catch-error.md delete mode 100644 docs/src/content/docs/challenges/signal/30-interop-rxjs-signal.md delete mode 100644 docs/src/content/docs/challenges/signal/43-signal-input.md delete mode 100644 docs/src/content/docs/challenges/signal/53-big-signal-performance.md delete mode 100644 docs/src/content/docs/challenges/testing/17-router.md delete mode 100644 docs/src/content/docs/challenges/testing/18-nested-components.md delete mode 100644 docs/src/content/docs/challenges/testing/19-input-output.md delete mode 100644 docs/src/content/docs/challenges/testing/20-modal.md delete mode 100644 docs/src/content/docs/challenges/testing/23-harness.md delete mode 100644 docs/src/content/docs/challenges/testing/24-harness-creation.md delete mode 100644 docs/src/content/docs/challenges/testing/28-checkbox.md delete mode 100644 docs/src/content/docs/challenges/testing/29-real-life-application.md delete mode 100644 docs/src/content/docs/challenges/testing/index.mdx delete mode 100644 docs/src/content/docs/challenges/typescript/15-function-overload.md delete mode 100644 docs/src/content/docs/challenges/typescript/47-enums-vs-union-types.md delete mode 100644 docs/src/content/docs/es/challenges/angular/1-projection.md delete mode 100644 docs/src/content/docs/es/challenges/angular/10-utility-wrapper-pipe.md delete mode 100644 docs/src/content/docs/es/challenges/angular/13-highly-customizable-css.md delete mode 100644 docs/src/content/docs/es/challenges/angular/16-master-dependency-injection.md delete mode 100644 docs/src/content/docs/es/challenges/angular/21-anchor-navigation.md delete mode 100644 docs/src/content/docs/es/challenges/angular/22-router-input.md delete mode 100644 docs/src/content/docs/es/challenges/angular/31-module-to-standalone.md delete mode 100644 docs/src/content/docs/es/challenges/angular/32-change-detection-bug.md delete mode 100644 docs/src/content/docs/es/challenges/angular/33-decoupling-components.md delete mode 100644 docs/src/content/docs/es/challenges/angular/39-injection-token.md delete mode 100644 docs/src/content/docs/es/challenges/angular/4-typed-context-outlet.md delete mode 100644 docs/src/content/docs/es/challenges/angular/5-crud-application.md delete mode 100644 docs/src/content/docs/es/challenges/angular/6-structural-directive.md delete mode 100644 docs/src/content/docs/es/challenges/angular/8-pure-pipe.md delete mode 100644 docs/src/content/docs/es/challenges/angular/9-wrap-function-pipe.md delete mode 100644 docs/src/content/docs/es/challenges/performance/12-optimize-change-detection.md delete mode 100644 docs/src/content/docs/es/challenges/performance/34-default-vs-onpush.md delete mode 100644 docs/src/content/docs/es/challenges/performance/35-memoization.md delete mode 100644 docs/src/content/docs/es/challenges/performance/36-ngfor-optimization.md delete mode 100644 docs/src/content/docs/es/challenges/performance/37-optimize-big-list.md delete mode 100644 docs/src/content/docs/es/challenges/performance/index.mdx delete mode 100644 docs/src/content/docs/es/challenges/signal/30-interop-rxjs-signal.md delete mode 100644 docs/src/content/docs/es/guides/checkout-answer.md delete mode 100644 docs/src/content/docs/es/guides/contribute.md delete mode 100644 docs/src/content/docs/es/guides/create-challenge.md delete mode 100644 docs/src/content/docs/es/guides/faq.md delete mode 100644 docs/src/content/docs/es/guides/getting-started.md delete mode 100644 docs/src/content/docs/es/guides/rebase.md delete mode 100644 docs/src/content/docs/es/guides/resolve-challenge.md delete mode 100644 docs/src/content/docs/es/index.mdx delete mode 100644 docs/src/content/docs/fr/challenges/angular/1-projection.md delete mode 100644 docs/src/content/docs/fr/challenges/angular/21-anchor-navigation.md delete mode 100644 docs/src/content/docs/fr/challenges/angular/22-router-input.md delete mode 100644 docs/src/content/docs/fr/challenges/angular/31-module-to-standalone.md delete mode 100644 docs/src/content/docs/fr/challenges/angular/46-simple-animations.md delete mode 100644 docs/src/content/docs/fr/challenges/angular/5-crud-application.md delete mode 100644 docs/src/content/docs/fr/challenges/angular/8-pure-pipe.md delete mode 100644 docs/src/content/docs/fr/guides/checkout-answer.md delete mode 100644 docs/src/content/docs/fr/guides/contribute.md delete mode 100644 docs/src/content/docs/fr/guides/create-challenge.md delete mode 100644 docs/src/content/docs/fr/guides/faq.md delete mode 100644 docs/src/content/docs/fr/guides/getting-started.md delete mode 100644 docs/src/content/docs/fr/guides/rebase.md delete mode 100644 docs/src/content/docs/fr/guides/resolve-challenge.md delete mode 100644 docs/src/content/docs/fr/index.mdx delete mode 100644 docs/src/content/docs/guides/checkout-answer.md delete mode 100644 docs/src/content/docs/guides/contribute.md delete mode 100644 docs/src/content/docs/guides/create-challenge.md delete mode 100644 docs/src/content/docs/guides/faq.md delete mode 100644 docs/src/content/docs/guides/getting-started.md delete mode 100644 docs/src/content/docs/guides/rebase.md delete mode 100644 docs/src/content/docs/guides/resolve-challenge.md delete mode 100644 docs/src/content/docs/index.mdx delete mode 100644 docs/src/content/docs/leaderboard/answers.mdx delete mode 100644 docs/src/content/docs/leaderboard/challenges.mdx delete mode 100644 docs/src/content/docs/leaderboard/commit.mdx delete mode 100644 docs/src/content/docs/pt/challenges/angular/1-projection.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/10-utility-wrapper-pipe.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/13-highly-customizable-css.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/16-master-dependency-injection.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/21-anchor-navigation.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/22-router-input.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/31-module-to-standalone.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/32-change-detection-bug.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/39-injection-token.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/4-typed-context-outlet.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/44-view-transition.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/45-react-in-angular.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/46-simple-animations.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/5-crud-application.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/6-structural-directive.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/8-pure-pipe.md delete mode 100644 docs/src/content/docs/pt/challenges/angular/9-wrap-function-pipe.md delete mode 100644 docs/src/content/docs/pt/challenges/forms/41-control-value-accessor.md delete mode 100644 docs/src/content/docs/pt/challenges/rxjs/38-rxjs-catch-error.md delete mode 100644 docs/src/content/docs/pt/challenges/signal/30-interop-rxjs-signal.md delete mode 100644 docs/src/content/docs/pt/challenges/signal/43-signal-input.md delete mode 100644 docs/src/content/docs/pt/guides/checkout-answer.md delete mode 100644 docs/src/content/docs/pt/guides/contribute.md delete mode 100644 docs/src/content/docs/pt/guides/create-challenge.md delete mode 100644 docs/src/content/docs/pt/guides/faq.md delete mode 100644 docs/src/content/docs/pt/guides/getting-started.md delete mode 100644 docs/src/content/docs/pt/guides/rebase.md delete mode 100644 docs/src/content/docs/pt/guides/resolve-challenge.md delete mode 100644 docs/src/content/docs/pt/index.mdx delete mode 100644 docs/src/content/docs/pt/leaderboard/answers.mdx delete mode 100644 docs/src/content/docs/pt/leaderboard/challenges.mdx delete mode 100644 docs/src/content/docs/pt/leaderboard/commit.mdx delete mode 100644 docs/src/content/docs/ru/challenges/angular/4-typed-context-outlet.md delete mode 100644 docs/src/content/docs/ru/challenges/performance/37-optimize-big-list.md delete mode 100644 docs/src/content/docs/ru/challenges/performance/40-web-worker.md delete mode 100644 docs/src/content/docs/ru/challenges/performance/index.mdx delete mode 100644 docs/src/content/docs/ru/challenges/testing/17-router.md delete mode 100644 docs/src/content/docs/ru/challenges/testing/18-nested-components.md delete mode 100644 docs/src/content/docs/ru/challenges/testing/19-input-output.md delete mode 100644 docs/src/content/docs/ru/challenges/testing/20-modal.md delete mode 100644 docs/src/content/docs/ru/challenges/testing/23-harness.md delete mode 100644 docs/src/content/docs/ru/challenges/testing/24-harness-creation.md delete mode 100644 docs/src/content/docs/ru/challenges/testing/28-checkbox.md delete mode 100644 docs/src/content/docs/ru/challenges/testing/29-real-life-application.md delete mode 100644 docs/src/content/docs/ru/challenges/testing/index.mdx delete mode 100644 docs/src/content/docs/ru/guides/checkout-answer.md delete mode 100644 docs/src/content/docs/ru/guides/contribute.md delete mode 100644 docs/src/content/docs/ru/guides/create-challenge.md delete mode 100644 docs/src/content/docs/ru/guides/faq.md delete mode 100644 docs/src/content/docs/ru/guides/getting-started.md delete mode 100644 docs/src/content/docs/ru/guides/rebase.md delete mode 100644 docs/src/content/docs/ru/guides/resolve-challenge.md delete mode 100644 docs/src/content/docs/ru/index.mdx delete mode 100644 docs/src/content/docs/subscription/index.mdx delete mode 100644 docs/src/content/docs/zh-cn/challenges/angular/1-projection.md delete mode 100644 docs/src/content/docs/zh-cn/guides/checkout-answer.md delete mode 100644 docs/src/content/docs/zh-cn/guides/contribute.md delete mode 100644 docs/src/content/docs/zh-cn/guides/create-challenge.md delete mode 100644 docs/src/content/docs/zh-cn/guides/faq.md delete mode 100644 docs/src/content/docs/zh-cn/guides/getting-started.md delete mode 100644 docs/src/content/docs/zh-cn/guides/rebase.md delete mode 100644 docs/src/content/docs/zh-cn/guides/resolve-challenge.md delete mode 100644 docs/src/content/docs/zh-cn/index.mdx delete mode 100644 docs/src/content/docs/zh-cn/leaderboard/answers.mdx delete mode 100644 docs/src/content/docs/zh-cn/leaderboard/challenges.mdx delete mode 100644 docs/src/content/docs/zh-cn/leaderboard/commit.mdx delete mode 100644 docs/src/content/docs/zh-cn/subscription/index.mdx delete mode 100644 docs/src/content/fr/challenges/angular/60-async-redirect.md delete mode 100644 docs/src/content/i18n/en.json delete mode 100644 docs/src/content/i18n/es.json delete mode 100644 docs/src/content/i18n/fr.json delete mode 100644 docs/src/content/i18n/pt.json delete mode 100644 docs/src/content/i18n/ru.json delete mode 100644 docs/src/content/i18n/zh-CN.json delete mode 100644 docs/src/content/pt/challenges/angular/60-async-redirect.md delete mode 100644 docs/src/content/ru/challenges/angular/60-async-redirect.md delete mode 100644 docs/src/content/zh-cn/challenges/angular/60-async-redirect.md delete mode 100644 docs/src/env.d.ts delete mode 100644 docs/src/pages/auth/authorize.js delete mode 100644 docs/src/pages/auth/authorized.js delete mode 100644 docs/src/pages/auth/refresh.js delete mode 100644 docs/src/styles/custom-css.css delete mode 100644 docs/src/utils/encrypt.ts delete mode 100644 docs/svelte.config.js delete mode 100644 docs/tsconfig.json create mode 100644 lessons/animations/lecture/advanced.md create mode 100644 lessons/animations/lecture/basics.md rename {apps/animations => lessons/animations/tasks}/simple-animations/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/angular/46-simple-animations.md => lessons/animations/tasks/simple-animations/README.md (96%) rename {apps/animations => lessons/animations/tasks}/simple-animations/jest.config.ts (100%) rename {apps/animations => lessons/animations/tasks}/simple-animations/src/app/app.component.ts (100%) rename {apps/animations => lessons/animations/tasks}/simple-animations/src/app/app.config.ts (100%) rename {apps => lessons/animations/tasks/simple-animations/src/assets}/.gitkeep (100%) rename {apps/animations => lessons/animations/tasks}/simple-animations/src/favicon.ico (100%) rename {apps/animations => lessons/animations/tasks}/simple-animations/src/index.html (100%) rename {apps/animations => lessons/animations/tasks}/simple-animations/src/main.ts (100%) rename {apps/animations => lessons/animations/tasks}/simple-animations/src/styles.scss (100%) rename {apps/animations => lessons/animations/tasks}/simple-animations/src/test-setup.ts (100%) rename {apps/animations/view-transition => lessons/animations/tasks/simple-animations}/tailwind.config.js (63%) rename {apps/dependency-injection/injection-token => lessons/animations/tasks/simple-animations}/tsconfig.app.json (100%) rename {apps/animations => lessons/animations/tasks}/simple-animations/tsconfig.editor.json (100%) rename {apps/best-practices/lazy-load-component => lessons/animations/tasks/simple-animations}/tsconfig.json (93%) rename {apps/dependency-injection/injection-token => lessons/animations/tasks/simple-animations}/tsconfig.spec.json (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/.eslintrc.json (100%) rename docs/src/content/docs/challenges/angular/44-view-transition.md => lessons/animations/tasks/view-transition/README.md (95%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/app/app.component.ts (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/app/app.config.ts (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/app/blog/blog.component.ts (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/app/blog/thumbnail-header.component.ts (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/app/blog/thumbnail.component.ts (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/app/data.ts (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/app/post.model.ts (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/app/post/post-header.component.ts (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/app/post/post.component.ts (100%) rename {apps/animations/simple-animations => lessons/animations/tasks/view-transition}/src/assets/.gitkeep (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/assets/angular.webp (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/assets/guard.full.webp (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/assets/highly-custom.full.webp (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/assets/profil.webp (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/assets/signal-cd.full.webp (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/favicon.ico (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/index.html (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/main.ts (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/src/styles.scss (100%) rename {apps/best-practices/lazy-load-component => lessons/animations/tasks/view-transition}/tailwind.config.js (63%) rename {apps/forms/avoid-losing-form-data => lessons/animations/tasks/view-transition}/tsconfig.app.json (100%) rename {apps/animations => lessons/animations/tasks}/view-transition/tsconfig.editor.json (100%) rename {apps/forms/avoid-losing-form-data => lessons/animations/tasks/view-transition}/tsconfig.json (93%) create mode 100644 lessons/best-practices/lecture/advanced.md create mode 100644 lessons/best-practices/lecture/basics.md rename {apps/best-practices => lessons/best-practices/tasks}/default-vs-onpush/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/performance/34-default-vs-onpush.md => lessons/best-practices/tasks/default-vs-onpush/README.md (96%) rename {apps/best-practices => lessons/best-practices/tasks}/default-vs-onpush/src/app/app.component.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/default-vs-onpush/src/app/app.config.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/default-vs-onpush/src/app/person-list.component.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/default-vs-onpush/src/app/random.component.ts (100%) rename {apps/animations/view-transition => lessons/best-practices/tasks/default-vs-onpush}/src/assets/.gitkeep (100%) rename {apps/best-practices => lessons/best-practices/tasks}/default-vs-onpush/src/favicon.ico (100%) rename {apps/best-practices => lessons/best-practices/tasks}/default-vs-onpush/src/index.html (100%) rename {apps/best-practices => lessons/best-practices/tasks}/default-vs-onpush/src/main.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/default-vs-onpush/src/styles.scss (100%) rename {apps/animations/simple-animations => lessons/best-practices/tasks/default-vs-onpush}/tailwind.config.js (63%) rename {apps/forms/control-value-accessor => lessons/best-practices/tasks/default-vs-onpush}/tsconfig.app.json (100%) rename {apps/best-practices => lessons/best-practices/tasks}/default-vs-onpush/tsconfig.editor.json (61%) rename {apps/best-practices/memoization => lessons/best-practices/tasks/default-vs-onpush}/tsconfig.json (93%) rename {apps/best-practices => lessons/best-practices/tasks}/lazy-load-component/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/angular/52-lazy-load-component.md => lessons/best-practices/tasks/lazy-load-component/README.md (96%) rename {apps/best-practices => lessons/best-practices/tasks}/lazy-load-component/jest.config.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/lazy-load-component/src/app/app.component.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/lazy-load-component/src/app/app.module.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/lazy-load-component/src/app/placeholder.component.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/lazy-load-component/src/app/top.component.ts (100%) rename {apps/best-practices/default-vs-onpush => lessons/best-practices/tasks/lazy-load-component}/src/assets/.gitkeep (100%) rename {apps/best-practices => lessons/best-practices/tasks}/lazy-load-component/src/favicon.ico (100%) rename {apps/best-practices => lessons/best-practices/tasks}/lazy-load-component/src/index.html (100%) rename {apps/best-practices => lessons/best-practices/tasks}/lazy-load-component/src/main.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/lazy-load-component/src/styles.scss (100%) rename {apps/best-practices => lessons/best-practices/tasks}/lazy-load-component/src/test-setup.ts (100%) rename {apps/best-practices/default-vs-onpush => lessons/best-practices/tasks/lazy-load-component}/tailwind.config.js (63%) rename {apps/rxjs/catch-error => lessons/best-practices/tasks/lazy-load-component}/tsconfig.app.json (100%) rename {apps/components-and-templates/content-projection-default => lessons/best-practices/tasks/lazy-load-component}/tsconfig.editor.json (100%) rename {apps/animations/simple-animations => lessons/best-practices/tasks/lazy-load-component}/tsconfig.json (93%) rename {apps/forms/control-value-accessor => lessons/best-practices/tasks/lazy-load-component}/tsconfig.spec.json (100%) rename {apps/best-practices => lessons/best-practices/tasks}/memoization/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/performance/35-memoization.md => lessons/best-practices/tasks/memoization/README.md (96%) rename {apps/best-practices => lessons/best-practices/tasks}/memoization/src/app/app.component.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/memoization/src/app/app.config.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/memoization/src/app/generateList.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/memoization/src/app/person-list.component.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/memoization/src/app/person.model.ts (100%) rename {apps/best-practices/lazy-load-component => lessons/best-practices/tasks/memoization}/src/assets/.gitkeep (100%) rename {apps/best-practices => lessons/best-practices/tasks}/memoization/src/favicon.ico (100%) rename {apps/best-practices => lessons/best-practices/tasks}/memoization/src/index.html (100%) rename {apps/best-practices => lessons/best-practices/tasks}/memoization/src/main.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/memoization/src/styles.scss (100%) create mode 100644 lessons/best-practices/tasks/memoization/tailwind.config.js rename {apps/rxjs/hold-to-save-button => lessons/best-practices/tasks/memoization}/tsconfig.app.json (100%) rename {apps/best-practices => lessons/best-practices/tasks}/memoization/tsconfig.editor.json (100%) rename {apps/best-practices/default-vs-onpush => lessons/best-practices/tasks/memoization}/tsconfig.json (93%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/performance/36-ngfor-optimization.md => lessons/best-practices/tasks/ngfor-optimization/README.md (94%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/jest.config.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/src/app/app.component.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/src/app/app.config.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/src/app/generateList.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/src/app/list.service.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/src/app/person-list.component.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/src/app/person.model.ts (100%) rename {apps/best-practices/memoization => lessons/best-practices/tasks/ngfor-optimization}/src/assets/.gitkeep (100%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/src/favicon.ico (100%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/src/index.html (100%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/src/main.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/src/styles.scss (100%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/src/test-setup.ts (100%) create mode 100644 lessons/best-practices/tasks/ngfor-optimization/tailwind.config.js rename {apps/signal/bug-in-effect => lessons/best-practices/tasks/ngfor-optimization}/tsconfig.app.json (100%) rename {apps/best-practices => lessons/best-practices/tasks}/ngfor-optimization/tsconfig.editor.json (100%) rename {apps/dependency-injection/injection-token => lessons/best-practices/tasks/ngfor-optimization}/tsconfig.json (93%) rename {apps/rxjs/hold-to-save-button => lessons/best-practices/tasks/ngfor-optimization}/tsconfig.spec.json (100%) rename {apps/best-practices => lessons/best-practices/tasks}/optimize-change-detection/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/performance/12-optimize-change-detection.md => lessons/best-practices/tasks/optimize-change-detection/README.md (95%) rename {apps/best-practices => lessons/best-practices/tasks}/optimize-change-detection/jest.config.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/optimize-change-detection/src/app/app.component.ts (100%) rename {apps/best-practices/ngfor-optimization => lessons/best-practices/tasks/optimize-change-detection}/src/assets/.gitkeep (100%) rename {apps/best-practices => lessons/best-practices/tasks}/optimize-change-detection/src/favicon.ico (100%) rename {apps/best-practices => lessons/best-practices/tasks}/optimize-change-detection/src/index.html (100%) rename {apps/best-practices => lessons/best-practices/tasks}/optimize-change-detection/src/main.ts (100%) rename {apps/best-practices => lessons/best-practices/tasks}/optimize-change-detection/src/styles.scss (100%) rename {apps/best-practices => lessons/best-practices/tasks}/optimize-change-detection/src/test-setup.ts (100%) rename {apps/signal/forms-and-signal => lessons/best-practices/tasks/optimize-change-detection}/tsconfig.app.json (100%) rename {apps/best-practices => lessons/best-practices/tasks}/optimize-change-detection/tsconfig.editor.json (100%) rename {apps/best-practices/ngfor-optimization => lessons/best-practices/tasks/optimize-change-detection}/tsconfig.json (93%) rename {apps/rxjs/race-condition => lessons/best-practices/tasks/optimize-change-detection}/tsconfig.spec.json (100%) create mode 100644 lessons/components-and-templates/lecture/advanced.md create mode 100644 lessons/components-and-templates/lecture/basics.md rename {apps/components-and-templates => lessons/components-and-templates/tasks}/content-projection-default/.eslintrc.json (100%) rename docs/src/content/docs/challenges/angular/57-content-projection-default.md => lessons/components-and-templates/tasks/content-projection-default/README.md (91%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/content-projection-default/public/favicon.ico (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/content-projection-default/src/app/app.component.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/content-projection-default/src/app/app.config.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/content-projection-default/src/app/card.component.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/content-projection-default/src/index.html (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/content-projection-default/src/main.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/content-projection-default/src/styles.scss (100%) create mode 100644 lessons/components-and-templates/tasks/content-projection-default/tailwind.config.js rename {apps/signal/function-call-effect => lessons/components-and-templates/tasks/content-projection-default}/tsconfig.app.json (100%) rename {apps/forms/avoid-losing-form-data => lessons/components-and-templates/tasks/content-projection-default}/tsconfig.editor.json (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/content-projection-default/tsconfig.json (93%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/angular/5-crud-application.md => lessons/components-and-templates/tasks/crud-application/README.md (96%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/jest.config.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/src/app/app.component.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/src/app/app.config.ts (100%) rename {apps/best-practices/optimize-change-detection => lessons/components-and-templates/tasks/crud-application}/src/assets/.gitkeep (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/src/favicon.ico (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/src/index.html (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/src/main.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/src/polyfills.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/src/styles.scss (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/src/test-setup.ts (100%) rename {apps/directives-and-pipes/utility-wrapper-pipe => lessons/components-and-templates/tasks/crud-application}/tsconfig.app.json (85%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/tsconfig.editor.json (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/tsconfig.json (93%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/crud-application/tsconfig.spec.json (59%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/angular/1-projection.md => lessons/components-and-templates/tasks/projection/README.md (97%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/jest.config.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/app.component.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/component/city-card/city-card.component.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/component/student-card/student-card.component.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/component/teacher-card/teacher-card.component.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/data-access/city.store.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/data-access/fake-http.service.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/data-access/student.store.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/data-access/teacher.store.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/model/card.model.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/model/city.model.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/model/student.model.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/model/teacher.model.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/ui/card/card.component.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/app/ui/list-item/list-item.component.ts (100%) rename {apps/components-and-templates/crud-application => lessons/components-and-templates/tasks/projection}/src/assets/.gitkeep (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/assets/img/city.png (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/assets/img/student.webp (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/assets/img/teacher.png (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/assets/svg/trash.svg (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/favicon.ico (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/index.html (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/main.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/polyfills.ts (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/styles.scss (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/src/test-setup.ts (100%) create mode 100644 lessons/components-and-templates/tasks/projection/tailwind.config.js rename {apps/directives-and-pipes/wrap-function-pipe => lessons/components-and-templates/tasks/projection}/tsconfig.app.json (85%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/tsconfig.editor.json (100%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/tsconfig.json (93%) rename {apps/components-and-templates => lessons/components-and-templates/tasks}/projection/tsconfig.spec.json (55%) create mode 100644 lessons/dependency-injection/lecture/advanced.md create mode 100644 lessons/dependency-injection/lecture/basics.md rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/.eslintrc.json (100%) rename docs/src/content/docs/challenges/angular/39-injection-token.md => lessons/dependency-injection/tasks/injection-token/README.md (91%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/jest.config.ts (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/src/app/app.component.ts (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/src/app/app.config.ts (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/src/app/data.ts (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/src/app/phone.component.ts (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/src/app/timer-container.component.ts (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/src/app/timer.component.ts (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/src/app/video.component.ts (100%) rename {apps/components-and-templates/projection => lessons/dependency-injection/tasks/injection-token}/src/assets/.gitkeep (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/src/favicon.ico (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/src/index.html (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/src/main.ts (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/src/styles.scss (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/src/test-setup.ts (100%) create mode 100644 lessons/dependency-injection/tasks/injection-token/tailwind.config.js rename {apps/signal/pipe-observable-to-signal => lessons/dependency-injection/tasks/injection-token}/tsconfig.app.json (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/injection-token/tsconfig.editor.json (100%) rename {apps/best-practices/optimize-change-detection => lessons/dependency-injection/tasks/injection-token}/tsconfig.json (93%) rename {apps/animations/simple-animations => lessons/dependency-injection/tasks/injection-token}/tsconfig.spec.json (80%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/master-dependency-injection/.eslintrc.json (100%) rename docs/src/content/docs/challenges/angular/16-master-dependency-injection.md => lessons/dependency-injection/tasks/master-dependency-injection/README.md (87%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/master-dependency-injection/src/app/app.component.ts (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/master-dependency-injection/src/app/currency.pipe.ts (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/master-dependency-injection/src/app/currency.service.ts (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/master-dependency-injection/src/app/product.model.ts (100%) rename {apps/dependency-injection/injection-token => lessons/dependency-injection/tasks/master-dependency-injection}/src/assets/.gitkeep (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/master-dependency-injection/src/favicon.ico (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/master-dependency-injection/src/index.html (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/master-dependency-injection/src/main.ts (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/master-dependency-injection/src/styles.scss (100%) rename {apps/signal/signal-input => lessons/dependency-injection/tasks/master-dependency-injection}/tsconfig.app.json (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/master-dependency-injection/tsconfig.editor.json (100%) rename {apps/dependency-injection => lessons/dependency-injection/tasks}/master-dependency-injection/tsconfig.json (93%) create mode 100644 lessons/directives-and-pipes/lecture/advanced.md create mode 100644 lessons/directives-and-pipes/lecture/basics.md rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/pure-pipe/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/angular/8-pure-pipe.md => lessons/directives-and-pipes/tasks/pure-pipe/README.md (95%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/pure-pipe/src/app/app.component.ts (100%) rename {apps/dependency-injection/master-dependency-injection => lessons/directives-and-pipes/tasks/pure-pipe}/src/assets/.gitkeep (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/pure-pipe/src/favicon.ico (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/pure-pipe/src/index.html (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/pure-pipe/src/main.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/pure-pipe/src/polyfills.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/pure-pipe/src/styles.scss (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/pure-pipe/tsconfig.app.json (85%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/pure-pipe/tsconfig.editor.json (100%) rename {apps/directives-and-pipes/utility-wrapper-pipe => lessons/directives-and-pipes/tasks/pure-pipe}/tsconfig.json (92%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/.eslintrc.json (100%) rename docs/src/content/docs/challenges/angular/6-structural-directive.md => lessons/directives-and-pipes/tasks/structural-directive/README.md (93%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/app/app.component.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/app/app.config.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/app/button.component.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/app/dashboard/admin.component.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/app/dashboard/manager.component.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/app/information.component.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/app/login.component.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/app/routes.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/app/user.model.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/app/user.store.ts (100%) rename {apps/directives-and-pipes/pure-pipe => lessons/directives-and-pipes/tasks/structural-directive}/src/assets/.gitkeep (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/favicon.ico (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/index.html (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/main.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/polyfills.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/src/styles.scss (100%) create mode 100644 lessons/directives-and-pipes/tasks/structural-directive/tailwind.config.js rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/tsconfig.app.json (85%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/tsconfig.editor.json (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/structural-directive/tsconfig.json (92%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/utility-wrapper-pipe/.eslintrc.json (100%) rename docs/src/content/docs/challenges/angular/10-utility-wrapper-pipe.md => lessons/directives-and-pipes/tasks/utility-wrapper-pipe/README.md (92%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/utility-wrapper-pipe/src/app/app.component.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/utility-wrapper-pipe/src/app/person.utils.ts (100%) rename {apps/directives-and-pipes/structural-directive => lessons/directives-and-pipes/tasks/utility-wrapper-pipe}/src/assets/.gitkeep (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/utility-wrapper-pipe/src/favicon.ico (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/utility-wrapper-pipe/src/index.html (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/utility-wrapper-pipe/src/main.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/utility-wrapper-pipe/src/polyfills.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/utility-wrapper-pipe/src/styles.scss (100%) create mode 100644 lessons/directives-and-pipes/tasks/utility-wrapper-pipe/tsconfig.app.json rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/utility-wrapper-pipe/tsconfig.editor.json (100%) rename {apps/directives-and-pipes/wrap-function-pipe => lessons/directives-and-pipes/tasks/utility-wrapper-pipe}/tsconfig.json (92%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/wrap-function-pipe/.eslintrc.json (100%) rename docs/src/content/docs/challenges/angular/9-wrap-function-pipe.md => lessons/directives-and-pipes/tasks/wrap-function-pipe/README.md (93%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/wrap-function-pipe/src/app/app.component.ts (100%) rename {apps/directives-and-pipes/utility-wrapper-pipe => lessons/directives-and-pipes/tasks/wrap-function-pipe}/src/assets/.gitkeep (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/wrap-function-pipe/src/favicon.ico (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/wrap-function-pipe/src/index.html (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/wrap-function-pipe/src/main.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/wrap-function-pipe/src/polyfills.ts (100%) rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/wrap-function-pipe/src/styles.scss (100%) create mode 100644 lessons/directives-and-pipes/tasks/wrap-function-pipe/tsconfig.app.json rename {apps/directives-and-pipes => lessons/directives-and-pipes/tasks}/wrap-function-pipe/tsconfig.editor.json (100%) rename {apps/directives-and-pipes/pure-pipe => lessons/directives-and-pipes/tasks/wrap-function-pipe}/tsconfig.json (92%) create mode 100644 lessons/forms/lecture/advanced.md create mode 100644 lessons/forms/lecture/basics.md rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/.eslintrc.json (100%) rename docs/src/content/docs/challenges/forms/48-avoid-losing-form-data.md => lessons/forms/tasks/avoid-losing-form-data/README.md (94%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/src/app/app.component.ts (100%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/src/app/app.config.ts (100%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/src/app/app.routes.ts (100%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/src/app/pages/join.component.ts (100%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/src/app/pages/page.component.ts (100%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/src/app/ui/dialog.component.ts (100%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/src/app/ui/form.component.ts (100%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/src/app/ui/nav.component.ts (100%) rename {apps/directives-and-pipes/wrap-function-pipe => lessons/forms/tasks/avoid-losing-form-data}/src/assets/.gitkeep (100%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/src/favicon.ico (100%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/src/index.html (100%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/src/main.ts (100%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/src/styles.scss (100%) rename {apps/forms => lessons/forms/tasks}/avoid-losing-form-data/tailwind.config.js (65%) rename {apps/best-practices/memoization => lessons/forms/tasks/avoid-losing-form-data}/tsconfig.app.json (87%) rename {apps/rxjs/hold-to-save-button => lessons/forms/tasks/avoid-losing-form-data}/tsconfig.editor.json (100%) rename {apps/animations/view-transition => lessons/forms/tasks/avoid-losing-form-data}/tsconfig.json (93%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/forms/41-control-value-accessor.md => lessons/forms/tasks/control-value-accessor/README.md (94%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/jest.config.ts (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/src/app/app.component.ts (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/src/app/feedback-form/feedback-form.component.html (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/src/app/feedback-form/feedback-form.component.scss (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/src/app/feedback-form/feedback-form.component.ts (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/src/app/rating-control/rating-control.component.html (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/src/app/rating-control/rating-control.component.scss (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/src/app/rating-control/rating-control.component.ts (100%) rename {apps/forms/avoid-losing-form-data => lessons/forms/tasks/control-value-accessor}/src/assets/.gitkeep (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/src/favicon.ico (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/src/index.html (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/src/main.ts (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/src/styles.scss (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/src/test-setup.ts (100%) create mode 100644 lessons/forms/tasks/control-value-accessor/tailwind.config.js rename {apps/animations/view-transition => lessons/forms/tasks/control-value-accessor}/tsconfig.app.json (87%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/tsconfig.editor.json (100%) rename {apps/forms => lessons/forms/tasks}/control-value-accessor/tsconfig.json (93%) rename {apps/best-practices/lazy-load-component => lessons/forms/tasks/control-value-accessor}/tsconfig.spec.json (80%) create mode 100644 lessons/routing/lecture/advanced.md create mode 100644 lessons/routing/lecture/basics.md rename {apps/routing => lessons/routing/tasks}/anchor-navigation/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/angular/21-anchor-navigation.md => lessons/routing/tasks/anchor-navigation/README.md (90%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/jest.config.ts (100%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/src/app/app.component.ts (100%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/src/app/app.config.ts (100%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/src/app/app.routes.ts (100%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/src/app/foo.component.ts (100%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/src/app/home.component.ts (100%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/src/app/nav-button.component.ts (100%) rename {apps/forms/control-value-accessor => lessons/routing/tasks/anchor-navigation}/src/assets/.gitkeep (100%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/src/favicon.ico (100%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/src/index.html (100%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/src/main.ts (100%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/src/styles.scss (100%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/src/test-setup.ts (100%) create mode 100644 lessons/routing/tasks/anchor-navigation/tailwind.config.js rename {apps/best-practices/default-vs-onpush => lessons/routing/tasks/anchor-navigation}/tsconfig.app.json (87%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/tsconfig.editor.json (100%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/tsconfig.json (93%) rename {apps/routing => lessons/routing/tasks}/anchor-navigation/tsconfig.spec.json (78%) rename {apps/routing => lessons/routing/tasks}/async-redirect/.eslintrc.json (100%) rename docs/src/content/es/challenges/angular/60-async-redirect.md => lessons/routing/tasks/async-redirect/README.md (89%) rename {apps/routing => lessons/routing/tasks}/async-redirect/public/favicon.ico (100%) rename {apps/routing => lessons/routing/tasks}/async-redirect/src/app/admin-page.ts (100%) rename {apps/routing => lessons/routing/tasks}/async-redirect/src/app/app.config.ts (100%) rename {apps/routing => lessons/routing/tasks}/async-redirect/src/app/app.ts (100%) rename {apps/routing => lessons/routing/tasks}/async-redirect/src/app/dashboard.ts (100%) rename {apps/routing => lessons/routing/tasks}/async-redirect/src/app/profile-page.ts (100%) rename {apps/routing => lessons/routing/tasks}/async-redirect/src/app/routes.ts (100%) rename {apps/routing => lessons/routing/tasks}/async-redirect/src/app/user-page.ts (100%) rename {apps/routing => lessons/routing/tasks}/async-redirect/src/app/user-profile.service.ts (100%) rename {apps/routing => lessons/routing/tasks}/async-redirect/src/index.html (100%) rename {apps/routing => lessons/routing/tasks}/async-redirect/src/main.ts (100%) rename {apps/routing => lessons/routing/tasks}/async-redirect/src/styles.scss (100%) create mode 100644 lessons/routing/tasks/async-redirect/tailwind.config.js rename {apps/routing => lessons/routing/tasks}/async-redirect/tsconfig.app.json (100%) rename {apps/routing => lessons/routing/tasks}/async-redirect/tsconfig.json (93%) rename {apps/routing => lessons/routing/tasks}/router-input/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/angular/22-router-input.md => lessons/routing/tasks/router-input/README.md (93%) rename {apps/routing => lessons/routing/tasks}/router-input/src/app/app.component.ts (100%) rename {apps/routing => lessons/routing/tasks}/router-input/src/app/app.config.ts (100%) rename {apps/routing => lessons/routing/tasks}/router-input/src/app/app.routes.ts (100%) rename {apps/routing => lessons/routing/tasks}/router-input/src/app/home.component.ts (100%) rename {apps/routing => lessons/routing/tasks}/router-input/src/app/test.component.ts (100%) rename {apps/routing/anchor-navigation => lessons/routing/tasks/router-input}/src/assets/.gitkeep (100%) rename {apps/routing => lessons/routing/tasks}/router-input/src/favicon.ico (100%) rename {apps/routing => lessons/routing/tasks}/router-input/src/index.html (100%) rename {apps/routing => lessons/routing/tasks}/router-input/src/main.ts (100%) rename {apps/routing => lessons/routing/tasks}/router-input/src/styles.scss (100%) rename {apps/components-and-templates/content-projection-default => lessons/routing/tasks/router-input}/tsconfig.app.json (87%) rename {apps/routing => lessons/routing/tasks}/router-input/tsconfig.editor.json (100%) rename {apps/routing => lessons/routing/tasks}/router-input/tsconfig.json (93%) create mode 100644 lessons/rxjs/lecture/advanced.md create mode 100644 lessons/rxjs/lecture/basics.md rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/rxjs/38-rxjs-catch-error.md => lessons/rxjs/tasks/catch-error/README.md (95%) rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/jest.config.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/src/app/app.component.css (100%) rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/src/app/app.component.spec.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/src/app/app.component.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/src/app/app.config.ts (100%) rename {apps/routing/router-input => lessons/rxjs/tasks/catch-error}/src/assets/.gitkeep (100%) rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/src/favicon.ico (100%) rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/src/index.html (100%) rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/src/main.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/src/styles.scss (100%) rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/src/test-setup.ts (100%) create mode 100644 lessons/rxjs/tasks/catch-error/tailwind.config.js create mode 100644 lessons/rxjs/tasks/catch-error/tsconfig.app.json rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/tsconfig.editor.json (100%) create mode 100644 lessons/rxjs/tasks/catch-error/tsconfig.json rename {apps/rxjs => lessons/rxjs/tasks}/catch-error/tsconfig.spec.json (100%) rename {apps/rxjs => lessons/rxjs/tasks}/high-order-operator-bug/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/rxjs/11-high-order-operator-bug.md => lessons/rxjs/tasks/high-order-operator-bug/README.md (92%) rename {apps/rxjs => lessons/rxjs/tasks}/high-order-operator-bug/src/app/app.component.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/high-order-operator-bug/src/app/app.service.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/high-order-operator-bug/src/app/localDB.service.ts (100%) rename {apps/rxjs/catch-error => lessons/rxjs/tasks/high-order-operator-bug}/src/assets/.gitkeep (100%) rename {apps/rxjs => lessons/rxjs/tasks}/high-order-operator-bug/src/favicon.ico (100%) rename {apps/rxjs => lessons/rxjs/tasks}/high-order-operator-bug/src/index.html (100%) rename {apps/rxjs => lessons/rxjs/tasks}/high-order-operator-bug/src/main.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/high-order-operator-bug/src/styles.scss (100%) rename {apps/rxjs => lessons/rxjs/tasks}/high-order-operator-bug/tsconfig.app.json (100%) rename {apps/rxjs => lessons/rxjs/tasks}/high-order-operator-bug/tsconfig.editor.json (100%) create mode 100644 lessons/rxjs/tasks/high-order-operator-bug/tsconfig.json rename {apps/rxjs => lessons/rxjs/tasks}/hold-to-save-button/.eslintrc.json (100%) rename docs/src/content/docs/challenges/rxjs/49-hold-to-save-button.md => lessons/rxjs/tasks/hold-to-save-button/README.md (93%) rename {apps/rxjs => lessons/rxjs/tasks}/hold-to-save-button/jest.config.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/hold-to-save-button/src/app/app.component.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/hold-to-save-button/src/app/app.config.ts (100%) rename {apps/rxjs/high-order-operator-bug => lessons/rxjs/tasks/hold-to-save-button}/src/assets/.gitkeep (100%) rename {apps/rxjs => lessons/rxjs/tasks}/hold-to-save-button/src/favicon.ico (100%) rename {apps/rxjs => lessons/rxjs/tasks}/hold-to-save-button/src/index.html (100%) rename {apps/rxjs => lessons/rxjs/tasks}/hold-to-save-button/src/main.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/hold-to-save-button/src/styles.scss (100%) rename {apps/rxjs => lessons/rxjs/tasks}/hold-to-save-button/src/test-setup.ts (100%) create mode 100644 lessons/rxjs/tasks/hold-to-save-button/tailwind.config.js create mode 100644 lessons/rxjs/tasks/hold-to-save-button/tsconfig.app.json rename {apps/signal/bug-in-effect => lessons/rxjs/tasks/hold-to-save-button}/tsconfig.editor.json (100%) rename {apps/rxjs => lessons/rxjs/tasks}/hold-to-save-button/tsconfig.json (93%) rename {apps/best-practices/ngfor-optimization => lessons/rxjs/tasks/hold-to-save-button}/tsconfig.spec.json (80%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/rxjs/14-race-condition.md => lessons/rxjs/tasks/race-condition/README.md (91%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/cypress.config.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/cypress/fixtures/example.json (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/cypress/support/commands.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/cypress/support/component-index.html (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/cypress/support/component.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/cypress/tsconfig.json (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/jest.config.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/src/app/app.component.cy.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/src/app/app.component.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/src/app/app.config.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/src/app/topic-dialog.component.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/src/app/topic.service.ts (100%) rename {apps/rxjs/hold-to-save-button => lessons/rxjs/tasks/race-condition}/src/assets/.gitkeep (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/src/favicon.ico (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/src/index.html (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/src/main.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/src/styles.scss (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/src/test-setup.ts (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/tsconfig.app.json (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/tsconfig.editor.json (100%) rename {apps/rxjs => lessons/rxjs/tasks}/race-condition/tsconfig.json (94%) rename {apps/best-practices/optimize-change-detection => lessons/rxjs/tasks/race-condition}/tsconfig.spec.json (78%) create mode 100644 lessons/signal/lecture/advanced.md create mode 100644 lessons/signal/lecture/basics.md rename {apps/signal => lessons/signal/tasks}/bug-in-effect/.eslintrc.json (100%) rename docs/src/content/docs/challenges/signal/50-bug-effect-signal.md => lessons/signal/tasks/bug-in-effect/README.md (92%) rename {apps/signal => lessons/signal/tasks}/bug-in-effect/src/app/app.component.ts (100%) rename {apps/signal => lessons/signal/tasks}/bug-in-effect/src/app/app.config.ts (100%) rename {apps/rxjs/race-condition => lessons/signal/tasks/bug-in-effect}/src/assets/.gitkeep (100%) rename {apps/signal => lessons/signal/tasks}/bug-in-effect/src/favicon.ico (100%) rename {apps/signal => lessons/signal/tasks}/bug-in-effect/src/index.html (100%) rename {apps/signal => lessons/signal/tasks}/bug-in-effect/src/main.ts (100%) rename {apps/signal => lessons/signal/tasks}/bug-in-effect/src/styles.scss (100%) create mode 100644 lessons/signal/tasks/bug-in-effect/tailwind.config.js create mode 100644 lessons/signal/tasks/bug-in-effect/tsconfig.app.json rename {apps/signal/forms-and-signal => lessons/signal/tasks/bug-in-effect}/tsconfig.editor.json (100%) rename {apps/signal => lessons/signal/tasks}/bug-in-effect/tsconfig.json (93%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/.eslintrc.json (100%) rename docs/src/content/docs/challenges/signal/56-forms-and-signal.md => lessons/signal/tasks/forms-and-signal/README.md (89%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/public/favicon.ico (100%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/src/app/app.component.ts (100%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/src/app/app.config.ts (100%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/src/app/app.routes.ts (100%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/src/app/checkout.component.ts (100%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/src/app/dashboard.component.ts (100%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/src/app/order.component.ts (100%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/src/app/payment.component.ts (100%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/src/app/products.ts (100%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/src/index.html (100%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/src/main.ts (100%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/src/styles.scss (100%) create mode 100644 lessons/signal/tasks/forms-and-signal/tailwind.config.js create mode 100644 lessons/signal/tasks/forms-and-signal/tsconfig.app.json rename {apps/signal/function-call-effect => lessons/signal/tasks/forms-and-signal}/tsconfig.editor.json (100%) rename {apps/signal => lessons/signal/tasks}/forms-and-signal/tsconfig.json (93%) rename {apps/signal => lessons/signal/tasks}/function-call-effect/.eslintrc.json (100%) rename docs/src/content/docs/challenges/signal/51-function-call-effect.md => lessons/signal/tasks/function-call-effect/README.md (86%) rename {apps/signal => lessons/signal/tasks}/function-call-effect/src/app/action.component.ts (100%) rename {apps/signal => lessons/signal/tasks}/function-call-effect/src/app/app.component.ts (100%) rename {apps/signal => lessons/signal/tasks}/function-call-effect/src/app/app.config.ts (100%) rename {apps/signal => lessons/signal/tasks}/function-call-effect/src/app/user.service.ts (100%) rename {apps/signal/bug-in-effect => lessons/signal/tasks/function-call-effect}/src/assets/.gitkeep (100%) rename {apps/signal => lessons/signal/tasks}/function-call-effect/src/favicon.ico (100%) rename {apps/signal => lessons/signal/tasks}/function-call-effect/src/index.html (100%) rename {apps/signal => lessons/signal/tasks}/function-call-effect/src/main.ts (100%) rename {apps/signal => lessons/signal/tasks}/function-call-effect/src/styles.scss (100%) create mode 100644 lessons/signal/tasks/function-call-effect/tailwind.config.js create mode 100644 lessons/signal/tasks/function-call-effect/tsconfig.app.json rename {apps/signal/pipe-observable-to-signal => lessons/signal/tasks/function-call-effect}/tsconfig.editor.json (100%) create mode 100644 lessons/signal/tasks/function-call-effect/tsconfig.json rename {apps/signal => lessons/signal/tasks}/pipe-observable-to-signal/.eslintrc.json (100%) rename docs/src/content/docs/challenges/signal/54-pipe-observable-to-signal.md => lessons/signal/tasks/pipe-observable-to-signal/README.md (81%) rename {apps/signal => lessons/signal/tasks}/pipe-observable-to-signal/src/app/app.component.ts (100%) rename {apps/signal => lessons/signal/tasks}/pipe-observable-to-signal/src/app/currency.pipe.ts (100%) rename {apps/signal => lessons/signal/tasks}/pipe-observable-to-signal/src/app/currency.service.ts (100%) rename {apps/signal => lessons/signal/tasks}/pipe-observable-to-signal/src/app/product-row.component.ts (100%) rename {apps/signal => lessons/signal/tasks}/pipe-observable-to-signal/src/app/product.model.ts (100%) rename {apps/signal/function-call-effect => lessons/signal/tasks/pipe-observable-to-signal}/src/assets/.gitkeep (100%) rename {apps/signal => lessons/signal/tasks}/pipe-observable-to-signal/src/favicon.ico (100%) rename {apps/signal => lessons/signal/tasks}/pipe-observable-to-signal/src/index.html (100%) rename {apps/signal => lessons/signal/tasks}/pipe-observable-to-signal/src/main.ts (100%) rename {apps/signal => lessons/signal/tasks}/pipe-observable-to-signal/src/styles.scss (100%) create mode 100644 lessons/signal/tasks/pipe-observable-to-signal/tailwind.config.js create mode 100644 lessons/signal/tasks/pipe-observable-to-signal/tsconfig.app.json rename {apps/best-practices/lazy-load-component => lessons/signal/tasks/pipe-observable-to-signal}/tsconfig.editor.json (53%) create mode 100644 lessons/signal/tasks/pipe-observable-to-signal/tsconfig.json rename {apps/signal => lessons/signal/tasks}/signal-input/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/signal/43-signal-input.md => lessons/signal/tasks/signal-input/README.md (93%) rename {apps/signal => lessons/signal/tasks}/signal-input/src/app/app.component.ts (100%) rename {apps/signal => lessons/signal/tasks}/signal-input/src/app/app.config.ts (100%) rename {apps/signal => lessons/signal/tasks}/signal-input/src/app/user.component.ts (100%) rename {apps/signal/pipe-observable-to-signal => lessons/signal/tasks/signal-input}/src/assets/.gitkeep (100%) rename {apps/signal => lessons/signal/tasks}/signal-input/src/favicon.ico (100%) rename {apps/signal => lessons/signal/tasks}/signal-input/src/index.html (100%) rename {apps/signal => lessons/signal/tasks}/signal-input/src/main.ts (100%) rename {apps/signal => lessons/signal/tasks}/signal-input/src/styles.scss (100%) create mode 100644 lessons/signal/tasks/signal-input/tailwind.config.js create mode 100644 lessons/signal/tasks/signal-input/tsconfig.app.json rename {apps/signal => lessons/signal/tasks}/signal-input/tsconfig.editor.json (100%) create mode 100644 lessons/signal/tasks/signal-input/tsconfig.json create mode 100644 lessons/standalone/lecture/advanced.md create mode 100644 lessons/standalone/lecture/basics.md rename {apps/standalone => lessons/standalone/tasks}/module-to-standalone/.eslintrc.json (100%) rename docs/src/content/docs/ru/challenges/angular/31-module-to-standalone.md => lessons/standalone/tasks/module-to-standalone/README.md (94%) rename {apps/standalone => lessons/standalone/tasks}/module-to-standalone/src/app/app.component.ts (100%) rename {apps/standalone => lessons/standalone/tasks}/module-to-standalone/src/app/app.module.ts (100%) rename {apps/signal/signal-input => lessons/standalone/tasks/module-to-standalone}/src/assets/.gitkeep (100%) rename {apps/standalone => lessons/standalone/tasks}/module-to-standalone/src/favicon.ico (100%) rename {apps/standalone => lessons/standalone/tasks}/module-to-standalone/src/index.html (100%) rename {apps/standalone => lessons/standalone/tasks}/module-to-standalone/src/main.ts (100%) rename {apps/standalone => lessons/standalone/tasks}/module-to-standalone/src/styles.scss (100%) rename {apps/standalone => lessons/standalone/tasks}/module-to-standalone/tailwind.config.js (76%) create mode 100644 lessons/standalone/tasks/module-to-standalone/tsconfig.app.json rename {apps/standalone => lessons/standalone/tasks}/module-to-standalone/tsconfig.editor.json (71%) create mode 100644 lessons/standalone/tasks/module-to-standalone/tsconfig.json delete mode 100644 nx.json rename {apps/standalone/module-to-standalone/src/assets => scripts}/.gitkeep (100%) diff --git a/.husky/commit-msg b/.husky/commit-msg index c160a7712..5abb21028 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1,4 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" +# #!/usr/bin/env sh +# . "$(dirname -- "$0")/_/husky.sh" -npx --no -- commitlint --edit ${1} +# npx --no -- commitlint --edit ${1} diff --git a/.husky/pre-commit b/.husky/pre-commit index d24fdfc60..b11c250a0 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" +# #!/usr/bin/env sh +# . "$(dirname -- "$0")/_/husky.sh" -npx lint-staged +# npx lint-staged diff --git a/angular.json b/angular.json new file mode 100644 index 000000000..e22e5c6e6 --- /dev/null +++ b/angular.json @@ -0,0 +1,2800 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "cli": { + "packageManager": "npm" + }, + "projects": { + "angular-simple-animations": { + "projectType": "application", + "root": "lessons/animations/tasks/simple-animations", + "sourceRoot": "lessons/animations/tasks/simple-animations/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "lessons/animations/tasks/simple-animations", + "index": "lessons/animations/tasks/simple-animations/src/index.html", + "browser": "lessons/animations/tasks/simple-animations/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/animations/tasks/simple-animations/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/animations/tasks/simple-animations/src/favicon.ico", + "lessons/animations/tasks/simple-animations/src/assets" + ], + "styles": [ + "lessons/animations/tasks/simple-animations/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-simple-animations:build:production" + }, + "development": { + "buildTarget": "angular-simple-animations:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-simple-animations:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "angular-view-transition": { + "projectType": "application", + "root": "lessons/animations/tasks/view-transition", + "sourceRoot": "lessons/animations/tasks/view-transition/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/lessons/animations/tasks/view-transition", + "index": "lessons/animations/tasks/view-transition/src/index.html", + "browser": "lessons/animations/tasks/view-transition/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/animations/tasks/view-transition/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/animations/tasks/view-transition/src/favicon.ico", + "lessons/animations/tasks/view-transition/src/assets" + ], + "styles": [ + "lessons/animations/tasks/view-transition/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-view-transition:build:production" + }, + "development": { + "buildTarget": "angular-view-transition:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-view-transition:build" + } + } + } + }, + "performance-default-vs-onpush": { + "projectType": "application", + "root": "lessons/best-practices/tasks/default-vs-onpush", + "sourceRoot": "lessons/best-practices/tasks/default-vs-onpush/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/best-practices/tasks/default-vs-onpush", + "index": "lessons/best-practices/tasks/default-vs-onpush/src/index.html", + "main": "lessons/best-practices/tasks/default-vs-onpush/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/best-practices/tasks/default-vs-onpush/tsconfig.app.json", + "assets": [ + "lessons/best-practices/tasks/default-vs-onpush/src/favicon.ico", + "lessons/best-practices/tasks/default-vs-onpush/src/assets" + ], + "styles": [ + "lessons/best-practices/tasks/default-vs-onpush/src/styles.scss", + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css" + ], + "scripts": [], + "allowedCommonJsDependencies": ["seedrandom"] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "performance-default-vs-onpush:build:production" + }, + "development": { + "buildTarget": "performance-default-vs-onpush:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "performance-default-vs-onpush:build" + } + } + } + }, + "angular-lazy-load-component": { + "projectType": "application", + "root": "lessons/best-practices/tasks/lazy-load-component", + "sourceRoot": "lessons/best-practices/tasks/lazy-load-component/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/lessons/best-practices/tasks/lazy-load-component", + "index": "lessons/best-practices/tasks/lazy-load-component/src/index.html", + "browser": "lessons/best-practices/tasks/lazy-load-component/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/best-practices/tasks/lazy-load-component/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/best-practices/tasks/lazy-load-component/src/favicon.ico", + "lessons/best-practices/tasks/lazy-load-component/src/assets" + ], + "styles": [ + "lessons/best-practices/tasks/lazy-load-component/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-lazy-load-component:build:production" + }, + "development": { + "buildTarget": "angular-lazy-load-component:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-lazy-load-component:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "performance-memoization": { + "projectType": "application", + "root": "lessons/best-practices/tasks/memoization", + "sourceRoot": "lessons/best-practices/tasks/memoization/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/best-practices/tasks/memoization", + "index": "lessons/best-practices/tasks/memoization/src/index.html", + "main": "lessons/best-practices/tasks/memoization/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/best-practices/tasks/memoization/tsconfig.app.json", + "assets": [ + "lessons/best-practices/tasks/memoization/src/favicon.ico", + "lessons/best-practices/tasks/memoization/src/assets" + ], + "styles": [ + "lessons/best-practices/tasks/memoization/src/styles.scss", + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css" + ], + "scripts": [], + "allowedCommonJsDependencies": ["seedrandom"] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "performance-memoization:build:production" + }, + "development": { + "buildTarget": "performance-memoization:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "performance-memoization:build" + } + } + } + }, + "performance-ngfor-optimization": { + "projectType": "application", + "root": "lessons/best-practices/tasks/ngfor-optimization", + "sourceRoot": "lessons/best-practices/tasks/ngfor-optimization/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/best-practices/tasks/ngfor-optimization", + "index": "lessons/best-practices/tasks/ngfor-optimization/src/index.html", + "main": "lessons/best-practices/tasks/ngfor-optimization/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/best-practices/tasks/ngfor-optimization/tsconfig.app.json", + "assets": [ + "lessons/best-practices/tasks/ngfor-optimization/src/favicon.ico", + "lessons/best-practices/tasks/ngfor-optimization/src/assets" + ], + "styles": [ + "lessons/best-practices/tasks/ngfor-optimization/src/styles.scss", + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css" + ], + "scripts": [], + "allowedCommonJsDependencies": ["seedrandom"] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "performance-ngfor-optimization:build:production" + }, + "development": { + "buildTarget": "performance-ngfor-optimization:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "performance-ngfor-optimization:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "performance-optimize-change-detection": { + "projectType": "application", + "root": "lessons/best-practices/tasks/optimize-change-detection", + "sourceRoot": "lessons/best-practices/tasks/optimize-change-detection/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/best-practices/tasks/optimize-change-detection", + "index": "lessons/best-practices/tasks/optimize-change-detection/src/index.html", + "main": "lessons/best-practices/tasks/optimize-change-detection/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/best-practices/tasks/optimize-change-detection/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/best-practices/tasks/optimize-change-detection/src/favicon.ico", + "lessons/best-practices/tasks/optimize-change-detection/src/assets" + ], + "styles": [ + "lessons/best-practices/tasks/optimize-change-detection/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "performance-optimize-change-detection:build:production" + }, + "development": { + "buildTarget": "performance-optimize-change-detection:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "performance-optimize-change-detection:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "angular-content-projection-default": { + "projectType": "application", + "root": "lessons/components-and-templates/tasks/content-projection-default", + "sourceRoot": "lessons/components-and-templates/tasks/content-projection-default/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/lessons/components-and-templates/tasks/content-projection-default", + "index": "lessons/components-and-templates/tasks/content-projection-default/src/index.html", + "browser": "lessons/components-and-templates/tasks/content-projection-default/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/components-and-templates/tasks/content-projection-default/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "lessons/components-and-templates/tasks/content-projection-default/public" + } + ], + "styles": [ + "lessons/components-and-templates/tasks/content-projection-default/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "4kb", + "maximumError": "8kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-content-projection-default:build:production" + }, + "development": { + "buildTarget": "angular-content-projection-default:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-content-projection-default:build" + } + } + } + }, + "angular-crud-application": { + "projectType": "application", + "root": "lessons/components-and-templates/tasks/crud-application", + "sourceRoot": "lessons/components-and-templates/tasks/crud-application/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/components-and-templates/tasks/crud-application", + "index": "lessons/components-and-templates/tasks/crud-application/src/index.html", + "main": "lessons/components-and-templates/tasks/crud-application/src/main.ts", + "polyfills": "lessons/components-and-templates/tasks/crud-application/src/polyfills.ts", + "tsConfig": "lessons/components-and-templates/tasks/crud-application/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/components-and-templates/tasks/crud-application/src/favicon.ico", + "lessons/components-and-templates/tasks/crud-application/src/assets" + ], + "styles": [ + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", + "lessons/components-and-templates/tasks/crud-application/src/styles.scss" + ], + "scripts": [], + "allowedCommonJsDependencies": ["seedrandom"] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-crud-application:build:production" + }, + "development": { + "buildTarget": "angular-crud-application:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-crud-application:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "angular-projection": { + "projectType": "application", + "root": "lessons/components-and-templates/tasks/projection", + "sourceRoot": "lessons/components-and-templates/tasks/projection/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/components-and-templates/tasks/projection", + "index": "lessons/components-and-templates/tasks/projection/src/index.html", + "main": "lessons/components-and-templates/tasks/projection/src/main.ts", + "polyfills": [ + "lessons/components-and-templates/tasks/projection/src/polyfills.ts" + ], + "tsConfig": "lessons/components-and-templates/tasks/projection/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/components-and-templates/tasks/projection/src/favicon.ico", + "lessons/components-and-templates/tasks/projection/src/assets" + ], + "styles": [ + "lessons/components-and-templates/tasks/projection/src/styles.scss" + ], + "scripts": [], + "allowedCommonJsDependencies": ["seedrandom"] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-projection:build:production" + }, + "development": { + "buildTarget": "angular-projection:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-projection:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "angular-injection-token": { + "projectType": "application", + "root": "lessons/dependency-injection/tasks/injection-token", + "sourceRoot": "lessons/dependency-injection/tasks/injection-token/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/dependency-injection/tasks/injection-token", + "index": "lessons/dependency-injection/tasks/injection-token/src/index.html", + "main": "lessons/dependency-injection/tasks/injection-token/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/dependency-injection/tasks/injection-token/tsconfig.app.json", + "assets": [ + "lessons/dependency-injection/tasks/injection-token/src/favicon.ico", + "lessons/dependency-injection/tasks/injection-token/src/assets" + ], + "styles": [ + "lessons/dependency-injection/tasks/injection-token/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-injection-token:build:production" + }, + "development": { + "buildTarget": "angular-injection-token:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-injection-token:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "angular-master-dependency-injection": { + "projectType": "application", + "root": "lessons/dependency-injection/tasks/master-dependency-injection", + "sourceRoot": "lessons/dependency-injection/tasks/master-dependency-injection/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/dependency-injection/tasks/master-dependency-injection", + "index": "lessons/dependency-injection/tasks/master-dependency-injection/src/index.html", + "main": "lessons/dependency-injection/tasks/master-dependency-injection/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/dependency-injection/tasks/master-dependency-injection/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/dependency-injection/tasks/master-dependency-injection/src/favicon.ico", + "lessons/dependency-injection/tasks/master-dependency-injection/src/assets" + ], + "styles": [ + "lessons/dependency-injection/tasks/master-dependency-injection/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-master-dependency-injection:build:production" + }, + "development": { + "buildTarget": "angular-master-dependency-injection:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-master-dependency-injection:build" + } + } + } + }, + "angular-pure-pipe": { + "projectType": "application", + "root": "lessons/directives-and-pipes/tasks/pure-pipe", + "sourceRoot": "lessons/directives-and-pipes/tasks/pure-pipe/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/directives-and-pipes/tasks/pure-pipe", + "index": "lessons/directives-and-pipes/tasks/pure-pipe/src/index.html", + "main": "lessons/directives-and-pipes/tasks/pure-pipe/src/main.ts", + "polyfills": "lessons/directives-and-pipes/tasks/pure-pipe/src/polyfills.ts", + "tsConfig": "lessons/directives-and-pipes/tasks/pure-pipe/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/directives-and-pipes/tasks/pure-pipe/src/favicon.ico", + "lessons/directives-and-pipes/tasks/pure-pipe/src/assets" + ], + "styles": [ + "lessons/directives-and-pipes/tasks/pure-pipe/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-pure-pipe:build:production" + }, + "development": { + "buildTarget": "angular-pure-pipe:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-pure-pipe:build" + } + } + } + }, + "angular-structural-directive": { + "projectType": "application", + "root": "lessons/directives-and-pipes/tasks/structural-directive", + "sourceRoot": "lessons/directives-and-pipes/tasks/structural-directive/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/directives-and-pipes/tasks/structural-directive", + "index": "lessons/directives-and-pipes/tasks/structural-directive/src/index.html", + "main": "lessons/directives-and-pipes/tasks/structural-directive/src/main.ts", + "polyfills": "lessons/directives-and-pipes/tasks/structural-directive/src/polyfills.ts", + "tsConfig": "lessons/directives-and-pipes/tasks/structural-directive/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/directives-and-pipes/tasks/structural-directive/src/favicon.ico", + "lessons/directives-and-pipes/tasks/structural-directive/src/assets" + ], + "styles": [ + "lessons/directives-and-pipes/tasks/structural-directive/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-structural-directive:build:production" + }, + "development": { + "buildTarget": "angular-structural-directive:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-structural-directive:build" + } + } + } + }, + "angular-utility-wrapper-pipe": { + "projectType": "application", + "root": "lessons/directives-and-pipes/tasks/utility-wrapper-pipe", + "sourceRoot": "lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/directives-and-pipes/tasks/utility-wrapper-pipe", + "index": "lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/index.html", + "main": "lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/main.ts", + "polyfills": "lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/polyfills.ts", + "tsConfig": "lessons/directives-and-pipes/tasks/utility-wrapper-pipe/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/favicon.ico", + "lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/assets" + ], + "styles": [ + "lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-utility-wrapper-pipe:build:production" + }, + "development": { + "buildTarget": "angular-utility-wrapper-pipe:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-utility-wrapper-pipe:build" + } + } + } + }, + "angular-wrap-function-pipe": { + "projectType": "application", + "root": "lessons/directives-and-pipes/tasks/wrap-function-pipe", + "sourceRoot": "lessons/directives-and-pipes/tasks/wrap-function-pipe/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/directives-and-pipes/tasks/wrap-function-pipe", + "index": "lessons/directives-and-pipes/tasks/wrap-function-pipe/src/index.html", + "main": "lessons/directives-and-pipes/tasks/wrap-function-pipe/src/main.ts", + "polyfills": "lessons/directives-and-pipes/tasks/wrap-function-pipe/src/polyfills.ts", + "tsConfig": "lessons/directives-and-pipes/tasks/wrap-function-pipe/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/directives-and-pipes/tasks/wrap-function-pipe/src/favicon.ico", + "lessons/directives-and-pipes/tasks/wrap-function-pipe/src/assets" + ], + "styles": [ + "lessons/directives-and-pipes/tasks/wrap-function-pipe/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-wrap-function-pipe:build:production" + }, + "development": { + "buildTarget": "angular-wrap-function-pipe:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-wrap-function-pipe:build" + } + } + } + }, + "forms-avoid-losing-form-data": { + "projectType": "application", + "root": "lessons/forms/tasks/avoid-losing-form-data", + "sourceRoot": "lessons/forms/tasks/avoid-losing-form-data/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/lessons/forms/tasks/avoid-losing-form-data", + "index": "lessons/forms/tasks/avoid-losing-form-data/src/index.html", + "browser": "lessons/forms/tasks/avoid-losing-form-data/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/forms/tasks/avoid-losing-form-data/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/forms/tasks/avoid-losing-form-data/src/favicon.ico", + "lessons/forms/tasks/avoid-losing-form-data/src/assets" + ], + "styles": [ + "lessons/forms/tasks/avoid-losing-form-data/src/styles.scss", + "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "forms-avoid-losing-form-data:build:production" + }, + "development": { + "buildTarget": "forms-avoid-losing-form-data:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "forms-avoid-losing-form-data:build" + } + } + } + }, + "forms-control-value-accessor": { + "projectType": "application", + "root": "lessons/forms/tasks/control-value-accessor", + "sourceRoot": "lessons/forms/tasks/control-value-accessor/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/lessons/forms/tasks/control-value-accessor", + "index": "lessons/forms/tasks/control-value-accessor/src/index.html", + "browser": "lessons/forms/tasks/control-value-accessor/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/forms/tasks/control-value-accessor/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/forms/tasks/control-value-accessor/src/favicon.ico", + "lessons/forms/tasks/control-value-accessor/src/assets" + ], + "styles": [ + "lessons/forms/tasks/control-value-accessor/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "forms-control-value-accessor:build:production" + }, + "development": { + "buildTarget": "forms-control-value-accessor:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "forms-control-value-accessor:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "angular-anchor-navigation": { + "projectType": "application", + "root": "lessons/routing/tasks/anchor-navigation", + "sourceRoot": "lessons/routing/tasks/anchor-navigation/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/routing/tasks/anchor-navigation", + "index": "lessons/routing/tasks/anchor-navigation/src/index.html", + "main": "lessons/routing/tasks/anchor-navigation/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/routing/tasks/anchor-navigation/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/routing/tasks/anchor-navigation/src/favicon.ico", + "lessons/routing/tasks/anchor-navigation/src/assets" + ], + "styles": [ + "lessons/routing/tasks/anchor-navigation/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-anchor-navigation:build:production" + }, + "development": { + "buildTarget": "angular-anchor-navigation:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-anchor-navigation:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "angular-async-redirect": { + "projectType": "application", + "root": "lessons/routing/tasks/async-redirect", + "sourceRoot": "lessons/routing/tasks/async-redirect/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/lessons/routing/tasks/async-redirect", + "browser": "lessons/routing/tasks/async-redirect/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/routing/tasks/async-redirect/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "lessons/routing/tasks/async-redirect/public" + } + ], + "styles": ["lessons/routing/tasks/async-redirect/src/styles.scss"] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "4kb", + "maximumError": "8kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular/build:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-async-redirect:build:production" + }, + "development": { + "buildTarget": "angular-async-redirect:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular/build:extract-i18n", + "options": { + "buildTarget": "angular-async-redirect:build" + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint" + } + } + }, + "angular-router-input": { + "projectType": "application", + "root": "lessons/routing/tasks/router-input", + "sourceRoot": "lessons/routing/tasks/router-input/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/routing/tasks/router-input", + "index": "lessons/routing/tasks/router-input/src/index.html", + "main": "lessons/routing/tasks/router-input/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/routing/tasks/router-input/tsconfig.app.json", + "assets": [ + "lessons/routing/tasks/router-input/src/favicon.ico", + "lessons/routing/tasks/router-input/src/assets" + ], + "styles": ["lessons/routing/tasks/router-input/src/styles.scss"], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-router-input:build:production" + }, + "development": { + "buildTarget": "angular-router-input:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-router-input:build" + } + } + } + }, + "rxjs-catch-error": { + "projectType": "application", + "root": "lessons/rxjs/tasks/catch-error", + "sourceRoot": "lessons/rxjs/tasks/catch-error/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/rxjs/tasks/catch-error", + "index": "lessons/rxjs/tasks/catch-error/src/index.html", + "main": "lessons/rxjs/tasks/catch-error/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/rxjs/tasks/catch-error/tsconfig.app.json", + "assets": [ + "lessons/rxjs/tasks/catch-error/src/favicon.ico", + "lessons/rxjs/tasks/catch-error/src/assets" + ], + "styles": ["lessons/rxjs/tasks/catch-error/src/styles.scss"], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "rxjs-catch-error:build:production" + }, + "development": { + "buildTarget": "rxjs-catch-error:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "rxjs-catch-error:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "rxjs-high-order-operator-bug": { + "projectType": "application", + "root": "lessons/rxjs/tasks/high-order-operator-bug", + "sourceRoot": "lessons/rxjs/tasks/high-order-operator-bug/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/rxjs/tasks/high-order-operator-bug", + "index": "lessons/rxjs/tasks/high-order-operator-bug/src/index.html", + "main": "lessons/rxjs/tasks/high-order-operator-bug/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/rxjs/tasks/high-order-operator-bug/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/rxjs/tasks/high-order-operator-bug/src/favicon.ico", + "lessons/rxjs/tasks/high-order-operator-bug/src/assets" + ], + "styles": [ + "lessons/rxjs/tasks/high-order-operator-bug/src/styles.scss" + ], + "scripts": [], + "allowedCommonJsDependencies": ["seedrandom"] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "rxjs-high-order-operator-bug:build:production" + }, + "development": { + "buildTarget": "rxjs-high-order-operator-bug:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "rxjs-high-order-operator-bug:build" + } + } + } + }, + "rxjs-hold-to-save-button": { + "projectType": "application", + "root": "lessons/rxjs/tasks/hold-to-save-button", + "sourceRoot": "lessons/rxjs/tasks/hold-to-save-button/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/lessons/rxjs/tasks/hold-to-save-button", + "index": "lessons/rxjs/tasks/hold-to-save-button/src/index.html", + "browser": "lessons/rxjs/tasks/hold-to-save-button/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/rxjs/tasks/hold-to-save-button/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/rxjs/tasks/hold-to-save-button/src/favicon.ico", + "lessons/rxjs/tasks/hold-to-save-button/src/assets" + ], + "styles": [ + "lessons/rxjs/tasks/hold-to-save-button/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "rxjs-hold-to-save-button:build:production" + }, + "development": { + "buildTarget": "rxjs-hold-to-save-button:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "rxjs-hold-to-save-button:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "rxjs-race-condition": { + "projectType": "application", + "root": "lessons/rxjs/tasks/race-condition", + "sourceRoot": "lessons/rxjs/tasks/race-condition/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/rxjs/tasks/race-condition", + "index": "lessons/rxjs/tasks/race-condition/src/index.html", + "main": "lessons/rxjs/tasks/race-condition/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/rxjs/tasks/race-condition/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/rxjs/tasks/race-condition/src/favicon.ico", + "lessons/rxjs/tasks/race-condition/src/assets" + ], + "styles": ["lessons/rxjs/tasks/race-condition/src/styles.scss"], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "rxjs-race-condition:build:production" + }, + "development": { + "buildTarget": "rxjs-race-condition:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "rxjs-race-condition:build" + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "signal-bug-in-effect": { + "projectType": "application", + "root": "lessons/signal/tasks/bug-in-effect", + "sourceRoot": "lessons/signal/tasks/bug-in-effect/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/lessons/signal/tasks/bug-in-effect", + "index": "lessons/signal/tasks/bug-in-effect/src/index.html", + "browser": "lessons/signal/tasks/bug-in-effect/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/signal/tasks/bug-in-effect/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/signal/tasks/bug-in-effect/src/favicon.ico", + "lessons/signal/tasks/bug-in-effect/src/assets" + ], + "styles": ["lessons/signal/tasks/bug-in-effect/src/styles.scss"], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "signal-bug-in-effect:build:production" + }, + "development": { + "buildTarget": "signal-bug-in-effect:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "signal-bug-in-effect:build" + } + } + } + }, + "signal-forms-and-signal": { + "projectType": "application", + "root": "lessons/signal/tasks/forms-and-signal", + "sourceRoot": "lessons/signal/tasks/forms-and-signal/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/lessons/signal/tasks/forms-and-signal", + "index": "lessons/signal/tasks/forms-and-signal/src/index.html", + "browser": "lessons/signal/tasks/forms-and-signal/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/signal/tasks/forms-and-signal/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "lessons/signal/tasks/forms-and-signal/public" + } + ], + "styles": ["lessons/signal/tasks/forms-and-signal/src/styles.scss"], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "signal-forms-and-signal:build:production" + }, + "development": { + "buildTarget": "signal-forms-and-signal:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "signal-forms-and-signal:build" + } + } + } + }, + "signal-function-call-effect": { + "projectType": "application", + "root": "lessons/signal/tasks/function-call-effect", + "sourceRoot": "lessons/signal/tasks/function-call-effect/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/lessons/signal/tasks/function-call-effect", + "index": "lessons/signal/tasks/function-call-effect/src/index.html", + "browser": "lessons/signal/tasks/function-call-effect/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/signal/tasks/function-call-effect/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/signal/tasks/function-call-effect/src/favicon.ico", + "lessons/signal/tasks/function-call-effect/src/assets" + ], + "styles": [ + "lessons/signal/tasks/function-call-effect/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "signal-function-call-effect:build:production" + }, + "development": { + "buildTarget": "signal-function-call-effect:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "signal-function-call-effect:build" + } + } + } + }, + "signal-pipe-observable-to-signal": { + "projectType": "application", + "root": "lessons/signal/tasks/pipe-observable-to-signal", + "sourceRoot": "lessons/signal/tasks/pipe-observable-to-signal/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/lessons/signal/tasks/pipe-observable-to-signal", + "index": "lessons/signal/tasks/pipe-observable-to-signal/src/index.html", + "browser": "lessons/signal/tasks/pipe-observable-to-signal/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/signal/tasks/pipe-observable-to-signal/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/signal/tasks/pipe-observable-to-signal/src/favicon.ico", + "lessons/signal/tasks/pipe-observable-to-signal/src/assets" + ], + "styles": [ + "lessons/signal/tasks/pipe-observable-to-signal/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "signal-pipe-observable-to-signal:build:production" + }, + "development": { + "buildTarget": "signal-pipe-observable-to-signal:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "signal-pipe-observable-to-signal:build" + } + } + } + }, + "signal-signal-input": { + "projectType": "application", + "root": "lessons/signal/tasks/signal-input", + "sourceRoot": "lessons/signal/tasks/signal-input/src", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/lessons/signal/tasks/signal-input", + "index": "lessons/signal/tasks/signal-input/src/index.html", + "browser": "lessons/signal/tasks/signal-input/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/signal/tasks/signal-input/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "lessons/signal/tasks/signal-input/src/favicon.ico", + "lessons/signal/tasks/signal-input/src/assets" + ], + "styles": ["lessons/signal/tasks/signal-input/src/styles.scss"], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "signal-signal-input:build:production" + }, + "development": { + "buildTarget": "signal-signal-input:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "signal-signal-input:build" + } + } + } + }, + "angular-module-to-standalone": { + "projectType": "application", + "root": "lessons/standalone/tasks/module-to-standalone", + "sourceRoot": "lessons/standalone/tasks/module-to-standalone/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/lessons/standalone/tasks/module-to-standalone", + "index": "lessons/standalone/tasks/module-to-standalone/src/index.html", + "main": "lessons/standalone/tasks/module-to-standalone/src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "lessons/standalone/tasks/module-to-standalone/tsconfig.app.json", + "assets": [ + "lessons/standalone/tasks/module-to-standalone/src/favicon.ico", + "lessons/standalone/tasks/module-to-standalone/src/assets" + ], + "styles": [ + "lessons/standalone/tasks/module-to-standalone/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-module-to-standalone:build:production" + }, + "development": { + "buildTarget": "angular-module-to-standalone:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-module-to-standalone:build" + } + } + } + }, + "cli": { + "projectType": "library", + "root": "libs/cli", + "sourceRoot": "libs/cli/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "outputPath": "dist/libs/cli", + "main": "libs/cli/src/index.ts", + "tsConfig": "libs/cli/tsconfig.lib.json", + "assets": [ + "libs/cli/*.md", + { + "input": "./libs/cli/src", + "glob": "**/!(*.ts)", + "output": "./src" + }, + { + "input": "./libs/cli/src", + "glob": "**/*.d.ts", + "output": "./src" + }, + { + "input": "./libs/cli", + "glob": "generators.json", + "output": "." + }, + { + "input": "./libs/cli", + "glob": "executors.json", + "output": "." + } + ] + } + } + } + }, + "custom-plugin": { + "projectType": "library", + "root": "libs/custom-plugin", + "sourceRoot": "libs/custom-plugin/src", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "outputPath": "dist/libs/custom-plugin", + "main": "libs/custom-plugin/src/index.ts", + "tsConfig": "libs/custom-plugin/tsconfig.lib.json", + "assets": [ + "libs/custom-plugin/*.md", + { + "input": "./libs/custom-plugin/src", + "glob": "**/!(*.ts)", + "output": "./src" + }, + { + "input": "./libs/custom-plugin/src", + "glob": "**/*.d.ts", + "output": "./src" + }, + { + "input": "./libs/custom-plugin", + "glob": "generators.json", + "output": "." + }, + { + "input": "./libs/custom-plugin", + "glob": "executors.json", + "output": "." + } + ] + } + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "decoupling-brain": { + "projectType": "library", + "root": "libs/decoupling/brain", + "sourceRoot": "libs/decoupling/brain/src", + "architect": { + "build": { + "builder": "ng-packagr:build", + "options": { + "project": "libs/decoupling/brain/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/decoupling/brain/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/decoupling/brain/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "decoupling-core": { + "projectType": "library", + "root": "libs/decoupling/core", + "sourceRoot": "libs/decoupling/core/src", + "architect": { + "build": { + "builder": "ng-packagr:build", + "options": { + "project": "libs/decoupling/core/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/decoupling/core/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/decoupling/core/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "decoupling-helmet": { + "projectType": "library", + "root": "libs/decoupling/helmet", + "sourceRoot": "libs/decoupling/helmet/src", + "architect": { + "build": { + "builder": "ng-packagr:build", + "options": { + "project": "libs/decoupling/helmet/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/decoupling/helmet/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/decoupling/helmet/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "fake-utils": { + "projectType": "library", + "root": "libs/fake-utils", + "sourceRoot": "libs/fake-utils/src", + "architect": { + "build": { + "builder": "ng-packagr:build", + "options": { + "project": "libs/fake-utils/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/fake-utils/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/fake-utils/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + } + } + }, + "module-to-standalone-admin-feature": { + "projectType": "library", + "root": "libs/module-to-standalone/admin/feature", + "sourceRoot": "libs/module-to-standalone/admin/feature/src", + "architect": { + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "module-to-standalone-admin-shared": { + "projectType": "library", + "root": "libs/module-to-standalone/admin/shared", + "sourceRoot": "libs/module-to-standalone/admin/shared/src", + "architect": { + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "module-to-standalone-core-providers": { + "projectType": "library", + "root": "libs/module-to-standalone/core/providers", + "sourceRoot": "libs/module-to-standalone/core/providers/src", + "architect": { + "build": { + "builder": "ng-packagr:build", + "options": { + "project": "libs/module-to-standalone/core/providers/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/module-to-standalone/core/providers/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/module-to-standalone/core/providers/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "module-to-standalone-core-service": { + "projectType": "library", + "root": "libs/module-to-standalone/core/service", + "sourceRoot": "libs/module-to-standalone/core/service/src", + "architect": { + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "module-to-standalone-forbidden": { + "projectType": "library", + "root": "libs/module-to-standalone/forbidden", + "sourceRoot": "libs/module-to-standalone/forbidden/src", + "architect": { + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "module-to-standalone-home": { + "projectType": "library", + "root": "libs/module-to-standalone/home", + "sourceRoot": "libs/module-to-standalone/home/src", + "architect": { + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "module-to-standalone-shell": { + "projectType": "library", + "root": "libs/module-to-standalone/shell", + "sourceRoot": "libs/module-to-standalone/shell/src", + "architect": { + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "module-to-standalone-user-contact": { + "projectType": "library", + "root": "libs/module-to-standalone/user/contact", + "sourceRoot": "libs/module-to-standalone/user/contact/src", + "architect": { + "build": { + "builder": "ng-packagr:build", + "options": { + "project": "libs/module-to-standalone/user/contact/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/module-to-standalone/user/contact/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/module-to-standalone/user/contact/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "module-to-standalone-user-home": { + "projectType": "library", + "root": "libs/module-to-standalone/user/home", + "sourceRoot": "libs/module-to-standalone/user/home/src", + "architect": { + "build": { + "builder": "ng-packagr:build", + "options": { + "project": "libs/module-to-standalone/user/home/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/module-to-standalone/user/home/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/module-to-standalone/user/home/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "module-to-standalone-user-shell": { + "projectType": "library", + "root": "libs/module-to-standalone/user/shell", + "sourceRoot": "libs/module-to-standalone/user/shell/src", + "architect": { + "build": { + "builder": "ng-packagr:build", + "options": { + "project": "libs/module-to-standalone/user/shell/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/module-to-standalone/user/shell/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/module-to-standalone/user/shell/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "shared-directives": { + "projectType": "library", + "root": "libs/shared/directives", + "sourceRoot": "libs/shared/directives/src", + "architect": { + "build": { + "builder": "ng-packagr:build", + "options": { + "project": "libs/shared/directives/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/shared/directives/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/shared/directives/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "ui": { + "projectType": "library", + "root": "libs/shared/ui", + "sourceRoot": "libs/shared/ui/src", + "architect": { + "lint": {} + } + }, + "shared-utils": { + "projectType": "library", + "root": "libs/shared/utils", + "sourceRoot": "libs/shared/utils/src", + "architect": { + "test": { + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "coverage": true + } + } + } + } + }, + "users": { + "projectType": "library", + "root": "libs/static-dynamic-import/users", + "sourceRoot": "libs/static-dynamic-import/users/src", + "architect": { + "lint": {} + } + }, + "testing-table-backend": { + "projectType": "library", + "root": "libs/testing-table/backend", + "sourceRoot": "libs/testing-table/backend/src", + "architect": { + "lint": {} + } + }, + "testing-table-model": { + "projectType": "library", + "root": "libs/testing-table/model", + "sourceRoot": "libs/testing-table/model/src", + "architect": {} + } + } +} diff --git a/apps/animations/simple-animations/README.md b/apps/animations/simple-animations/README.md deleted file mode 100644 index 87e6c7e7c..000000000 --- a/apps/animations/simple-animations/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Simple Animations - -> author: sven-brodny - -### Run Application - -```bash -npx nx serve angular-simple-animations -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/46-simple-animations/). diff --git a/apps/animations/simple-animations/project.json b/apps/animations/simple-animations/project.json deleted file mode 100644 index 34e44c7b3..000000000 --- a/apps/animations/simple-animations/project.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "angular-simple-animations", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/46-simple-animations/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/46-simple-animations", - "index": "apps/angular/46-simple-animations/src/index.html", - "browser": "apps/angular/46-simple-animations/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/46-simple-animations/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/46-simple-animations/src/favicon.ico", - "apps/angular/46-simple-animations/src/assets" - ], - "styles": ["apps/angular/46-simple-animations/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-simple-animations:build:production" - }, - "development": { - "buildTarget": "angular-simple-animations:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-simple-animations:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/animations/simple-animations/tsconfig.app.json b/apps/animations/simple-animations/tsconfig.app.json deleted file mode 100644 index 3bb4877ea..000000000 --- a/apps/animations/simple-animations/tsconfig.app.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": [ - "src/main.ts" - ], - "include": ["src/**/*.d.ts"], - "exclude": [ - "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/animations/view-transition/README.md b/apps/animations/view-transition/README.md deleted file mode 100644 index 02e39b394..000000000 --- a/apps/animations/view-transition/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# View Transition - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-view-transition -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/44-view-transition/). diff --git a/apps/animations/view-transition/project.json b/apps/animations/view-transition/project.json deleted file mode 100644 index 4104b5de9..000000000 --- a/apps/animations/view-transition/project.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "angular-view-transition", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/44-view-transition/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/44-view-transition", - "index": "apps/angular/44-view-transition/src/index.html", - "browser": "apps/angular/44-view-transition/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/44-view-transition/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/44-view-transition/src/favicon.ico", - "apps/angular/44-view-transition/src/assets" - ], - "styles": ["apps/angular/44-view-transition/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-view-transition:build:production" - }, - "development": { - "buildTarget": "angular-view-transition:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-view-transition:build" - } - } - } -} diff --git a/apps/best-practices/default-vs-onpush/README.md b/apps/best-practices/default-vs-onpush/README.md deleted file mode 100644 index ab82704b5..000000000 --- a/apps/best-practices/default-vs-onpush/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Default vs OnPush - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve performance-default-vs-onpush -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/performance/34-default-onpush/). diff --git a/apps/best-practices/default-vs-onpush/project.json b/apps/best-practices/default-vs-onpush/project.json deleted file mode 100644 index d772d9d2e..000000000 --- a/apps/best-practices/default-vs-onpush/project.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "performance-default-vs-onpush", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/performance/34-default-vs-onpush/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/performance/34-default-vs-onpush", - "index": "apps/performance/34-default-vs-onpush/src/index.html", - "main": "apps/performance/34-default-vs-onpush/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/performance/34-default-vs-onpush/tsconfig.app.json", - "assets": [ - "apps/performance/34-default-vs-onpush/src/favicon.ico", - "apps/performance/34-default-vs-onpush/src/assets" - ], - "styles": [ - "apps/performance/34-default-vs-onpush/src/styles.scss", - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css" - ], - "scripts": [], - "allowedCommonJsDependencies": ["seedrandom"] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "performance-default-vs-onpush:build:production" - }, - "development": { - "buildTarget": "performance-default-vs-onpush:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "performance-default-vs-onpush:build" - } - } - } -} diff --git a/apps/best-practices/lazy-load-component/README.md b/apps/best-practices/lazy-load-component/README.md deleted file mode 100644 index 7da25f89b..000000000 --- a/apps/best-practices/lazy-load-component/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# lazy-load-component - -> author: lance-finney - -### Run Application - -```bash -npx nx serve angular-lazy-load-component -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/52-lazy-load-component/). diff --git a/apps/best-practices/lazy-load-component/project.json b/apps/best-practices/lazy-load-component/project.json deleted file mode 100644 index 933dd17e5..000000000 --- a/apps/best-practices/lazy-load-component/project.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "angular-lazy-load-component", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/52-lazy-load-component/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/52-lazy-load-component", - "index": "apps/angular/52-lazy-load-component/src/index.html", - "browser": "apps/angular/52-lazy-load-component/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/52-lazy-load-component/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/52-lazy-load-component/src/favicon.ico", - "apps/angular/52-lazy-load-component/src/assets" - ], - "styles": ["apps/angular/52-lazy-load-component/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-lazy-load-component:build:production" - }, - "development": { - "buildTarget": "angular-lazy-load-component:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-lazy-load-component:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/best-practices/lazy-load-component/tsconfig.app.json b/apps/best-practices/lazy-load-component/tsconfig.app.json deleted file mode 100644 index 3bb4877ea..000000000 --- a/apps/best-practices/lazy-load-component/tsconfig.app.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": [ - "src/main.ts" - ], - "include": ["src/**/*.d.ts"], - "exclude": [ - "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/best-practices/memoization/README.md b/apps/best-practices/memoization/README.md deleted file mode 100644 index a06a0e91d..000000000 --- a/apps/best-practices/memoization/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Memoization - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve performance-memoization -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/performance/35-memoize/). diff --git a/apps/best-practices/memoization/project.json b/apps/best-practices/memoization/project.json deleted file mode 100644 index 03f97cb21..000000000 --- a/apps/best-practices/memoization/project.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "performance-memoization", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/performance/35-memoization/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/performance/35-memoization", - "index": "apps/performance/35-memoization/src/index.html", - "main": "apps/performance/35-memoization/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/performance/35-memoization/tsconfig.app.json", - "assets": [ - "apps/performance/35-memoization/src/favicon.ico", - "apps/performance/35-memoization/src/assets" - ], - "styles": [ - "apps/performance/35-memoization/src/styles.scss", - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css" - ], - "scripts": [], - "allowedCommonJsDependencies": ["seedrandom"] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "performance-memoization:build:production" - }, - "development": { - "buildTarget": "performance-memoization:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "performance-memoization:build" - } - } - } -} diff --git a/apps/best-practices/memoization/tailwind.config.js b/apps/best-practices/memoization/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/best-practices/memoization/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/best-practices/ngfor-optimization/README.md b/apps/best-practices/ngfor-optimization/README.md deleted file mode 100644 index 2ee0bb20e..000000000 --- a/apps/best-practices/ngfor-optimization/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# NgFor Optimization - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve performance-ngfor-optimization -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/performance/36-ngfor-optimize/). diff --git a/apps/best-practices/ngfor-optimization/project.json b/apps/best-practices/ngfor-optimization/project.json deleted file mode 100644 index 8a27c862e..000000000 --- a/apps/best-practices/ngfor-optimization/project.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "name": "performance-ngfor-optimization", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/performance/36-ngfor-optimization/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/performance/36-ngfor-optimization", - "index": "apps/performance/36-ngfor-optimization/src/index.html", - "main": "apps/performance/36-ngfor-optimization/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/performance/36-ngfor-optimization/tsconfig.app.json", - "assets": [ - "apps/performance/36-ngfor-optimization/src/favicon.ico", - "apps/performance/36-ngfor-optimization/src/assets" - ], - "styles": [ - "apps/performance/36-ngfor-optimization/src/styles.scss", - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css" - ], - "scripts": [], - "allowedCommonJsDependencies": ["seedrandom"] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "performance-ngfor-optimization:build:production" - }, - "development": { - "buildTarget": "performance-ngfor-optimization:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "performance-ngfor-optimization:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/best-practices/ngfor-optimization/tailwind.config.js b/apps/best-practices/ngfor-optimization/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/best-practices/ngfor-optimization/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/best-practices/ngfor-optimization/tsconfig.app.json b/apps/best-practices/ngfor-optimization/tsconfig.app.json deleted file mode 100644 index 3bb4877ea..000000000 --- a/apps/best-practices/ngfor-optimization/tsconfig.app.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": [ - "src/main.ts" - ], - "include": ["src/**/*.d.ts"], - "exclude": [ - "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/best-practices/optimize-change-detection/README.md b/apps/best-practices/optimize-change-detection/README.md deleted file mode 100644 index 52fe319d7..000000000 --- a/apps/best-practices/optimize-change-detection/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Optimize Change Detection - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve performance-optimize-change-detection -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/performance/12-performance-optimize-change-detection/). diff --git a/apps/best-practices/optimize-change-detection/project.json b/apps/best-practices/optimize-change-detection/project.json deleted file mode 100644 index 88812e3cd..000000000 --- a/apps/best-practices/optimize-change-detection/project.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "name": "performance-optimize-change-detection", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/performance/12-optimize-change-detection/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/performance/12-optimize-change-detection", - "index": "apps/performance/12-optimize-change-detection/src/index.html", - "main": "apps/performance/12-optimize-change-detection/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/performance/12-optimize-change-detection/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/performance/12-optimize-change-detection/src/favicon.ico", - "apps/performance/12-optimize-change-detection/src/assets" - ], - "styles": [ - "apps/performance/12-optimize-change-detection/src/styles.scss" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "performance-optimize-change-detection:build:production" - }, - "development": { - "buildTarget": "performance-optimize-change-detection:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "performance-optimize-change-detection:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/best-practices/optimize-change-detection/tsconfig.app.json b/apps/best-practices/optimize-change-detection/tsconfig.app.json deleted file mode 100644 index 3bb4877ea..000000000 --- a/apps/best-practices/optimize-change-detection/tsconfig.app.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": [ - "src/main.ts" - ], - "include": ["src/**/*.d.ts"], - "exclude": [ - "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/components-and-templates/content-projection-default/README.md b/apps/components-and-templates/content-projection-default/README.md deleted file mode 100644 index fc4579558..000000000 --- a/apps/components-and-templates/content-projection-default/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Content Projection Default - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-content-projection-default -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/57-content-projection-default/). diff --git a/apps/components-and-templates/content-projection-default/project.json b/apps/components-and-templates/content-projection-default/project.json deleted file mode 100644 index 0630925f4..000000000 --- a/apps/components-and-templates/content-projection-default/project.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "name": "angular-content-projection-default", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/57-content-projection-default/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/57-content-projection-default", - "index": "apps/angular/57-content-projection-default/src/index.html", - "browser": "apps/angular/57-content-projection-default/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/57-content-projection-default/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "apps/angular/57-content-projection-default/public" - } - ], - "styles": [ - "apps/angular/57-content-projection-default/src/styles.scss" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "4kb", - "maximumError": "8kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-content-projection-default:build:production" - }, - "development": { - "buildTarget": "angular-content-projection-default:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-content-projection-default:build" - } - }, - "serve-static": { - "executor": "@nx/web:file-server", - "options": { - "buildTarget": "angular-content-projection-default:build", - "staticFilePath": "dist/apps/angular/57-content-projection-default/browser", - "spa": true - } - } - } -} diff --git a/apps/components-and-templates/content-projection-default/tailwind.config.js b/apps/components-and-templates/content-projection-default/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/components-and-templates/content-projection-default/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/components-and-templates/crud-application/README.md b/apps/components-and-templates/crud-application/README.md deleted file mode 100644 index 8992014e3..000000000 --- a/apps/components-and-templates/crud-application/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Crud application - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-crud-application -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/5-crud/). diff --git a/apps/components-and-templates/crud-application/project.json b/apps/components-and-templates/crud-application/project.json deleted file mode 100644 index a31bd62a7..000000000 --- a/apps/components-and-templates/crud-application/project.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "name": "angular-crud-application", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/angular/5-crud-application/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/5-crud-application", - "index": "apps/angular/5-crud-application/src/index.html", - "main": "apps/angular/5-crud-application/src/main.ts", - "polyfills": "apps/angular/5-crud-application/src/polyfills.ts", - "tsConfig": "apps/angular/5-crud-application/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/5-crud-application/src/favicon.ico", - "apps/angular/5-crud-application/src/assets" - ], - "styles": [ - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", - "apps/angular/5-crud-application/src/styles.scss" - ], - "scripts": [], - "allowedCommonJsDependencies": ["seedrandom"] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-crud-application:build:production" - }, - "development": { - "buildTarget": "angular-crud-application:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-crud-application:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/components-and-templates/crud-application/tsconfig.app.json b/apps/components-and-templates/crud-application/tsconfig.app.json deleted file mode 100644 index 35bb97a53..000000000 --- a/apps/components-and-templates/crud-application/tsconfig.app.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "target": "ES2022", - "useDefineForClassFields": false, - "moduleResolution": "bundler" - }, - "files": [ - "src/main.ts", "src/polyfills.ts"], - "include": ["src/**/*.d.ts"], - "exclude": [ - "jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] -} diff --git a/apps/components-and-templates/projection/README.md b/apps/components-and-templates/projection/README.md deleted file mode 100644 index 781198ead..000000000 --- a/apps/components-and-templates/projection/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Projection - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-projection -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/1-projection/). diff --git a/apps/components-and-templates/projection/project.json b/apps/components-and-templates/projection/project.json deleted file mode 100644 index 42ed1604f..000000000 --- a/apps/components-and-templates/projection/project.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "name": "angular-projection", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/angular/1-projection/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/1-projection", - "index": "apps/angular/1-projection/src/index.html", - "main": "apps/angular/1-projection/src/main.ts", - "polyfills": ["apps/angular/1-projection/src/polyfills.ts"], - "tsConfig": "apps/angular/1-projection/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/1-projection/src/favicon.ico", - "apps/angular/1-projection/src/assets" - ], - "styles": ["apps/angular/1-projection/src/styles.scss"], - "scripts": [], - "allowedCommonJsDependencies": ["seedrandom"] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-projection:build:production" - }, - "development": { - "buildTarget": "angular-projection:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-projection:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/components-and-templates/projection/tailwind.config.js b/apps/components-and-templates/projection/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/components-and-templates/projection/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/components-and-templates/projection/tsconfig.app.json b/apps/components-and-templates/projection/tsconfig.app.json deleted file mode 100644 index 35bb97a53..000000000 --- a/apps/components-and-templates/projection/tsconfig.app.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "target": "ES2022", - "useDefineForClassFields": false, - "moduleResolution": "bundler" - }, - "files": [ - "src/main.ts", "src/polyfills.ts"], - "include": ["src/**/*.d.ts"], - "exclude": [ - "jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] -} diff --git a/apps/dependency-injection/injection-token/README.md b/apps/dependency-injection/injection-token/README.md deleted file mode 100644 index a96eb9c6e..000000000 --- a/apps/dependency-injection/injection-token/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# InjectionToken - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-injection-token -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/39-injection-token/). diff --git a/apps/dependency-injection/injection-token/project.json b/apps/dependency-injection/injection-token/project.json deleted file mode 100644 index 135c0c0f6..000000000 --- a/apps/dependency-injection/injection-token/project.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "angular-injection-token", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/39-injection-token/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/39-injection-token", - "index": "apps/angular/39-injection-token/src/index.html", - "main": "apps/angular/39-injection-token/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/39-injection-token/tsconfig.app.json", - "assets": [ - "apps/angular/39-injection-token/src/favicon.ico", - "apps/angular/39-injection-token/src/assets" - ], - "styles": ["apps/angular/39-injection-token/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-injection-token:build:production" - }, - "development": { - "buildTarget": "angular-injection-token:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-injection-token:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/dependency-injection/injection-token/tailwind.config.js b/apps/dependency-injection/injection-token/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/dependency-injection/injection-token/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/dependency-injection/master-dependency-injection/README.md b/apps/dependency-injection/master-dependency-injection/README.md deleted file mode 100644 index be19c1ba3..000000000 --- a/apps/dependency-injection/master-dependency-injection/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Master Dependancy Injection - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-master-dependency-injection -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/16-di/). diff --git a/apps/dependency-injection/master-dependency-injection/project.json b/apps/dependency-injection/master-dependency-injection/project.json deleted file mode 100644 index 4eb6bd95e..000000000 --- a/apps/dependency-injection/master-dependency-injection/project.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "angular-master-dependency-injection", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/angular/16-master-dependency-injection/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/16-master-dependency-injection", - "index": "apps/angular/16-master-dependency-injection/src/index.html", - "main": "apps/angular/16-master-dependency-injection/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/16-master-dependency-injection/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/16-master-dependency-injection/src/favicon.ico", - "apps/angular/16-master-dependency-injection/src/assets" - ], - "styles": [ - "apps/angular/16-master-dependency-injection/src/styles.scss" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-master-dependency-injection:build:production" - }, - "development": { - "buildTarget": "angular-master-dependency-injection:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-master-dependency-injection:build" - } - } - } -} diff --git a/apps/dependency-injection/master-dependency-injection/tsconfig.app.json b/apps/dependency-injection/master-dependency-injection/tsconfig.app.json deleted file mode 100644 index 403fe4f54..000000000 --- a/apps/dependency-injection/master-dependency-injection/tsconfig.app.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": [ - "src/main.ts" - ], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/directives-and-pipes/pure-pipe/README.md b/apps/directives-and-pipes/pure-pipe/README.md deleted file mode 100644 index a65a33f85..000000000 --- a/apps/directives-and-pipes/pure-pipe/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Pure Pipe - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-pure-pipe -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/8-pipe-pure/). diff --git a/apps/directives-and-pipes/pure-pipe/project.json b/apps/directives-and-pipes/pure-pipe/project.json deleted file mode 100644 index 26f507b63..000000000 --- a/apps/directives-and-pipes/pure-pipe/project.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "angular-pure-pipe", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/angular/8-pure-pipe/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/8-pure-pipe", - "index": "apps/angular/8-pure-pipe/src/index.html", - "main": "apps/angular/8-pure-pipe/src/main.ts", - "polyfills": "apps/angular/8-pure-pipe/src/polyfills.ts", - "tsConfig": "apps/angular/8-pure-pipe/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/8-pure-pipe/src/favicon.ico", - "apps/angular/8-pure-pipe/src/assets" - ], - "styles": ["apps/angular/8-pure-pipe/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-pure-pipe:build:production" - }, - "development": { - "buildTarget": "angular-pure-pipe:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-pure-pipe:build" - } - } - } -} diff --git a/apps/directives-and-pipes/structural-directive/README.md b/apps/directives-and-pipes/structural-directive/README.md deleted file mode 100644 index 775b40981..000000000 --- a/apps/directives-and-pipes/structural-directive/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Structural Directive - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-structural-directive -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/6-permissions/). diff --git a/apps/directives-and-pipes/structural-directive/project.json b/apps/directives-and-pipes/structural-directive/project.json deleted file mode 100644 index 399418f90..000000000 --- a/apps/directives-and-pipes/structural-directive/project.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "angular-structural-directive", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/angular/6-structural-directive/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/6-structural-directive", - "index": "apps/angular/6-structural-directive/src/index.html", - "main": "apps/angular/6-structural-directive/src/main.ts", - "polyfills": "apps/angular/6-structural-directive/src/polyfills.ts", - "tsConfig": "apps/angular/6-structural-directive/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/6-structural-directive/src/favicon.ico", - "apps/angular/6-structural-directive/src/assets" - ], - "styles": ["apps/angular/6-structural-directive/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-structural-directive:build:production" - }, - "development": { - "buildTarget": "angular-structural-directive:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-structural-directive:build" - } - } - } -} diff --git a/apps/directives-and-pipes/structural-directive/tailwind.config.js b/apps/directives-and-pipes/structural-directive/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/directives-and-pipes/structural-directive/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/README.md b/apps/directives-and-pipes/utility-wrapper-pipe/README.md deleted file mode 100644 index aac426271..000000000 --- a/apps/directives-and-pipes/utility-wrapper-pipe/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Utility Wrapper Pipe - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-utility-wrapper-pipe -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/10-pipe-utility/). diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/project.json b/apps/directives-and-pipes/utility-wrapper-pipe/project.json deleted file mode 100644 index 37a204043..000000000 --- a/apps/directives-and-pipes/utility-wrapper-pipe/project.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "angular-utility-wrapper-pipe", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/angular/10-utility-wrapper-pipe/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/10-utility-wrapper-pipe", - "index": "apps/angular/10-utility-wrapper-pipe/src/index.html", - "main": "apps/angular/10-utility-wrapper-pipe/src/main.ts", - "polyfills": "apps/angular/10-utility-wrapper-pipe/src/polyfills.ts", - "tsConfig": "apps/angular/10-utility-wrapper-pipe/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/10-utility-wrapper-pipe/src/favicon.ico", - "apps/angular/10-utility-wrapper-pipe/src/assets" - ], - "styles": ["apps/angular/10-utility-wrapper-pipe/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-utility-wrapper-pipe:build:production" - }, - "development": { - "buildTarget": "angular-utility-wrapper-pipe:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-utility-wrapper-pipe:build" - } - } - } -} diff --git a/apps/directives-and-pipes/wrap-function-pipe/README.md b/apps/directives-and-pipes/wrap-function-pipe/README.md deleted file mode 100644 index 1491e7dda..000000000 --- a/apps/directives-and-pipes/wrap-function-pipe/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Wrap Function Pipe - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-wrap-function-pipe -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/9-pipe-wrapFn/). diff --git a/apps/directives-and-pipes/wrap-function-pipe/project.json b/apps/directives-and-pipes/wrap-function-pipe/project.json deleted file mode 100644 index ce32ac0c1..000000000 --- a/apps/directives-and-pipes/wrap-function-pipe/project.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "angular-wrap-function-pipe", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/angular/9-wrap-function-pipe/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/9-wrap-function-pipe", - "index": "apps/angular/9-wrap-function-pipe/src/index.html", - "main": "apps/angular/9-wrap-function-pipe/src/main.ts", - "polyfills": "apps/angular/9-wrap-function-pipe/src/polyfills.ts", - "tsConfig": "apps/angular/9-wrap-function-pipe/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/9-wrap-function-pipe/src/favicon.ico", - "apps/angular/9-wrap-function-pipe/src/assets" - ], - "styles": ["apps/angular/9-wrap-function-pipe/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-wrap-function-pipe:build:production" - }, - "development": { - "buildTarget": "angular-wrap-function-pipe:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-wrap-function-pipe:build" - } - } - } -} diff --git a/apps/forms/avoid-losing-form-data/README.md b/apps/forms/avoid-losing-form-data/README.md deleted file mode 100644 index 1c0e90b35..000000000 --- a/apps/forms/avoid-losing-form-data/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Avoid losing form data - -> author: [Timothy Alcaide](https://github.com/alcaidio) - -### Run Application - -```bash -npx nx serve forms-avoid-losing-form-data -``` - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/forms/48-forms-avoid-losing-form-data/). diff --git a/apps/forms/avoid-losing-form-data/project.json b/apps/forms/avoid-losing-form-data/project.json deleted file mode 100644 index 5bfe98931..000000000 --- a/apps/forms/avoid-losing-form-data/project.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "forms-avoid-losing-form-data", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/forms/48-avoid-losing-form-data/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/forms/48-avoid-losing-form-data", - "index": "apps/forms/48-avoid-losing-form-data/src/index.html", - "browser": "apps/forms/48-avoid-losing-form-data/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/forms/48-avoid-losing-form-data/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/forms/48-avoid-losing-form-data/src/favicon.ico", - "apps/forms/48-avoid-losing-form-data/src/assets" - ], - "styles": [ - "apps/forms/48-avoid-losing-form-data/src/styles.scss", - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "forms-avoid-losing-form-data:build:production" - }, - "development": { - "buildTarget": "forms-avoid-losing-form-data:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "forms-avoid-losing-form-data:build" - } - } - } -} diff --git a/apps/forms/control-value-accessor/README.md b/apps/forms/control-value-accessor/README.md deleted file mode 100644 index a91920ad2..000000000 --- a/apps/forms/control-value-accessor/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Control Value Accessor - -> author: stanislav-gavrilov - -### Run Application - -```bash -npx nx serve forms-control-value-accessor -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/forms/41-control-value-accessor/). diff --git a/apps/forms/control-value-accessor/project.json b/apps/forms/control-value-accessor/project.json deleted file mode 100644 index e9012bd49..000000000 --- a/apps/forms/control-value-accessor/project.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "forms-control-value-accessor", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/forms/41-control-value-accessor/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/forms/41-control-value-accessor", - "index": "apps/forms/41-control-value-accessor/src/index.html", - "browser": "apps/forms/41-control-value-accessor/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/forms/41-control-value-accessor/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/forms/41-control-value-accessor/src/favicon.ico", - "apps/forms/41-control-value-accessor/src/assets" - ], - "styles": ["apps/forms/41-control-value-accessor/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "forms-control-value-accessor:build:production" - }, - "development": { - "buildTarget": "forms-control-value-accessor:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "forms-control-value-accessor:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/forms/control-value-accessor/tailwind.config.js b/apps/forms/control-value-accessor/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/forms/control-value-accessor/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/routing/anchor-navigation/README.md b/apps/routing/anchor-navigation/README.md deleted file mode 100644 index 3683899ba..000000000 --- a/apps/routing/anchor-navigation/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Anchor Navigation - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-anchor-navigation -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/21-achor-scrolling/). diff --git a/apps/routing/anchor-navigation/project.json b/apps/routing/anchor-navigation/project.json deleted file mode 100644 index 782bb1ec4..000000000 --- a/apps/routing/anchor-navigation/project.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "name": "angular-anchor-navigation", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/angular/21-anchor-navigation/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/21-anchor-navigation", - "index": "apps/angular/21-anchor-navigation/src/index.html", - "main": "apps/angular/21-anchor-navigation/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/21-anchor-navigation/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/angular/21-anchor-navigation/src/favicon.ico", - "apps/angular/21-anchor-navigation/src/assets" - ], - "styles": ["apps/angular/21-anchor-navigation/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-anchor-navigation:build:production" - }, - "development": { - "buildTarget": "angular-anchor-navigation:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-anchor-navigation:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/routing/anchor-navigation/tailwind.config.js b/apps/routing/anchor-navigation/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/routing/anchor-navigation/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/routing/anchor-navigation/tsconfig.app.json b/apps/routing/anchor-navigation/tsconfig.app.json deleted file mode 100644 index 3bb4877ea..000000000 --- a/apps/routing/anchor-navigation/tsconfig.app.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": [ - "src/main.ts" - ], - "include": ["src/**/*.d.ts"], - "exclude": [ - "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/routing/async-redirect/README.md b/apps/routing/async-redirect/README.md deleted file mode 100644 index 6b100305c..000000000 --- a/apps/routing/async-redirect/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# async-redirect - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-async-redirect -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/60-async-redirect/). diff --git a/apps/routing/async-redirect/project.json b/apps/routing/async-redirect/project.json deleted file mode 100644 index eebd6d7a2..000000000 --- a/apps/routing/async-redirect/project.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "name": "angular-async-redirect", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/60-async-redirect/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular/build:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/60-async-redirect", - "browser": "apps/angular/60-async-redirect/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/60-async-redirect/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "apps/angular/60-async-redirect/public" - } - ], - "styles": ["apps/angular/60-async-redirect/src/styles.scss"] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "4kb", - "maximumError": "8kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "continuous": true, - "executor": "@angular/build:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-async-redirect:build:production" - }, - "development": { - "buildTarget": "angular-async-redirect:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "executor": "@angular/build:extract-i18n", - "options": { - "buildTarget": "angular-async-redirect:build" - } - }, - "lint": { - "executor": "@nx/eslint:lint" - }, - "serve-static": { - "continuous": true, - "executor": "@nx/web:file-server", - "options": { - "buildTarget": "angular-async-redirect:build", - "staticFilePath": "dist/apps/angular/60-async-redirect/browser", - "spa": true - } - } - } -} diff --git a/apps/routing/async-redirect/tailwind.config.js b/apps/routing/async-redirect/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/routing/async-redirect/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/routing/router-input/README.md b/apps/routing/router-input/README.md deleted file mode 100644 index 0aad6c326..000000000 --- a/apps/routing/router-input/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# @RouterInput() - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-router-input -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/22-router-input/). diff --git a/apps/routing/router-input/project.json b/apps/routing/router-input/project.json deleted file mode 100644 index d0cd43a08..000000000 --- a/apps/routing/router-input/project.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "angular-router-input", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/22-router-input/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/22-router-input", - "index": "apps/angular/22-router-input/src/index.html", - "main": "apps/angular/22-router-input/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/22-router-input/tsconfig.app.json", - "assets": [ - "apps/angular/22-router-input/src/favicon.ico", - "apps/angular/22-router-input/src/assets" - ], - "styles": ["apps/angular/22-router-input/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-router-input:build:production" - }, - "development": { - "buildTarget": "angular-router-input:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-router-input:build" - } - } - } -} diff --git a/apps/routing/router-input/tsconfig.app.json b/apps/routing/router-input/tsconfig.app.json deleted file mode 100644 index 403fe4f54..000000000 --- a/apps/routing/router-input/tsconfig.app.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": [ - "src/main.ts" - ], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/rxjs/catch-error/README.md b/apps/rxjs/catch-error/README.md deleted file mode 100644 index d1808fd03..000000000 --- a/apps/rxjs/catch-error/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# catchError - -> Author: Devesh Chaudhari - -### Run Application - -```bash -npx nx serve rxjs-catch-error -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/rxjs/38-catch-error/). diff --git a/apps/rxjs/catch-error/project.json b/apps/rxjs/catch-error/project.json deleted file mode 100644 index 9c2ad7cb9..000000000 --- a/apps/rxjs/catch-error/project.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "rxjs-catch-error", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/rxjs/38-catch-error/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/rxjs/38-catch-error", - "index": "apps/rxjs/38-catch-error/src/index.html", - "main": "apps/rxjs/38-catch-error/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/rxjs/38-catch-error/tsconfig.app.json", - "assets": [ - "apps/rxjs/38-catch-error/src/favicon.ico", - "apps/rxjs/38-catch-error/src/assets" - ], - "styles": ["apps/rxjs/38-catch-error/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "rxjs-catch-error:build:production" - }, - "development": { - "buildTarget": "rxjs-catch-error:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "rxjs-catch-error:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/rxjs/catch-error/tailwind.config.js b/apps/rxjs/catch-error/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/rxjs/catch-error/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/rxjs/catch-error/tsconfig.json b/apps/rxjs/catch-error/tsconfig.json deleted file mode 100644 index e85865cf5..000000000 --- a/apps/rxjs/catch-error/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/rxjs/high-order-operator-bug/README.md b/apps/rxjs/high-order-operator-bug/README.md deleted file mode 100644 index 5a4fa5512..000000000 --- a/apps/rxjs/high-order-operator-bug/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# High Order Operator Bug - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve rxjs-high-order-operator-bug -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/rxjs/11-bug-chaining-operator/). diff --git a/apps/rxjs/high-order-operator-bug/project.json b/apps/rxjs/high-order-operator-bug/project.json deleted file mode 100644 index 2ab592032..000000000 --- a/apps/rxjs/high-order-operator-bug/project.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "rxjs-high-order-operator-bug", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/rxjs/11-high-order-operator-bug/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/rxjs/11-high-order-operator-bug", - "index": "apps/rxjs/11-high-order-operator-bug/src/index.html", - "main": "apps/rxjs/11-high-order-operator-bug/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/rxjs/11-high-order-operator-bug/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/rxjs/11-high-order-operator-bug/src/favicon.ico", - "apps/rxjs/11-high-order-operator-bug/src/assets" - ], - "styles": ["apps/rxjs/11-high-order-operator-bug/src/styles.scss"], - "scripts": [], - "allowedCommonJsDependencies": ["seedrandom"] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "rxjs-high-order-operator-bug:build:production" - }, - "development": { - "buildTarget": "rxjs-high-order-operator-bug:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "rxjs-high-order-operator-bug:build" - } - } - } -} diff --git a/apps/rxjs/high-order-operator-bug/tsconfig.json b/apps/rxjs/high-order-operator-bug/tsconfig.json deleted file mode 100644 index 6091bd910..000000000 --- a/apps/rxjs/high-order-operator-bug/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "extends": "../../../tsconfig.base.json", - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/rxjs/hold-to-save-button/README.md b/apps/rxjs/hold-to-save-button/README.md deleted file mode 100644 index e0d4c012b..000000000 --- a/apps/rxjs/hold-to-save-button/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Hold to send button - -> author: alcaidio - -### Run Application - -```bash -npx nx serve rxjs-hold-to-save-button -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/rxjs/49-hold-to-save-btn/). diff --git a/apps/rxjs/hold-to-save-button/project.json b/apps/rxjs/hold-to-save-button/project.json deleted file mode 100644 index f4e2e33c4..000000000 --- a/apps/rxjs/hold-to-save-button/project.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "rxjs-hold-to-save-button", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/rxjs/49-hold-to-save-button/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/rxjs/49-hold-to-save-button", - "index": "apps/rxjs/49-hold-to-save-button/src/index.html", - "browser": "apps/rxjs/49-hold-to-save-button/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/rxjs/49-hold-to-save-button/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/rxjs/49-hold-to-save-button/src/favicon.ico", - "apps/rxjs/49-hold-to-save-button/src/assets" - ], - "styles": ["apps/rxjs/49-hold-to-save-button/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "rxjs-hold-to-save-button:build:production" - }, - "development": { - "buildTarget": "rxjs-hold-to-save-button:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "rxjs-hold-to-save-button:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - } - } -} diff --git a/apps/rxjs/hold-to-save-button/tailwind.config.js b/apps/rxjs/hold-to-save-button/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/rxjs/hold-to-save-button/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/rxjs/race-condition/README.md b/apps/rxjs/race-condition/README.md deleted file mode 100644 index e9b61106b..000000000 --- a/apps/rxjs/race-condition/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Race Condition - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve rxjs-race-condition -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/rxjs/14-race-condition/). diff --git a/apps/rxjs/race-condition/project.json b/apps/rxjs/race-condition/project.json deleted file mode 100644 index c5191f620..000000000 --- a/apps/rxjs/race-condition/project.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "name": "rxjs-race-condition", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "apps/rxjs/14-race-condition/src", - "prefix": "app", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/rxjs/14-race-condition", - "index": "apps/rxjs/14-race-condition/src/index.html", - "main": "apps/rxjs/14-race-condition/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/rxjs/14-race-condition/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/rxjs/14-race-condition/src/favicon.ico", - "apps/rxjs/14-race-condition/src/assets" - ], - "styles": ["apps/rxjs/14-race-condition/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "rxjs-race-condition:build:production" - }, - "development": { - "buildTarget": "rxjs-race-condition:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "rxjs-race-condition:build" - } - }, - "test": { - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverage": true - } - } - }, - "component-test": { - "executor": "@nx/cypress:cypress", - "options": { - "cypressConfig": "apps/rxjs/14-race-condition/cypress.config.ts", - "testingType": "component", - "skipServe": true, - "devServerTarget": "testing-router:build" - } - } - } -} diff --git a/apps/signal/bug-in-effect/README.md b/apps/signal/bug-in-effect/README.md deleted file mode 100644 index 9e55d151a..000000000 --- a/apps/signal/bug-in-effect/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Bug in Effect ? - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve signal-bug-in-effect -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/50-bug-effect-signal/). diff --git a/apps/signal/bug-in-effect/project.json b/apps/signal/bug-in-effect/project.json deleted file mode 100644 index 7d40e2caa..000000000 --- a/apps/signal/bug-in-effect/project.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "signal-bug-in-effect", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/signal/50-bug-in-effect/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/signal/50-bug-in-effect", - "index": "apps/signal/50-bug-in-effect/src/index.html", - "browser": "apps/signal/50-bug-in-effect/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/signal/50-bug-in-effect/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/signal/50-bug-in-effect/src/favicon.ico", - "apps/signal/50-bug-in-effect/src/assets" - ], - "styles": ["apps/signal/50-bug-in-effect/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "signal-bug-in-effect:build:production" - }, - "development": { - "buildTarget": "signal-bug-in-effect:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "signal-bug-in-effect:build" - } - } - } -} diff --git a/apps/signal/bug-in-effect/tailwind.config.js b/apps/signal/bug-in-effect/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/signal/bug-in-effect/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/signal/forms-and-signal/README.md b/apps/signal/forms-and-signal/README.md deleted file mode 100644 index ba5def1f0..000000000 --- a/apps/signal/forms-and-signal/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# forms and signal - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve signal-forms-and-signal -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/signal/56-forms-and-signal/). diff --git a/apps/signal/forms-and-signal/project.json b/apps/signal/forms-and-signal/project.json deleted file mode 100644 index 596afbb32..000000000 --- a/apps/signal/forms-and-signal/project.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "signal-forms-and-signal", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/signal/56-forms-and-signal/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/signal/56-forms-and-signal", - "index": "apps/signal/56-forms-and-signal/src/index.html", - "browser": "apps/signal/56-forms-and-signal/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/signal/56-forms-and-signal/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "apps/signal/56-forms-and-signal/public" - } - ], - "styles": ["apps/signal/56-forms-and-signal/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "signal-forms-and-signal:build:production" - }, - "development": { - "buildTarget": "signal-forms-and-signal:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "signal-forms-and-signal:build" - } - } - } -} diff --git a/apps/signal/forms-and-signal/tailwind.config.js b/apps/signal/forms-and-signal/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/signal/forms-and-signal/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/signal/function-call-effect/README.md b/apps/signal/function-call-effect/README.md deleted file mode 100644 index 6d4543361..000000000 --- a/apps/signal/function-call-effect/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Function call in effect - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve signal-function-call-effect -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/51-function-call-effect/). diff --git a/apps/signal/function-call-effect/project.json b/apps/signal/function-call-effect/project.json deleted file mode 100644 index 71e6f233d..000000000 --- a/apps/signal/function-call-effect/project.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "signal-function-call-effect", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/signal/51-function-call-effect/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/signal/51-function-call-effect", - "index": "apps/signal/51-function-call-effect/src/index.html", - "browser": "apps/signal/51-function-call-effect/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/signal/51-function-call-effect/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/signal/51-function-call-effect/src/favicon.ico", - "apps/signal/51-function-call-effect/src/assets" - ], - "styles": ["apps/signal/51-function-call-effect/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "signal-function-call-effect:build:production" - }, - "development": { - "buildTarget": "signal-function-call-effect:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "signal-function-call-effect:build" - } - } - } -} diff --git a/apps/signal/function-call-effect/tailwind.config.js b/apps/signal/function-call-effect/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/signal/function-call-effect/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/signal/function-call-effect/tsconfig.json b/apps/signal/function-call-effect/tsconfig.json deleted file mode 100644 index 3df17b921..000000000 --- a/apps/signal/function-call-effect/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./tsconfig.app.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/signal/pipe-observable-to-signal/README.md b/apps/signal/pipe-observable-to-signal/README.md deleted file mode 100644 index 495cd3aa9..000000000 --- a/apps/signal/pipe-observable-to-signal/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Pipe Observable to Signal - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve signal-pipe-observable-to-signal -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/signal/54-pipe-observable-to-signal/). diff --git a/apps/signal/pipe-observable-to-signal/project.json b/apps/signal/pipe-observable-to-signal/project.json deleted file mode 100644 index 1f95f6036..000000000 --- a/apps/signal/pipe-observable-to-signal/project.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "signal-pipe-observable-to-signal", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/signal/54-pipe-observable-to-signal/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/signal/54-pipe-observable-to-signal", - "index": "apps/signal/54-pipe-observable-to-signal/src/index.html", - "browser": "apps/signal/54-pipe-observable-to-signal/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/signal/54-pipe-observable-to-signal/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/signal/54-pipe-observable-to-signal/src/favicon.ico", - "apps/signal/54-pipe-observable-to-signal/src/assets" - ], - "styles": ["apps/signal/54-pipe-observable-to-signal/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "signal-pipe-observable-to-signal:build:production" - }, - "development": { - "buildTarget": "signal-pipe-observable-to-signal:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "signal-pipe-observable-to-signal:build" - } - } - } -} diff --git a/apps/signal/pipe-observable-to-signal/tailwind.config.js b/apps/signal/pipe-observable-to-signal/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/signal/pipe-observable-to-signal/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/signal/pipe-observable-to-signal/tsconfig.json b/apps/signal/pipe-observable-to-signal/tsconfig.json deleted file mode 100644 index 3df17b921..000000000 --- a/apps/signal/pipe-observable-to-signal/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.editor.json" - }, - { - "path": "./tsconfig.app.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/signal/signal-input/README.md b/apps/signal/signal-input/README.md deleted file mode 100644 index d82216bfd..000000000 --- a/apps/signal/signal-input/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Signal Input - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve signal-signal-input -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/signal/43-signal-input). diff --git a/apps/signal/signal-input/project.json b/apps/signal/signal-input/project.json deleted file mode 100644 index 0a1832ffb..000000000 --- a/apps/signal/signal-input/project.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "signal-signal-input", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/signal/43-signal-input/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:application", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/signal/43-signal-input", - "index": "apps/signal/43-signal-input/src/index.html", - "browser": "apps/signal/43-signal-input/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/signal/43-signal-input/tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - "apps/signal/43-signal-input/src/favicon.ico", - "apps/signal/43-signal-input/src/assets" - ], - "styles": ["apps/signal/43-signal-input/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "signal-signal-input:build:production" - }, - "development": { - "buildTarget": "signal-signal-input:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "signal-signal-input:build" - } - } - } -} diff --git a/apps/signal/signal-input/tailwind.config.js b/apps/signal/signal-input/tailwind.config.js deleted file mode 100644 index 38183db2c..000000000 --- a/apps/signal/signal-input/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); -const { join } = require('path'); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), - ], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/apps/signal/signal-input/tsconfig.json b/apps/signal/signal-input/tsconfig.json deleted file mode 100644 index b94f8837d..000000000 --- a/apps/signal/signal-input/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/apps/standalone/module-to-standalone/README.md b/apps/standalone/module-to-standalone/README.md deleted file mode 100644 index bd227b7a2..000000000 --- a/apps/standalone/module-to-standalone/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Module to Standalone - -> author: thomas-laforge - -### Run Application - -```bash -npx nx serve angular-module-to-standalone -``` - -### Documentation and Instruction - -Challenge documentation is [here](https://angular-challenges.vercel.app/challenges/angular/31-module-to-standalone/). diff --git a/apps/standalone/module-to-standalone/project.json b/apps/standalone/module-to-standalone/project.json deleted file mode 100644 index b02e0a0a8..000000000 --- a/apps/standalone/module-to-standalone/project.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "angular-module-to-standalone", - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "prefix": "app", - "sourceRoot": "apps/angular/31-module-to-standalone/src", - "tags": [], - "targets": { - "build": { - "executor": "@angular-devkit/build-angular:browser", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/apps/angular/31-module-to-standalone", - "index": "apps/angular/31-module-to-standalone/src/index.html", - "main": "apps/angular/31-module-to-standalone/src/main.ts", - "polyfills": ["zone.js"], - "tsConfig": "apps/angular/31-module-to-standalone/tsconfig.app.json", - "assets": [ - "apps/angular/31-module-to-standalone/src/favicon.ico", - "apps/angular/31-module-to-standalone/src/assets" - ], - "styles": ["apps/angular/31-module-to-standalone/src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "angular-module-to-standalone:build:production" - }, - "development": { - "buildTarget": "angular-module-to-standalone:build:development" - } - }, - "defaultConfiguration": "development", - "continuous": true - }, - "extract-i18n": { - "executor": "@angular-devkit/build-angular:extract-i18n", - "options": { - "buildTarget": "angular-module-to-standalone:build" - } - } - } -} diff --git a/apps/standalone/module-to-standalone/tsconfig.app.json b/apps/standalone/module-to-standalone/tsconfig.app.json deleted file mode 100644 index 403fe4f54..000000000 --- a/apps/standalone/module-to-standalone/tsconfig.app.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../../dist/out-tsc", - "types": [], - "moduleResolution": "bundler" - }, - "files": [ - "src/main.ts" - ], - "include": ["src/**/*.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] -} diff --git a/apps/standalone/module-to-standalone/tsconfig.json b/apps/standalone/module-to-standalone/tsconfig.json deleted file mode 100644 index 51c7908c5..000000000 --- a/apps/standalone/module-to-standalone/tsconfig.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false, - "forceConsistentCasingInFileNames": true, - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.editor.json" - } - ], - "extends": "../../../tsconfig.base.json", - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 49ceb2158..000000000 --- a/docs/.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -# build output -dist/ -# generated types -.astro/ - -# dependencies -node_modules/ - -# logs -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* - - -# environment variables -.env -.env.production - -# macOS-specific files -.DS_Store -.vercel diff --git a/docs/.vscode/extensions.json b/docs/.vscode/extensions.json deleted file mode 100644 index 22a15055d..000000000 --- a/docs/.vscode/extensions.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "recommendations": ["astro-build.astro-vscode"], - "unwantedRecommendations": [] -} diff --git a/docs/.vscode/launch.json b/docs/.vscode/launch.json deleted file mode 100644 index d64220976..000000000 --- a/docs/.vscode/launch.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "command": "./node_modules/.bin/astro dev", - "name": "Development server", - "request": "launch", - "type": "node-terminal" - } - ] -} diff --git a/docs/.vscode/settings.json b/docs/.vscode/settings.json deleted file mode 100644 index 1c5c156df..000000000 --- a/docs/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "editor.wordWrapColumn": 120 -} diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 25d1048bc..000000000 --- a/docs/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# Starlight Starter Kit: Basics - -``` -npm create astro@latest -- --template starlight -``` - -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/starlight/tree/main/examples/basics) -[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/starlight/tree/main/examples/basics) - -> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! - -## 🚀 Project Structure - -Inside of your Astro + Starlight project, you'll see the following folders and files: - -``` -. -├── public/ -├── src/ -│ ├── assets/ -│ ├── content/ -│ │ ├── docs/ -│ │ └── config.ts -│ └── env.d.ts -├── astro.config.mjs -├── package.json -└── tsconfig.json -``` - -Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name. - -Images can be added to `src/assets/` and embedded in Markdown with a relative link. - -Static assets, like favicons, can be placed in the `public/` directory. - -## 🧞 Commands - -All commands are run from the root of the project, from a terminal: - -| Command | Action | -| :------------------------ | :----------------------------------------------- | -| `npm ci` | Installs dependencies | -| `npm run dev` | Starts local dev server at `localhost:4321` | -| `npm run build` | Build your production site to `./dist/` | -| `npm run preview` | Preview your build locally, before deploying | -| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | -| `npm run astro -- --help` | Get help using the Astro CLI | - -## 👀 Want to learn more? - -Check out [Starlight’s docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat). -f diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs deleted file mode 100644 index 953462156..000000000 --- a/docs/astro.config.mjs +++ /dev/null @@ -1,124 +0,0 @@ -import starlight from '@astrojs/starlight'; -import { defineConfig } from 'astro/config'; -import svelte from '@astrojs/svelte'; -import vercel from '@astrojs/vercel/serverless'; - -export const locales = { - root: { - label: 'English', - lang: 'en' - }, - es: { - label: 'Español', - lang: 'es' - }, - fr: { - label: 'Français', - lang: 'fr' - }, - pt: { - label: 'Português', - lang: 'pt' - }, - ru: { - label: 'Русский', - lang: 'ru' - }, - 'zh-cn': { - label: '简体中文', - lang: 'zh-CN' - } -}; - - -// https://astro.build/config -export default defineConfig({ - integrations: [starlight({ - title: 'Angular Challenges', - logo: { - src: './public/angular-challenge.webp', - alt: 'angular challenges logo' - }, - favicon: './angular-challenge.ico', - social: { - github: 'https://github.com/tomalaforge/angular-challenges', - linkedin: 'https://www.linkedin.com/in/thomas-laforge-2b05a945/', - twitter: 'https://twitter.com/laforge_toma' - }, - customCss: ['./src/styles/custom-css.css'], - sidebar: [{ - label: 'Guides', - autogenerate: { - directory: 'guides' - }, - translations: { - es: 'Guías', - fr: 'Guides', - pt: 'Guias', - ru: 'Руководство', - 'zh-CN': '指南' - } - }, - { - label: 'Leaderboard', - autogenerate: { - directory: 'leaderboard', - collapsed: true - }, - translations: { - es: 'Leaderboard', - fr: 'Leaderboard', - pt: 'Tabela de Classificação', - ru: 'Leaderboard', - 'zh-CN': '排行榜' - } - }, - { - label: 'Challenges', - autogenerate: { - directory: 'challenges' - }, - translations: { - es: 'Desafíos', - fr: 'Challenges', - pt: 'Desafios', - ru: 'Задачи', - 'zh-CN': '挑战' - } - }], - head: [{ - tag: 'script', - attrs: { - src: 'https://www.googletagmanager.com/gtag/js?id=G-6BXJ62W6G5', - async: true - } - }, { - tag: 'script', - content: ` - window.dataLayer = window.dataLayer || []; - function gtag(){dataLayer.push(arguments);} - gtag('js', new Date()); - - gtag('config', 'G-6BXJ62W6G5'); - ` - }, { - tag: 'script', - attrs: { - src: 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2438923752868254', - async: true - } - }], - components: { - MarkdownContent: './src/components/Content.astro', - TableOfContents: './src/components/TableOfContents.astro', - PageTitle: './src/components/PageTitle.astro', - MobileMenuFooter: './src/components/MobileMenuFooter.astro', - SiteTitle: './src/components/SiteTitle.astro', - Hero: './src/components/Hero.astro' - }, - defaultLocale: 'root', - locales - }), svelte()], - output: "hybrid", - adapter: vercel() -}); diff --git a/docs/package-lock.json b/docs/package-lock.json deleted file mode 100644 index 626127ffe..000000000 --- a/docs/package-lock.json +++ /dev/null @@ -1,11186 +0,0 @@ -{ - "name": "angular-challenges-docs", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "angular-challenges-docs", - "version": "0.0.1", - "dependencies": { - "@astrojs/starlight": "^0.15.1", - "@astrojs/svelte": "^5.2.0", - "@astrojs/vercel": "^7.5.0", - "@fontsource/ibm-plex-serif": "^5.0.8", - "astro": "^4.0.0", - "sharp": "^0.32.5", - "svelte": "^4.2.12", - "typescript": "^5.4.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@astrojs/compiler": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.7.0.tgz", - "integrity": "sha512-XpC8MAaWjD1ff6/IfkRq/5k1EFj6zhCNqXRd5J43SVJEBj/Bsmizkm8N0xOYscGcDFQkRgEw6/eKnI5x/1l6aA==" - }, - "node_modules/@astrojs/internal-helpers": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.4.0.tgz", - "integrity": "sha512-6B13lz5n6BrbTqCTwhXjJXuR1sqiX/H6rTxzlXx+lN1NnV4jgnq/KJldCQaUWJzPL5SiWahQyinxAbxQtwgPHA==" - }, - "node_modules/@astrojs/markdown-remark": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-4.0.1.tgz", - "integrity": "sha512-RU4ESnqvyLpj8WZs0n5elS6idaDdtIIm7mIpMaRNPCebpxMjfcfdwcmBwz83ktAj5d2eO5bC3z92TcGdli+lRw==", - "dependencies": { - "@astrojs/prism": "^3.0.0", - "github-slugger": "^2.0.0", - "import-meta-resolve": "^4.0.0", - "mdast-util-definitions": "^6.0.0", - "rehype-raw": "^7.0.0", - "rehype-stringify": "^10.0.0", - "remark-gfm": "^4.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "remark-smartypants": "^2.0.0", - "shikiji": "^0.6.13", - "unified": "^11.0.4", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.1" - } - }, - "node_modules/@astrojs/markdown-remark/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/@astrojs/markdown-remark/node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/markdown-remark/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/markdown-remark/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/markdown-remark/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/markdown-remark/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/markdown-remark/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/markdown-remark/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/mdx": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-2.0.1.tgz", - "integrity": "sha512-lWbiNoVV/6DO8hAf6eZmcN28hY/herif9eglw2PXZ5lEPoRu175BvBtuNTt9rH9YA/Ldm5mkNXhvMWNEnMqJkw==", - "dependencies": { - "@astrojs/markdown-remark": "4.0.1", - "@mdx-js/mdx": "^3.0.0", - "acorn": "^8.11.2", - "es-module-lexer": "^1.4.1", - "estree-util-visit": "^2.0.0", - "github-slugger": "^2.0.0", - "gray-matter": "^4.0.3", - "hast-util-to-html": "^9.0.0", - "kleur": "^4.1.4", - "rehype-raw": "^7.0.0", - "remark-gfm": "^4.0.0", - "remark-smartypants": "^2.0.0", - "source-map": "^0.7.4", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.1" - }, - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "astro": "^4.0.0" - } - }, - "node_modules/@astrojs/mdx/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/@astrojs/mdx/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/mdx/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/mdx/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/mdx/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/mdx/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/mdx/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/prism": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.0.0.tgz", - "integrity": "sha512-g61lZupWq1bYbcBnYZqdjndShr/J3l/oFobBKPA3+qMat146zce3nz2kdO4giGbhYDt4gYdhmoBz0vZJ4sIurQ==", - "dependencies": { - "prismjs": "^1.29.0" - }, - "engines": { - "node": ">=18.14.1" - } - }, - "node_modules/@astrojs/sitemap": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.0.3.tgz", - "integrity": "sha512-+GRKp1yho9dpHBcMcU6JpbL41k0yYZghOkNsMRb8QIRflbGHvd787tdv9oIZ5NJj0SqAuOlqp2UpqLkJXuAe2A==", - "dependencies": { - "sitemap": "^7.1.1", - "zod": "^3.22.4" - } - }, - "node_modules/@astrojs/starlight": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.15.1.tgz", - "integrity": "sha512-5AdySPQOG/+r1vHSNotQAGqhQIfF68hS8PfV+z4M2ewnrWoeCsHI3yYRFYgSRsVofcOEGTHiIryTRG/uRIvDkQ==", - "dependencies": { - "@astrojs/mdx": "^2.0.0", - "@astrojs/sitemap": "^3.0.3", - "@pagefind/default-ui": "^1.0.3", - "@types/hast": "^3.0.3", - "@types/mdast": "^4.0.3", - "astro-expressive-code": "^0.30.1", - "bcp-47": "^2.1.0", - "execa": "^8.0.1", - "hast-util-select": "^6.0.2", - "hastscript": "^8.0.0", - "mdast-util-directive": "^3.0.0", - "pagefind": "^1.0.3", - "rehype": "^13.0.1", - "remark-directive": "^3.0.0", - "unified": "^11.0.4", - "unist-util-remove": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.1" - }, - "peerDependencies": { - "astro": "^4.0.0" - } - }, - "node_modules/@astrojs/starlight/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/@astrojs/starlight/node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/starlight/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/starlight/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/starlight/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/starlight/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/starlight/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/starlight/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@astrojs/svelte": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@astrojs/svelte/-/svelte-5.2.0.tgz", - "integrity": "sha512-GmwbXks2WMkmAfl0rlPM/2gA1RtmZzjGV2mOceV3g7QNyjIsSYBPKrlEnSFnuR+YMvlAtWdbMFBsb3gtGxnTTg==", - "dependencies": { - "@sveltejs/vite-plugin-svelte": "^3.0.0", - "svelte2tsx": "^0.6.27" - }, - "engines": { - "node": ">=18.14.1" - }, - "peerDependencies": { - "astro": "^4.0.0", - "svelte": "^4.0.0 || ^5.0.0-next.56", - "typescript": "^5.3.3" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.1.tgz", - "integrity": "sha512-4C4UERETjXpC4WpBXDbkgNVgHyWfG3B/NKY46e7w5H134UDOFqUJKpsLm0UYmuupW+aJmRgeScrDNfvZ5WV80A==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.1.tgz", - "integrity": "sha512-TrTaFJ9pXgfXEiJKQ3yQRelpQFqgRzVR9it8DbeRzG0RX7mKUy0bqhCFsgevwXLJepQKTnLl95TnPGf9T9AMOA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.1.tgz", - "integrity": "sha512-fz7jN6ahTI3cKzDO2otQuybts5cyu0feymg0bjvYCBrZQ8tSgE8pc0sSNEuGvifrQJWiwx9F05BowihmLxeQKw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.1.tgz", - "integrity": "sha512-WTvdz7SLMlJpektdrnWRUN9C0N2qNHwNbWpNo0a3Tod3gb9leX+yrYdCeB7VV36OtoyiPAivl7/xZ3G1z5h20g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.1.tgz", - "integrity": "sha512-dBHQl+7wZzBYcIF6o4k2XkAfwP2ks1mYW2q/Gzv9n39uDcDiAGDqEyml08OdY0BIct0yLSPkDTqn4i6czpBLLw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.1.tgz", - "integrity": "sha512-bur4JOxvYxfrAmocRJIW0SADs3QdEYK6TQ7dTNz6Z4/lySeu3Z1H/+tl0a4qDYv0bCdBpUYM0sYa/X+9ZqgfSQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.1.tgz", - "integrity": "sha512-ssp77SjcDIUSoUyj7DU7/5iwM4ZEluY+N8umtCT9nBRs3u045t0KkW02LTyHouHDomnMXaXSZcCSr2bdMK63kA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.1.tgz", - "integrity": "sha512-Jv1DkIvwEPAb+v25/Unrnnq9BO3F5cbFPT821n3S5litkz+O5NuXuNhqtPx5KtcwOTtaqkTsO+IVzJOsxd11aQ==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.1.tgz", - "integrity": "sha512-zGRDulLTeDemR8DFYyFIQ8kMP02xpUsX4IBikc7lwL9PrwR3gWmX2NopqiGlI2ZVWMl15qZeUjumTwpv18N7sQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.1.tgz", - "integrity": "sha512-VTk/MveyPdMFkYJJPCkYBw07KcTkGU2hLEyqYMsU4NjiOfzoaDTW9PWGRsNwiOA3qI0k/JQPjkl/4FCK1smskQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.1.tgz", - "integrity": "sha512-L+hX8Dtibb02r/OYCsp4sQQIi3ldZkFI0EUkMTDwRfFykXBPptoz/tuuGqEd3bThBSLRWPR6wsixDSgOx/U3Zw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.1.tgz", - "integrity": "sha512-+dI2jVPfM5A8zme8riEoNC7UKk0Lzc7jCj/U89cQIrOjrZTCWZl/+IXUeRT2rEZ5j25lnSA9G9H1Ob9azaF/KQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.1.tgz", - "integrity": "sha512-YY1Exxo2viZ/O2dMHuwQvimJ0SqvL+OAWQLLY6rvXavgQKjhQUzn7nc1Dd29gjB5Fqi00nrBWctJBOyfVMIVxw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@astrojs/svelte/node_modules/@sveltejs/vite-plugin-svelte": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.2.tgz", - "integrity": "sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==", - "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0", - "debug": "^4.3.4", - "deepmerge": "^4.3.1", - "kleur": "^4.1.5", - "magic-string": "^0.30.5", - "svelte-hmr": "^0.15.3", - "vitefu": "^0.2.5" - }, - "engines": { - "node": "^18.0.0 || >=20" - }, - "peerDependencies": { - "svelte": "^4.0.0 || ^5.0.0-next.0", - "vite": "^5.0.0" - } - }, - "node_modules/@astrojs/svelte/node_modules/@sveltejs/vite-plugin-svelte-inspector": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.0.0.tgz", - "integrity": "sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.0.0 || >=20" - }, - "peerDependencies": { - "@sveltejs/vite-plugin-svelte": "^3.0.0", - "svelte": "^4.0.0 || ^5.0.0-next.0", - "vite": "^5.0.0" - } - }, - "node_modules/@astrojs/svelte/node_modules/@types/node": { - "version": "20.11.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", - "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", - "optional": true, - "peer": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@astrojs/svelte/node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "hasInstallScript": true, - "peer": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - }, - "node_modules/@astrojs/svelte/node_modules/rollup": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.1.tgz", - "integrity": "sha512-hFi+fU132IvJ2ZuihN56dwgpltpmLZHZWsx27rMCTZ2sYwrqlgL5sECGy1eeV2lAihD8EzChBVVhsXci0wD4Tg==", - "peer": true, - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.1", - "@rollup/rollup-android-arm64": "4.13.1", - "@rollup/rollup-darwin-arm64": "4.13.1", - "@rollup/rollup-darwin-x64": "4.13.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.1", - "@rollup/rollup-linux-arm64-gnu": "4.13.1", - "@rollup/rollup-linux-arm64-musl": "4.13.1", - "@rollup/rollup-linux-riscv64-gnu": "4.13.1", - "@rollup/rollup-linux-s390x-gnu": "4.13.1", - "@rollup/rollup-linux-x64-gnu": "4.13.1", - "@rollup/rollup-linux-x64-musl": "4.13.1", - "@rollup/rollup-win32-arm64-msvc": "4.13.1", - "@rollup/rollup-win32-ia32-msvc": "4.13.1", - "@rollup/rollup-win32-x64-msvc": "4.13.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/@astrojs/svelte/node_modules/vite": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.6.tgz", - "integrity": "sha512-FPtnxFlSIKYjZ2eosBQamz4CbyrTizbZ3hnGJlh/wMtCrlp1Hah6AzBLjGI5I2urTfNnpovpHdrL6YRuBOPnCA==", - "peer": true, - "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.36", - "rollup": "^4.13.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/@astrojs/telemetry": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.0.4.tgz", - "integrity": "sha512-A+0c7k/Xy293xx6odsYZuXiaHO0PL+bnDoXOc47sGDF5ffIKdKQGRPFl2NMlCF4L0NqN4Ynbgnaip+pPF0s7pQ==", - "dependencies": { - "ci-info": "^3.8.0", - "debug": "^4.3.4", - "dlv": "^1.1.3", - "dset": "^3.1.2", - "is-docker": "^3.0.0", - "is-wsl": "^3.0.0", - "which-pm-runs": "^1.1.0" - }, - "engines": { - "node": ">=18.14.1" - } - }, - "node_modules/@astrojs/telemetry/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/@astrojs/vercel": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@astrojs/vercel/-/vercel-7.5.0.tgz", - "integrity": "sha512-RYFZNHkfNgFNb41nblG26ubw5924hAjLYs+Bpp4kttcsYJAX/wavIfDbfZQ/XesDTKwIH+Gi/+3c5bldZePFDA==", - "dependencies": { - "@astrojs/internal-helpers": "0.4.0", - "@vercel/analytics": "^1.0.2", - "@vercel/edge": "^1.1.1", - "@vercel/nft": "^0.26.4", - "esbuild": "^0.19.6", - "fast-glob": "^3.3.2", - "set-cookie-parser": "^2.6.0", - "web-vitals": "^3.4.0" - }, - "peerDependencies": { - "astro": "^4.2.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", - "dependencies": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", - "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.1", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.1", - "@babel/parser": "^7.24.1", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", - "dependencies": { - "@babel/types": "^7.24.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", - "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", - "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", - "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", - "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ctrl/tinycolor": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", - "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.10.tgz", - "integrity": "sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.10.tgz", - "integrity": "sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.10.tgz", - "integrity": "sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.10.tgz", - "integrity": "sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.10.tgz", - "integrity": "sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.10.tgz", - "integrity": "sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.10.tgz", - "integrity": "sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.10.tgz", - "integrity": "sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.10.tgz", - "integrity": "sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.10.tgz", - "integrity": "sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.10.tgz", - "integrity": "sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.10.tgz", - "integrity": "sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.10.tgz", - "integrity": "sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.10.tgz", - "integrity": "sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.10.tgz", - "integrity": "sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.10.tgz", - "integrity": "sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.10.tgz", - "integrity": "sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.10.tgz", - "integrity": "sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.10.tgz", - "integrity": "sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.10.tgz", - "integrity": "sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.10.tgz", - "integrity": "sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.10.tgz", - "integrity": "sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.10.tgz", - "integrity": "sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@expressive-code/core": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.30.1.tgz", - "integrity": "sha512-z11G1lfzzuTJ63C4dGPUIEKxJse5eKrVxqxQJRiuCDH8hPqfIQs/+by04UceSWB0dt5SIFsL5J+7HvCycbc1iA==", - "dependencies": { - "@ctrl/tinycolor": "^3.6.0", - "hast-util-to-html": "^8.0.4", - "hastscript": "^7.2.0", - "postcss": "^8.4.21", - "postcss-nested": "^6.0.1" - } - }, - "node_modules/@expressive-code/core/node_modules/@types/hast": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.8.tgz", - "integrity": "sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@expressive-code/core/node_modules/hast-util-from-parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", - "integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "hastscript": "^7.0.0", - "property-information": "^6.0.0", - "vfile": "^5.0.0", - "vfile-location": "^4.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@expressive-code/core/node_modules/hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", - "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@expressive-code/core/node_modules/hast-util-raw": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.3.tgz", - "integrity": "sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/parse5": "^6.0.0", - "hast-util-from-parse5": "^7.0.0", - "hast-util-to-parse5": "^7.0.0", - "html-void-elements": "^2.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@expressive-code/core/node_modules/hast-util-to-html": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz", - "integrity": "sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-raw": "^7.0.0", - "hast-util-whitespace": "^2.0.0", - "html-void-elements": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@expressive-code/core/node_modules/hast-util-to-parse5": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz", - "integrity": "sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@expressive-code/core/node_modules/hast-util-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", - "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@expressive-code/core/node_modules/hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@expressive-code/core/node_modules/html-void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", - "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@expressive-code/core/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/@expressive-code/core/node_modules/unist-util-position": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", - "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@expressive-code/core/node_modules/vfile-location": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", - "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@expressive-code/plugin-frames": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.30.1.tgz", - "integrity": "sha512-fBqd+NWcmlP63q8kNi73b6EuwWZwb+8OIhqWEsEQ/lsoOmT8FVYqsnH+M+TRC9or+U0PNd7Po/ojcFNnS0TAIQ==", - "dependencies": { - "@expressive-code/core": "^0.30.1", - "hastscript": "^7.2.0" - } - }, - "node_modules/@expressive-code/plugin-frames/node_modules/@types/hast": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.8.tgz", - "integrity": "sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@expressive-code/plugin-frames/node_modules/hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", - "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@expressive-code/plugin-frames/node_modules/hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@expressive-code/plugin-shiki": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.30.1.tgz", - "integrity": "sha512-VoJZWZ1wjW/I+CsHg4/RwurrHdtnF5C5fbXESQCQlnXWOhWBfJnOX1ilx5B11gsH5kEWNoD5WRAt8t0L0V/VJA==", - "dependencies": { - "@expressive-code/core": "^0.30.1", - "shikiji": "^0.8.0" - } - }, - "node_modules/@expressive-code/plugin-shiki/node_modules/shikiji": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/shikiji/-/shikiji-0.8.7.tgz", - "integrity": "sha512-j5usxwI0yHkDTHOuhuSJl9+wT5CNYeYO82dJMSJBlJ/NYT5SIebGcPoL6y9QOyH15wGrJC4LOP2nz5k8mUDGRQ==", - "dependencies": { - "hast-util-to-html": "^9.0.0" - } - }, - "node_modules/@expressive-code/plugin-text-markers": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.30.1.tgz", - "integrity": "sha512-Dtw2lIsAfcfWy/qUhrEW1NwZdgMsI+qeHQ/7Do+W9fMBIoIIHh2GLwmhwkBitoOvLgOJQWsNoBvT42LUp2+16g==", - "dependencies": { - "@expressive-code/core": "^0.30.1", - "hastscript": "^7.2.0", - "unist-util-visit-parents": "^5.1.3" - } - }, - "node_modules/@expressive-code/plugin-text-markers/node_modules/@types/hast": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.8.tgz", - "integrity": "sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@expressive-code/plugin-text-markers/node_modules/hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", - "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@expressive-code/plugin-text-markers/node_modules/hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@fontsource/ibm-plex-serif": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@fontsource/ibm-plex-serif/-/ibm-plex-serif-5.0.8.tgz", - "integrity": "sha512-KUp1E9Wzf2Umhr2SbpcF9HwgFJmuxvKAARmpl7GDDkIG30R1PMFJWxfSfQ7oX/oVBtomGq5RUTaMMUeE0ngEgw==" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mdx-js/mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.0.tgz", - "integrity": "sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-to-js": "^2.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-estree": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "periscopic": "^3.0.0", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "source-map": "^0.7.0", - "unified": "^11.0.0", - "unist-util-position-from-estree": "^2.0.0", - "unist-util-stringify-position": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/@mdx-js/mdx/node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pagefind/darwin-arm64": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.0.3.tgz", - "integrity": "sha512-vsHDtvao3W4iFCxVc4S0BVhpj3E2MAoIVM7RmuQfGp1Ng22nGLRaMP6FguLO8TMabRJdvp4SVr227hL4WGKOHA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@pagefind/darwin-x64": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.0.3.tgz", - "integrity": "sha512-NhEXHHYmB/hT6lx5rCcmnVTxH+uIkMAd43bzEqMwHQosqTZEIQfwihmV39H+m8yo7jFvz3zRbJNzhAh7G4PiwA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@pagefind/default-ui": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.0.3.tgz", - "integrity": "sha512-WieFJXvezyvjZh49I8j7a7Kz3LsXYY2Uep3IWvG5NG05mmiurURXjXc+KyrpIp/iAycSnjrC1TDJ8CdES/ee3A==" - }, - "node_modules/@pagefind/linux-arm64": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.0.3.tgz", - "integrity": "sha512-RGsMt4AmGT8WxCSeP09arU7Za6Vf/We4TWHVSbY7vDMuwWql9Ngoib/q1cP9dIAIMdkXh9ePG/S3mGnJYsdzuQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@pagefind/linux-x64": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.0.3.tgz", - "integrity": "sha512-o+VCKaqImL42scSH1n5gUfppYSNyu3BuGTvtKKgWHmycbL+A3fkFH+ZOFbaLeN7LVTvJqJIOYbk4j2yaq9784Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@pagefind/windows-x64": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.0.3.tgz", - "integrity": "sha512-S+Yq4FyvXJm4F+iN/wRiLvEEF8Xs9lTKGtQGaRHXJslQyl65dytDDPIULXJXIadrDbnMrnTt4C2YHmEUIyUIHg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz", - "integrity": "sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz", - "integrity": "sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz", - "integrity": "sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz", - "integrity": "sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz", - "integrity": "sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz", - "integrity": "sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz", - "integrity": "sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz", - "integrity": "sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==", - "cpu": [ - "ppc64le" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz", - "integrity": "sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.1.tgz", - "integrity": "sha512-U564BrhEfaNChdATQaEODtquCC7Ez+8Hxz1h5MAdMYj0AqD0GA9rHCpElajb/sQcaFL6NXmHc5O+7FXpWMa73Q==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz", - "integrity": "sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz", - "integrity": "sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz", - "integrity": "sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz", - "integrity": "sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz", - "integrity": "sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@shikijs/core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.2.1.tgz", - "integrity": "sha512-KaIS0H4EQ3KI2d++TjYqRNgwp8E3M/68e9veR4QtInzA7kKFgcjeiJqb80fuXW+blDy5fmd11PN9g9soz/3ANQ==" - }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.3.tgz", - "integrity": "sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/hast": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz", - "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdx": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.10.tgz", - "integrity": "sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==" - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" - }, - "node_modules/@types/nlcst": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.2.tgz", - "integrity": "sha512-ykxL/GDDUhqikjU0LIywZvEwb1NTYXTEWf+XgMSS2o6IXIakafPccxZmxgZcvJPZ3yFl2kdL1gJZz3U3iZF3QA==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "node_modules/@types/parse5": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==" - }, - "node_modules/@types/sax": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", - "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "node_modules/@vercel/analytics": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.2.2.tgz", - "integrity": "sha512-X0rctVWkQV1e5Y300ehVNqpOfSOufo7ieA5PIdna8yX/U7Vjz0GFsGf4qvAhxV02uQ2CVt7GYcrFfddXXK2Y4A==", - "dependencies": { - "server-only": "^0.0.1" - }, - "peerDependencies": { - "next": ">= 13", - "react": "^18 || ^19" - }, - "peerDependenciesMeta": { - "next": { - "optional": true - }, - "react": { - "optional": true - } - } - }, - "node_modules/@vercel/edge": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vercel/edge/-/edge-1.1.1.tgz", - "integrity": "sha512-NtKiIbn9Cq6HWGy+qRudz28mz5nxfOJWls5Pnckjw1yCfSX8rhXdvY/il3Sy3Zd5n/sKCM2h7VSCCpJF/oaDrQ==" - }, - "node_modules/@vercel/nft": { - "version": "0.26.4", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.26.4.tgz", - "integrity": "sha512-j4jCOOXke2t8cHZCIxu1dzKLHLcFmYzC3yqAK6MfZznOL1QIJKd0xcFsXK3zcqzU7ScsE2zWkiMMNHGMHgp+FA==", - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.5", - "@rollup/pluginutils": "^4.0.0", - "acorn": "^8.6.0", - "acorn-import-attributes": "^1.9.2", - "async-sema": "^3.1.1", - "bindings": "^1.4.0", - "estree-walker": "2.0.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.2", - "node-gyp-build": "^4.2.2", - "resolve-from": "^5.0.0" - }, - "bin": { - "nft": "out/cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@vercel/nft/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.4.tgz", - "integrity": "sha512-dNIX/5UEnZvVL94dV2scl4VIooK36D8AteP4xiz7cPKhDbhLhSuWkzG580g+Q7TXJklp+Z21SiaK7/HpLO84Qg==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-iterate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", - "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/astring": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", - "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", - "bin": { - "astring": "bin/astring" - } - }, - "node_modules/astro": { - "version": "4.5.12", - "resolved": "https://registry.npmjs.org/astro/-/astro-4.5.12.tgz", - "integrity": "sha512-xIJcFI2hbyV8+h5pWjL7SKD1jIP0K01fYVAH+gdAt0mJaXy+u8Mj+goD0cPlK6sEaykR+7zxQLYGKJ44U4qarg==", - "dependencies": { - "@astrojs/compiler": "^2.7.0", - "@astrojs/internal-helpers": "0.4.0", - "@astrojs/markdown-remark": "4.3.2", - "@astrojs/telemetry": "3.0.4", - "@babel/core": "^7.24.3", - "@babel/generator": "^7.23.3", - "@babel/parser": "^7.23.3", - "@babel/plugin-transform-react-jsx": "^7.22.5", - "@babel/traverse": "^7.23.3", - "@babel/types": "^7.23.3", - "@types/babel__core": "^7.20.4", - "acorn": "^8.11.2", - "aria-query": "^5.3.0", - "axobject-query": "^4.0.0", - "boxen": "^7.1.1", - "chokidar": "^3.5.3", - "ci-info": "^4.0.0", - "clsx": "^2.0.0", - "common-ancestor-path": "^1.0.1", - "cookie": "^0.6.0", - "cssesc": "^3.0.0", - "debug": "^4.3.4", - "deterministic-object-hash": "^2.0.1", - "devalue": "^4.3.2", - "diff": "^5.1.0", - "dlv": "^1.1.3", - "dset": "^3.1.3", - "es-module-lexer": "^1.4.1", - "esbuild": "^0.19.6", - "estree-walker": "^3.0.3", - "execa": "^8.0.1", - "fast-glob": "^3.3.2", - "flattie": "^1.1.0", - "github-slugger": "^2.0.0", - "gray-matter": "^4.0.3", - "html-escaper": "^3.0.3", - "http-cache-semantics": "^4.1.1", - "js-yaml": "^4.1.0", - "kleur": "^4.1.4", - "magic-string": "^0.30.3", - "mime": "^3.0.0", - "ora": "^7.0.1", - "p-limit": "^5.0.0", - "p-queue": "^8.0.1", - "path-to-regexp": "^6.2.1", - "preferred-pm": "^3.1.2", - "prompts": "^2.4.2", - "rehype": "^13.0.1", - "resolve": "^1.22.4", - "semver": "^7.5.4", - "shiki": "^1.1.2", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0", - "tsconfck": "^3.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.1", - "vite": "^5.1.4", - "vitefu": "^0.2.5", - "which-pm": "^2.1.1", - "yargs-parser": "^21.1.1", - "zod": "^3.22.4", - "zod-to-json-schema": "^3.22.4" - }, - "bin": { - "astro": "astro.js" - }, - "engines": { - "node": ">=18.14.1", - "npm": ">=6.14.0" - }, - "optionalDependencies": { - "sharp": "^0.32.6" - } - }, - "node_modules/astro-expressive-code": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.30.1.tgz", - "integrity": "sha512-Dr3VbK4HvIXTT8rsvd8PuRW4uZOpfRz9J8noVSSxmx7/M7o73SBtqauBYvxXpGHnagTJPGzYOa9BQS7jDHNUVw==", - "dependencies": { - "remark-expressive-code": "^0.30.1" - }, - "peerDependencies": { - "astro": "^3.3.0 || ^4.0.0-beta" - } - }, - "node_modules/astro/node_modules/@astrojs/markdown-remark": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-4.3.2.tgz", - "integrity": "sha512-4Oa4VaYiBd0MatB+rWIU/0A8pZH/sK3c2QkRYb+OO2lPl+qzevJtWaZY8hAQc4qurIOlRdn6B6ofDAGhWw+DSg==", - "dependencies": { - "@astrojs/prism": "^3.0.0", - "github-slugger": "^2.0.0", - "hast-util-from-html": "^2.0.0", - "hast-util-to-text": "^4.0.0", - "import-meta-resolve": "^4.0.0", - "mdast-util-definitions": "^6.0.0", - "rehype-raw": "^7.0.0", - "rehype-stringify": "^10.0.0", - "remark-gfm": "^4.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "remark-smartypants": "^2.0.0", - "shiki": "^1.1.2", - "unified": "^11.0.4", - "unist-util-remove-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "unist-util-visit-parents": "^6.0.0", - "vfile": "^6.0.1" - } - }, - "node_modules/astro/node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/astro/node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz", - "integrity": "sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/astro/node_modules/@types/node": { - "version": "20.11.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", - "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", - "optional": true, - "peer": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/astro/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/astro/node_modules/rollup": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.2.tgz", - "integrity": "sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==", - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.2", - "@rollup/rollup-android-arm64": "4.13.2", - "@rollup/rollup-darwin-arm64": "4.13.2", - "@rollup/rollup-darwin-x64": "4.13.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.2", - "@rollup/rollup-linux-arm64-gnu": "4.13.2", - "@rollup/rollup-linux-arm64-musl": "4.13.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.13.2", - "@rollup/rollup-linux-riscv64-gnu": "4.13.2", - "@rollup/rollup-linux-s390x-gnu": "4.13.2", - "@rollup/rollup-linux-x64-gnu": "4.13.2", - "@rollup/rollup-linux-x64-musl": "4.13.2", - "@rollup/rollup-win32-arm64-msvc": "4.13.2", - "@rollup/rollup-win32-ia32-msvc": "4.13.2", - "@rollup/rollup-win32-x64-msvc": "4.13.2", - "fsevents": "~2.3.2" - } - }, - "node_modules/astro/node_modules/string-width": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", - "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/astro/node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/astro/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/astro/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/astro/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/astro/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/astro/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/astro/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/astro/node_modules/vite": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.6.tgz", - "integrity": "sha512-FPtnxFlSIKYjZ2eosBQamz4CbyrTizbZ3hnGJlh/wMtCrlp1Hah6AzBLjGI5I2urTfNnpovpHdrL6YRuBOPnCA==", - "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.36", - "rollup": "^4.13.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/astro/node_modules/vite/node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - }, - "node_modules/async-sema": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", - "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==" - }, - "node_modules/axobject-query": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", - "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base-64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", - "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcp-47": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz", - "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/bcp-47-match": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", - "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/boxen/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/ci-info": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", - "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/code-red": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", - "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", - "@types/estree": "^1.0.1", - "acorn": "^8.10.0", - "estree-walker": "^3.0.3", - "periscopic": "^3.1.0" - } - }, - "node_modules/collapse-white-space": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", - "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-selector-parser": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.0.4.tgz", - "integrity": "sha512-pnmS1dbKsz6KA4EW4BznyPL2xxkNDRg62hcD0v8g6DEw2W7hxOln5M953jsp9hmw5Dg57S6o/A8GOn37mbAgcQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/debug": { - "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" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dedent-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", - "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==" - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/deterministic-object-hash": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", - "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", - "dependencies": { - "base-64": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/devalue": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", - "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==" - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/direction": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz", - "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==", - "bin": { - "direction": "cli.js" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "node_modules/dset": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", - "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.615", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz", - "integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==" - }, - "node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" - }, - "node_modules/esbuild": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.10.tgz", - "integrity": "sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.10", - "@esbuild/android-arm": "0.19.10", - "@esbuild/android-arm64": "0.19.10", - "@esbuild/android-x64": "0.19.10", - "@esbuild/darwin-arm64": "0.19.10", - "@esbuild/darwin-x64": "0.19.10", - "@esbuild/freebsd-arm64": "0.19.10", - "@esbuild/freebsd-x64": "0.19.10", - "@esbuild/linux-arm": "0.19.10", - "@esbuild/linux-arm64": "0.19.10", - "@esbuild/linux-ia32": "0.19.10", - "@esbuild/linux-loong64": "0.19.10", - "@esbuild/linux-mips64el": "0.19.10", - "@esbuild/linux-ppc64": "0.19.10", - "@esbuild/linux-riscv64": "0.19.10", - "@esbuild/linux-s390x": "0.19.10", - "@esbuild/linux-x64": "0.19.10", - "@esbuild/netbsd-x64": "0.19.10", - "@esbuild/openbsd-x64": "0.19.10", - "@esbuild/sunos-x64": "0.19.10", - "@esbuild/win32-arm64": "0.19.10", - "@esbuild/win32-ia32": "0.19.10", - "@esbuild/win32-x64": "0.19.10" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estree-util-attach-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-walker": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-to-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-visit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-visit/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" - }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/expressive-code": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.30.1.tgz", - "integrity": "sha512-iD8xtfN8X29jfk0B2U4/ws1pV/8GgRVIGOIDm9f6U9Zcnse1OnD/i+cYkcaOr5MLpVe8eLEr8GvVtZDOBxekrg==", - "dependencies": { - "@expressive-code/core": "^0.30.1", - "@expressive-code/plugin-frames": "^0.30.1", - "@expressive-code/plugin-shiki": "^0.30.1", - "@expressive-code/plugin-text-markers": "^0.30.1" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-yarn-workspace-root2": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", - "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==", - "dependencies": { - "micromatch": "^4.0.2", - "pkg-dir": "^4.2.0" - } - }, - "node_modules/flattie": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.0.tgz", - "integrity": "sha512-xU99gDEnciIwJdGcBmNHnzTJ/w5AT+VFJOu6sTB6WM8diOYNA3Sa+K1DiEBQ7XH4QikQq3iFW1U+jRVcotQnBw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/gauge/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/gauge/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, - "node_modules/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" - }, - "node_modules/glob": { - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, - "node_modules/hast-util-from-html": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz", - "integrity": "sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==", - "dependencies": { - "@types/hast": "^3.0.0", - "devlop": "^1.1.0", - "hast-util-from-parse5": "^8.0.0", - "parse5": "^7.0.0", - "vfile": "^6.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-html/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/hast-util-from-html/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-html/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-html/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", - "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^8.0.0", - "property-information": "^6.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/hast-util-from-parse5/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-has-property": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", - "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-is-element": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", - "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.1.tgz", - "integrity": "sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/hast-util-raw/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-select": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.2.tgz", - "integrity": "sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "bcp-47-match": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "css-selector-parser": "^3.0.0", - "devlop": "^1.0.0", - "direction": "^2.0.0", - "hast-util-has-property": "^3.0.0", - "hast-util-to-string": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "not": "^0.1.0", - "nth-check": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-select/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/hast-util-select/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-select/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-select/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-estree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", - "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-attach-comments": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-html": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.0.tgz", - "integrity": "sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-raw": "^9.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-html/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz", - "integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==" - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz", - "integrity": "sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==", - "dependencies": { - "inline-style-parser": "0.2.2" - } - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz", - "integrity": "sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-text": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.0.tgz", - "integrity": "sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "hast-util-is-element": "^3.0.0", - "unist-util-find-after": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-text/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", - "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/html-escaper": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", - "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==" - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/import-meta-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", - "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/load-yaml-file": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz", - "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==", - "dependencies": { - "graceful-fs": "^4.1.5", - "js-yaml": "^3.13.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/load-yaml-file/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/load-yaml-file/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/locate-character": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/markdown-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-definitions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", - "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", - "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-directive/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/mdast-util-directive/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-directive/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", - "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", - "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.0.0.tgz", - "integrity": "sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^5.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz", - "integrity": "sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/mdast-util-phrasing/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.0.2.tgz", - "integrity": "sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/mdast-util-to-hast/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/mdast-util-to-markdown/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", - "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz", - "integrity": "sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", - "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", - "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", - "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", - "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-md": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", - "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.0", - "micromark-extension-mdx-md": "^2.0.0", - "micromark-extension-mdxjs-esm": "^3.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", - "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/micromark-factory-mdx-expression/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", - "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", - "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-util-events-to-acorn/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/micromark-util-events-to-acorn/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-util-events-to-acorn/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", - "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "node_modules/nlcst-to-string": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-3.1.1.tgz", - "integrity": "sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==", - "dependencies": { - "@types/nlcst": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-abi": { - "version": "3.51.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", - "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", - "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/not": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/not/-/not-0.1.0.tgz", - "integrity": "sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==" - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", - "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", - "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.9.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.3.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "string-width": "^6.1.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/p-limit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", - "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz", - "integrity": "sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==", - "dependencies": { - "eventemitter3": "^5.0.1", - "p-timeout": "^6.1.2" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", - "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pagefind": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.0.3.tgz", - "integrity": "sha512-ws7kmMxW6OuxzsOjj3YAx6TYq/54MiE3wfyBM3J5CInbZyBBvM2Z8c8IYvnMkBcb5v2EoB9DewXEekOEiDRu5g==", - "bin": { - "pagefind": "lib/runner/bin.cjs" - }, - "optionalDependencies": { - "@pagefind/darwin-arm64": "1.0.3", - "@pagefind/darwin-x64": "1.0.3", - "@pagefind/linux-arm64": "1.0.3", - "@pagefind/linux-x64": "1.0.3", - "@pagefind/windows-x64": "1.0.3" - } - }, - "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-latin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-5.0.1.tgz", - "integrity": "sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==", - "dependencies": { - "nlcst-to-string": "^3.0.0", - "unist-util-modify-children": "^3.0.0", - "unist-util-visit-children": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" - }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prebuild-install/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/prebuild-install/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/prebuild-install/node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/prebuild-install/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/preferred-pm": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.2.tgz", - "integrity": "sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==", - "dependencies": { - "find-up": "^5.0.0", - "find-yarn-workspace-root2": "1.2.16", - "path-exists": "^4.0.0", - "which-pm": "2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/preferred-pm/node_modules/which-pm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz", - "integrity": "sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==", - "dependencies": { - "load-yaml-file": "^0.2.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8.15" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/property-information": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.3.0.tgz", - "integrity": "sha512-gVNZ74nqhRMiIUYWGQdosYetaKc83x8oT41a0LlV3AAFCAZwCpg4vmGkq8t34+cUhp3cnM4XDiU/7xlgK7HGrg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rehype": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.1.tgz", - "integrity": "sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg==", - "dependencies": { - "@types/hast": "^3.0.0", - "rehype-parse": "^9.0.0", - "rehype-stringify": "^10.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.0.tgz", - "integrity": "sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-from-html": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/rehype-parse/node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/rehype-raw/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-stringify": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", - "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-to-html": "^9.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-stringify/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/rehype-stringify/node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-stringify/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-stringify/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-stringify/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/rehype/node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz", - "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-directive": "^3.0.0", - "micromark-extension-directive": "^3.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-directive/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/remark-directive/node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-directive/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-directive/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-directive/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-expressive-code": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/remark-expressive-code/-/remark-expressive-code-0.30.1.tgz", - "integrity": "sha512-1cxsvXn1FyZsgaZXvkV+uoJLkg0rcS/k9Yemw211oD8Fblhh67Gb6ThxbuQdPf346kgg5D4R/iVyR49oAS5kbg==", - "dependencies": { - "expressive-code": "^0.30.1", - "hast-util-to-html": "^8.0.4", - "unist-util-visit": "^4.1.2" - } - }, - "node_modules/remark-expressive-code/node_modules/@types/hast": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.8.tgz", - "integrity": "sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-expressive-code/node_modules/hast-util-from-parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", - "integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "hastscript": "^7.0.0", - "property-information": "^6.0.0", - "vfile": "^5.0.0", - "vfile-location": "^4.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-expressive-code/node_modules/hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", - "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-expressive-code/node_modules/hast-util-raw": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.3.tgz", - "integrity": "sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/parse5": "^6.0.0", - "hast-util-from-parse5": "^7.0.0", - "hast-util-to-parse5": "^7.0.0", - "html-void-elements": "^2.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-expressive-code/node_modules/hast-util-to-html": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz", - "integrity": "sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-raw": "^7.0.0", - "hast-util-whitespace": "^2.0.0", - "html-void-elements": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-expressive-code/node_modules/hast-util-to-parse5": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz", - "integrity": "sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-expressive-code/node_modules/hast-util-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", - "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-expressive-code/node_modules/hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-expressive-code/node_modules/html-void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", - "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-expressive-code/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/remark-expressive-code/node_modules/unist-util-position": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", - "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-expressive-code/node_modules/vfile-location": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", - "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", - "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/remark-gfm/node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.0.tgz", - "integrity": "sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g==", - "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/remark-parse/node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.0.0.tgz", - "integrity": "sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/remark-rehype/node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-smartypants": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-2.0.0.tgz", - "integrity": "sha512-Rc0VDmr/yhnMQIz8n2ACYXlfw/P/XZev884QU1I5u+5DgJls32o97Vc1RbK3pfumLsJomS2yy8eT4Fxj/2MDVA==", - "dependencies": { - "retext": "^8.1.0", - "retext-smartypants": "^5.1.0", - "unist-util-visit": "^4.1.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/remark-stringify/node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/retext": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/retext/-/retext-8.1.0.tgz", - "integrity": "sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==", - "dependencies": { - "@types/nlcst": "^1.0.0", - "retext-latin": "^3.0.0", - "retext-stringify": "^3.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/retext-latin": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-3.1.0.tgz", - "integrity": "sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==", - "dependencies": { - "@types/nlcst": "^1.0.0", - "parse-latin": "^5.0.0", - "unherit": "^3.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/retext-smartypants": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-5.2.0.tgz", - "integrity": "sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==", - "dependencies": { - "@types/nlcst": "^1.0.0", - "nlcst-to-string": "^3.0.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/retext-stringify": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-3.1.0.tgz", - "integrity": "sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==", - "dependencies": { - "@types/nlcst": "^1.0.0", - "nlcst-to-string": "^3.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "optional": true, - "peer": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/server-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", - "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==" - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" - }, - "node_modules/sharp": { - "version": "0.32.6", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", - "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", - "hasInstallScript": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.2", - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.1", - "semver": "^7.5.4", - "simple-get": "^4.0.1", - "tar-fs": "^3.0.4", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shiki": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.2.1.tgz", - "integrity": "sha512-u+XW6o0vCkUNlneZb914dLO+AayEIwK5tI62WeS//R5HIXBFiYaj/Hc5xcq27Yh83Grr4JbNtUBV8W6zyK4hWg==", - "dependencies": { - "@shikijs/core": "1.2.1" - } - }, - "node_modules/shikiji": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/shikiji/-/shikiji-0.6.13.tgz", - "integrity": "sha512-4T7X39csvhT0p7GDnq9vysWddf2b6BeioiN3Ymhnt3xcy9tXmDcnsEFVxX18Z4YcQgEE/w48dLJ4pPPUcG9KkA==", - "dependencies": { - "hast-util-to-html": "^9.0.0" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", - "dependencies": { - "bl": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/streamx": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", - "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", - "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^10.2.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", - "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/strip-ansi": { - "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" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svelte": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.12.tgz", - "integrity": "sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==", - "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@jridgewell/sourcemap-codec": "^1.4.15", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/estree": "^1.0.1", - "acorn": "^8.9.0", - "aria-query": "^5.3.0", - "axobject-query": "^4.0.0", - "code-red": "^1.0.3", - "css-tree": "^2.3.1", - "estree-walker": "^3.0.3", - "is-reference": "^3.0.1", - "locate-character": "^3.0.0", - "magic-string": "^0.30.4", - "periscopic": "^3.1.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/svelte-hmr": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", - "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", - "engines": { - "node": "^12.20 || ^14.13.1 || >= 16" - }, - "peerDependencies": { - "svelte": "^3.19.0 || ^4.0.0" - } - }, - "node_modules/svelte2tsx": { - "version": "0.6.27", - "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.6.27.tgz", - "integrity": "sha512-E1uPW1o6VsbRz+nUk3fznZ2lSmCITAJoNu8AYefWSvIwE2pSB01i5sId4RMbWNzfcwCQl1DcgGShCPcldl4rvg==", - "dependencies": { - "dedent-js": "^1.0.1", - "pascal-case": "^3.1.1" - }, - "peerDependencies": { - "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", - "typescript": "^4.9.4 || ^5.0.0" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", - "dependencies": { - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - } - }, - "node_modules/tar-stream": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", - "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/tsconfck": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.0.0.tgz", - "integrity": "sha512-w3wnsIrJNi7avf4Zb0VjOoodoO0woEqGgZGQm+LHH9przdUI+XDKsWAXwxHA1DaRTjeuZNcregSzr7RaA8zG9A==", - "bin": { - "tsconfck": "bin/tsconfck.js" - }, - "engines": { - "node": "^18 || >=20" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "optional": true, - "peer": true - }, - "node_modules/unherit": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-3.0.1.tgz", - "integrity": "sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-find-after": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", - "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-find-after/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/unist-util-find-after/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-modify-children": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-3.1.1.tgz", - "integrity": "sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==", - "dependencies": { - "@types/unist": "^2.0.0", - "array-iterate": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position-from-estree/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/unist-util-position/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/unist-util-remove": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-4.0.0.tgz", - "integrity": "sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/unist-util-remove-position/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/unist-util-remove/node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove/node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-children": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-2.0.2.tgz", - "integrity": "sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", - "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/vfile-location/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vite": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz", - "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==", - "optional": true, - "peer": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "hasInstallScript": true, - "optional": true, - "peer": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "node_modules/vitefu": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", - "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/web-vitals": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.2.tgz", - "integrity": "sha512-c0rhqNcHXRkY/ogGDJQxZ9Im9D19hDihbzSQJrsioex+KnFgmMzBiy57Z1EjkhX/+OjyBpclDCzz2ITtjokFmg==" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-pm": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.1.1.tgz", - "integrity": "sha512-xzzxNw2wMaoCWXiGE8IJ9wuPMU+EYhFksjHxrRT8kMT5SnocBPRg69YAMtyV4D12fP582RA+k3P8H9J5EMdIxQ==", - "dependencies": { - "load-yaml-file": "^0.2.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8.15" - } - }, - "node_modules/which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.22.5.tgz", - "integrity": "sha512-+akaPo6a0zpVCCseDed504KBJUQpEW5QZw7RMneNmKw+fGaML1Z9tUNLnHHAC8x6dzVRO1eB2oEMyZRnuBZg7Q==", - "peerDependencies": { - "zod": "^3.22.4" - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 520d3f94b..000000000 --- a/docs/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "angular-challenges-docs", - "type": "module", - "version": "0.0.1", - "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "astro preview", - "astro": "astro" - }, - "dependencies": { - "@astrojs/starlight": "^0.15.1", - "@astrojs/svelte": "^5.2.0", - "@astrojs/vercel": "^7.5.0", - "@fontsource/ibm-plex-serif": "^5.0.8", - "astro": "^4.0.0", - "sharp": "^0.32.5", - "svelte": "^4.2.12", - "typescript": "^5.4.3" - } -} diff --git a/docs/public/angular-challenge.ico b/docs/public/angular-challenge.ico deleted file mode 100644 index 29d85cde0ee0ccb0cf9caa419e365d8649da54fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 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 TH{WgWKZTq;Ze{VgogeUjhSt)m diff --git a/docs/src/assets/4/unknown-person.png b/docs/src/assets/4/unknown-person.png deleted file mode 100644 index 9ab0a2e7d2547cf77191c75afe83954b998d0624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48272 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 z 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 diff --git a/docs/src/assets/4/unknown-student.png b/docs/src/assets/4/unknown-student.png deleted file mode 100644 index 247a29e91240f3b13cd98340afc273591119b9cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46530 zcmZU)1y~)u^EQmTwYa+$cXxO9;?BXLxVyVk+#QM(iWYZwcP;Mv9v=JuuJ7Bu_H52( zl5A#@*<|LPa7B3uL^vEc5D*YVDM?Xf5D;*7V0s(|3ix|!mRbq|0#|M+BBCfIB0{9- zXlG^#Fa-gT3{OslR#Z8{@O$^1!KEVxQx>+H)&Zd=ZUBLs7E%@dOoSo~1A+dl{%63K zhzJ;(fND6ZpEP2pVMc~ZwF{715J@g|L^L$#U?Pia9Ov!s=KG_MXDtT;?_BSzzWcf$ zRMNWPq7Yv|<0!@xLY~~2@{NtKf2R6DObUXQf+5l~sQiY5g#`c`edPfVCA%qY#4=eb|Dal)IdS zpp<3Ck?ju(t^ZUE>PP9+GED|Dh|oJRxKB>(K9~)o6Zt62^!szr+RXIyBMhO$B1E{5 z*KYXBXi(>_)RWFQgu6UFht#-AyDZ$gP8#(mht&6+fy+*EIkL?49vCIZ`dI6`Wu8q5rQ=rsllJ05fq~fgA+_+6V^)*1O{r02#OYpHx6Ms zZa6g{*#LhK9Ma&+BCNC!7bi%JpYbMy1%!Dwxjp(SL~}Ra1%z`T{{;?0V5|W`01=+3 ze`y?dAvm`1ejHtI&?+$@6%1UkQLY;m>}L^X3-Sg~8o!8KK;mQ6fP%yqETuH*})pP(HO8$svYYZumT z5Ri&wX!u2u^@2=F098gBjO4I{eD#7WrM^;WRl0KQxscYtV{ybh{(?FSnhgIY!C(2W zQ=cpdxWU_T+OfYz@CVomHs_z`dQSEno@2p@qZ-FJblWpdrIC#)%Mui0Il-vJwgj|< z9`$(j8r3;hGR?!D#71`)8)z7C7~dP6)MD0sU(`E=K?+qFNZ(nt@8+bZhffV%iROv; z<#+P?c8h;Y$_>AbZXJ^_5_4x^C-QRc;rfBzOTZ^8SCoAUV9@r2mHDqO_?@fFKI6YlK30R@j^&4VoSQRAm=RS=vk2`S#{#f_@!OW z`lz;GuQadtm#~*?;XEuQUh29e+F=Z7^gZT1uDwJswQgnqf-Vis0>$FV+{vN~@%UVe z(m`e2%CrK_N;l=pl6--s!XAx%uXTQwy#S{>4~RLuEl< zqgW?zC6A}ryb?37S+7R^Je^-Dr!1$mQ>0VOcTsS_AiG;S5GQaT1VW_PuzriahrLIM z)VP4EAX+?H9K7GEA8!Y52WO{*0u2>85g}1J@mH~?O0i}6k>1RTS#5ftR=rmG5}niH z>XfcU$3mMEl3C0(-euM>7c%W225lrD5+{;CrqwiV&tpV+F(yzRO8!#bGmC)Hauj9XY@f|M>PPA|&cToIoUeF5wIToW<;ZF)<5>F-H{*g^ zwZU0;OS`Ryt!^`1v#o20XWO&Sy)E)rT&DSRggQedY1i@+j%mO`tp)w;x(eXQD++ zA{Y*0#x!L&or>!&{c1+?EHt0^C;My4tEJ`cbmB--YItfR1BXtBrMqv8-T1_p$uDkS zwAGKRb(`zW(XG|`tSnr9AE&TASvxM=RNd-$n&3NpJ#N)s(5Ye2em4}E4cXVNT5W7; z7kGG8Oe~3`9P_N5axs34JtPbk_y(w7Y4Du6_wsp*20IDZ4yeg=&$N3nxmFoc*wOji z?2N{Zakdh%MzikWn>o-#DmE;}CDy)jU}Lw~y%^uQ(=$%aQ-isJnR-rgmhk789+t*( z*{0U>sOWyUZTR@k;%uqG+?m1GZh?QoyKzr@4{}fc4*p)C@}k0`l(n3e-;XcO zdvmXQFwjPT#kZQf(4lm5vbkrwXH7ylwn3dsO-;>O9do{mtv;i>z(K-}@S1;K)mlkM zNuuTpCsNEvOy?8%Tk10ZlshgDoUn74fsFmhA<7(RK;u_k_tULFnv&;`` zr&sI|me7ggY&xD2kLnBFORuxXOL#6!ae8Tbq_5Jgvn%z5dqaDNBd$7_4c~NO+Z_Lt zpU;ihR5rmctX6+-KXZJ&LEMk-&y3-~UB+KN@pXAlerQSm%Pf!1h}Yv;%T0;T0hg?`J-bXU^x##l%JhCWY%9YQ8T%)sJmg z95Wlot@yttZr$!1I$=C73sV=KpYBIDI`8&63fpMU7LICgYVkRF4td<3=YDH=*O1o? zgj~HTz8O#8CUTU#-Mswp=Jfb^UUl>5;n&#t+y>#B!F!%5naS?sKtrr?!DG&>0RH3X z%jzBZvCRA8bj{Bi@(tNeHeckIH)mcOFWukCj+7FhX!-U=Bp~NV;DX_xejd2#gc$N; zGl^hwui&zu9~5}moD?ERK^nu-u_6~SK{;be<0%txr^4f@R#CgYeRKSt?M-=b1KUmF zOZ)tXvNV#u9OON&4Ev42<$Wd~yfSg*-RvE*n+)=cPFnOkaPb;pswrhACkH|UOv8Xc zfZ~8a0#l&CiysvCzqB|g6$toW&%r=ILM=fc{-Kcv-an2w;Pp}F?>l%x2naOr-)G?E zmJ9YTH8^`N_`hk8abO;Zkcx}YCg>ttc)Ebf7P27CZ(FRA4O0)j#Qae+!H zlU)GopSM)ibk>xUy}DDXO3fyaNZ>UxzvH zmkM}&+<})vVb<*p1qg^Bh?J<1svGF(S4drS8B75Rs3wCvFeoEeSApxLwb!MIt~20a z>kakI)%8o0!IwMNaoQiFXNYIPp6)~}Z*4s8W_PEi=Pw7Uh1-3R?;Wn^1cPK;ME{&9 z*_@kOTiq$oo83JZ4S*K)AyDAy4>JO)u`qkOZnxfMiAf-u(A7`xl`KjQP4?G$ItmI4 zI2|>R(sL99o?ZQTab5lW2+6yDXOls{As|T_T$}SsxML=OCxCwn1^>J#nq^LRuKHI2 zU=cVVfidI{6OF&yW9$Of_`6FaP9_fT?-RxoSSiIRA8HH9UnHPTAC2I-nq=z{_W{+ zJYc1;PO+l&l7I7p7WkiOgkXv4Uj{325&6rBdS6|2e6a8Lmk;_H1^H^7e_2ue(Xr~& zu zi-wE^auXuf&N1m95q1%dgL;Bz{tkv0YPMa&!d$5S3jamD@`aR3yIzlnYN?d(SF`1x zik|D|W`IWy^|Wcgw?qw=3{MRCfI#a5Em;Af1hh$;E&9N>jn~eu&0}|jV;e1{dK0O` z#X4}(7OzJ~&1Tznx}lXU4F7Nl*zLg1cMZ3z-SDv^9claSfJYQMZC1C33*wuTg^g*$ zZ|9g_)M$ZRy^@jNybmw?O&jtr|kJcKB z5W5`Do_a2~xktVOf(_9ZXRE*B(r8roK1^5XxVk-F?fLc>gz?q^N95zti09u!I1Z0- z2-FiS)A?w+JB_JeX>}k5KeWzxAVXKe%}z409VDrAC1kCCIR5L_%r6f1_M$jRzzzHn zs}m__i9DuNSFu>+zG7KIJvM=W4=)~>{X6f8DxH88hExzinsUld$IyxmGpqm6jE zsNcd*<{}53BhVJO7D-{LnaOR8H2AfHg0n;#+{EI2XGO#9@sOUk?HfUijdlP#XeaAy zpD+QQMAz1z5p#QkTRfsnwDN0O#n1U-v7j|Myav~N?Vexpptxkz#D*la*lZNC%|tSZmaXBCcqNh53@0Z>Hhw)F~kT=1}IzGGZYS6UAN0^ z$kjG?aCVzzz|FH>sUq>kg(Nai*9S-Aa)2dY?~TBhDHoZ&a5?SM0#=&F45HbrX8nMr z>Yr|oW<(;;s5P@69*<@u8s8^!It?zj`>eD^Q5105tV-1%pPusC=eQdIC$jeI(A0eO z!qxS2i$6A)ToDQ-GsBZr%tv7be7u4O78ttc(|fiC?(H)6Qf!tXjrzhv&%;CQO?pV= za2Z4+(6DKmPvGMVL_;JN7=Ck|%e7H!YQO>l`q;VtR<(kTn+gYh?S69kqTvSXZ7osW z$OODW)nDa2H}c0s8|g)~Hb_q}yT>1Q5EkV#--&e?Kw9qt?rXAp(kP1N_-*}s4>#`wD_>v20{N5c82mD`P@+aV431P z@xB>qQ8X4CJ|i~G+?hZB9*e{B+LOavFkyz{8$PQAk;zC(G#eroBM7~Ihf$?Y*vWE} zO%MBNG0fLr-|)p_@XFX{D7$V6<1SDMdro5GA?sQ`<$N;UH0nV07o{h=?wmx&`TlA z9SQ<+jmluDgeW&v*|H@HuG6;zk3~+?TyB0&Y@lR&*to?1{pQ7fNEUHPHO>aIXlEd{ zpeow(8HaleuYQkLG~zQP|5HbRQnWPI1)p8;vSLvWh`O)A9^gWcTkTH|$FaaA*&L>V zoOcclXzbsh&~! z#;u|6)>c{&>}^-*(uFVC{2{8@OGIXE5S35x%XbJh8bPj19(ynKz3zSs3En7_bu0xU zuY`Jh$eliKAPclDL>{Aym2Yo-DhR7s-)VE}wSJf>7D=0`lN|N6xnGaDAgklr%mPI- z+Mm!H%zg)fAZfL;z5P2&bM>bKcnC6K-gGP~Wej%+jTD^l`k=+jpOxl0pCtE}2PRr= zG^%(Q*jj3}ax_+(@}Hf>EobZP@C{3p;V@$piA)AF9p0XUIRbOJ!aU;*zr@au%=QSI2uuAJ$OAkL zqiLpd2(q1CPk7ZAL_ZmusMmx>6LN9ufm0=Wz%?`CR~mbR9$ciF@5sL}pt9))B2Wp3 zS&twxOAxodB2=e%h>a*W@Wy3~W|OOIog4_V5s;*nDPor{XryZ(W88F^ZPa7S-bVF* zVm#%wMkN!s7qz@CJ+psQ%pFFnK;wVtXP`1rf!VownQNuQeSBF*Oq*-$C=Wq}EQ0-d z0ML*xuNzoBi%wh4VT`8GX|VXDX63rwD}}|U?Ld=vg!UWErt5lNtwRJJgVyi$8QFrW zwWURPyH_460ktlXjh&qsl)W%RA~(Ws=y1w-^LVZTfDM7uAB{WGHmDR#ut+ACk;Ju2 z1R}4u?{R+yUZdZsZkGp~xm46Nqr-*l&0ddijdBp|=j-i(XKS8}IJ0@e!JUfa3h}v$ zL~}rWQL)o2Yi|P(MqLEXb0V{MQM+)$z@Y^#wYh6PHz$2B0`d|CT2clBiP{EFb2n38g!UObWsg zOsuUgS_O$}$MXw53Tbh{es=R1HX`e=t$WGo5&72vYc?&^N)=(@)d+_qh&Ent7(V&ner_FZ|1)i^qdYb%|Kf1X^4V>;* z9W)meln9v*EsB3D8yJT`SmV^5L5Rlg!4SUc^^}J6&7G0d5+}EGvn3(&p2zVSOZF1UhfTtS1@m1mXr%U{hc^Z)XC&a0dxEfAYJkIF&4i7iXN>Oxf zm2ml|A={wOQgRj|wkM*;wwBXWCEE>_l$og3D!}!;Bc26I^%P5pspf=_K?T5F@@ zE{fAmYBm~04Vph3lzlmWc@`{VtVThwbB~J&84sSac?y~E?tPj$;F#DvM%wEmozEN@ zaQGIS#5Gb+-+V_W#<#+--x@m7lxBg(ZZe}4*vNoC3rdeapB>@89od10lW;VXOzPR? z`RMH3xa8OY=R)LNEqqGmn3$d@{6q9~k#inbzqIvyl7RJPt=%MI%sd+R3slm?-q0cc zttYfZHB`h<#r^~s(p3I$SF}JoUZ0_Tr%>{MKE?M1QrAyrx@}fbjtMv^^XBJ`gXjK# zxBv_WBDjn`9`c!*%cD@qP&T~aN}qZU75F0O0idRtuBJWBV|e}v>0K%o@n)@Aki__4 zg+W8g!l!PqO75~!^rhuuM{mK2jGYSbMamDmxESR)81NI<}Jb z<^CA1X1fPl7Oy)TVyCYrub2f$=4bKCrwC~|l5b7<_@B9%7#DL`%DZ30CsbnX zw#)|Qk2>E77LS_VRO*3h$!4WVELL$iZ{g(;KFUL9dc*CNAC=hHurJL+dZm1{0{d3U zANsg$M(RjmO`J_^Icm~k)7f5jw~(@oTHvQM)c&nid0Bxlk#`Sbq>wo(dI}gWbW(o< zUOPxa5!3tqGvWrDh}Eu&Ija9ynN5Y^2*O^k{vW?|y%8ioiH>nUQ?!HFb$}_JMw+^+Y76~B!rwvMJ zQt}SA75Dq>nVrjPib+Ciaj0!+iujQNB>Vg5QUvZN1tRcWJzvxMAi8fysOtW5!6|Eb zqI`QnR%kflPyC*M)aTT${yRV;W-T$t&)btP(5BCKe*()?(38oXT#3q69Ms~{VjS|$ zGmHUP__SkZ^MWD)e!?}T&%`(c^@=1?(Cq{3?LPh>hddP{_!sg%&U<*HM@wmQ;e>dL z5T;HfF;fS0knCRcI10E#Ihmc=f`|s)Tqw4vee_^(_ro#Y`s?yCj&oZFybx*4} zWx5cP*8_1$2`&s_Yo$_ups-@IXGT9sSM zutS$f$ooL-7n+o(x;9zd6G(WBawG`O+Q+w79_c6q@>E~2TG*jyK?wGKvSuMr+^L-{ zjM;jwV4BA5w4tgmJzsL3UoL|VY5e6-PDd6@(8wf{sWrPO^sa6;^-7^Kw}$7bC3jR% zen56|@q*yKu0^lA1Y##aLN87dN`QLy>~?{$D*Qm=DLZxL8_6>7#{=SSrpUU{@O~rj(P74i^j%Yo)Sz(~lwijRq?9 zJM~1Wg@fU&qVT5HoaV~a^33E+H&~taWjVi{{xriwPoY<9K)(5mtE@z-*2tjWk^AL{ z9cpJ(O%%caHQ`=J(jU=X5wGD0fxygImnH|AvCf5j|4+QC%q{)#7$2p~GSJW%AOl<- z3dJ>9I*Ed_vzzLn^a8Du6GTAPUQ2wi7IvfxsJ@&hPUfpjt%M4fjZT9WvGm{0I8lBE znX0FHC=#{@#gCX7L;Ygy7>d)1qjxnFw-PL>gc9s#@s+Y*G=Q^yukn|Q#~I7jjkE>O zo%G)Yz?Y8G7MD)p`<lOkqGUPs)Qv(ut1!hT894Nb3cEtigc^IgU&h^ca(S&-6qnl#Nbt1Hc`y$?;Vg1; zb8lOUVcfJiY!GRp?y&o40+$and%=t0$`@P5w^QkVsGi=7Q=(1t`@*6>XJ?>LT57Wv zOGjCmzFpiF5I(H8gDBMCb)`N+yJ(_C*~)smI}Rzul#RZ=-J+i1tF?7rG);6UYz^(b zwpq+nu$5apg;ymn#ziA7RfQex=m>DunpJC>vgQ<+pbv)9U|upA;JG_KziiP(9@u~G z%Ue*eau;zxzDhw>O&`(tS(r4*G+_6)2J zZzoW|XJNh512%P%?zrsh2`lKnQLcwf5xYMnP?xG1l$4?sp6`AW(@(kf%g-d#?u^4+ zYIF{K_cspcy#Oij$G!fn(IRK3`WgwP!RUDZ{W_$?#pGHv229y}I9#5eq#K{rgMuwK zs|j#K@j(!#L7At|Uau^~DcTQ;!gy+EEN*Vy~lV1YJVSqM_#Bsh<# zYA15fK)|BoXS!~^Ir>hx%I}L1W2-%kXKv5!j95*hz4bd-3juDKY_M?8kI#Q>woFCy z1!Xx1I6+tPSCZ~I=EDeG zJflNL#n3l@IB&jh?jMP?Njag-rU>-*)>Z$ zB{I!MUdBUm(3B9YQMeN|(`PlSLM^Kyddjz~W94H4yQ$09uA*)nXo| z@&eUK3uIF1v3OZ1aZ5_RK<(e$t;0uR;x5bl@P7~j{NOy7;gOMmK zKA)-Pry9nqmp`%W%5H9|ihNh9Q?S3zg9Y?^>`;H^7hrOm~;&S*6h;W&v+~0K)WZElY@ZCKrjoYp@ieIGfO;(X3$0#Ly7tG z$D~wX+5=yNOYs$-bP=1yuznr=>>>B;=JPm@a#XBO@{enhU%=H9tLtLcSm%B-R z=?YqxJOxB#DYN)dH~2~*zcRSh#+z>xzk4arjLbFyeVex&0fQgyk6~4uhAsx4l^XX1 z-QrZ-1C`*ziqDMeuVkA%?28BxRb#C`&|<2DU*#`ZtPabh(XQ1p2>e5qoW7g~6&aj3 zP5Pw)=T}<0lO!BVla!^IapC$;dXYNk;~Sg-D=8bBjjMF~>scXnpICozcQ5>@8Ps;) zCS$zZ#1-(IJeen2Sv5wv7_Zt|JKV&s5}-?I^emWSvDT2ZTamfc^d${Hn+j*kaf;nd2~{%`$6KbD?WR z3z~Kp1=%_Hr5z(DJNwI9i!>F(iLvtKQ=Bd-LT#RkA7H7TN#N{e4>Pg3nSBANDN<{#8RYDAX^5gu`#$|xYW#vq@(+Cv|Hr&eJ;e%jDs4t=Pz!3H)3un7z z(2wEjzShobbDz0f1Td)0HpwC(+dcA@HT^d%4uHPmoIP1KVi{)uG;Q&C>P>DDL#z5w9r`O}>ryC`C4nE~v zjRvSat%U=-^#Y9sx#Qa0wtUn6Tvxe}QProN`#)^9K2#Zud>Y!Gx+P@x=iAh2j|$$& zW`L;eHD~)StV+4?slFqv&D2;a!`YZL_iyjT{vxm)N6i?Earccrhd2p=I?K6_PrN4a zea4iMh4R)2izW(8@>ToF&eY?8iz5LZIG>PsTYX>$ zH+&sm-Y!@hy%FVBi^X3{@-ww5=d-ZB&O64c7E)Xz+Mv6UAghyD6nZ33#VqdDWY9C22Iygas=0$;@10+SYgh{V zgnF#*f9mWxdSwz;b6=<5{?wXPrfTc&`Mwg{6>(do&zD|la0anZP7x15V&Be)XU$Ib zTHN{viDd6sX=i=5X_B%cCMYK0b%WVygRs4G*Y_cRM%S+KK^FVdU-$*M{tuB(rn%fY zC3y5Aqsx1wKJrI|yeG@;J|JF?lO|$t3h*!xxplwVH581W5OHC}j7C4XxwnEh5OF$s zly%`vf5Jtk`&eQ6SNTOthCbBiYB>FLJwh{&m#g+=t<9T(fs;%IGEB`k$tgO2I$?@J ztbtsFMP*3afONWUcFjq7;x`tLgu51hdjm4PO*U16zXj8dpwT_v#c8=iJf};H1v`66 zt0#dULEyFl9>h~Owt91Ix71gpsANHd18nga_GICnely^%^jKznmb=&E=}oa5M7Q~E-@2>TOYg1Sm@ZU_ax(PBASqo0 zqt9g!j6EFhKr1dheXS)w0Lcx5YN(k1rw6@amx?r5^0WCkhGay?)d!mzk=GoN21yaT zfo5Hs;Nw7OP5r0AFxE_B8)*iD)c^;&BvdJyYtMogi46_Law%$O>nadb<*btdJG zh-w;4?C|eGJC%)f)S4}zswd28A=^?+wyYi;=I(DoG`3nwj$+3aPiU*>phx$KXe&!v zTwzyExVuCXHRm3lJ_lEKOJ|8J}@Im#EDTJpKq8`d6BBfIG zMP!0xAm$h|rhp8GgukY{c8k(iLm`2P#yUvM(*>=XRj&O3mT0L)z#J6F1=n_;g?uKfsm0@2Jr80Itjwyi-p6{m$q+K11V142Y7C7 z9u?#=GdJ;F;yp->jE)1Q2v(RZqSav{;EQqHW&seevo6rdd8JdV6ouj7qCn|6P`gF@ z?^eorUEA3i^w`u#jqPMHBi?8hx&=)G(GhbQf^$f(OE&3_Qt}D8ZWg{`T_xt&$Zao1 zuaE6YhM>n&Cx6QNPdkR#gUQ0v7mML=3*Kun7Q-&H+fwBNzeZ9VNiA2&3iM`YXP zd}4aiA}k$yy0Q9W-!$~og2JisUEKUM8BRJ}ihpYC`S0&e0|5eQhZTuiJxkTRx&0zd2@ThLq;@6?CL|kV#Dnz zeho(gw>?ddolft$*g2tepfi$&sB~C5sa?vsJ|E^^Rnn<=P z^Hfxt53mN+lJ%qJ7ivWBIEUJD z4`g8-`pflnBogUJiQxy3G3Tteo618k{seLP6yZERw`7*vT=tx*@Waf-jPvG(hrufHSQ-iJ(ZlS0MBH_Ur8e5HG}PzV(fzi^)NH z>;?^O_Wq3PXNM>Mbxg74EIL{36cbr)X>*mqoEy&j+wGUdW~&q>7XrQ_0qn(IxkCh? ziN;JB`m&?5%@-bX%FXwBbPFfe!iX^YAk)_q3|Be)gjb~wpZmNWTRrNuzeJB_4^S4eNl4XLcSEpPlXMA=y!PB1kkXj{!2j&@hb zDTwkx8G@w@tARX7ugl~UVV=kG?N_HhD>=On=nHGGEToKxi!-`($iVO(SOS2 zCgE}&8#37b2FF@@@aM_eo{T*oZRe)bnrSlEXoY0@tj-?O)BRWo2AX#^wI3>ZFupf3 z)K#-N_iRkBi-MW^GxbL07qqG+*@B%3jNtRYNQ>S!fLm&=E&1Y~LP~kP$mt@P5-=PR z@pF=^Eb(kIQsIOy3KCvZ_t+1I+ud$gExrcp?h%IvbGhxxiQgG;W@ULo*h`iqB20?z z&`pyT{bVySzrOpUv%a>=*5DWY6C`1kY(y18*D=Ms&eClq9CB^zPhw_UX^XT$fnn$r zSfBooav>ht)2~m8g;p;{wLU%yggt}e7B^-j!9dxRU4x*?G?!muHF_+PDXl)Ww6GT*&LZn%4$by^9ex*) zh=KCn7!XtC{{!9eU3U8XWT9q74O74Eyf!Yii-MLHvIPo=qVvBP1w{fJ=FXl!8t)H( zZ_8Nz@>fZR3<3B0~JB)$8r?^~))?+6awQ+I6XKP5q38 zqd8Bd-lvNBzUcKp$9q5oRhhx9eqg3>lHz24ySY}9dYYsc>D%dzS{OZh7v4Z9Qc*M zPj*_#U%cP=htwujIIESec=C>%92E@SA#!(u>Rcp4JdQ9>p-JDLCmhqMiq_wx&qtp@`{Cv*fKRI-$? z5selcU=@DWFX`~=u{&ID)5!<3{DmsFcZwQ)x12{2@ygxo5yZ{=ylv`e^-2RgmU&Do zli{wV-kaOYU538u&q)d!8BpzUQw_6_bGL8syGD6rygm(q-x%B{Hex^5qAkWPlv84< zIvxBDKknxhKjlCxZLU=uP&`K> z0zF+0vKITlj1VFZnT!JNudwaMJ>e526QpsL$k_;3)#_S=hzyb3)UEzN_JQSR3beRD za;&UrUC5j3VHMZgO+k(d~(7b`(i%@igse?4Jcasc{CdW^IJ%HOJL=_F&c!*Rp`?4rlKwtdo-`Ov`8ig7Q9am~^rjy{t zL;`S#|1ReSW8cjSU+qY64r!AdE(D^6aUbRW!8PmSg~fG=dx^rLQkca1NYRa{(yW@% zaB}~`VHMzQ#72BND7)o4K>|5&_9s}Hg(AfUle~}pLfLE?ITzR<2Hq}$qDd02yj$w; z-@yOK7u++mf|XaOD%RamS@@mFUzG{<6+Th=G_F2pBf=Mp&wo8AT!1J9pcCaIc5Ly^Zy8Bnxo z_4k{vzqxBKwcDUS7gQK$5B|W8lqN9n6}>Hvx_!igj*Z3wE z&ra$rbj!xJr%z+@rc# zicCIzUqn{@JjOzZHC4-5QG%=kf}1~MUB{tlAY?3cF0QTmz2MC`HjI(&|TLZ87=K)-YrKFvtK}_a`8XFqk%(#~-yk80dfg zNj+Z?;=qF`W3kR(i*`n!ZY0E6Gz6JW<0{&-DGDW$F424BZ5ylXY1aY%;-%0vlh%nZH+r7vUm5x@>#e$WB==U;w zYlGKaP>*@+Bx*skxw}^)n;5W+0}F)3$<1lRWsw%M!#Noc#T#CV<_ajjPXMLuX*_k9 zhp>>`hU=)?xL&q)O+;jd9MkJ!(XtRG1Cj4iW0ga>M{%GzMVt(jqV$=_)tSh<=+Tt6 z0yp4uCmsbE-}w=>T@yg7atnPRwomS`z%7-O(Z@jf*x~N0pxL>k)%~sTnYP(um?UAq z&h( zyOX>-853H8-Syk;${F`Bjgj|#q6-;$e!jd^`>ETk+wj4OhXcV<836D_-}Q0ap+Aogn{u# zoPlx3a#$Ad4UG!PNP!s!e?_chm^un-ZVDzHG7))>>7j5bn~XW~ce+DqxQ@=w4h6X2 zU5skr4YU0*Vmus<=i6-eY87g4iSR-{7JSkT-t5U-sI^>1ar#OM$ka*UjjOV7m(2Q& zP9hQh`@!De5ARQx{V+MVY3E6VupF|MkoohCP6PGkkc-<9b2)FfFE8O;6ms*riftao zcU0<8C(!!*J}`E%kiu{Pz#|fz!l=x5CTO&(sVF-4wZgZHy&j%SdI8%?EJglQ%7Vw) zb9}rO9IT#Nt2f$B6gnEO_e)fEf=-jEw&ZKm08s~{9=V)U`Sfr{cgLR(*Al#CS~Db71P~^F7BW^LlOxt0VoED zq5O*#Vvkcd6h3v{hsQO-jyAQo!Qba=78+-pX(-apUn{G6r(NG;Yh3|+fgU;u}Dp1ghnA znt)~@;QB&)KOKll@0vwobDzq$F0nizE;46-xZUA#OIGnwq{G3Al9y60fecNn+xmVE z?{}Hsplz-g^0uk_Ed7y9ur8u;0xa`VWJF z7YC@@?lP>F9cEFNFiS>f&F{h&XSeXcS6A)R#M`^}v zCXt|jL>+jY={7%V(~)Zy`+T9&D&aceuM_chdwl3968W>t@R@+5rEsik-|cai*z5IW zXxEDvlD)|bI$gIg9IAC9i9jpq*~=O8MZlMJYUXav6vri~UXF+5H>$Q;fcd@cqVs2D zOmi&NPTqn?Af)P$+qFR2S1eW>flN`Xok?ca!|DIgc9v~%1l!ui-6dFXhXBC_f)gaT z6Wrb19Rk4#?(Xic!QI{6-JR3fXP*!64|u=y&~wcU)m7cq)ob0)vyz|EkH44UPHjE! z;CwaQV|386T2Gi{{v`F0dF@f>xPiB5x1Tb0P!*)xgVCI=pAil$Qf@f({$|8}xkzS# zM=DZ@+{^5Ai{jZZL{?kk!2LIM;z}Vh30Z*ctSEf}%~JF?HJ}K|bN0E}BWOoabwJvt zum>&o(|dUlb@etVpHj^Y{wbuX!>t!cM&X#TL6>WPP(~qXOPr{}tD;kDWayPHTeVpJ z{6rdJ;SMqZ*eaiW%Rs|Nuji*T`rBuEOq24liUugq9zlJ8K085eeT0=3=BqYO^%7S( zDb`QF2nPv{LoO@m)_AW{oUROP2kG^nVtx?}8-i3gW;uQ+Vl7OIL+b7S8{|tqG)J>4-u7Xsn&NNplol2AS4sw=HLNfrD9i?btE@uJ|CY$FZJlOF z|0&c&E?RS7J6S9I{^{}kE-X4)V(w6jgT#Ke=r06_^0>hd$t~>f07plaqv?-Whs7My zrmp?%4lB!N-0GdLPF2E;#dCW+E$&1G&L#N?R>@|QCJ=^9%7M{oYwgjZ=Efs#!s^P) zcY$Q=*vdHYmcrv;V!F9|zdNu}x1#%5T zY&j)}BHuO?hoFMT6NMrlZj8cD+SH!gbBxkY`q5qcXZcTH>RvQbKDeZ)CS|WvU;9z> zauQLv&wqK_wio=g8I215d&2@(lfHAw19eO~a48UK3ipd{Kuio#{)`!o1qJOQOO2r2 zrN?>hkwF-Q$_%8E--*0>bk3rG#W#G6#iad6C{Tf$5Cib%fvl@(J$uy?(}fyD>PO6r zo`*HOrQ^iF)D(J+;Sj{XXxqUAHm_G4f@mtraY4;vz^DK1Q(3&}?fZ@!@iJd%X+%@2E(~ zKG=C6gcXUVeVoCuTBqH($BzZ`BJX=I1X)IcM$+IKGV#x4#x;iZ@4E6EDw) zq+MOj2|Pb?*bSX}?+uefyB;QpH*Zo8Hr1=}%^5_%GaXtthw|J1aJh(xCDcQ`zCS?{ zrLUt*R1p4L5WH#HSClF9VssTks!J7*E~mKWg7ox$KzMRQC(2lgeCZ%Q##O{Sp#Vjb zRC_p!rBr|Il}SR%$wf&0faQO@d}VCw@F3F8bx-EIdfB}@4+O}fLHSMk$eZS>RFzu# zDc76DrjAO3?YM9q$0!s#%$|Wn)UB}|`pd)9&Z3nMNg?W{KmZ`hy4(nrK%N>@?116S zb%$PRe&zOoAlE3c`w<)&ljc(N?nu$KzmHUsi^ok`2V@$(J#TTAf@&hT1iN<`(MFj09)V2eTWO;0(WDG#y#*npQJW22-P(`_pIk~zC0U6^j(6L~ zi;L~mWM>;et2S?gO73!gNe&)3h)n>RFiD4_gDFjzo5G7s>s7x#CBS38?GM&mYlqLr z@a$%!l^QteWP*6+U{J0?s9^EB%o3nLsG4Z9+`@Z+%92kGwlX-@IJ^Aaa*I_~1 zp<>*PkW-&Xf_uc1fnen?vLME00wldu-Ri3Y4xh)}2dr%>ryp+)K8vhewgFW4wN$cT zC8`5%pO8sSAYcm{z8;>$QQ_ydj#WYWN**%B#y;$nDN5n{L)G_8U%y(sF&>iy0 zG8_exT*ps2ThNIpBUtn^5YGC&U7if6wie@_M5O+BO~r_%9Ebcrj;DY1KOB!uQB3(_ z4J=mWf+$1kh$eRn&LXH^v4>B9e+Rb=_D1l`A@74=N@Lb)@+?89)Ve&Gec)xNv0U%>%MU8JtDNe7tI< z!+@rq+$c0xxDFh%K0(LtjMWYl+G)3%_x?0k3h_OZ@*wGe zMN?LjFN7;K_zmL=%Ynhu2{$hvB1~}%L8M?{%!dEG06dK*A$63-E;r!TjUV1JVQ{ZJ zW*yn&Rk`ip(zvrcao#0$g-RN&`WcO6B*PivXC+OxJ$_Lv@Yrd5)dsoj9k=a2tIo{Z z^pOS^-l&W1^yJ)tq2q=;n2x)F;mytzWKNS^C{EVZZC$ioyvR;EtyAqsOXm?lqtdmR z$3s9+KRY7)m0rIsR;y<|0H4Yg^{eo~`F(m$dn=@t>^s&w2FtdYFNK0?sx9h9js6yr zield1LM;u|L!e^ljC=j03hzZBPcTY zyV+9VNiPl(ASx#l=`Qe2V-m+$2$zItPlW#9s_n(zw7P>m3N zsn&(Jp{e4}jE}sN8GrcN9l2Rpx;)y-bM=N zSSA2Wby-$De>|B2``s!Vik3!Kh`RJ2{!<_f-*1r#dkNgeg7K({VuN~}Bp@CbGyIc3 zW)DUnCOj##^1v)LSr7Dmk71V)pH^E+?sJiru+tYiB+3yH79G>up<@ci2A@wTL5?}x zx@UI5SeN6EzAztA6*|8FivBOaYS#Zl_ztzKqPeK8gi}#antqf~PDu6=yyp7Ds*IPs z(bU@PeTn-@I61qN13=V6+HGWPhx}^k2{M&Bd@ZmcQ!pVnLGyeCW@@f`4w-kr?K5+& z6P|zyRp|(pnj9jP@1{{8tv57oA5p?AgSRPQno=i@rCGrK;ntFzKTl9C;$;_xHz*eq zevdbnCIpd_O6ht+uKPy1iu>j14R-WwL$Fr3;|LW6SlCoA?z))V)}Dv0rm4?_L-L;Uyh;k zhX1I&dE_5(R~u|@Nz&eqColqrgOpuel!$DVmE+Cb3Ewc248spU61xgMN^%7*5G8KM zJ#3%8NUV0S4w*Z~Y06I%$NZV%YtAneo@TIj6%2WA@XCaFFHj_GF88rNz&EmrF?Ym6 zpztaXCW3m>3!&9zwO-{6Cg$(xbNFBG>!|11BTt~x6ge(Ht^GHnWLwU+0f%1+dywGX z`%2M2AGP~+}#N9Z#?BxpxNDR7sDFz0sYgCK37n*Yix9?}n`S+~G(yB{*CZ4Yha z2DLIJU+F8G*9!U^FKcsm##9B>4aAR!No2pputws?ugFzPUguO_Zuy3mg})XZxB*09 zmP|TViie&yo|oq)kXO1qo}-WN7*!qjg9Fmn%6`65^JQwJ+B|!b6H9v+7ZZ7GDwW!S z06l+c4#=8JRvn4c*TB8EsWKEo%Uo0B>Jdj?(pKPA8e~n}o(C10$@2y)g6l3mYofTI zKwFpD&lCD$gz}VC0w@%hoj_3K3QMJFbQXpGS9^46AJxK79@$)TPVp4t+Seewp$ zt-#nY?09_iMYKl}w3yO&5|Sa*{GFQ?vc+b|B@0*PIVSsvHXDEY;|f@iN`s8N^0U|+ znNQf2l(KAIPcZ&d70e>qpsV{6Nt?(WmsKcK;ED{S0(Wkmi>6m>44H+crGCGIe-7b6 zZ6Z$dZ$7S8%o6rzK!76OI{uMV`QYk!S1&V2oj>BVd77Yi)Ri_BO)Ks@exO*IvT~W`bEKvU zjQtTE-j86SLXeU>WDx$F4QGx1s*!rTCap9#V_}BAnS1mZ==4^yWv7UA9DWxDN!!KU2@<>U;A15QCysaLD1$C9+ z{FfJh6tH+kuhe&u;pNmt&D;yQM3qHFiVak6LmP}nJ_Y03e(kfS2u59AP^zqW?T}kY zn!<+PLsfdqNn+=b*Gv+7yx@4h`7nO9`Sq};BDu;N2BU`bChH!@c?y{Gv6>3P_HEL{Ihn)-_>q-D**VMta59J!sP zjEU>Vc1FSjqXW&`(;PZk=63TW4DV6ydw8t75NkdU_{`GA7=eFOWPKv;Hedgi2+w1^$~)pu^Rx%c#%~cx?d2{;^?amL+}MIW(S#o1-n%}OxKhua|6;8<+DDS zM#hvhJ@e-6@!F5Y@R+;=qnldB{yd)T#Xq~^VZkVCLu_RDM4Xqx9u2vlfYAv>aETInt@;`)^5IFyEhOMfC~*q z%cd3W43j2wN)18KUKb`i2L5YMW1UJH$g)L~g#6$$-oc_5R0zhORWPi&eNsaaDINVW_G>XDPVqa0DV|n&ZB1`hXz-sZ;yu{lcq|`m%VnWls@uI{8D{c*H<PJDNf2^5LvpcaF%JYPLHw6kUbjC&$oRS)LX@1I! zzuZd&vd47hc_pIasFqFYgyO;DYhK~Jah<5gBRUIi)A>1MT$q=E9g+>TZIAMdCNPj5 zSscXtLIY|9N=H$P8}n{BI5@@+>1@S0=L1I@9bN<|#C)S+*XF+<(IFQ9B-Zk{VbwEj zgM+6y9E_`dS>6E?L>1uV4|7UEW#0MLLtQt=$s_cXP3ct7ZBzKdU-#Di zQUtu=hFQyL#hl*_Qt@0>i3=5a2#bJ%oEE!mJAJC_Q~Pi9$z_g??2tJypbKM+Y2cDe z9lK3W{itvH;dIt{Lfo8L=Z%r8w!9*yn1B8Niw4sbi^curaCew7N+8D=M=>iB0zrBH z{H@3hKxhBU2>!H!dQ9oaLRjpB^@d)Yf0E`v@Rm`7Z1S_N+Zc3H5IA}E9Rtv~7 z{29eG2)epc6v|_0>jL%&QG`Yr;-KdC6g)Hd6$}Ctv2ey!vAt*bH#U$|8)BhBNDJXc z+;z2})=?{SUUW`}nAgcWD=x1dZAqu+m-N-n???Uf&6rz^%j!vz+0d3jHk_jruNU(6 zEDF@$vhU`OXHo4FN(K|?08qti|2&{^jn4(+6VlJFP&f&c3JnPE#PQv=MP;QZ4Zado z&2Jq#GcwT8qN-3JG7@IhwrGUscch{M-_O-*d6;o@DRlK%@KDhgAr))nbX7-e9*}>a zgr%(B>EQZm^Nf`5`oGAh4t@%@^uP7}?IM=A8d97q4;ahHn8LES#~tj`>{x;fiBr31DXkM05US@R4iG^@rX=Digz$P57gI$$a*oY58z zkqSKi4x9N!NZzyjX||`1?b=`NWKE{GlF8Hwb507gu8z%_dQn+qEupFeH3424gNRyw z39(9>Vli0{hnHO+xlH~cI%tTzBa|Zw{!^VbMl6q-Z0`_Tx_uZS$gm~5roO9zsnU<_ zZS_8Q&QDeism1;Gm@57j37URmru2U?rj<>%hp_o;5GHedA{lK58Wlhaevpt3+2EF@ z4ZXAqLOXslBzWT7k1dc1f<#S&345l#7ROz4(EI+-mVcP^KNF}6H8!uH-S!*)!nrjo zu4X8nF<{#jeOQVk(*6d^M7&|-rbx^oL&Ro=V>ni@f#qd!!VtfBtL7|FFTxp7Q5YZr zNU?td;Z0me;6Zd~oUY|E5=2r^N+R^&lQ=Om8-ut%%+QiWAwHFfL!k4*<3FS|Nss`q z<%G@|Zl$H@r1fPQ?dETN^;S$i$3$j#5@^^(JWr$9NQFkV8B~hl7XjxwICot-fZC@A z^F&}0RSYHqMd_h34tt@j-th+C)el%?n0|97-GTJ$Pc=coyA&=XIe>rpIfhZHx{j}_ zSYd`^E9f$vP_SX@*pcO95xd3^y_hGHjz4&~IxW23;J>`1Dj~Tsp&laLif6HPHo%0> zQs6t5WE`LDVN#=P7EDBQ7qTiEB?Jo&s0zs;G738`HgC^GY zFWX_3{_lQf7Qjr9VrYsOi)^J&vxKmC>48Q_T?K!7Ic0V3tc*OYaDAc87oc~C72Q$I z3``G?tI^DSXl^ugs`aF)0&WJCVd~rThO>G*EqD>BL?-e>az*XWc^Q z%)#TA?~V7YYDFQe4g*rlmTqBPP~JEt{iIvr>E#INmFc=C(3qw?^P6N|4ZXKIbiii~2-I*%Ylf5X@OE@Yw0aP=nKRvh3S1s| z9LKz&#+fJGeiI{En7d{PWGu7bFb*Y9L8Ou?p9lr+6RN#MLMv`v?qhFXkL{B~RD}eB z!~!_z?g`vcLyePjE$Uzv4}*f5OyU2LxV~si3M9I+y5#-{@-aPy)Hst~$26cwAP6e- z23>?NIg~VF%*R(`QG9x&+={=RxT@eHY66jC0Ji>V+F~?`nN+brO6of~Q8(t=LZwda z8||5*5kd+iI>Mr@^B?(7Zdro>Z2NZzHr*Pqu@c$|B%|@w1t=%Y*Sz(lR{d)(rJz-m z+(x2S@YEoowe`5V|Dc6(DQ#RQM zVjuX+OtP3mD=W$t2}z*9kUH5?!>nMgC3l|T@nvzyKV{mN-Jorg4TdRyH-#3bF0&?O zZ{lnz+?jJtm5-D7e*Km}12g?=qV=pFJHzqDrwXDQ&^&U93lS1@37f8!dvW{}I2B#< z%IO~-AIv_`O>Ol+#m4Vq4J(74@3%Agk^}cSJV9hS zByNJ_9{33BPfs@{+6t=eeoI1BS*xIv*8OD7SX}D!(nZ6jcSSoNtitiTKYmikuDGp9;^b} z_ACU;iO9v(RI4lDZ3FPJ*1$`n^gPi_K;v-_^onej;Fju4S7ufTzMeFlWNUzO==vf(-!|!-Lx%49_DJLoM>mpaWy|i8xm~++-j59TE2|qr z7ZcHd^p4s_zbWMFK6nK{v22CAS7#{otW?LKgWH)0ByGLi0KFc5N6m_)3*X z-Vd*H)%ro2oMCh>!0E^K@wE;$$8l#CU6p6`Rxq~QFCzbfq*A1n)K0>sq5m6iO4peK z9AgB9!-m>30dc+Lx5F(NmGD1RlJS&XLHBf6)$7y3sruJNMp1^cA=2lLwAmW<7?w*f zjO#(ot&tYidiE#go1ggsizVQ3_s}dt^Sk14qa*C9*L}*~9WfTzZQ;0^5}V_L6k`$X zJThV2y|Bw9)Stn2w&G@ajGdK3Gj+vJkdD`OyMRAZc>65u6OYd|dp9J(yDhDN$v$fU)acWTIdvWzw+us+!LV<3FlYoQsfm3T^pcAbW`+h5@c`F*~A3-{S8D&t*#K zx`3@jYN~Qui^r!0ZtaL24Cr=j$`K{3Rm6pUz!XW%6aUzhURS7&#`maLq+K7Pcm^rCb=9mTP-5JVA)Y2i$bj#zo$Jx;V@X)syd6UjO1PU+ ziI6v}6}_~%x{Tv$ZWNwD>GVW5>zA??WFdgGVF)O1HFj@1IXYzVkWiH|E zJE2CMEZvlirT793(lW6UeF;qhST>lnoAqum>f$^jI#qmp)RbYF4){OGkUtFxVrO|F zHAbc)By~TIzcodBSvy(*el+;A9!K6{!Gf5yAw;{qV*@5g6-{WA#HbY+MsKELYSAkB z1og1gI4+lTg=N3lkNMsab$e!=2DR9&)5Pm9khsJ+o2>bWXkPof;xE2t8EwM&@^h;< zOpHn5jug}{%d9sd{4|3TF=q>`%;e8@q1^)$aS4+vuE)VD%@q^PTy5#*8H=_Grwu9b z_LMV1vDBP)|GpAko8+;hHDXfT70Z^OG;Que==+yGerCRO;J&A33c+=1MrJ?d6PL91 za7m}`ruy~g`^{$&_D|s*KG_oW*$Slxr zHbEHBqv=O;_!(JY<`C>!)J!S?;R>yQL|zJv=bNzS*o7dG|DZYiXzhnM$DP`^As@9&Qm0KcHP_FV= z;eK9eNsB)sR}Qk2>rhh>ODrV;T#ZI4F7et=THG^FsBTT1?REHYeL72ft^S~IFcd&I zF6-i_Mpsc+Ws8iT%V{7Ne1nEGBkH{Jb!)Nkt4NeImMmNcR1_4_XgE|2&#CpXBL`|9 zM1hzb#3gUyWH&DFUq%U5y7oTIeWQvX8Vxth9v?=XK#|+Wa=tRK;SWN9{|Q(+ogF>P z=S5E;r=K;cqz-VQ+!Ts~0ALw`{vIuM2_zH+%+2EbOG8BsYE>@4#nI7lC85wvYb}^` zF`+5Z@}b~=HNhB^s2YxZuL#NQQ<4!Z;!nJ`rG=S`_Am<__&$`-6@=c4nxdF?u_Yci ze+ptK-`Wv|g=>qf$f^4gCw0Zw>tkOp6~d1>42UqUPhACjgV3ANjWl6tym`)oAj(8jO};wJ1f=t>MD*QwP!HrnMpwNk z`(dey34WwP&LIs$4TZGz1IOd0abnEEHZQKznlz!Pc3nC zNoZVPq8i#vJ?v%jj~!*sD<Rni50SCnHy|~c^ra|H@WYt@g*NK z^;Gec5e?wHBI^@Y)~5f+PXpel-9Cg{9XT_f&6Nw$5>X%K1gkO;VC5hhqMV&lsGBll zXJ8}#4CJubGTUODupu4QcX)hZa0WLK(kBVoWOqA~A@uAY_S>|9W_5^WTgqX6+z9^; z#d3{VvlBY!S5kY>E4bzAE&8)Gi zxDF4V4igYa$7%t6kou4id}8?a5107W!-g43Y&BU2?9@@O_?7nVE-MsnWT;jYff%tH zx%9S>b8Af!8Q)wc*djBuT4Ewd{lW@i(twD$xY7dw+A`q?W9K*&{u|!fHHF&s zCo34p-#z^hTUu7B?m}&`l3f!}GoLB^gLvmQeek_6`zuW?ea>+E5%HEHRPZ#L--b|? zj83#j!vtG-=?ATxvP&Y^{)$B`QT`d0i4~k7g}hdVO7^tEatNm2+fSqUGxq(z8V!8y zC5**Ch6QKA$!Lj6RDsfnI)%jkmC8+5-kvY`l`QU*_3YPt2~-x0!9g(ZWDLAjq!4Dc zdw#}{{X1UJ{umH)1O*ZPohc2l2#3#Gcl5YZ-|g&}WYlXFbq1A7VpIdK{MWnsgglfg zO$+>u5-L_8BxbFLXQ$bqsxFZ!O&4T{{pK)XiluYB!XHALt6c6N>LXabg?&KR%hiaO zEx|E0xnHA=obbbq#@oz(`YX*Io*V#++r5#*>xW$4Gwp(Qm;WFT;2qlqP8s$rOmaO{ zkBFOwX;A&tKFd+dvSt$aX^q4u-yLn|<5UaLQCbE6od+|7f(+hG44v+~SU!4Gc8q%+ z(OkcQoKank1o9`Xq9Y{b0#R;Jl{_lbBLx`csL(4*dFExa0yA-8w2-D~5_EWUc=4om zm(^4U2OGecd}r0e;iLW2l1b-#d#BIFN7}`!$3@RiTd@H%3H{tUaCL5Z@@T;3@6FOJ zLg|T-S1TQTB*F9ubC{lv*=ej(cxp>eFzH#}20gRc8s|JAu9*Gme&h{p=|=6!lH@Hi zqDId2z&Yu|{MRCDuGG%iz*p39f97biqtczx+8CuhHTi@spC`Mi3sI4xHoj?|^Pz8v z@$?BzYfOMIJfF7|8@2SSL3ZtS$JC=UO69~r_dsvY(5|B;PfmxhjNzouClTM^i15oW zShIUDjVH&-uoyIPUJ@4PLKOLke+waNZ>>etc4ng0ArZTG_G-)0$WV6^$xegV*E9Ux zf;6lR$m>H~GB~V_lU&V;e3xAJPrDSs9yXfGjsoxm8hXz7vC4NK^$98@#{QvPixrgb z-fn8}L|81AH&``898EhcO1r2`?|!^}Qxis~;0y=D(1xtnikYZR!;{kN=;iGz**6Yv zo5LuagPq>kONk1$2m4O-EDhd&t$b|?D^Bz3__iOXG}Mmds`kuK7aIk>;KdOU7!g16 z{fYeBzS)Q?m`7bb1T`-^lNMPlBfUB`c4~JnD z=bMyz6tQ5Mvn!;vX3;aFFWZFncEvilWv+KP?)kR{tP2>8m>+&ijB%S$5A+fP&{Wk3P^%kNp>WWX+0yaceh``%6l zbqWqn2D;BO!YBXFuOp)YyYt0L|28Nh4$90^Y;8ezAY!^{*xWeOV*~y69A9k4+c&{=dWizn82nQi0xr zt)nOX$Fl*+DiJ6Pd;jm>!3B^L97?27KSn{Sj5=e5RgPP>@qqh4!kh;`;IS zz^vN^CQrf4jK0!fC8VvL;X3oWJA|pFY&5oG*gclZK$MWMIbTm-Gn{~+;lzn8ox;5- zDvCef_7=)El4JM71gGu_wF`3}d$1!-f2w1#)mFxQb!`nDA3xM(-R*~~Kr@ckaK%{eAMj^$2(lEFQw`9`S1n`DF~WqNt(nU$H+n&2JH4M$HatJ!v-yrNJcKG zE;SejsMlZhWx7xV>t#MaBffg<&>4_U7TFx~d^J8dbIbv!M5~ULPxkZkd%T^I4eSLD zk&KE;)aIzVy83Xo7?U#ukKH`(vDC!~53!^53e1xWI{SJ`=nK)hmgvxNPT5_yzVI!C zuuKXqSL<s>+zfUvl_xrMO50hX9^tr@G(A&ZBiX~7ZJo`7c7V*bljx9`Y-cG9Wk z8~lMEB z9vtDRsu4>ebmqql8cgZeQPDa53o{q!SK(=}@0aZ$tKwtH90i<(>b3F2j;)M;aY06m z>MsoeiX%U1=o$LkUwJ5~KMQV8trh8xjK=wOj^VN!R9|C|28eb|^INyd+p zyM-cAoIWYU?@xBa_Y^XrErk5;6l7dMB}XRWd&lLxmyUM4K8a{b^-)Y=*cS96n=*NH zeRMt#g6$J&N^(UQXsjFvwecx-h>Gw@B!V+>dTYHG9{EYslY-zChurgmATTRDq z$jg7r?udla)9%mn`Nf>!(PkD=X0sb6{@>BwuU)GRnfa_Kn`C-)h^U`+K%qlzx6O9}*0&{gVa)IiVLv~dbeusHh~Z7_c6- z&%qJitCtrUzTWGU>0AcUbuxH}=~O)hAFHe6c+7-y^I-=3M#$3^ksJ77w%M{wwT?6Z_7N{ zmll4%D>Z*ou$k@ag>oeRs>G0~WBB@vInShYF*EREMp%ap!9rY>vnlk}bf`pSdhjqX zIEhVY_R0Ii1eZl*CRWb95ssb;S@@|(p}xUn;Pm^;rd&PS5%d7H^EhYyn_%v`cDNvB zPJW-#RcdnLCLvl;%YO73@fd8UxR_8S&JTlakIb)SDH5?FugohqHC}t3Y1~e#7KW=ZwD%mwIqJH;A^>~VhvHdlnrDv&B`+GGL0I)deOfwjSyN1Mn4m5 zFY-z~`^#v26PiJ)hSf{}F7U|?^_&dp#jL&$fx}4^_RV6e4s$FvvcE}gx`(T*Ijuj{ z;(=@3T&=+pue+xwu=n}%%xI@e?rM~xoSZMM;w*8RG&|J0^9kz6PDzRZQR2!%?Vnh0 za0boQ&9!VqkDd8X$p;wd57u{6v*Xt1N%vbbTxA75x~N;UdKD0c>9PtZ%MqoCRU8G& zmYgcQ!bh4WuRJ4v&of%#yfmI|H$cqP9Z03^#bS8Q zf)E;>eVWQ)YPeEzOp&|ORTav1YoVnDf5Ts(yy0Coq}b_X5=y`)($9eV5n8b3;(5{83XkgM{k#bNY%Ad5)egQ#KY8g^8my^#xIahF zmirOwxFr?J*M4$Ytkmd4?bhLa#Zh-#EB?&3x6HYH{p6Uk+Df_BOcE%SH-EtGc!<{iw4eHX)5h6_ zYbb?nAh#YNxZYt@G;?w>ecc>;q`7F(@nlEdj76J+hsdcYPOO8E)2S9I+i0VS zxpRsc7w;{afLf`Z2=ieREwvNe>769xroKr&E6N;&`*wP1I*%?;1n>L*WN?`+&#%C)CtE)#hz;ZI5$ zrVlq-OMm*G*&KX2bQ;pUZHdMmx8WtQ!sQu05gCVXDdDVGpnw8~tU<1*!8%!;3kmA` z_d;5Y(Q>Hvj~B+Pz9Wgm@xmz&yNJ7^;d;B?1)H0Z2c2g&zND7pKd(7_PLBLuY?o%z zDfS9z-Nqi>7|(jw8WK3W2f_X%va{P?dT*7 znCr2Y8HwOMtX9z~RYsiec|GpPD^T#>46C}=?cAg|8*twjpj5VzkG$48lD=Jc+Fh%@ znT(>I3>8ZK!Q$)5EV86%nsu|{HI`Q>S7%py1>C_LPZybohlg|SP8McboLZPbicWx3 zA${HF!;6kgdzup{{t^Qe5)k6BUd${zPf{6=rWNiXJyWif{g>2pzw@EveDy z=1!pwzO;14S(ta$y5_F{^Wxhj+UtqUX8u#+z-d&*^tGQl2^FDcR(e@qs~F-z}x?);J#TRxPJ?xFh~2g3yu;;r=ME0!FRYxO}tI==-(e8G;sK805gQ zy15^D?7z!rsqd{@`6F$SANnywu+nA4vF5V|*qykKdzY^S)+)*k{h4?B!4hkmvkC9-s-Yh41)xY=iAE#i)60uuAOd!8 zQ;7%j>rNEEDIl~l)-Vo3mgR83(E-cO&Q@xvOR}egK+JuAd(q$t9J7Qp#&A9EN)kEA zpA$^qTkexuuD?fBCo3>o`=mH(k1#yqqm7V?!W5OgIL#76HKniA?btgwKNZLD#pv_xf^q+Fwp5gX{NuXA0|W1I3gY)gDW7WObY3^5HDq^r zsk2aY#WqgdP__*F!6R*NBQ_%>SyfzbP+n{J&tGGNf6agWPi0>n6;<244I&{3(nyzd zcY}b0bSn(uAR!@LLkuD%AYIZWT|;*Wg3{gH-QB;#6R-Mwe|@a8SgbS5x%b(3UHjVm z-uq3vxMv|F)==q{{BTw=j4bziNQ)+Z>Ado_|J(Jsxi$w}UZ$AOy044aO_v$msvOwxeNn=14InG^FQ}_fI_IZi)B`-J%9SQg- ziq15Y8g~s67`UgU6amF!`2>2}B36HVCX@^&-qMe%vYu0NPk!Y!W*{tPg^wtOA|LrB zBopI$u+u`xWyiNBwf^gBCQKC+6IDU%cN157NKq3=pePB>Kp{)6Ygp=A@oVE=bKaZI zY$FdIPlN4&ULA=oz8b-fXgiT7V2~<^?ZCC4E^9l+ zz(7ygWE8_WyOt@N>nBaX?cI6NIV2Zw5v-+lM|0KPS!bF2iZNBX=>(xfBcE`Pa8F`V6{5Fik?xYI_ z%iEk#aB-z#v zgpnsyoC~uls3V&LUG=@v4=Z4~y2X!964DbkY&dS1NiVHu8nCm(dNUKhiV+Ch-sKf8 zd5OFY+h7`Qk70Thg7o-lYH;_8B~WLxrkA}V6IHRa?6df$(pnX)WK95eGNEp;=WX*C z92x2yPC!>C@C6~k2ND=WBQC-d?1{b_TU3uxR3t^8x0^9sEvcNxoP}78&qAAEgmahU zqIAhuLs1Cp~dz^ifOG!gHHXZ8hX6k9L}jElC*h1=AC;IRO>rB zr%XikFwm+YxOTssM-a_74Hj2!Nq~2@&#eQ?W3|}jud?Wp2e*!j8lxkh?e!)J9j4SY z<|QG&rnV&8J1Bi4^g^rd?FshfEyB(u$qBcZ%%g-@(d%R?bKbD`jnpKlx&$GJhX7{j z_d>!Tp--48H;dGai8()a*}(NlLf=1z*9WP;MrfzlN&5EGsOAXH;s-^WVDFY*778+) zIUS2T0g_UZGG3eWW8?}L#CSCnSF54uGdbnx&`eDvOK7xM1*klGHv=fAYYtwb%&KU( z%D3wIIvHOO)m04C9Yb(yPra_?l__6Rc#COZ4MijV2a8OPwP+v%b6_?Ym@9+%#hds{ zhxH>g@-eTcFGIy{W%c#-9acK=HU~3<+Ez%SZKsv*R9-g0Y3nJ?8qMMcU3LYu-CP^< zrdKF^kK6J-h8}g{$JMW#rL3<#nHx0%c}RD80hb7glOC6tWiLPKbV zj-D#s&poZI{V6K3@qlpg!MxN_CpVX3tBDc`l_f5d-@DdfTn;Y9u3RO*t%`G+NnM!c z`0>@eMc#C3Zo%lVywpg0=nxu?LzA7L+&FCQt4#9fP3hIi)D1V;K(}5>#?sZv7M;|i zF(KFEcatTOYZTuioW|u^hx*6C%|UF9?_Oe=_ou>(Ty2+K)`P07GE+QzXLK^z-Ymhl zQ?T%V7H=QYsPNfMiPK>MTRlF+C1d)5))!53YOSj{_Zcq+Tqiw-Ar_Xss{%!-o$KaCmQK?*bY5hFL!G zttcvd%jwP5$ISam3}sYrRe)e8>~Hbfot=hD4Yx=`&Dzn#pA|gKn#MbWSYv2HG^*%_ zRmO9&WvgpoyG`x1f_C;ohCT?l>+6 z#?3}*gi2HZW(`xY?s)k1Fq%-K*DIDjtdQQ0!VbJlD>k%#U1Z&|g z2>@@TQC{8NQetslO@kXwrr_vTqWkKJWU8T{b_7<_zNg<;l4$s+o@#`((26w%C9c$z zWTjy8j`o*w6<>-SPuJLQRLw!ls->mIbsJnYkK~Kn@Lq=<^a#l3RKEt5xGrRudz`4% zRQfc@p1-DSl3 zY1tZFaj;S%Jd_{bC*!r#`&_M$PYBq7%wuKyB4BH&&M1!61$uC+W3FCsHp!%-K`7bt zSk7Ks>;rkVrEE8~$X>Qj3_h=xZ^b#kd3m}J5h=sZhmjl5`icW+YEa}kfU8U%t7WBg ztQeSvWc1vfWssQWi(EcDA-XDox^iXb`=Y1h7Yb~9*iNjG|J?Ik^Ha`(PogZtG{bpe40k)fk>!sO{+t+1{*$D0% z?n1Y?3HT2VZti^v#4<;VRwrGJ;D&mnC6SU?IJRlN$5{nT=3O7V*|I({D51H8;!QNl zvg7jBub&mNL7VozDSnEoGn{#3eV&Ek*Wx#1&TS^y(C$%S?Z0FMnl_DYeb{Q@=mT4* zln(6SxassiN>gP&R>?B@$p&sc3mrqn!;+AGw0T9565wVQg3Bv<>t(n!{P3ndZ<<#q ze?Ao&!>N?re4}{cjJ6O5_m^FYFVnS(gIA11Hba8 z-sPdS8SSa32r{Ze)s1IN1aF0ej8xm-InAqSY!kPCQyGVOe-P(t9J-!+#aIjFkhkvO z!{tqs5vkCO!J0$AW~(d~l#<9o+Codd_jE7#V5_*P6JK3jJ<}gs-kC3j+bm*wI}#04htxbMzig&+ zGUYJnIg!(KAio+T22DS|3)YlL5MD*BA@v#YnX$_=kW+j_T#0gWHP4jyEQ>rxQfH83 zQ4d=8ct~+7UhI@+vW`PM$@leiy`V*j)el!1DffUv?Q=q&tw9-m|6B&E#E~jX2obw+ zBUC3^O&1y{SbZ~RqS$|(o?Sq`$hNF%IEUEE4m~ib8AEkjj_cQ~q90{{l5#{fR@9n> z8Z=C;(cPo>i6M#DMv3c84cv3>R3!5r5;t7PV4Rh-_|9YfXm-u8R$o5YnUf~m`D~YZ zbim~kk{SKV)z@7>m91Y>A7jKK|2%deMg$p0DDmlRUTHxdMAvfx)6l2G z3F0cdcTmPq3${nc$$YX6WD06CAlw0c{W^8ovGum`<`l%JnHL4SoXMn1aUWdF1F8;5 zS=S%(0o%sg~JVMC?Nr^3jUqHZxK-8FXNcUU8Au;?W=)s zYMFP}=LZ6(U!{WZxgBzBBHh?@8{M^cBRPQ5KmhD4#@-22Zc4>O&DHfDKRI&bIH5aP zhspt7pt9NTl<2vP;IwZB(pA9(znXExV&hn$%4jRE@>~9^ zE^DYt#FymN^;2yh7@CGtXPQf*ypqzWn+%t;hhjWRRcXt_hwN;+1L*|0`5Q8qIsXBCa1z1G`VH0-fR2xQGYLuetO)=zD{ zd(S>4b&Hj2*dvYmR6l^TH)}BWE%LHh8KR{u%v2cW__#DJ!8h*{*JtsIN8O`q&B>;0 zV#RDtQy*a+ri+^STG7P%5I46i&?@PVI_I(X4mqLRw(RD^^nt;_(L?%CMz>GGhgQAh zMBP8ap#XS$?PToEq#IF3yRvkK>|0d`SV@SQ)SX+|; z3{hOb#^!sl91LTAbWMd%M#kE8FdSE5F@}vs{SXrlehXzkJ|3G!t{;fR%lsnXth81@ zQKjP&Sp(EQRg;!RN)q*m$Hu|gh=Fknf|{Q$TRLwqY*&xdNGYZ%$0?`Zh`qo@0zI5x?8_WJUm_jK-;{*h#oKMAjv#JC@oYN-ObtmtYbB9+Uq1A%!LCoruH}akz)ifoneP+58U3 zPc9Z6zZV>F;sz3lqOchN9*B?i0ak*7!}*UWe+vYMf@|^slh^lRH`V%|M*nU7|NsA8 z=zW5vo`pU7OOC�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 T>?#Wf{JfM>dQl|t=HveXe>v{M diff --git a/docs/src/assets/PR-code-btn-modal.png b/docs/src/assets/PR-code-btn-modal.png deleted file mode 100644 index 2cc4b1b279ca35a8f47462bddfe57a637a2a6af7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26148 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 NSwT&{Le?zk{{e6e3YY)@ diff --git a/docs/src/assets/PR-header.png b/docs/src/assets/PR-header.png deleted file mode 100644 index bb76c8cf648869bfe00d48cc1e5fc2204cc1b6fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26895 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 diff --git a/docs/src/assets/angular-challenge.webp b/docs/src/assets/angular-challenge.webp deleted file mode 100644 index 743d5aaabee9093abd61a3610183f22da3cb514f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5386 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 TH{WgWKZTq;Ze{VgogeUjhSt)m diff --git a/docs/src/assets/codespaces.png b/docs/src/assets/codespaces.png deleted file mode 100644 index 2b8e8a43cec127c3c7b1034e247c9855e5ef6310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32721 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 diff --git a/docs/src/assets/fork-sync.png b/docs/src/assets/fork-sync.png deleted file mode 100644 index 7374facc026f0f9185873599be6dfbc51907ee76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10722 zcmdUVWmp_b(^i0J?ID-q9}5{*^b!c;K`5wA1Uo%VZE zBD`r_Av)cf?kL*Ww1x~FdL(Nlri?%fKVISY(L+$H`UXUHyYTKcL#jxF?H2R2@(}-=V)It zl?-~r_ohJ~#l75%WtZ*J48hjLh2-;R(s>4+Rycv!jgLTN4&H||$+NW3mPDko;BI(s z8ZwE<9s&LjVXR1NRONZ0s~A`7kyi;dPi`IcsyP0qGG6=j*gXE3Bo~WQO>M6)wA;F3 zb9VYifOJ4J%en31@7q+Bhj`r!A7+!~omfM!l{)ecgv=z$H|5URjq>;du_7V%RspI> z7|F;$QA7HOP|yJ;P;ihQG~~pCoRF!B@`plzTrnW0@GqGEg~EpXg8kn z5|FEsfejF7Y5UE}E~lDp3c_m2< z6c+uP95Uh|`DSNl&CS5z=;%oA$U<*rW6Z$B#l^+I$jrdZOb5ZBvvsnx(*x02+LHdo z?yurg>T{z!c z{Fu@kg7U^U7LACE`1zP8&KB45NJglS{N8=U_INOv%Xn+h%IGNN+I5BN9hy4HC!ud- z{4g)uDv^9I(}+3-5%kN(2uF$KL>vKy^r9J(@R!9SA-xm#gnQ8-_$V)sA;bSWzPF7x z5da`4C@4fuNvQ?{17oA;>-2&rWcU!uFDmMvm7U%1w_zwDDLGi~pdQ@y>laZFy}IQ1 z1X%p+)^O=t;@97-FI6D&(hP@6_84^%3BhD}+ops>5jK48K&I}WE=ZY^r4^giDJ&r) zlP!NC8e#I%FxDYxp696ZZ}CtyP!mVuZr_I>^7x6JuKT@d?q^PUsk-mbV0Zu#L2 zy!1(aXbS!^wN^Ps)bN+{cqZtn&%`jP=Kl`>kt&>I992@`!=N+_S;RA(_gTy9BItiu zh+lwcv{XUKWHc|RlaTKd{xq0L=|h~%^N4ZUd*6-?CJ?cwZ74kS0;Q)}s}6!rIm<2< zal~_@c(P5^v z=a-^OL#%zb_qJr%3{#SlDm$Cvr)hK37W2I;x}Y%+>J5dT6z-4FfV0`(1o>KIf4a&| zHWELXT6&;UAVNH5u)}grQViDvwMJ2VXJ>S*px@cCQx0(7L9xDa;Ijr@b$#b_UP8w_ z_MmwO0jLvEC|Pds_hJWoiSE878GqtXoYHHN;P;WtzyYM3TMN#f;)Tk%C~~RId}@&p zteBi3O$l-FZ>jzFLg~7b6^Q7wxmJ8>J-1JMVrGRC&OeRY9&T+mPS&KITrQ7DEf%VN zmMppSdhkBePTUn?95vos22tv0#nP)sDOV@e({tF@M;f3azmCC^(T%|XHq?eQteu$8 zRUEyNkZakIZBRDq|5B%^PrX9ibL~!Lk{^VjUDA-1OFl67j&I`*EjZ5nlk(o9z>mXQ ztCE3v7)lRNk64teLz0Y*oKHx!eA!Jc9ClDtld-OS?zYjV97PW#IvpkJ;fJAmyTeb9 z$F)K_PP-x=g^BqiZr3Xes^b%zKf`%12JXrf{|GPgqe!ipYB|zeH35CjiPnoM@K~ml825pO34mxvwC- z{ySWvnEMhEHN~$E=65Tk9cWA^i^$^`bYo%fuZ`lStY)rvHl2rS2!y3mjPOw+P)RUm z{2AVaQ_?TFT*b%(Ee>53qXv^$l!nvf$|X1~=4(xC^Hp0S$tWlW(uEMtD_0^$8S|BD znm_Q`@zZOG4^Ob4HH4}CD$rq|v~ZSw(6;#>8mE;UHcm!y0quXetq z#a;EX+6vvZx!4(_J;&^f;jlR<3)6iM%4KK3r|;W#Km^!UX*PjjXe6$RJT_xHs$3qW z%012(L@6`Q&>7F=Jc;INjDeJBK9JA9^!pcAljViOnJ0t}Kg|owhx%qZw z6?&aoqKRA&(o7wXr412E?YI(cV1;Fk^8R$W!;q=d!CJtkz`0XrrGB<)$cW?0P_(L! z>sWLGr+q=P95;jBnx0~|q;g+xZ^T?h^Uv+)JJkvTU6056^LgfRrS|srO7e|Hepb1} zn<^KcJyypyK`Qi*baC|BQB0X)1HPvTR^IqrSNeJ}ln)QO*$;Q-84>yGtYH3%K2AT zleXOaO_AgqlaWps@|2@Z!?y5r30BRIKPpWYrYlV|viD?~a#~V&mkhN}CrlIgtV&9( zD7vO9e(+V-EV~Nj$fh1FPr4X%i-%y*k=I)5&DGfk=uAi`N_My$)fT7CIXuFnWI0}2 z9zE#FB$_{s5`5rYOffRHPWb^kw6_Ik7mA^V@uTuGYSHhzyDb^W@jO-*>DK7PGH99# zc8N8emq;fui&!47tV|-IBM`cuG!uQiMn76IPID4<*IGLxGqw+Re>nEoZ)O;P?KrYM z_UH=69Iw*kKte{I>@HYhHs3*0;&VYxj{5WMyT}QR2pcHi`_b7sk_gBAh6)bW7q&56 zJ*Z1mCJ{dzqkrA$O|{F++usW2Q#mQol<0K1a%oYBm*Q3XqjR*sJt%d$Hlsw&*`lb2 zqHzHi(2w8+dWgqkf)FPrNpCx@r8ZW*9`Wj?rTSwFe=XU=81|MT0Pm~mY=oP{wOuY^ zEi^eKiZ$%XWolTyw{zk$o)FBH>J^(W*c@_I3+0w5<||@K%xsTlioMOx)Bd`rk#B=p ztc0C#GsW3fL5AF;OIi|(&g;1Hc@SVs0zkjlZv0xpE&BFNKby(CU>XZ49E^SD5o*uD zv46K`(Ou?xGASw!=v^oxgZ~UxPjEN%?5Tkm@M>^(>lSXn&9Xr#?NJGMRAff5TYdQ1 zgjAR-f%$vm#er?ZtrbJjT46S;`FqvDD~lxHkQ|M|qFP6{^V>>vnEQIW-HeAy8$Z=D z_v47QEhjiXYxh_N?QbP<-Oe&9VBB2da*?5mi97p3;BzyN(Lz`vs}hBpjM8y|vccwR z+hc(fd%XQsA?Q?`)Lkx*SEKUl51Ffdlc!hiE??`Ko}ttmL6JzfU9d;-sM^GaXyG7E z(Hm&`EXNi6Vh)S?#`9^)Tazj3-O22bhrRRwK(&KKnaDt_kzV`FsSW*U^5SPu;HfnU z6EpL;Z$7)(w6rFZQQt<;&&ee%UH8YN+{>QrO8+Kz`ko(zanO#)(K>E-@rS~D5|*Q- z>2L_I_EB3^w*+?=j@d~cBGw%5_&=YNG;G8>3$`SlWZw$hpRYW93QMY8uZ={o=eFC4 zaAmP5fZJnwT&vrj+$8W!R#5TgbbHO z=P^O?K=y`@V)b5=qHGu0Rh8Lgnl$3K6n2BdHDF=}gRyz$_U6tJL#Q>4PC@phN%1ZC z>ab|}1{2c?c5^57yA5cY0z*XfM zg0e3HTi3m7k+fG;?G;gbi=+8Mj?OKvDA8Jd<<(uD!gz@r!sG8nlYU4n7fob0qmOi6 zX|vY#4G35`D5=a74+^FJu8oIfE!WJkL~` zgR3%!OG(lXCuzRjUGp*Usp?lQ=*##0X~dMJ z7WgGkt+mTNNQ9kfFcpl^_8n85vb6i?=D$% zdOaG?t7$c=wT>D*YI(^#Oe%U;UEoa$TX`$Anq8fo){Z@t;%?2~i9Lgcxrl!aJY!o?Y`YBj>|9PybZlVV( zZ>Hac2HqFArk@S$$PmD*u3w6-i>MV7QFLU{B|cK%!hddZ-hVQWl_R)QNxV#^02ZRe zE}3a>qtLK3c!)QBGbU%!t8#`iE)f4v=my)9z^stHfZJw@RpP$M&KI1*&Ak#R>zn@R zgG0*C(!9H>8G_s1~H?ySntRwfx)V||tuCv`UU z728_<>AiM30u}b}Fl$l1&dF$&9OOGGjkRQ(wZKW!+te$TP^ECoEnZZ#ngx{yjR9b9 z!ta4BlM$}@w91NAKn$37(RV_l8Y#e7;(R%Td1~g_HBblYYM28v~=Kq9>&FM6e2-%GJ?Q=8TQ;T#X|bxy33^{dsJ*jM-{TpCxU9;o1i+-nYy{^i9rOND)OCd8B_lGsL+Zl?q_^ueUY037!pJz9u zs7afO+-O)w_BifY6%ArCqCGPw_eU%}Ke7l_!IADYOP20@AJjRe{#?kfios<}nj!jZ zGt&6fpm~3vu9+ZPEBICmI`uyNim7z!>4ekxWgxEpNmGfnpiqM4a(TDobEB7Xp|a|> zK$cUh*z(yXjXp`C$DKm8)sp#^o7+%w3A*w2&%r(VC1(j`6yrztgyU!HhL4CupgJ`F z*Lu)qWA(-8j4aIw<~ch;PT|f(`_pD$_pAn-ljcWttoBzEhWdT>iw7AZV`J1hpH`U; z^3(HnC<0OMvW}K2q)4B&+VQqC98#PW*{b~y7MrIKM&F;Co95AY z#0yNGEHtWheEe-xL~a}BScaUV_op+%(RWj4=7v8mWLZA?cQ=@gpbo>H4W;cnUkSUd z5|~glygKN}xe-G#m=dT2IVe-|s z544(v@q*glZ66GVUce%}70>X`Yqy=rw>3U*edr4ytRsYp?3t)G4MA^L){8%yZC(PQ zTJTm5LTcp)i4U4&o zgtRnk`*_MPmXlaD&Bkx(=posXG363Exph2OoS3`{KyFh=@I%2}B0(p|E4(KB5dyt~Vo~ApJASCh>bc6?tty z%SaP18@a%1Y`R08VGDOh0R|R`TjP1nG>#~GQOa^M&wRw#BX5u>C(cwWJ=cq@x{&MH zjG@N=EG!wl`}GVS+dd_&w6{Ldu}(sY+l{WW^>yd3LZA$M4>q72Ex0r~q(}Oj)!68n zKb`Phr1mrW{z*)U+edW4(1onHnyK(ozpi_yk z))YFzKWK<}+&sBl=X?)auMe-^3$q3Hwjm43lreyQ7j|_^=J|(aghS(fDRNpi5U>7ju>8j@)fUk(5k`L9=}A>pWr0_GnaD0 z00YYNCoU(W2^rhLc^KAA4{SuZI%LyF*P+EHK?G-18T9;!SN8>Lq#Mt0<@VSUr4%9S zg$|#cfMUV&V}YYZ{kIwcPx02#7dv6iF7!TVKZ3rCsLZiiDeYHP!6ME9h9e~`=115> z)TrQoEjcH1lr|h9n=_2eTX_q){ zTz%huBCH`b9@viD#Lj5_Rv5U}F7oA}!I$go*FjOj%ItxJ#Q+E3|0@%w0+?FzM&MFjaTMh{j8^Sxzcj!t#ld( z2g@~>*Lan_!qH$WXWl+d=jEzOCin~|6;!UxwsA^_QuZ(lf+NOb3P%^Q$jh>A@v96^ zT~-(-yLKf;Df69c4sj6icRqoE0s9%;P+OfFC*IBK=D2c+dwOcNSpT|0PyW;;RXy6~ z`b2fP;E@XK3k@}!fxkm~Q)k^Z85y6^>7Ek(t@Vk%ItVpDM$6`H&_+N>0nTqw(yK4d8QYR8xlq6^P=yyeli9kFOJ~n%ql(-VSB&e7?w+p3jjrlkuzYWj!f<@ z#%x4**v*K;D)Zx*$CL?<+fs>;v%`#Z!;h4du8NeAaN9j~suuK+RLt}04;hcxYlkk! zOOBgYyiM71sBUiFsafeA{!RmyxT83D$p zv!3nb!iwY`A5Qoplj%mk&xG{9&`EV|ubu3`y_?dOKbC^qE?89ylb2%LfTHPwZ@nDt zf#V5b+>Fxk?~$mCE0Uf;WOkK-7uAyH7Wx;tVa=bM|$jd&=h;t&(Qm$84c-cyaRv`Bl@X#jJ zNAtC?ut3W#`tUaUcKZtrUH`WDRg6Sds@m>ZIKiaZS znw89I{fP<21Qzk!^P1G3pZ1OioP{?TBy#45_H%4CkU=9gXO_i3FnfT+r@Y%ms%e z5x=)kGjZ5PClE(=Hso90L$M-(C-KG}GwHD#CCnuTyq6{PJ;^xEuq`Dv<{fe3v>8Ph z)4^8@KV+S7B$_WZ7-1d;ayp(+X;wF~%!R7ksNf$}REThUj!o0y51md;tD0{mY1zNciZ`bMx_norrg#-n8XQii{#R#S%6&w0|C4RaBFB6+xcNO0q1qcYA@ITGfejjhJ(q-Y!oPptz9vmtYV$~bP zMi%!$=VLlShF8n~a!*C-JFfVX`S9`}h)@Q{G=-foVN5=A!2aE!Sa&76liY`R({{kX z%uP&isVKMg5aPQ;=k?Y~>4kb+q#d~+Xxof_yV2MVv~$@$qb4lVB~6^RH)XGmmp0$4 z<{Des2b-N%`zJWCrX>!ouzKTU=IIN63BA&2>O*81MHZAZ%g@EgEESZ0Ui3#-8WY1X zC;j5t!{#9+COh;HpnvTmAO_z>#Dt@^OMggue?a(bsJi(rnAac8XQ!p%+b;9({7Mhg z+1759{UHb5Q8X)G7mu61+!^~F$D@tWHX)%!(hlg|N8VA1QkhM!3RH&VYPH zXd6QzOFNKQvK=w@O*8nwCszR%S>wLvBfgqsNq%H?mwi&=IKQ#a5JLbN$c|`r+ltXgtlhH zpgCKQM_6W4ORWC3NgI0z=zPW7QaR^#!#(2gyu*@^l5q5C?`vBjbHPj?3ko!6T$sI~ zS|F=$bURTF6As!PD+w}AJ0REpDIA9gVFm&I)82S-E`ROjBU9HUAw<>8=h2FZ=8-GmK!yP^m7UT9G zO3Q>Dxfq>MbUj@;&GAPICe{78R#Ckprwn$7{e9Tc%%t&~Z`rA5W2AOIU{L*LXh!EJ z{Jg^DDMcD<-_Fm#ccz7r+K|Kc677?;(4Xo;%zR z*Vj501VKK%WTcMcH0YMuNct_`fdgjC_HY|OOYfJ9hXx2n(fL-Q>Mi)#_ZdfrhSO5n z&Jhjlo6Mgi-gO5*fY{*SoxE;0^rv<1%Li?fp69W&Y$4dNZlon$0V(OYUn*DN zJ))lCp)~M}FkiWsUlYMAIy0Xt;MyI3ePp61R{A6tm41yfK`5`f(&J&4DS6E6CexyK z@zFo`WO1&7voAG?{n7UHX%ezU6_45&yYuc_Q`GX0k1)k~!OArp69W!qq$Bbe4d>>^ z3Sywhn#a%Kq)OTcvVVVW^|C?J;2oGTuR>RPw_DOuIGO7pdS!=f@AqaOW;?x6{mnL= z!imoCW_yTvj?w!Q{0FbzR)p9rw^QShM9Zxvw>b}%d%`l~YuS&3S&^$#2!UB`t(06$ z2MEu~IJI#83d-2SX$D(NrNgl@_;#%|@YIsd33*jNDSm_B6fTvUWJd2P&Np5eoVGiO z-so>ABaYbcXcMqUL$de!6*3+V-U#ouaZ#W+XNI4As++67w>pzp)NjA{d2hczHxmkF zHY0#Gd~4~i&8h^#)~q(&ceiTL-reWweL4nf-1;r-7zd;p+A={_X zV0nRn5Lw3bk<|Ti4R;+~b+7&Vnii-2hraaZb#HR1DiPZN+y)J%TMd$nnJ!uhfwpmhaFp7!n@SO4)PgoyBuoqAZiqo{vuyZ>2U z@{j`6mC=$$JpJ#TdM`++05AVGy~K+;l>bk~c*>QG^nT}EX77m+18%uXhv1wt4C zq$p;40OpT~b3C*|iB3R3Oq`xR9}ww1=H*xM(u1s}&|ANs!D(Mo4xbSmfgs`*Z zzQlq&%lL5R$U=`R{H>XPl`QZf5Kf>-nG{Cys`KhXMlwgC;28Sb*4Gj$XM`)>0oZOVc!=sc8{6^ac0I1zX zs7)URdY;9=!tx1_qcY;X@ow&IN6G^p1P*J}DTlOO@ZVWfGF&sCh(5^6`&>c4rHyYQW(3#u5iu9V=px;p9Sv4>28BPN31rEsHhV(f+ zfc<$0nZlcs zh{>pEfX(p{Dr))UGiM^32gS)N6FBTXccP?nv z))Zt2aJRLwbLMjACHbQV7qtGX8At;7qYKEImqbHW0U&JeWC~zsU}Rt<;X?rc06b16 zW?V`lVt=ti|M8MofItphK%kqO8-p7QgT0eEkcpF%6UfL6WM-y^_Mmt6umc&o)7v?d z{wd_Q91&AzV<$@okfpsH;FnxOBYPJRFA2#nMSp+(9H*(f}(fvP!e-!=?qsBjsoJ?&0%lSW)e{-rj zn>q>G+d?&h`2KOsU(EkY{ELwX_-o?-V~9Vk{6{O)%zP+3z`tF_hoY$1ehdRcRw*eW zsNxQLl!fT7(sS3#kA#fOCIa|WAG}=V4-yohoQG$Ij2spd@b4n*ZRh9{I948Nnb<>e}sRPdkO)jJr3sM|B4b|8aVln);Rwa1S*OLv0lP|$$|c*qPQje z&%`iKGhliOR{9&@|2=^?f%roJl`@5pR1zIIF|lZ&!Y83Q>IjHgfPj_N=S)s#tr$v5 zNu%|6x}X7%tI4M)XXy$JnNqWV51-R}hwM#wiu#vg7=#;{QOHREaM))c@!I@x_I)1k5Vw}i&j*{i485(# z!#(34L|#zM58X$c8_i^g`se5s}flF_Bs2Dgxrb$bmZ7h8^KeP!?C z_T}M}k3AUbFnfdu&$Zd--0v*de`QE1x@|tUcatnrvt>Q9){l@%EOtEr=jYCJEdIt4-7@dCIR9c@)p<#ZJ64`r=I-BLyCeGZ0k@WhR zbA4Jw^urgs9wwku(?O>}{K`UU_RDf3EYcKGyJk*ZPceKw&r6raCNK2!Y~{_lX7gB7 zyzlZclwNNq-_WWiSDOwE&9l+6&?GEK{;{7gB7yc?Yf+njnh6>&;_20%uAe8Go)<;C zCh8A;RxKN-^|>1)df_|kb!OFeRh!n;*|}NzVJzK1xL8SvjFnXdy#GV-dra9%Zh&Q< z?p$3KfvikY<+uCAV^>Z3Vi_NCsT2l!=@hzTb$#FQgIZBhF-d7#mbInT7rsv;#>?CE zTIoDPDZoi{t2@D{pKeQ}NAvny?kCL=qDacKt~B!&@1GCyI{=Jdt^Qn18R&J??URVa z8!^3zaeIoVr z_MyN@gxt?<2>TYEhJu*vfWxBP@8#Qr*$Nk-4z7vvNZPaKgWn$ar8P@it#K~_&-PoK zAPpD^I2D*3IR&o(7^D(i5-FrdE;Yl4E4zOy{lZTgwTcsYRGjw z+nRl1a@pPkScvf+~=j+Fl<0r9szBxe#orbvM)D%dle}p9MJ7T=Hn_*%p zod9F}ZJAEAnQa%@F^h+opKi#ZH#?6!;!Unc6dlCGW+hKcxRYBQVMOuJJpxy~Wlwn} zp(pZfx{-r$D`XjR5sG2=4M`jm(_~#4i;RzNd9i%_#l^~r`JRU_39#ipJ&8_HNDZuG z=oxw%q*r)gFY6&Zsw2kW>w1BbS7o@A3TmiAb3R^uZhc-fv|0U04fHh%k5|p!o4OkG z6LarJV~zA@swc!@_&tc`$^a=kzr}>v!wF>oWVm0^*kq!+cw*D-;rr#jUN0dY|2l88 z+h9wMA0x+na>cxqOqS>Ve51IP=xlse)qTEbBTqwLO*c~N&|V!>sG*H(oqO+yB?IpE4H7Q)%hN7@?gR0+`DPrRyT;n(s!V zH~O2dU8`;I*U8b<;%s-Fli3BCrUU+{>X!uXePB88Bfg)AQ%#4G8W%@*4~Fc5F=c5i`Mvh z)XjX;Nr;_l%#&Z7TskZ)Lu?DWcMLqjLsaQ9l|LyeXS<_tbgHnJquSwMWHC12@!XB| zMaL~RxkNUZ5HKIZ#mYK_V>dXghG~3Op-vi8BfqsQqweGm1vE_Pk@PifnlN%hbw< z1-Z~2rX$D`^3a>aqBHOvKcG5{9nZAZ-#S)m)M;=Nth2VJvDz*Vdf3(GSsyG;BWTum zHv00TNbZ1nqwrCf1#a5kTzxsNce*ul_MN>XBon>lMsBVfgE?=1yiDPohqS1QnhT$s zW1g?(yh(C!zIv;JY{&NLli{|GEwAA>GS6W{daXJcx4MHz9eRwhUH^da#VVi3TREKt z^IQ~2-u`GyzfI7pjhiZE4gY?jEkw>qP4wxk@I~!%0-7}e(eso!+69-Sh9Jn6`kO6` z3_@-<4jtL&kEFjsBsdv>NU=}uNMHk+n#BCj?NvtQ*0!N=rVwUc;llJ1xyDKCLY*BO zLw)--?TPqJXWcpARRmZ9Q>ky6ba+Tk>#Kqf= zd%_vxxaVgtEtDQZI?-^0C`#<7G(#fZYz-7sradg4yB^KxX3wPJWm{a?rQ1yzN*0Kv>vW3G5_%HX47!*et7zxi7=nw1;jG$^0#Z9CSNuwJAB%B~W!$7&-S$@|TG^r<%m-|o+UQVz$u-#3gG zQ6XhOLnGXPaH1_Yyf~AvWma4Ji3{A5G(9r=zO0)mEVFE(F0p9YSa~m(pIs&C99`(+ zSL=;C8O5!t=i8%>E15t(V}yxBLlw+*QkG`0J^#isUbAr+^65mac0H&$7Yim7zmRS5 z!eII{G)jqj^npxMZX1SQSbJVhFW1jA`z_m;UsZm)>E{eXC-trI%Pc&{aK$A?i0Aa) z%u;H!aydc+$%OKIU6p%7E{n~c2p8%H4G2x6N_Eu%p#UCbW#H~&Z0xYG>*Z%tF}ihF z12otG-|PqdbEdr?illZVq_q9te7vIKq9VC-N$q1!2Gs~X2s}5CN(*;dywuAh#sEI= zZJZu$m#P)zHYX4~xk)U?78ojWgYlik7%D9=+RG!OmpJ6Sc&ukjX`?UP*6a-45h{y! z)`FSvP`fUT$Z$z(*c-4lL{%L?46IfYoggHi3YYMe{q$+t%{#%ai#46mLn74xH98_#!SxSrynXE6amitjh;t?UfPx#!HQJ|UcrGcONU%!}|qiuQDi zlqbzQ3}^-^C4?0pP0!AOl9kpFq~PK*Lq5V5i_jIm37M^c`nNW@F%o(4ka=3*05qbI z>D!-jGfRhXiBuf$KB*s_%BsfZR=GuS*nv-UUaNrn9QFICXa@UAwr1$Hqry9pwB68_ z&wF-acEAw6+e_yS3fU1V;&ra>0|A7B^DaH#RmV`;4)?zp>m z7WS7yxdeAQ7ADQ!ixb)MHG8YIer+!c_Uz|<*hHvlG%g-x=Ul>cRxeYj_H9^o9uEi&Sv>ak36g1sR?N!6H&O`Uvxa+d zT_SFeVVhDX(Kn@v;LvW$KIzzj){#1GQ1;dX?@7GlQg8pw^+_`Ll6&Zxt@xFnY3`vs z4*XqGuG$Y>r2;B>L55_Q%$03Tmq~>z6 zeYc62Gs%Oay-TtGC%;q|Y=<|6sYoxGKE%I4xYcZN|AeZL68VW^*~AXq6XB))h@)AB zwLJUKICHVxA0qcP~j1enF$1}`W0w&Ad z(x5D*`pGCdQOf&#^=Uk@^Uo!W!Q3pU-~@1o0YGE5cm9(y$B_)uEWTT~$Cqc=$aSLq zOg>23+(kwh91%*`2iPka!Chg|abG=jLTKvX8S=7mtQ;NiHP=Dtd3uydDRyA9tVMj*)U zO4AHMc_YJzB#Dzf65bi{>U}sRLfSx#YK7X!q3YcfNq8DI#Tib+ z5uhh>2jrlZgD}5%W)kch6uQnp;V5%mXXT5Xz}Z1v!;C3MmP%(R+SOuqq*5Ft`D8l@ zXZ}t8t&df=iHyqEBx=3hhB^`p^k6cZrR7VpsALAUdGBMD`g~2Hq{q|m*Jivz*Fm+P z=SY;9_85{zV(!rMt2pV&6kWf)N}PKY{Wbw|7Pt)K!?fTWmVx7W24G!FUmXE3R9ij! zDZU?RF&vKAsVxjJVpzbEmt~!^nsHh*Kz#X*q_9hR2rHJ~Y!R4uL9C{(%Y^ajwV8c4 zw_A7mSoY(bhYLFzI-f>-|8DN zenM1#3y!16m#krgLf&^I?M?XG9jmZN926j&9|v?qxR%vm-I`t>?AV;OP#%+ATM9Ii z`;w*(qp9&nUt*Lc-NJHdMpq%>y_(n+7Nf6Pwdva*g+{c$#*guP=nGFkC@grhaX1ow z?S6a!7l?rY*g7M~5iL1h~B8{1x)d30V%q_zP^%^J31A?|8lNnQ%dlT)lhB zDSBxxTDnHMBcvw;hp0Uk%&140L-z$@u)X~hEj`T43u>ZG2cBZL@U2U_0&`=ySt*3A zLG6Qdz(I|A^H$4q6;wBO;l^Yy(GN&2lC})mFYV&LV1)hP@p@DWtFt9CJT}${&*xjz zr*s-ETtZIK!kNztOGMAO+*BS=;wt}Yv)DG^J$jhaO2N%BHG42zt|Pw(i=BA&k?6`N zFe6Qv@__gw0p!>akNEqZN;H@DB zg6z^ZY|{9^L#h`_WOTIZY%faSDr{YGxw(BN?)%Enx=NX2ni4iYhhNF4BZ{pILBf`JT zU{E2~?Z)bl=##rR9=R-CDoHO{cEtUW4|tXala1CFL&)+<*z5DcX6%!*%qIbOmoH5P zox}Iyt$sp`Nwex{YmK4iXzSeV)+m*SUjn~ly`X&`_uRf>@J>zww0+$09`T#2t@vW# zG@cD(v#Wx>YJi+~%iH1Q^Mk1h+McPcnFUU>>jutN{zVbPQ}4UQ9^UJ#`20&vjSf)W z$%Lyc2oxpfvbSzBSEmbMEl$YIPwS7}BSr!toWG?c85!mC)~NCPXu!9hJd!a@f2D7R z4mu^(P$>7jb+5T!pk@6c@6zMn2yO=y^A9DMm_+Nh_}MHoP~{Tu$m%X{$Sihh!y? z{)H?q(lCovsPXG&6%Fchy&+k?2+5=k&j;{<#E|5Rl2j3Y!f**3J=k^XJZm{U8!^)! zLJ%rTz4eMfkYXq&om1SDeb~JB=$9|D@O3M=Zb68d1b&^UgJAfmXt2GlbW$s zgS<`O$34nB0grJqS@-*=&9FJ=>FA;l-jA2{N?M{Q!6=JvMe;64{Ikr5Tp~L9F1Vrs zDdFMOo><_WOTySxzwq%M&rAG0crL}D`uDz@buGimsm3328E3BuOJG6CyCPRoX738K z;8W)wk+_tL!J#1gNx7@TdFpX4Y%D=n-;Adk+>Zxd4;UH1Bw0~1y7 zZM)yEyD0^KPu5_HpiD#6rTHtob}!VmQyo&f6><#YgfPxE{88 zX?^2e`#h?0=9&1&1z>>B6R(vLR%Fg)|YW{ineXyO=hTKp7ON?O!UxYR2}=|kS% z>x2KynVLzSc}ph3yYYfH@lr!7K}38e0XM%WjjFsgZLKrkoA7QRB7fJ>Dtyu6fr zh^*8d}7ge5s4YTtBD28y6*pS_`tc^1EmGJPI!$Xa;0LH_}Xlu|- zyNQzsLWO=?z+R)w%tckc9S5uiGZzEgVmo=Y_!!?rwTm`szl}piq<#QvGYJXRBGH1| zE=g-8zJaIBn(O}kw+2Yhd@InduS`6-#36*%3>ux|6F16>;}M(jF7%wN^_;Anw2iVU zniFS(4>-lRGdL__PX$?;K5*v1hb@xnHt8DI(NC^2b6Tn?!=Lg-Q001$U*n+lvzWK6!wlkf zx9{y7;@w?VAq6JgKKj9oTBQznr2@XU^-Vwm20eD?JJX3@DWg>LLMr6MO2 zCA!dAa1*UuHtRU2IA-OEzqUqI;|lKk*x zP_dd}R{jTnzEgHVhcxl0$GARbo5{ghc8tM3q8Ja|oNs2wl);;mcyYzKIDwlgpLKes z!ph>hZ~ZDehzw7g0v#aG!{|sjlL+53T0|3wjYpiAWGyXNy$Rq71BcaN1DR%Pn*-;Y zEDz6w=wos}u7a_F27LIFnmfU3rr?!$Oq~#fYbzIF@pO zVBsBe$)x}(8Tvb3i@?1f#!IJnj2qbz;oyh#YbHWI`;jaf=NV4D7c8#ZS%I914zWjt zLRdl<3QF^WL7(iGO$IIWo3n6{>2bA$_;l|Z@4sv(sAur%<)(ymk`69F{N;B7Up>Qr zK3`1OVp9D|=an~NCuZIRn?y{Ct}{6@LrA!d*%E`(7NAkbqS0wf_VxG7_fgTS5v$x7 z$&bTTL&ravxY9s$lCH;5myJ{n+?_tt>KwSk5AD(OO?`LXfRrc)$q>fs$5RGLz6ugJ zy5Ne|wdUjC@y4X2L`{Z;+VZHG3I~yfZ$$|(es#Tt=?Y^-`F^gPa>&9Z>3lU0{NBnfrLUEqd(nn zIdG8%4-wXWUZxJGTqEc_BaeyUOn5{ZSmZNyM?u8_<#VD2)8u{cko8FWM*6xE`O_b# zabI!_r11oO&CO|#+liM(t(&U01^hA4Od3YF$sKL8cfAP(MI^%6M0DfcwlS?p6igmjtjg@~c12`~TuymGU1mQOEPBIey`+f3`U?_jnnz z{sJ;}?%VVH;XrVBgLbr>@BVF~`DiBlTITr;m-~AnBmfu1e%Rlj3=DTT8gpaenGumg=#mf4Tq8VXTDozsz1WL_?@1+)DS;{ z0+GA?>;DW%m+)rt*N}8ue~{iP^CPD84$R%uyiR(n=btS0y{ufo$Gs-^`ZwD1$SIIZNlz;oOq&&B{O$6J3y4vdHF8K2g6vN}1vE5%|?N|LZXBs`0OB&iE zz>M_qOe8&T+0j(N(g3DnZ4^R^LqoHkM5{sMCUXk10c*91g=Ax#gJ9iQ#K-gEQ7>Mj zUkD1#>@6)ZeG0ui6KZ5+YOC(3SyCpZK4b$-mixywaL20wg1#ZRKeLh&fWBX_31h0P zXImmrB*J=k+6FDBBEMnb)$78H~tuhQ_x wt-{~S}3K`Jyqi0partk5A9Fz@=mSZDMQnlzYu7WqH-c&A%npG1IlbTs{jB1 diff --git a/docs/src/assets/new-pull-request.png b/docs/src/assets/new-pull-request.png deleted file mode 100644 index 085acccee9bf1393f54c4c1f6b0ca649a98d69bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60954 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 DzbBd9 diff --git a/docs/src/assets/performance/34/profiler-record.png b/docs/src/assets/performance/34/profiler-record.png deleted file mode 100644 index febcbd2a00a93b227c971e8c7f3cb1a4da6e3a50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131843 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�ychl+b(I5DLeEkA7 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%0D<4*c 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 z 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

    - - diff --git a/docs/src/components/Author.astro b/docs/src/components/Author.astro deleted file mode 100644 index 43b3af29c..000000000 --- a/docs/src/components/Author.astro +++ /dev/null @@ -1,51 +0,0 @@ ---- -import { Icon } from '@astrojs/starlight/components'; - -interface Props { - name: string; - twitter?: string; - linkedin?: string; - github?: string; - youtube?: string; - labels?: Record; -} - -const { name, twitter, linkedin, github, youtube, data } = Astro.props; ---- - -

    - {data['author.createdBy']} {name} - {twitter && - - } - {linkedin && - - } - {github && - - } - {youtube && - - } - -

    - - diff --git a/docs/src/components/ChallengeFooter.astro b/docs/src/components/ChallengeFooter.astro deleted file mode 100644 index ccd4f1a83..000000000 --- a/docs/src/components/ChallengeFooter.astro +++ /dev/null @@ -1,105 +0,0 @@ ---- -import VideoButton from './VideoButton.astro'; -import ClipboardCopy from './ClipboardCopy.astro'; -import { getEntry } from 'astro:content'; -import AnsweredUser from './github/AnsweredUser.svelte'; - -const { lang } = Astro.props; -const { author, challengeNumber, title, blogLink, videoLinks, command } = Astro.props.entry.data; -const { data } = await getEntry('i18n', lang); - -const authorLink = `https://github.com/tomalaforge/angular-challenges/pulls?q=label%3A${challengeNumber}+label%3A"answer+author"`; -const communityLink = `https://github.com/tomalaforge/angular-challenges/pulls?q=label%3A${challengeNumber}+label%3Aanswer+sort%3Areactions-%2B1-desc`; -const npxCommand = `npx nx serve ${command}`; - ---- - -
    - - -{command && - - } - - - - - - - - - - - diff --git a/docs/src/components/ClipboardCopy.astro b/docs/src/components/ClipboardCopy.astro deleted file mode 100644 index c1ab7c340..000000000 --- a/docs/src/components/ClipboardCopy.astro +++ /dev/null @@ -1,106 +0,0 @@ ---- -import { getEntry } from "astro:content"; - -const { copyText, lang } = Astro.props; -const { data } = await getEntry('i18n', lang); ---- - - - - - - {data['buttons.clipboardCopy']} - - - - - - diff --git a/docs/src/components/CommentSection.astro b/docs/src/components/CommentSection.astro deleted file mode 100644 index 778eba0a2..000000000 --- a/docs/src/components/CommentSection.astro +++ /dev/null @@ -1,34 +0,0 @@ ---- -import type { Props } from '@astrojs/starlight/props'; - -const {lang, locale} = Astro.props; - -// Chinese needs to `zh-CN` -// const shortLang =lang.split('-')[0]; ---- - -
    - - - - diff --git a/docs/src/components/Content.astro b/docs/src/components/Content.astro deleted file mode 100644 index c45759d82..000000000 --- a/docs/src/components/Content.astro +++ /dev/null @@ -1,45 +0,0 @@ ---- -import Default from '@astrojs/starlight/components/MarkdownContent.astro'; -import type { Props } from '@astrojs/starlight/props'; -import { getEntry } from 'astro:content'; -import Author from './Author.astro'; -import ChallengeFooter from './ChallengeFooter.astro'; -import CommentSection from './CommentSection.astro'; -import ContributorsFooter from './ContributorsFooter.astro'; -import AnswerNumber from './github/AnswerNumber.svelte'; - -const { lang } = Astro.props; -const { data } = await getEntry('i18n', lang); -const { challengeNumber } = Astro.props.entry.data; -const author = Astro.props.entry.data.author ? await getEntry(Astro.props.entry.data.author) : null; -const renderCommentSection = !Astro.props.entry.data.noCommentSection; - ---- - -{ challengeNumber ?
    - { author ? : null} - -
    :null} - - - - - -{challengeNumber ? - : null} - -{ renderCommentSection && - } - - - - diff --git a/docs/src/components/ContributorsFooter.astro b/docs/src/components/ContributorsFooter.astro deleted file mode 100644 index d5b4040aa..000000000 --- a/docs/src/components/ContributorsFooter.astro +++ /dev/null @@ -1,75 +0,0 @@ ---- -import { getEntry } from 'astro:content'; - -const contributors = Astro.props.entry.data.contributors ?? []; -const { lang } = Astro.props; -const { data } = await getEntry('i18n', lang); ---- - - -{contributors.length === 0 ? null : -
    -

    {data['contributor.title']}

    -

    {data['contributor.subtitle']}

    -
      - {contributors.map((contributor: string) => ( -
    • - - {contributor} - -
    • - ))} -
    -
    - } - - diff --git a/docs/src/components/Hero.astro b/docs/src/components/Hero.astro deleted file mode 100644 index 8d9500eaa..000000000 --- a/docs/src/components/Hero.astro +++ /dev/null @@ -1,63 +0,0 @@ ---- -import Default from '@astrojs/starlight/components/Hero.astro'; -import MyIcon from './MyIcon.astro'; -import { getEntry } from 'astro:content'; -import SponsorUser from './github/SponsorUser.svelte'; - - - -const { lang } = Astro.props; -const { data } = await getEntry('i18n', lang); ---- - - - - - - - - - diff --git a/docs/src/components/MobileMenuFooter.astro b/docs/src/components/MobileMenuFooter.astro deleted file mode 100644 index 6a8870b03..000000000 --- a/docs/src/components/MobileMenuFooter.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Default from '@astrojs/starlight/components/MobileMenuFooter.astro'; -import ActionButtonFooter from './ActionButtonFooter.astro'; - ---- - - - - diff --git a/docs/src/components/MyIcon.astro b/docs/src/components/MyIcon.astro deleted file mode 100644 index 25327f49f..000000000 --- a/docs/src/components/MyIcon.astro +++ /dev/null @@ -1,33 +0,0 @@ ---- -import { Icons } from './icons'; - -interface Props { - name: keyof typeof Icons; - label?: string; - color?: string; - size?: string; - class?: string; -} - -const { name, label, size = '1em', color, fill="currentColor", stroke="none", viewBox="0 0 24 24" } = Astro.props; -const a11yAttrs = label ? ({ 'aria-label': label } as const) : ({ 'aria-hidden': 'true' } as const); ---- - - - - - diff --git a/docs/src/components/PageTitle.astro b/docs/src/components/PageTitle.astro deleted file mode 100644 index 6f2cd725d..000000000 --- a/docs/src/components/PageTitle.astro +++ /dev/null @@ -1,44 +0,0 @@ ---- -import { getEntry } from 'astro:content'; -import type { Props } from '@astrojs/starlight/props'; -import Default from '@astrojs/starlight/components/PageTitle.astro'; -const { challengeNumber } = Astro.props.entry.data; -const { lang } = Astro.props; -const { data } = await getEntry('i18n', lang); ---- - -
    - - - - {challengeNumber && -
    {data['page.title.challenge']} #{challengeNumber}
    } -
    - - diff --git a/docs/src/components/SiteTitle.astro b/docs/src/components/SiteTitle.astro deleted file mode 100644 index e4fb0c010..000000000 --- a/docs/src/components/SiteTitle.astro +++ /dev/null @@ -1,20 +0,0 @@ ---- -import Default from '@astrojs/starlight/components/SiteTitle.astro'; -import MyIcon from './MyIcon.astro'; -import SignUp from './github/SignUp.svelte'; -import { Icon } from '@astrojs/starlight/components'; ---- - - - - - - - - - - - - - - diff --git a/docs/src/components/SubscriptionForm.astro b/docs/src/components/SubscriptionForm.astro deleted file mode 100644 index 323ab5390..000000000 --- a/docs/src/components/SubscriptionForm.astro +++ /dev/null @@ -1,102 +0,0 @@ ---- -import { getEntry } from 'astro:content'; - -const { isNote, lang } = Astro.props; -const { data } = await getEntry('i18n', lang ?? 'en'); ---- - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - -{isNote ? - - : -*{data['subscription.note.description']}. - } - - diff --git a/docs/src/components/TableOfContents.astro b/docs/src/components/TableOfContents.astro deleted file mode 100644 index 529b0e166..000000000 --- a/docs/src/components/TableOfContents.astro +++ /dev/null @@ -1,9 +0,0 @@ ---- -import Default from '@astrojs/starlight/components/TableOfContents.astro'; -import ActionButtonFooter from './ActionButtonFooter.astro'; - ---- - - - - diff --git a/docs/src/components/VideoButton.astro b/docs/src/components/VideoButton.astro deleted file mode 100644 index 723ef30e9..000000000 --- a/docs/src/components/VideoButton.astro +++ /dev/null @@ -1,26 +0,0 @@ ---- -import { getEntry } from 'astro:content'; - -interface Props { - lang: any; - link: string; - alt: string; - flag?: 'FR' | 'ES'; -} - -const { link, alt, flag, lang } = Astro.props; -const { data } = await getEntry('i18n', lang); -const isFR = flag === 'FR'; -const isES = flag === 'ES'; ---- - - - - {data['challenge.footer.video']} - {isFR && 🇫🇷} - {isES && 🇪🇸} - diff --git a/docs/src/components/github/AnswerNumber.svelte b/docs/src/components/github/AnswerNumber.svelte deleted file mode 100644 index a43e7171e..000000000 --- a/docs/src/components/github/AnswerNumber.svelte +++ /dev/null @@ -1,20 +0,0 @@ - - -{#if $isLoaded} - Answered by {$totalCount} people -{/if} - - diff --git a/docs/src/components/github/AnsweredUser.svelte b/docs/src/components/github/AnsweredUser.svelte deleted file mode 100644 index 81ae138a6..000000000 --- a/docs/src/components/github/AnsweredUser.svelte +++ /dev/null @@ -1,74 +0,0 @@ - - -{#if $isLoaded} -
    -
    Answered by
    - {#each $data as { user, html_url }} - - - - {/each} -
    -{/if} - - diff --git a/docs/src/components/github/GitHubStats.svelte b/docs/src/components/github/GitHubStats.svelte deleted file mode 100644 index 8286a2894..000000000 --- a/docs/src/components/github/GitHubStats.svelte +++ /dev/null @@ -1,170 +0,0 @@ - - -{#if !error && !loading && !loadingStar} -
    - {#if isStarByUser} -
    - - {stargazersCount} -
    - {:else} - - {/if} - - - -
    {forksCount}
    -
    -
    -{/if} - - diff --git a/docs/src/components/github/SignUp.svelte b/docs/src/components/github/SignUp.svelte deleted file mode 100644 index a98a2a943..000000000 --- a/docs/src/components/github/SignUp.svelte +++ /dev/null @@ -1,66 +0,0 @@ - - -{#if !$token} - - - - -{:else} - - - - - -{/if} - - - diff --git a/docs/src/components/github/SponsorUser.svelte b/docs/src/components/github/SponsorUser.svelte deleted file mode 100644 index cc29003d7..000000000 --- a/docs/src/components/github/SponsorUser.svelte +++ /dev/null @@ -1,40 +0,0 @@ - - -{#each sponsors as { username, avatar }} - - {username} - -{/each} - - diff --git a/docs/src/components/github/github-store.ts b/docs/src/components/github/github-store.ts deleted file mode 100644 index 48c4ddee4..000000000 --- a/docs/src/components/github/github-store.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { derived, writable } from 'svelte/store'; - -export const token = writable(null); -export const isConnected = writable(false); - -export const username = writable(null); - -export const isLoading = writable(true); -export const error = writable(false); -export const data = writable([]); -export const totalCount = writable(0); - -export const isLoaded = derived( - [isLoading, error], - ([$isLoading, $error]) => !$isLoading && !$error, -); - -const TOKEN_KEY = 'TOKEN'; - -export function loadToken() { - const persistedToken = localStorage.getItem(TOKEN_KEY); - if (persistedToken) { - token.set(JSON.parse(persistedToken)); - isConnected.set(true); - } else { - isConnected.set(false); - } -} - -token.subscribe((value) => { - if (value) { - if (value === 'delete') { - localStorage.removeItem(TOKEN_KEY); - token.set(null); - return; - } - localStorage.setItem(TOKEN_KEY, JSON.stringify(value)); - } -}); diff --git a/docs/src/components/github/tooltip.js b/docs/src/components/github/tooltip.js deleted file mode 100644 index dbc29fd8b..000000000 --- a/docs/src/components/github/tooltip.js +++ /dev/null @@ -1,45 +0,0 @@ -export function tooltip(element) { - let div; - let title; - function mouseOver(event) { - // NOTE: remove the `title` attribute, to prevent showing the default browser tooltip - // remember to set it back on `mouseleave` - title = element.getAttribute('title'); - element.removeAttribute('title'); - - div = document.createElement('div'); - div.textContent = title; - div.style = ` - border: 1px solid #ddd; - box-shadow: 1px 1px 1px #ddd; - background: white; - border-radius: 4px; - padding: 4px; - position: absolute; - top: ${event.pageX + 5}px; - left: ${event.pageY + 5}px; - `; - document.body.appendChild(div); -} - function mouseMove(event) { - div.style.left = `${event.pageX + 5}px`; - div.style.top = `${event.pageY + 5}px`; -} - function mouseLeave() { - document.body.removeChild(div); - // NOTE: restore the `title` attribute - element.setAttribute('title', title); -} - - element.addEventListener('mouseover', mouseOver); - element.addEventListener('mouseleave', mouseLeave); - element.addEventListener('mousemove', mouseMove); - - return { - destroy() { - element.removeEventListener('mouseover', mouseOver); - element.removeEventListener('mouseleave', mouseLeave); - element.removeEventListener('mousemove', mouseMove); -} -} -} diff --git a/docs/src/components/icons.ts b/docs/src/components/icons.ts deleted file mode 100644 index ba24c6b8a..000000000 --- a/docs/src/components/icons.ts +++ /dev/null @@ -1,8 +0,0 @@ -export const Icons = { - heart: - '', - star: '', - fullStar: - '', - fork: '', -}; diff --git a/docs/src/components/leaderboard/LeaderboardAnswer.svelte b/docs/src/components/leaderboard/LeaderboardAnswer.svelte deleted file mode 100644 index bfd43c935..000000000 --- a/docs/src/components/leaderboard/LeaderboardAnswer.svelte +++ /dev/null @@ -1,138 +0,0 @@ - -{#if !$isConnected} -
    Log in to Github to see the list
    -{:else} -🔥Total Answers: { globalCount } - {#if isUsernamePresent} - - {/if} - {#if loading} - - {:else if error} -

    Error: {error}

    - {:else} -
    - {#each users as { avatar, count, login, challengeNumber }, index} - - {count} Answers -
    {challengeNumber.join(', ')}
    -
    - {/each} -
    - {/if} -{/if} - - diff --git a/docs/src/components/leaderboard/LeaderboardChallenge.svelte b/docs/src/components/leaderboard/LeaderboardChallenge.svelte deleted file mode 100644 index 3cee5229e..000000000 --- a/docs/src/components/leaderboard/LeaderboardChallenge.svelte +++ /dev/null @@ -1,103 +0,0 @@ - - -{#if !$isConnected} -
    Log in to Github to see the list
    -{:else} - {#if isUsernamePresent} - - {/if} - {#if loading} - - {:else if error} -

    Error: {error}

    - {:else} -
    - {#each users as { avatar, count, login }, index} - - {count} Challenges Created - - {/each} -
    - {/if} -{/if} - - diff --git a/docs/src/components/leaderboard/LeaderboardCommit.svelte b/docs/src/components/leaderboard/LeaderboardCommit.svelte deleted file mode 100644 index e9068576b..000000000 --- a/docs/src/components/leaderboard/LeaderboardCommit.svelte +++ /dev/null @@ -1,119 +0,0 @@ - - -{#if !$isConnected} -
    Log in to Github to see the list
    -{:else} - {#if isUsernamePresent} - - {/if} - {#if loading} - - {:else if error} -

    Error: {error}

    - {:else} -
    - {#each users as { avatar, count, login }, index} - - {count} PRs merged - - {/each} -
    - {/if} -{/if} - - diff --git a/docs/src/components/leaderboard/Spinner.svelte b/docs/src/components/leaderboard/Spinner.svelte deleted file mode 100644 index 07dd361e2..000000000 --- a/docs/src/components/leaderboard/Spinner.svelte +++ /dev/null @@ -1,33 +0,0 @@ - -
    -
    -
    - - diff --git a/docs/src/components/leaderboard/UserBox.svelte b/docs/src/components/leaderboard/UserBox.svelte deleted file mode 100644 index 887c95327..000000000 --- a/docs/src/components/leaderboard/UserBox.svelte +++ /dev/null @@ -1,78 +0,0 @@ - - -
    - -
    - #{index + 1} -
    -
    - - diff --git a/docs/src/content/authors/Ioannis-Tsironis.json b/docs/src/content/authors/Ioannis-Tsironis.json deleted file mode 100644 index 9cb257672..000000000 --- a/docs/src/content/authors/Ioannis-Tsironis.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Ioannis Tsironis", - "github": "https://github.com/tsironis13", - "linkedin": "https://www.linkedin.com/in/giannis-tsironis/" -} diff --git a/docs/src/content/authors/devesh-chaudhari.json b/docs/src/content/authors/devesh-chaudhari.json deleted file mode 100644 index c1bc4bfb4..000000000 --- a/docs/src/content/authors/devesh-chaudhari.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "Devesh Chaudhari", - "twitter": "https://twitter.com/DeveshChau" -} diff --git a/docs/src/content/authors/lance-finney.json b/docs/src/content/authors/lance-finney.json deleted file mode 100644 index be44e3e89..000000000 --- a/docs/src/content/authors/lance-finney.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Lance Finney", - "twitter": "https://twitter.com/LMFinneyCoder", - "linkedin": "https://www.linkedin.com/in/lmfinney/", - "github": "https://github.com/LMFinney" -} diff --git a/docs/src/content/authors/stanislav-gavrilov.json b/docs/src/content/authors/stanislav-gavrilov.json deleted file mode 100644 index 7fa793099..000000000 --- a/docs/src/content/authors/stanislav-gavrilov.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Stanislav Gavrilov", - "linkedin": "https://www.linkedin.com/in/stgavrilov/", - "github": "https://github.com/stillst" -} diff --git a/docs/src/content/authors/sven-brodny.json b/docs/src/content/authors/sven-brodny.json deleted file mode 100644 index 3372743d8..000000000 --- a/docs/src/content/authors/sven-brodny.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Sven Brodny", - "linkedin": "https://www.linkedin.com/in/sven-brodny-0ba603237/", - "github": "https://github.com/svenson95" -} diff --git a/docs/src/content/authors/thomas-laforge.json b/docs/src/content/authors/thomas-laforge.json deleted file mode 100644 index 2bfd96588..000000000 --- a/docs/src/content/authors/thomas-laforge.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Thomas Laforge", - "twitter": "https://twitter.com/laforge_toma", - "linkedin": "https://www.linkedin.com/in/thomas-laforge-2b05a945/", - "github": "https://github.com/tomalaforge" -} diff --git a/docs/src/content/authors/timothy-alcaide.json b/docs/src/content/authors/timothy-alcaide.json deleted file mode 100644 index a50cd7643..000000000 --- a/docs/src/content/authors/timothy-alcaide.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "Timothy Alcaide", - "github": "https://github.com/alcaidio", - "youtube": "https://www.youtube.com/@timothyalcaide", - "twitter": "https://twitter.com/alcaidio", - "linkedin": "https://www.linkedin.com/in/timothyalcaide" -} diff --git a/docs/src/content/authors/wandrille-guesdon.json b/docs/src/content/authors/wandrille-guesdon.json deleted file mode 100644 index a240cba89..000000000 --- a/docs/src/content/authors/wandrille-guesdon.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Wandrille Guesdon", - "linkedin": "https://www.linkedin.com/in/wandrille-guesdon-53a54684/", - "github": "https://github.com/wandri" -} diff --git a/docs/src/content/config.ts b/docs/src/content/config.ts deleted file mode 100644 index 91a2d506a..000000000 --- a/docs/src/content/config.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { docsSchema, i18nSchema } from '@astrojs/starlight/schema'; -import { defineCollection, reference, z } from 'astro:content'; - -const authors = defineCollection({ - type: 'data', - schema: z.object({ - name: z.string(), - twitter: z.string().url().optional(), - linkedin: z.string().url().optional(), - github: z.string().url().optional(), - youtube: z.string().url().optional(), - }), -}); - -const docs = defineCollection({ - schema: (ctx) => - docsSchema({ - extend: z.object({ - noCommentSection: z.boolean().optional().default(false), - challengeNumber: z.union([z.number(), z.boolean()]).default(false), - author: reference('authors').optional(), - contributors: z.array(z.string()).optional(), - command: z.string().optional(), - blogLink: z.string().optional(), - videoLinks: z - .array( - z.object({ - link: z.string(), - alt: z.string(), - flag: z.enum(['FR', 'ES']).optional(), - }), - ) - .optional(), - }), - })(ctx), -}); - -const i18n = defineCollection({ - type: 'data', - schema: i18nSchema({ - extend: z - .object({ - 'page.title.challenge': z.string(), - 'author.createdBy': z.string(), - 'buttons.email': z.string(), - 'buttons.star': z.string(), - 'buttons.sponsor': z.string(), - 'buttons.clipboardCopy': z.string(), - 'challenge.footer.note': z.string(), - 'challenge.footer.running': z.string(), - 'challenge.footer.start': z.string(), - 'challenge.footer.reminder': z.string(), - 'challenge.footer.communityAnswers': z.string(), - 'challenge.footer.authorAnswer': z.string(), - 'challenge.footer.blogPost': z.string(), - 'challenge.footer.video': z.string(), - 'challenge.footer.gettingStarted.title': z.string(), - 'challenge.footer.gettingStarted.link': z.string(), - 'challenge.footer.upvoteAnswer': z.string(), - 'subscription.button': z.string(), - 'subscription.email': z.string(), - 'subscription.note.title': z.string(), - 'subscription.note.description': z.string(), - 'contributor.title': z.string(), - 'contributor.subtitle': z.string(), - 'sponsors.description': z.string(), - 'sponsors.joinButton': z.string(), - }) - .partial(), - }), -}); - -export const collections = { - docs: docs, - i18n: i18n, - authors: authors, -}; diff --git a/docs/src/content/docs/challenges/angular/1-projection.md b/docs/src/content/docs/challenges/angular/1-projection.md deleted file mode 100644 index 127530f03..000000000 --- a/docs/src/content/docs/challenges/angular/1-projection.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: 🟢 Projection -description: Challenge 1 is about learning how to project DOM element through components -author: thomas-laforge -contributors: - - tomalaforge - - jdegand - - dmmishchenko - - kabrunko-dev - - svenson95 -challengeNumber: 1 -command: angular-projection -blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5 -videoLinks: - - link: https://www.youtube.com/watch?v=npyEyUZxoIw&ab_channel=ArthurLannelucq - alt: Projection video by Arthur Lannelucq - flag: FR - - link: https://www.youtube.com/watch?v=yNrfvu7vTa4 - alt: Projection video by Amos Lucian Isaila - flag: ES -sidebar: - order: 1 ---- - -## Information - -In Angular, content projection is a powerful technique for creating highly customizable components. Utilizing and understanding the concepts of ng-content and ngTemplateOutlet can significantly enhance your ability to create shareable components. - -You can learn all about ng-content [here](https://angular.dev/guide/components/content-projection) from simple projection to more complex ones. - -To learn about ngTemplateOutlet, you can find the API documentation [here](https://angular.dev/api/common/NgTemplateOutlet) along with some basic examples. - -With these two tools in hand, you are now ready to take on the challenge. - -## Statement - -You will start with a fully functional application that includes a dashboard containing a teacher card and a student card. The goal is to implement the city card. - -While the application works, the developer experience is far from being optimal. Every time you need to implement a new card, you have to modify the `card.component.ts`. In real-life projects, this component can be shared among many applications. The goal of the challenge is to create a `CardComponent` that can be customized without any modifications. Once you've created this component, you can begin implementing the `CityCardComponent` and ensure you are not touching the `CardComponent`. - -## Constraints - -- You must refactor the `CardComponent` and `ListItemComponent`. -- The `@for` must be declared and remain inside the `CardComponent`. You might be tempted to move it to the `ParentCardComponent` like `TeacherCardComponent`. -- `CardComponent` should not contain any conditions. -- CSS: try to avoid using `::ng-deep`. Find a better way to handle CSS styling. - -## Bonus Challenges - -- Use the signal API to manage your components state (documentation [here](https://angular.dev/guide/signals)) -- To reference the template, use a directive instead of magic strings ([What is wrong with magic strings?](https://softwareengineering.stackexchange.com/a/365344)) diff --git a/docs/src/content/docs/challenges/angular/13-highly-customizable-css.md b/docs/src/content/docs/challenges/angular/13-highly-customizable-css.md deleted file mode 100644 index b08786ea3..000000000 --- a/docs/src/content/docs/challenges/angular/13-highly-customizable-css.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: 🟠 Highly Customizable CSS -description: Challenge 13 is about creating highly customizable CSS styles -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - kabrunko-dev - - LMFinney -challengeNumber: 13 -command: angular-highly-customizable-css -sidebar: - order: 104 ---- - -## Information - -Styling is an important aspect of a frontend developer's day job, but it is often underestimated. In Angular applications, I frequently see people using `@Input()` to customize the style of their components. However, `@Input()` should only be used for logic. Other techniques, such as **CSS variables** and **host-context**, should be used for styling. - -In this challenge, you will need to use both CSS variables and `:host-context` to remove all `@Input()` from your code. - -## Constraints - -- In your final submission, your component should not contain any lines of code. All styling should be handled within the decorator _(or external css files if you prefer)_ diff --git a/docs/src/content/docs/challenges/angular/21-anchor-navigation.md b/docs/src/content/docs/challenges/angular/21-anchor-navigation.md deleted file mode 100644 index f094023b8..000000000 --- a/docs/src/content/docs/challenges/angular/21-anchor-navigation.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: 🟢 Anchor Navigation -description: Challenge 21 is about navigating inside the page with anchor -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 -challengeNumber: 21 -command: angular-anchor-navigation -sidebar: - order: 4 ---- - -## Information - -You begin with an application that has basic navigation and anchor navigation in the `HomeComponent`. However, using `href` recreates the path each time and refreshes the page. - -## Statement - -- Your task is to refactor this application to use the built-in navigation tool to better fit within the Angular Framework. You can explore the router, but it's better to stay within the template and use the `RouterLink` directive. -- To improve the user experience, add smooth scrolling. diff --git a/docs/src/content/docs/challenges/angular/22-router-input.md b/docs/src/content/docs/challenges/angular/22-router-input.md deleted file mode 100644 index 1a5127e89..000000000 --- a/docs/src/content/docs/challenges/angular/22-router-input.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: 🟢 @RouterInput() -description: Challenge 22 is about using the @Input decorator to retrieve router params. -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - svenson95 - - LMFinney -challengeNumber: 22 -command: angular-router-input -blogLink: https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617 -sidebar: - order: 5 ---- - -## Information - -In this application, we retrieve three pieces of information inside our `TestComponent` provided by the router: - -- We want to retrieve `testId` found inside the params of the URL. -- We want to obtain `user` located within the query parameters of the URL. -- We want to access `permission` set inside the `data` object of the route. - -In Angular versions 15 or earlier, we use `ActivatedRoute` to obtain all this information and receive them through observables to listen for URL changes. - -In version 16, Angular introduced a new `Input` that can listen to route data. You can read more about it [here](https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617). - -## Statement - -The goal of this exercise is to refactor the code to use the new `RouterInput` strategy. diff --git a/docs/src/content/docs/challenges/angular/31-module-to-standalone.md b/docs/src/content/docs/challenges/angular/31-module-to-standalone.md deleted file mode 100644 index 93b0850ef..000000000 --- a/docs/src/content/docs/challenges/angular/31-module-to-standalone.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 🟢 Module to Standalone -description: Challenge 31 is about migrating a module based application to a standalone application. -author: thomas-laforge -contributors: - - tomalaforge -challengeNumber: 31 -command: angular-module-to-standalone -sidebar: - order: 6 ---- - -## Information - -In v14, standalone components were released and made stable in v15. If you haven't played with them, it's never too late. You can try them out in this challenge. - -Moreover, the goal is to see how **Nx** and **standalone components** work together, and experience the process of decoupling your app with Nx lib and standalone components. - -Finally, standalone components are very simple to understand, but **routing/lazy-loaded components** can be a bit harder to grasp. This challenge will allow you to manipulate components at different levels of nesting and work with lazy loaded routes. - -After completing this challenge, standalone components will no longer hold any secrets for you. - -## Statement - -The goal of this challenge is to migrate your application from module based components to standalone components. - -## Note - -You can also test the [Angular schematic](https://angular.dev/reference/migrations/standalone) to migrate NgModule to Standalone components. _(Since we are using nx, start your command with nx instead of ng)_ diff --git a/docs/src/content/docs/challenges/angular/32-change-detection-bug.md b/docs/src/content/docs/challenges/angular/32-change-detection-bug.md deleted file mode 100644 index 633d41721..000000000 --- a/docs/src/content/docs/challenges/angular/32-change-detection-bug.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: 🟠 Change Detection Bug -description: Challenge 32 is about debugging an application that has issue when change detection is triggered -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - jdegand - - LMFinney -challengeNumber: 32 -command: angular-change-detection-bug -blogLink: https://medium.com/ngconf/function-calls-inside-template-are-dangerous-15f9822a6629 -sidebar: - order: 105 ---- - -:::note -This challenge is inspired by a real-life example that I simplified to create this nice challenge. -::: - -## Information - -In this small application, we have a navigation menu to route our application to either `BarComponent` or `FooComponent`. However, our application is not loading and no errors are displayed inside the console. - -## Statement - -The goal of the challenge is to debug this application and make it work. - -:::note -Without knowing the exact reason for the issue, you can "fix" the error and get the program to function. One such approach would be to memoize `getMenu`. The application might work again, but make sure you really understand the problem and its consequences. Making it work isn't always enough; fixing this bug in the wrong way can cause a loss of performance or lead to other problems later on. -::: - -## Hints - -
    - Hint 1 - - If you comment out `routerLinkActive="isSelected"` inside `NavigationComponent`, the application loads correctly. -
    - -
    - Hint 2 - -If you open the [`RouterLinkActive` source code](https://github.com/angular/angular/blob/main/packages/router/src/directives/router_link_active.ts) and go to **line 196**, Angular is calling `this.cdr.markForCheck` inside a microTask, which triggers a new CD cycle. If you comment out this line, the application loads again, however, the bug should not be fixed by changing the Angular source code. 😅😯 - -
    diff --git a/docs/src/content/docs/challenges/angular/33-decoupling-components.md b/docs/src/content/docs/challenges/angular/33-decoupling-components.md deleted file mode 100644 index 2b900c7a6..000000000 --- a/docs/src/content/docs/challenges/angular/33-decoupling-components.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: 🟠 Decoupling Components -description: Challenge 33 is about decoupling two strongly coupled components using Injection Token -author: thomas-laforge -contributors: - - tomalaforge - - jdegand - - LMFinney -challengeNumber: 33 -command: angular-decoupling-components -sidebar: - order: 106 ---- - -> Big thanks to **Robin Goetz** and his [Spartan Project](https://github.com/goetzrobin/spartan). -> This challenge was proposed by Robin and is strongly inspired by his project. - -## Information - -The goal of this challenge is to separate the behavior of a component from its style. For the purpose of this challenge, we will be working on a button element. When we click on it, we will toggle a _disabled_ property which will change the style of the element. This is quite useless in real life but the challenge aims to demonstrate a useful concept. - -The behavior of the component (referred to as the _brain_ in the Spartan stack) is located in the brain library. The styling part (referred to as the _helmet_) is located inside the helmet library. Both libraries cannot depend on each other because we want to be able to publish them separately. To help us address the issue, we are using the Nx `enforce-module-boundaries` eslint rule. You can find more details [here](https://nx.dev/core-features/enforce-module-boundaries). - -However, the button's helmet needs to access the state of the component to style the button differently based on its state. As mentioned above, we cannot import the `BtnDisabledDirective` directly into the helmet library as done currently. If you go to [`BtnHelmetDirective`](../../libs/decoupling/helmet/src/lib/btn-style.directive.ts), you will encounter a linting error. **A project tagged with `type:hlm` can only depend on libs tagged with `type:core`**. - -## Statement - -The goal of this challenge is to find a way to decouple both Directives. - -### Hint - -
    - Hint 1 - Carefully read the title of the challenge 😇 -
    diff --git a/docs/src/content/docs/challenges/angular/4-typed-context-outlet.md b/docs/src/content/docs/challenges/angular/4-typed-context-outlet.md deleted file mode 100644 index 86d43e5f1..000000000 --- a/docs/src/content/docs/challenges/angular/4-typed-context-outlet.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: 🔴 Typed ContextOutlet -description: Challenge 4 is about strongly typing ngContextOutlet directives -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - svenson95 - - jdegand - - LMFinney -challengeNumber: 4 -command: angular-typed-context-outlet -blogLink: https://medium.com/@thomas.laforge/ngtemplateoutlet-type-checking-5d2dcb07a2c6 -sidebar: - order: 201 ---- - -## Information - -You can improve template type checking for custom directives by adding template guard properties to your directive definition. Angular offers the static function [`ngTemplateContextGuard`](https://angular.dev/guide/directives/structural-directives#improving-template-type-checking-for-custom-directives) to strongly type structural directives. - -However, the context of **NgTemplateOutlet** type is **Object**. But with the help of the above guard, we can improve that behavior. - -## Statement - -In this exercise, we want to learn how to strongly type our `ng-template` in our `AppComponent`. - -This exercise has two levels of complexity. - -### Level 1: Known Interface - -Currently, we have the following piece of code. - -![Unknown Person](../../../../assets/4/unknown-person.png 'Unknown Person') - -As we can see, `name` is of type `any`. We want to infer the correct type using the custom directive `PersonDirective`. - -### Level 2: Generic Interface - -Currently, we have the following piece of code. - -![Unknown Student](../../../../assets/4/unknown-student.png 'Unknown Student') - -As we can see, `student` is of type `any`. We want to infer the correct type using the custom directive `ListDirective`. - -But in this part, we want to pass a list of **any object** to `ListComponent`. And we still want the correct type to be inferred. diff --git a/docs/src/content/docs/challenges/angular/45-react-in-angular.md b/docs/src/content/docs/challenges/angular/45-react-in-angular.md deleted file mode 100644 index cef0a4841..000000000 --- a/docs/src/content/docs/challenges/angular/45-react-in-angular.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: 🔴 React in angular -description: Challenge 45 is about learning how to benefit from the numerous libraries in React -author: wandrille-guesdon -contributors: - - wandri - - tomalaforge - - jdegand - - LMFinney -challengeNumber: 45 -command: angular-react-in-angular -sidebar: - order: 209 ---- - -The goal of this challenge is to use a React component inside an Angular application. - -Many components are available in React, and it can be interesting to use them in an Angular application. The goal is to create a React component and use it in an Angular application. - -## Information - -In this challenge, we have a simple application and a React component `ReactPost` in `app/react` to illustrate a React component from a library. - -## Statement - -- Your task is to display the posts with the React component `ReactPost`. -- When you select a post, the post should be highlighted. - -In order to play with the React component, you should start by installing the React dependencies. - -```bash -npm i --save react react-dom -npm i --save-dev @types/react @types/react-dom -``` - -## Constraints - -- Do not transform the React component into an Angular component. The React component is pretty simple and can be written with ease in Angular. But **the goal is to use the React component**. - -### Hint - -
    - Hint 1 - Configuration - Allow the React files in tsconfig.json - -``` -{ -... -"compilerOptions": { - ... - "jsx": "react" -}, -... -} -``` - -
    - -
    - Hint 2 - Initialization - Create a React root with `createRoot(...)` -
    - -
    - Hint 3 - Display - To render the component, it should look like this: - - ``` - .render( - - ... - - ) - ``` - -
    - -
    - Hint 4 - Design - Do not forget to allow the React file in Tailwind. -
    diff --git a/docs/src/content/docs/challenges/angular/46-simple-animations.md b/docs/src/content/docs/challenges/angular/46-simple-animations.md deleted file mode 100644 index aa8887977..000000000 --- a/docs/src/content/docs/challenges/angular/46-simple-animations.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: 🟢 Simple Animations -description: Challenge 46 is about learning Angular's integrated animation API -author: sven-brodny -contributors: - - svenson95 - - LMFinney -challengeNumber: 46 -command: angular-simple-animations -sidebar: - order: 17 ---- - -## Information - -This is the first of two animation challenges. The goal of this series is to master animations in Angular. - -Well-designed animations can make your application more fun and straightforward to use, but they aren't just cosmetic. Animations can improve your application and user experience in a number of ways: - -- Without animations, web page transitions can seem abrupt and jarring. -- Motion greatly enhances the user experience, so animations give users a chance to detect the application's response to their actions. -- Good animations intuitively call the user's attention to where it is needed. - -I would recommend you read the [official documentation](https://angular.dev/guide/animations). You will learn everything that is necessary to successfully complete the challenge. - -Otherwise, look at this [working example](https://svenson95.github.io/ng-xmp-animations/) and [git repo](https://github.com/svenson95/ng-xmp-animations) to get inspired. - -## Statement - -The goal of this challenge is to add animations, they should run when the user arrives on the page or reload the page. - -## Constraints - -- Don't use any CSS and utilize Angular's integrated `@angular/animations` API. -- Don't trigger the animations with a button like in the examples, rather when the user enter or reload the page. - -### Level 1 - -Add a fading or moving animation for the paragraphs on the left side. - - - -### Level 2 - -Add a stagger animation for the list on the right side. - - diff --git a/docs/src/content/docs/challenges/angular/5-crud-application.md b/docs/src/content/docs/challenges/angular/5-crud-application.md deleted file mode 100644 index 1e439150a..000000000 --- a/docs/src/content/docs/challenges/angular/5-crud-application.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: 🟢 Crud application -description: Challenge 5 is about refactoring a crud application -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - svenson95 - - jdegand - - LMFinney -challengeNumber: 5 -command: angular-crud-application -sidebar: - order: 2 ---- - -## Information - -Communicating and having a global/local state in sync with your backend is the heart of any application. You will need to master these following best practises to build strong and reliable Angular Applications. - -## Statement - -In this exercise, you have a small CRUD application, which get a list of TODOS, update and delete some todos. - -Currently, we have a working example but filled with lots of bad practices. - -### Step 1: refactor with best practices - -What you will need to do: - -- Avoid **any** as a type. Using Interface to leverage Typescript type system prevent errors -- Use a **separate service** for all your http calls and use a **Signal** for your todoList -- Don't **mutate** data - -```typescript -// Avoid this -this.todos[todoUpdated.id - 1] = todoUpdated; - -// Prefer something like this, but need to be improved because we still want the same order -this.todos = [...this.todos.filter((t) => t.id !== todoUpdated.id), todoUpdated]; -``` - -### Step 2: Improve - -- Add a **Delete** button: _Doc of fake API_ -- Handle **errors** correctly. _(Globally)_ -- Add a Global **loading** indicator. _You can use MatProgressSpinnerModule_ - -### Step 3: Maintainability!! add some test - -- Add 2/3 tests - -### Step 4: Awesomeness!!! master your state. - -- Use the **component store of ngrx**, **ngrx/store**, **rxAngular**, **tanstack-query** or **ngrx/signal-store** as a local state of your component. -- Have a **localized** Loading/Error indicator, e.g. only on the Todo being processed and **disable** all buttons of the processed Todo. _(Hint: you will need to create an ItemComponent)_ diff --git a/docs/src/content/docs/challenges/angular/52-lazy-load-component.md b/docs/src/content/docs/challenges/angular/52-lazy-load-component.md deleted file mode 100644 index f71c57d48..000000000 --- a/docs/src/content/docs/challenges/angular/52-lazy-load-component.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: 🟢 Lazy Load a Component -description: Challenge 52 is about understanding how to lazy load a component in Angular. -author: lance-finney -contributors: - - LMFinney -challengeNumber: 52 -command: angular-lazy-load-component -sidebar: - order: 21 ---- - -## Information - -Angular has long had route-based lazy loading for entire modules, but lazy loading individual components was much more complicated. This challenge is about understanding how to lazy load a component easily with a feature that was introduced in Angular 17. - -## Statement - -This is a simple application that can display a `TopComponent` that we are pretending would slow the application down if it were part of the initial bundle (it actually contains just a bit of text, but we are pretending). - -The current implementation shows a `PlaceholderComponent` until the user clicks a button to display the `TopComponent`. However, even though the `TopComponent` isn't visible until the button is clicked, it is still loaded as part of the initial bundle. - -Use a new feature of Angular 17 to lazy load the `TopComponent` so that it is visible _and loaded_ when the user clicks the button to display it. - -When you are done, you should be able to see the `TopComponent` being loaded into the browser in a separate bundle when you click the button to display it. In Chrome, you should see this by opening the DevTools, going to the Network tab, and then clicking the button to display the `TopComponent`. - -## Hints - -
    - Hint 1 - -You should be able to remove the `topLoaded` signal when you are done. - -
    - -
    - Hint 2 - -The new Angular feature will hide the `TopComponent` from view, but it will still be loaded in the initial bundle unless you change how both `AppComponent` and `TopComponent` are defined in their decorators. This challenge start with the old `NgModule`-based architecture, but you will need to change it to use the new feature. - -
    - -
    - Hint 3 - -The new feature is [Deferrable Views](https://angular.dev/guide/defer), which provides several different triggers. One of them is ideal for this challenge. - -
    diff --git a/docs/src/content/docs/challenges/angular/55-back-button-navigation.md b/docs/src/content/docs/challenges/angular/55-back-button-navigation.md deleted file mode 100644 index 3a2255f49..000000000 --- a/docs/src/content/docs/challenges/angular/55-back-button-navigation.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: 🟠 Back-Button-Navigation -description: Challenge 55 is about overriding browser back button navigation -author: Ioannis-Tsironis -contributors: - - tsironis13 -challengeNumber: 55 -command: angular-back-button-navigation -sidebar: - order: 123 ---- - -## Information - -The goal of this challenge is to override the default behavior of the browser back button in Angular applications. - -We have been prompted by the team's PO to provide a specific implementation when displaying dialog components and -native browser back button is clicked. Currently, Angular's default behavior when the native back button is clicked is -to remove the current history entry and go back to the previous route. - -The initial state of the application is as follows: -When any dialog is displayed and the back button is clicked, any opened dialog is closed, and the app redirects to the previous page. - -This behavior should be changed according to these requirements: - -1. The requirements dictate a few different behaviors depending on which type of dialog is currently visible. -2. For example, we have a simple - action dialog that should be closed on the back button click, but we **MUST** remain on the current visited route (/simple-action). -3. In addition, we have sensitive dialogs like the one on the '/sensitive-action' page that must open a confirmation dialog on a back button click. -4. The confirmation dialog in combination with the back button click should behave like the simple dialog action one; the confirmation dialog must be closed, and we must remain on the '/sensitive-action' page with the initial dialog still visible. - -## Statement - -Provide an abstract, generic approach to handling any type of dialog behavior when the native browser back button is clicked. -Some Typescript design patterns, in combination with the Angular features, could be utilized to support this kind of infrastructure. - -## Constraints - -- The implementation must not be static depending on the 2 dialog type behaviors presenting on this challenge but also scalable to support any - new behavior requirements may arise in the future. - -### Hint - -
    - Hint 1 - -Use the `CanDeactivate` functional guard - -
    - -
    - Hint 2 - -Material Design dialog documentation can be found [here](https://material.angular.io/components/dialog/overview) - -
    diff --git a/docs/src/content/docs/challenges/angular/58-content-projection-condition.md b/docs/src/content/docs/challenges/angular/58-content-projection-condition.md deleted file mode 100644 index 7dead94de..000000000 --- a/docs/src/content/docs/challenges/angular/58-content-projection-condition.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: 🟠 Content Projection Condition -description: Challenge 58 is about conditional content projection in Angular -author: thomas-laforge -contributors: - - tomalaforge -challengeNumber: 58 -command: angular-content-projection-condition -sidebar: - order: 124 ---- - -## Information - -Content projection in Angular allows you to create flexible and reusable components by dynamically inserting content from a parent component using ``. However, debugging content projection issues can sometimes be tricky. - -In this challenge, we have a `CardComponent` that supports a small mode, which conditionally changes how the projected content is displayed. However, there is a bug: when `small` is `false`, the card does not render properly. - -Your task is to identify and fix this issue without adding `inputs` while ensuring that the intended behavior remains unchanged. - -## Statement - -Your goal is to fix the issue where the `CardComponent` does not render when `small` is `false`. - -## Steps to complete: - -- Analyze how the `small` property is used inside the template. -- Identify why the content is not displayed when `small` is `false`. -- Modify the component to ensure that both cases (`small` = `true` and `small` = `false`) work as expected, while keeping the same structure and behavior. -- Ensure that no new `input` properties are introduced in the component. - -## Constraints - -- You must not add any new `input` properties. -- The expected UI and behavior must remain unchanged. -- The `@if` directive must be correctly handled to ensure content projection works. -- Do not introduce additional services or state management solutions. -- The fix should be minimal and focused on resolving the rendering issue. diff --git a/docs/src/content/docs/challenges/angular/59-content-projection-defer.md b/docs/src/content/docs/challenges/angular/59-content-projection-defer.md deleted file mode 100644 index 32b4e0114..000000000 --- a/docs/src/content/docs/challenges/angular/59-content-projection-defer.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: 🔴 content-projection-defer -description: Challenge 59 is about deferring fetching data -author: thomas-laforge -contributors: - - tomalaforge -challengeNumber: 59 -command: angular-content-projection-defer -sidebar: - order: 212 ---- - -# Challenge: Deferred Loading for Expandable Card Content - -## Information - -Within the application, specifically on page2, there is an expandable card component. This component consists of a permanently visible title and a content section that is hidden until the card is expanded. This content section is populated with a list of posts retrieved via a backend API call. The current implementation presents an issue: upon navigating to page2, although the card defaults to a collapsed state, the API call to load the list of posts is triggered immediately during the page load process, before the user has chosen to expand the card and view the content. - -## Statement - -The goal of this challenge is to optimize the data loading behavior for the expandable card component on `page2`. Modify the implementation so that the backend API call to fetch the list of posts is **deferred**. The data should **only** be fetched when the user explicitly interacts with the card to **expand** it. No data fetching for the post list should occur upon the initial load of `page2` while the card remains collapsed. - -## Constraints - -- The expandable card must retain its core functionality: display a title, be initially collapsed (on `page2` load), and expand/collapse upon user interaction. -- When the card is expanded, the list of posts must be fetched from the backend and displayed within the content area. -- The data fetching mechanism itself (e.g., the API endpoint) should not be changed, only _when_ it is triggered. diff --git a/docs/src/content/docs/challenges/angular/60-async-redirect.md b/docs/src/content/docs/challenges/angular/60-async-redirect.md deleted file mode 100644 index 4fe2608de..000000000 --- a/docs/src/content/docs/challenges/angular/60-async-redirect.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: 🟢 async-redirect -description: Challenge 60 is about using the new `redirectTo` function in Angular Router to modernize navigation logic. -author: thomas-laforge -contributors: - - tomalaforge -challengeNumber: 60 -command: angular-async-redirect -sidebar: - order: 23 - badge: New ---- - -## Statement - -In this challenge, you are working with an Angular application that currently uses a custom `navigate` method in `dashboard.ts` to handle route changes. With the introduction of the new `redirectTo` function in the Angular Router in v20, the goal is to modernize the codebase by removing the old `navigate` method and refactoring the application to use `redirectTo` for all redirection logic. - -Your task is to: - -- Locate and delete the `navigate` method in `dashboard.ts`. -- Refactor the application to use the new `redirectTo` function from the Angular Router wherever navigation is required. - -This will help ensure the application leverages the latest Angular routing features and maintains best practices for navigation and redirection. diff --git a/docs/src/content/docs/challenges/angular/8-pure-pipe.md b/docs/src/content/docs/challenges/angular/8-pure-pipe.md deleted file mode 100644 index c981cda55..000000000 --- a/docs/src/content/docs/challenges/angular/8-pure-pipe.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: 🟢 Pure Pipe -description: Challenge 8 is about creating a pure pipe -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - kabrunko-dev - - svenson95 - - LMFinney -challengeNumber: 8 -command: angular-pure-pipe -blogLink: https://medium.com/ngconf/deep-dive-into-angular-pipes-c040588cd15d -sidebar: - order: 3 ---- - -## Information - -This is the first of three `@Pipe()` challenges. The goal of this series is to master **pipes** in Angular. - -Pipes are a very powerful way to transform data in your template. The difference between calling a function and a pipe is that pure pipes are memoized. So, they won't be recalculated every change detection cycle if their inputs haven't changed. - -Pipes are designed to be efficient and optimized for performance. They use change detection mechanisms to only recalculate the value if the input changes, to minimize unnecessary calculations and improve rendering performance. - -By default, a pipe is pure. You should be aware that setting `pure` to false is prone to be inefficient, because it increases the amount of rerenders. - -:::note -A **pure** pipe is only called when the value changes.\ -A **impure** pipe is called every change detection cycle. -::: - -There are some useful predefined pipes like the DatePipe, UpperCasePipe and CurrencyPipe. To learn more about pipes in Angular, check the API documentation [here](https://angular.dev/guide/pipes). - -## Statement - -In this exercise, you need to refactor a transform function inside a component, which is called inside your template. The goal is to convert this function to a pipe. - -## Constraints - -- Must be strongly typed diff --git a/docs/src/content/docs/challenges/forms/41-control-value-accessor.md b/docs/src/content/docs/challenges/forms/41-control-value-accessor.md deleted file mode 100644 index 57f4473c4..000000000 --- a/docs/src/content/docs/challenges/forms/41-control-value-accessor.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: 🟠 Control Value Accessor -description: Challenge 41 is about creating a custom form control that implements Control Value Accessor interface. -author: stanislav-gavrilov -contributors: - - stillst -challengeNumber: 41 -command: forms-control-value-accessor -sidebar: - order: 1 ---- - -## Information - -In this challenge, the goal is to create a custom form field that is using the Form API of Angular `ControlValueAccessor`. You can find the documentation [here](https://angular.dev/api/forms/ControlValueAccessor). This interface is crucial for creating custom form controls that can interact seamlessly with Angular's forms API. - -## Statement - -The primary goal is to use control in the `feedbackForm` to eliminate the need for using `@Output` to retrieve the value and inject it into the `FormGroup`. -Additionally, you are required to integrate validation for the new control to ensure that rating data exist. (The form submission button should be disabled if the form is invalid). - -Currently, rating is coded this way: - -```html - -``` - -```ts -rating: string | null = null; - -onFormSubmit(): void { - this.feedBackSubmit.emit({ - ...this.feedbackForm.value, - rating: this.rating, // not inside the FormGroup and no validation - }); -} -``` - -The goal is to include rating into the `FormGroup` - -```html - -``` diff --git a/docs/src/content/docs/challenges/nx/25-generator-lib-ext.md b/docs/src/content/docs/challenges/nx/25-generator-lib-ext.md deleted file mode 100644 index 891be9b16..000000000 --- a/docs/src/content/docs/challenges/nx/25-generator-lib-ext.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: 🔴 Extend Lib Generator -description: Challenge 25 is about creating a Nx generator to extend the built-in Library Generator -author: thomas-laforge -contributors: - - tomalaforge - - LMFinney -challengeNumber: 25 -sidebar: - order: 207 ---- - -## Information - -Welcome to the marvelous world of Nx generators. - -Generators are awesome tools that can help you and your team generate code more quickly, especially for pieces of code that you use frequently. While using Nx, you create libraries regularly, but sometimes the default generator doesn't perfectly meet your needs. - -## Statement - -The goal of this challenge is to create a generator that extends the default library generator of Nx. You will need to override the default `jest.config.ts` and a `eslintrc.json` with a custom one. - -You can either use all the default parameters of the Nx library generator or choose to modify some and keep others as defaults. The choice is yours. - -## Constraints - -You should only override the jest configuration is the `unitTestRunner` option is set at `jest`, and you should only update the eslint configuration if the `linter` is set to `eslint`. - ---- - -`jest.config.ts` - -```ts -/* eslint-disable */ -export default { - displayName: '< libName >', // 👈 lib name - preset: '../../../jest.preset.js', // 👈 be careful with the path - setupFilesAfterEnv: ['/src/subscription-setup.ts'], - transform: { - '^.+\\.(ts|mjs|js|html)$': [ - 'jest-preset-angular', - { - tsconfig: '/tsconfig.spec.json', - stringifyContentPathRegex: '\\.(html|svg)$', - }, - ], - }, - transformIgnorePatterns: ['node_modules/(?!(.*\\.mjs$|lodash-es))'], -}; -``` - ---- - -`eslintrc.json` - -Add the rule `"@typescript-eslint/member-ordering": "off"` inside the rules properties of ts files. diff --git a/docs/src/content/docs/challenges/nx/26-generator-comp.md b/docs/src/content/docs/challenges/nx/26-generator-comp.md deleted file mode 100644 index ae1505459..000000000 --- a/docs/src/content/docs/challenges/nx/26-generator-comp.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -title: 🟠 Component Generator -description: Challenge 26 is about creating a Nx generator to create a custom component -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - Sagardevkota - - LMFinney -challengeNumber: 26 -sidebar: - order: 116 ---- - -## Information - -Welcome to the marvelous world of Nx generators. - -Generators are awesome tools that can help you and your team generate code more quickly, especially for pieces of code that you use frequently. Inside an enterprise project, you often have to create components that look similar. And most of the time, you end up copy/pasting other components. In Nx, you can create this boilerplate in a simple command using generators. - -## Statement - -The goal of this challenge is to create a generator that will create all the boilerplate of a component for you. - -Below are the end result of your generator for a `UserComponent` associated with a `@ngrx/component-store`. - -## Options - -- name : name of your component/store/service -- createService: flag to tell if a http service should be created - - yes : create as below - - no: don't create the inject/import/effect/function call (anything related to the service call) -- inlineTemplate: flag to decide if template should be inline or in a separate file - ---- - -`user.component.ts` - -```ts -@Component({ - selector: 'app-user', - imports: [LetDirective], - providers: [provideComponentStore(UserStore)], - template: ` - // do things - `, - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class UserComponent { - private userStore = inject(UserStore); - - readonly vm$ = this.userStore.vm$; -} -``` - ---- - -`user.store.ts` - -```ts -import { Injectable, inject } from '@angular/core'; -import { ComponentStore, OnStateInit, OnStoreInit } from '@ngrx/component-store'; -import { tapResponse } from '@ngrx/operators'; -import { mergeMap, pipe, tap } from 'rxjs'; -import { User } from './user.model'; -import { UserService } from './user.service'; - -export interface UserState { - users: User[]; - loading: boolean; - error?: string; -} - -const initialState: UserState = { - users: [], - loading: false, - error: undefined, -}; - -@Injectable() -export class UserStore extends ComponentStore implements OnStateInit, OnStoreInit { - private userService = inject(UserService); - - private readonly users$ = this.select((state) => state.users); - private readonly loading$ = this.select((state) => state.loading); - private readonly error$ = this.select((state) => state.error); - - readonly vm$ = this.select( - { - users: this.users$, - loading: this.loading$, - error: this.error$, - }, - { debounce: true }, - ); - - ngrxOnStateInit() { - this.setState(initialState); - } - - ngrxOnStoreInit() { - this.loadUsers(); - } - - readonly loadUsers = this.effect( - pipe( - tap(() => this.patchState({ loading: true })), - mergeMap(() => - this.userService.loadUsers().pipe( - tapResponse( - (users) => this.patchState({ users, loading: false }), - (err: string) => this.patchState({ error: err, loading: false }), - ), - ), - ), - ), - ); -} -``` - ---- - -`user.service.ts` - -```ts -import { BASE_URL } from '@angular-challenges/fake-utils'; -import { HttpClient } from '@angular/common/http'; -import { Injectable, inject } from '@angular/core'; -import { User } from './user.model'; - -@Injectable({ providedIn: 'root' }) -export class UserService { - private http = inject(HttpClient); - private BASE_URL = inject(BASE_URL); - - loadUsers = () => this.http.get(`${this.BASE_URL}/users`); -} -``` - ---- - -`user.model.ts` - -```ts -export interface User { - name: string; -} -``` diff --git a/docs/src/content/docs/challenges/nx/27-forbid-enum-rule.md b/docs/src/content/docs/challenges/nx/27-forbid-enum-rule.md deleted file mode 100644 index 998e11c49..000000000 --- a/docs/src/content/docs/challenges/nx/27-forbid-enum-rule.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: 🟢 Custom Eslint Rule -description: Challenge 27 is about creating a custom ESLint Rule to forbid enums -author: thomas-laforge -contributors: - - tomalaforge - - jdegand -challengeNumber: 27 -sidebar: - order: 12 ---- - -## Information - -ESLint is an amazing tool that helps developers avoid simple mistakes and adhere to company style guides. - -In this first example, we will create a rule that forbids the use of enums. The rule will suggest using string unions instead of enums whenever an enum is present in this repo's code. This is a straightforward rule for learning how to create rules. - -You will also need to write tests to verify the rule's functionality. - -The starter code for this challenge can be found (from the root folder) inside `tools/eslint-rules/rules`. - -To test the rule inside your project, add `"@nx/workspace/forbidden-enum": "error"` to the `eslintrc.json`. You can navigate to Challenge 47, `Enums vs. Union Types', and you should immediately see an error. - -To assist you with AST (Abstract Syntax Tree) definitions, you can visit the [AST Explorer](https://astexplorer.net/) and use `JavaScript`, `@typescript-eslint/parser`, and `ESLint-v8` as the transformation methods. However, please note that you will only get the `type` information there. The transformation function may not work for TypeScript types since the editor is in JavaScript. - -You can also check this [repo](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin/src/rules) for ESLint rule examples. diff --git a/docs/src/content/docs/challenges/nx/42-static-vs-dynamic-import.md b/docs/src/content/docs/challenges/nx/42-static-vs-dynamic-import.md deleted file mode 100644 index 2e04e1447..000000000 --- a/docs/src/content/docs/challenges/nx/42-static-vs-dynamic-import.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: 🟢 Static vs Dynamic Import -description: Challenge 42 is about understanding and fixing the eslint rule - Static imports of lazy-loaded libraries are forbidden. -author: thomas-laforge -contributors: - - tomalaforge -challengeNumber: 42 -command: nx-static-vs-dynamic-import -sidebar: - order: 15 ---- - -## Information - -If you are using **Nx**, you might have encountered this error: - -```ts -Static imports of lazy-loaded libraries are forbidden. - -Library "users" is lazy-loaded in these files: - -- apps/nx/static-dynamic-import/src/app/app.config.ts eslint@nx/enforce-module-boundaries -``` - -This error is part of the ESLint rule embedded by Nx to prevent people from mixing lazy-loading and eagerly-loading code from the same library. Although this error will not break at runtime or build time, it can lead to consequences for bundle size. The lazy-loaded code will end up in the main bundle, nullifying all the benefits of lazy-loading a library. - -## Statement - -The goal of this challenge is to improve the code architecture to eliminate this ESLint error. - -You will learn how to create a library and how to rearrange code. diff --git a/docs/src/content/docs/challenges/performance/12-optimize-change-detection.md b/docs/src/content/docs/challenges/performance/12-optimize-change-detection.md deleted file mode 100644 index 5fa698a43..000000000 --- a/docs/src/content/docs/challenges/performance/12-optimize-change-detection.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: 🟠 Optimize Change Detection -description: Challenge 12 about optimizing the number of change detection cycle while scrolling -author: thomas-laforge -contributors: - - tomalaforge - - LMFinney -challengeNumber: 12 -command: performance-optimize-change-detection -sidebar: - order: 107 ---- - -## Information - -In Angular, there is a library called Zone.js that performs a lot of magic to simplify a developer's life. Zone.js monkey patches all DOM events so that it will recheck and rerender the view when something has changed inside the application. The developer doesn't have to manually trigger change detection. - -However, sometimes Zone.js triggers a lot more change detection than needed. For example, when you are listening to a scroll event, each scroll event will dispatch a new change detection cycle. - -In this challenge, we only need to refresh the view at a specific scroll position to display or hide a button. All other cycles are unnecessary. - -To have a better visualization of the problem, profile your application with Angular Dev Tools. - -:::note -If you don't know how to use it, read [the performance introduction page](/challenges/performance/) first and come back after. -::: - -You can learn more details about zone pollution and how to resolve it [here](https://angular.dev/best-practices/zone-pollution). - -The following video will explain more in-depth the issue of this application. - - - -## Statement - -Your goal for this challenge is to avoid all unnecessary change detection cycles and trigger a change detection only when needed. - -## Constraint: - -You cannot opt out of Zone.js globally. If this code is part of a large project, and you opt out of Zone.js, you will break your application without any doubt. diff --git a/docs/src/content/docs/challenges/performance/34-default-vs-onpush.md b/docs/src/content/docs/challenges/performance/34-default-vs-onpush.md deleted file mode 100644 index 779af5324..000000000 --- a/docs/src/content/docs/challenges/performance/34-default-vs-onpush.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: 🟢 Default vs OnPush -description: Challenge 34 is about learning the difference between Default and OnPush Change Detection Strategy. -author: thomas-laforge -contributors: - - tomalaforge -challengeNumber: 34 -command: performance-default-vs-onpush -sidebar: - order: 7 ---- - -## Information - -In this challenge, we will explore the differences and impacts of using `ChangeDetectionStrategy.Default` versus `ChangeDetectionStrategy.OnPush`. - -You can read the [Angular documentation](https://angular.dev/best-practices/skipping-subtrees) to learn more about the differences between these strategies. - -In this challenge, all components start with the `Default` strategy. When you type letters inside the input field, you will notice that all components are highlighted in orange. - -:::note -I added color highlighting to each component and each row to provide a better visualization of when a component is rerendered. -::: - -As you can see, each letter triggers a new change detection cycle, and all components are rerendered, causing performance issues. - -Let's use the Angular DevTool to profile our application and understand how this tool can help us understand what is happening inside our application. - -:::note -If you don't know how to use it, read [the performance introduction page](/challenges/performance/) first and come back after. -::: - -Now, start profiling your application and type some letters inside the input field to trigger some change detection cycles. - -If you click on one of the bars (indicated by the yellow arrow in the picture below), you can see that `PersonListComponent`, `RandomComponent`, and all the `MatListItem` are impacted by the change detection cycle, even when we only interact with the input field. - -![profiler record](../../../../assets/performance/34/profiler-record.png 'Profiler Record') - -## Statement - -The goal of this challenge is to improve the clustering of change detection within the application using the `OnPush` change detection strategy, but not only... - -## Hints: - -
    - Hint 1 - -Use `ChangeDetectionStrategy.OnPush` but this will not be enough. - -
    - -
    - Hint 2 - -Create smaller components to better separate the input field from the list. - -
    diff --git a/docs/src/content/docs/challenges/performance/35-memoization.md b/docs/src/content/docs/challenges/performance/35-memoization.md deleted file mode 100644 index 52f61389b..000000000 --- a/docs/src/content/docs/challenges/performance/35-memoization.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: 🟢 Memoization -description: Challenge 35 is about learning how pure pipe works -author: thomas-laforge -contributors: - - tomalaforge - - LMFinney -challengeNumber: 35 -command: performance-memoization -sidebar: - order: 8 ---- - -## Information - -In Angular, pure Pipes are very powerful because the value is memoized, which means if the input value doesn't change, the `transform` function of the pipe is not recomputed, and the cached value is outputted. - -You can learn more about pipes in the [Angular documentation](https://angular.dev/guide/pipes) and inside this [deep dive article](https://medium.com/ngconf/deep-dive-into-angular-pipes-c040588cd15d). - -In this challenge, we start with a button to load a list of people. Each person is associated with a number, and we will use the Fibonacci calculation to create a heavy computation that will slow down the application. - -Once the list is loaded, try typing some letters inside the input field. You will notice that the application is very slow, even though you are only performing very basic typing. - -:::note -We will not focus on the initial loading of the list in this challenge. -::: - -Let's use the Angular DevTool to profile our application and understand how this tool can help us understand what is happening inside our application. - -:::note -If you don't know how to use it, read [the performance introduction page](/challenges/performance/) first and come back after. -::: - -Now, start profiling your application and type some letters inside the input field. You will see some red bars showing up inside the profiler panel. - -If you click on one of the bars (indicated by the yellow arrow in the picture below), you will see that the change detection cycle is taking more than 3s in `PersonListComponent`. - -![profiler record](../../../../assets/performance/35/memoize-profiler.png 'Profiler Record') - -## Statement - -The goal of this challenge is to understand what is causing this latency and to improve it. - -## Hints: - -
    - Hint 1 - -Use `Pipes` to memoize the Fibonacci computation. - -
    diff --git a/docs/src/content/docs/challenges/performance/36-ngfor-optimization.md b/docs/src/content/docs/challenges/performance/36-ngfor-optimization.md deleted file mode 100644 index 336f525fa..000000000 --- a/docs/src/content/docs/challenges/performance/36-ngfor-optimization.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: 🟢 NgFor Optimization -description: Challenge 36 is about learning how trackby works -author: thomas-laforge -contributors: - - tomalaforge - - LMFinney -challengeNumber: 36 -command: performance-ngfor-optimization -sidebar: - order: 13 ---- - -## Information - -In this application, we have a list of individuals that we can add, delete or update. If you open the developer Chrome panel by pressing **F12**, go to the Elements tab, and expand the element to see the list, you will notice that each time you add, delete or update a list item, all the DOM elements are destroyed and initialized again. (See video below). - - - -We can also use the Angular DevTool to profile our application and understand what is happening inside our application. I will show you how to do it inside the following video. - - - -:::note -If you don't know how to use it, read [the performance introduction page](/challenges/performance/) first and come back after. -::: - -If you need more information about `NgFor`, I invite you to read the [documentation](https://angular.dev/api/common/NgFor) first. - -## Statement - -The goal of this challenge is to understand what is causing this DOM refresh and to solve it. diff --git a/docs/src/content/docs/challenges/performance/37-optimize-big-list.md b/docs/src/content/docs/challenges/performance/37-optimize-big-list.md deleted file mode 100644 index daeb5aec9..000000000 --- a/docs/src/content/docs/challenges/performance/37-optimize-big-list.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: 🟠 Optimize Big List -description: Challenge 37 is about learning how virtualization optimize big list rendering -author: thomas-laforge -contributors: - - tomalaforge - - jdegand - - LMFinney -challengeNumber: 37 -command: performance-optimize-big-list -sidebar: - order: 117 ---- - -## Information - -In this application, we will render a list of 100,000 individuals by clicking on the **loadList** button. If you open the Chrome developer panel by pressing **F12**, go to the Elements tab, and expand the element to see the list, you will notice that all 100,000 elements are rendered in the DOM, even though we can only see about 20 elements in the viewport. This process takes a lot of time, which is why the application is very slow at displaying the list. - -We can use the Angular DevTool to profile our application and understand what is happening inside our application. I will show you how to do it inside the following video. - - - -:::note -If you don't know how to use it, read [the performance introduction page](/challenges/performance/) first and come back after. -::: - -## Statement - -The goal of this challenge is to implement a better alternative to display big list of items. - -## Hints: - -
    - Hint 1 - -If you're unsure where to begin, I recommend reading the [Angular CDK virtualization documentation](https://material.angular.io/cdk/scrolling/overview). - -
    diff --git a/docs/src/content/docs/challenges/performance/40-web-worker.md b/docs/src/content/docs/challenges/performance/40-web-worker.md deleted file mode 100644 index 522e19d28..000000000 --- a/docs/src/content/docs/challenges/performance/40-web-worker.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: 🟠 Web workers -description: Challenge 40 is about learning how to create and use a web worker -author: thomas-laforge -contributors: - - tomalaforge - - jdegand -challengeNumber: 40 -command: performance-web-workers -sidebar: - order: 119 ---- - -## Information - -This challenge has been created for [Angular Advent Calendar](https://angularchristmascalendar.com) 2023. - -This application is basic. We click on the **Discover** button to reveal the surprise hidden behind the black screen. However, the current application provides an awful user experience. When we click on the button, the page freezes, and after a while, it reveals the secret all at once without a smooth animation. - -> Note: To create the application freeze, the loader is based on a very heavy computation function. We could have used a basic timer, but that's not the point of this challenge. - -Since JavaScript is single-threaded, when we perform a heavy task, the browser cannot update the UI or respond to mouse clicks or any events. To free the main thread, the goal is to isolate the heavy computation into a different thread. To do so, we will need to use web workers. Web workers can run any scripts in the background, in isolation from the main thread, allowing the browser to still provide your user with a good experience. - -In Angular, this technology is often underused, however, it's straightforward to create one. There is a schematic that you can find [here](https://angular.dev/ecosystem/web-workers). - -## Statement - -The goal of this challenge is to create a smooth animation by isolating the heavy computation function into a web worker. - -First, create a web worker using a schematic, then move the issuing function. Finally, the animation should be smooth and the progress percentage should update, which will provide an awesome user experience. - -:::note -Since we are inside an Nx workspace, simply replace the `ng` command with `nx` when running the schematic. - -If `nx` is not installed globally on your machine, prefix your command with `npx`. -::: diff --git a/docs/src/content/docs/challenges/performance/index.mdx b/docs/src/content/docs/challenges/performance/index.mdx deleted file mode 100644 index 5a7bb0abe..000000000 --- a/docs/src/content/docs/challenges/performance/index.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Angular Performance -prev: false -next: false -contributors: - - tomalaforge - - tomer953 - - LMFinney -description: Learn how to use the Angular Devtool chrome extension. -noCommentSection: true -sidebar: - order: 1 ---- - -import { LinkCard } from '@astrojs/starlight/components'; - -In this series of challenges about performance, you will learn how to optimize and enhance the performance of your Angular application. - -Before starting to resolve any challenge, I invite you to download the [Angular DevTools Chrome extension](https://chrome.google.com/webstore/detail/angular-devtools/ienfalfjdbdpebioblfackkekamfmbnh) if you haven't already done so. - -This extension allows you to profile your application and detect performance issues, which is very useful for understanding where performance issues can occur. - -## How to use it - -When you serve an Angular application, you can inspect a page by pressing F12, which will open the Chrome developer tools. Then navigate to the Angular tab. From there, you can select the Profiler tab as shown below. - -![profiler tab](../../../../assets/performance/profiler-tab.png 'Profiler tab') - -You can now profile your application by clicking on the record button. You can play with your application and see when change detection is triggered and which components are rerendered. - -:::tip[Learn more] -You can learn more on the [documentation page](https://angular.io/guide/devtools). -::: - -Now that you know how to use the Angular DevTool, you can choose a challenge, profile it, and resolve it. - - - - - - - - - - - - diff --git a/docs/src/content/docs/challenges/rxjs/11-high-order-operator-bug.md b/docs/src/content/docs/challenges/rxjs/11-high-order-operator-bug.md deleted file mode 100644 index dbc0b53d0..000000000 --- a/docs/src/content/docs/challenges/rxjs/11-high-order-operator-bug.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: 🟠 High Order Operator Bug -description: Challenge 11 is about resolving a Rxjs bug because of high order operators -author: thomas-laforge -contributors: - - tomalaforge - - LMFinney -challengeNumber: 11 -command: rxjs-high-order-operator-bug -sidebar: - order: 114 ---- - -Let's dive inside the wonderful word of RxJS. - -This challenge is inspired by a real-life example. - -## Information - -### User Story - -We need a button for each `Topic`. When we click on it, we delete all objects with this `Topic` in our database _(Fake DB in our case)_. Finally, we display **All [topic] have been deleted** if everything was deleted successfully or **Error: deletion of some [topic] failed** if some deletions failed - -### Constraints - -We can only pass one object to our DB for deletion at the time. The DB will respond true if the data was successfully deleted and false otherwise. - -### Statement - -The QA team reports a **bug**. The UI shows **All [topic] have been deleted** all the time, even if some deletions fail. - -👉 Spot the bug and correct it. diff --git a/docs/src/content/docs/challenges/rxjs/14-race-condition.md b/docs/src/content/docs/challenges/rxjs/14-race-condition.md deleted file mode 100644 index b4fbb8d95..000000000 --- a/docs/src/content/docs/challenges/rxjs/14-race-condition.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: 🟢 Race Condition -description: Challenge 14 is about race condition in Rxjs -author: thomas-laforge -contributors: - - tomalaforge - - LMFinney -challengeNumber: 14 -command: rxjs-race-condition -sidebar: - order: 11 ---- - -## Information - -The goal of this application is to display a list of topics in a modal when a button is clicked. The application functions correctly. However, your tech lead has asked you to add tests and they are failing. - -## Statement - -Correct your application to pass the test - -## Constraints - -- I can see you coming 🤣 => You CANNOT change the test (the test is working fine) 😳 -- You CANNOT change the `fakeGetHttpTopic` method. A delay has been added to fake a slow network. - -## Run the test - -HEADLESS : `npx nx test rxjs-race-condition` -WATCH MODE : `npx nx test rxjs-race-condition --watch` diff --git a/docs/src/content/docs/challenges/rxjs/38-rxjs-catch-error.md b/docs/src/content/docs/challenges/rxjs/38-rxjs-catch-error.md deleted file mode 100644 index 5680d1544..000000000 --- a/docs/src/content/docs/challenges/rxjs/38-rxjs-catch-error.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: 🟢 catchError -description: Challenge 38 is about learning observable completion. -author: devesh-chaudhari -command: rxjs-catch-error -contributors: - - DeveshChau - - tomalaforge - - LMFinney -challengeNumber: 38 -sidebar: - order: 14 ---- - -## Information - -### How to Use the Application - -Our application features a form with a text input box and a "Fetch" button. Upon clicking the "Fetch" button, data is retrieved from a [free API](https://jsonplaceholder.typicode.com/). - -The correct values for a successful response are limited to: posts, comments, albums, photos, todos, and users. Any other values will result in an error response. - -### Bug - -A bug has been identified in our application. Users are only able to successfully fetch data until an invalid request is sent. Once an error response is received, users are unable to send additional requests. - -### Learnings - -This application provides an opportunity to understand the correct placement of a [`catchError`](https://rxjs.dev/api/operators/catchError) operator. If placed incorrectly, the overall subscription will be completed, preventing users from sending more requests. The goal is to preserve the overall subscription by handling error notifications from inner observables appropriately. - -## Statement - -The goal is to use the catchError operator to handle error management inside your Rxjs stream. - -## Constraints - -Users should be able to log the value/error each time they click the "Fetch" button. diff --git a/docs/src/content/docs/challenges/signal/30-interop-rxjs-signal.md b/docs/src/content/docs/challenges/signal/30-interop-rxjs-signal.md deleted file mode 100644 index 08489c8f7..000000000 --- a/docs/src/content/docs/challenges/signal/30-interop-rxjs-signal.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: 🔴 Interoperability Rxjs/Signal -description: Challenge 30 is about learning how to mix signal with Rxjs -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 -challengeNumber: 30 -command: signal-interop-rxjs-signal -sidebar: - order: 204 ---- - -## Information - -In this challenge, we have a small reactive application using **RxJS** and **NgRx/Component-Store**. - -The goal of this challenge is to use the new **Signal API** introduced in Angular v16. However, we should not convert everything. Certain portions of the code are better suited for RxJS rather than Signal. It is up to you to determine the threshold and observe how **Signal and RxJS coexist**, as well as how the interoperability is achieved in Angular. - -## Note - -- You can use any third party library if you want to like **ngrx/signal-store**, **tanstack-query** or **rxAngular**. diff --git a/docs/src/content/docs/challenges/signal/43-signal-input.md b/docs/src/content/docs/challenges/signal/43-signal-input.md deleted file mode 100644 index 0ab0498e5..000000000 --- a/docs/src/content/docs/challenges/signal/43-signal-input.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: 🟢 Signal Input -description: Challenge 43 is about learning how to use signal inputs -author: thomas-laforge -contributors: - - tomalaforge -challengeNumber: 43 -command: signal-signal-input -sidebar: - order: 16 ---- - -## Information - -Finally, the day has arrived when the Angular team introduces a reactive input. This highly requested feature has been awaited for many years. Version 17.1 introduces `SignalInput`. Instead of utilizing the well-known `@Input` decorator, you now have a function that returns a signal. - -```ts -// old way -@Input() age?: number; - -// new way -age = input() -``` - -If you want required inputs - -```ts -// old way -@Input({required: true}) age!: number; - -// new way -age = input.required() -``` - -If you wanted to obtain a signal from an input, you had to go through a setter to configure your signal from the input. - -```ts -// old way -age = signal(0) -@Input({alias: 'age'}) set _age(age: number){ - this.age.set(age) -}; - -// new way -age = input() -``` - -You can read more about signal inputs [here](https://angular.dev/guide/signals/inputs). - -## Statement - -In this small application, the goal is to refactor the `UserComponent` to utilize `SignalInput`. - -- You have required and optional inputs. -- You can use the `transform` function for the `age` input to directly convert the property to a number. diff --git a/docs/src/content/docs/challenges/signal/53-big-signal-performance.md b/docs/src/content/docs/challenges/signal/53-big-signal-performance.md deleted file mode 100644 index d3b4ea4a2..000000000 --- a/docs/src/content/docs/challenges/signal/53-big-signal-performance.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: 🟠 Big Signal Performance -description: Challenge 53 is about performance while using big signal object -author: thomas-laforge -contributors: - - tomalaforge - - jdegand -challengeNumber: 53 -command: signal-big-signal-performance -sidebar: - order: 122 ---- - -## Information - -For this challenge, you can imagine a large-scale application where you use a service to save and retrieve your user state at any time within the application. - -The problem is that updating a single user property updates the entire application. - -I added the `CDFlashingDirective` to visualize when one component is rendering. - -## Statement - -With signals, you can now be more fine-grained in what the UI is rendering. The goal of this challenge is to understand why everything is re-rendering and to refactor the application to be more performant. diff --git a/docs/src/content/docs/challenges/testing/17-router.md b/docs/src/content/docs/challenges/testing/17-router.md deleted file mode 100644 index 2af0c8d77..000000000 --- a/docs/src/content/docs/challenges/testing/17-router.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: 🟠 Router -description: Challenge 17 is about testing the router -author: thomas-laforge -contributors: - - tomalaforge - - LMFinney -challengeNumber: 17 -command: testing-router -sidebar: - order: 108 ---- - -## Information - -We have a functional application that lists available books for borrowing inside a library. If the book you searched for is available, you will be directed to the corresponding book(s), otherwise, you will end up on an error page. - -The file named `app.component.spec.ts` will let you test your application using [Angular Testing Library](https://testing-library.com/) . To run the test suites, you need to run `npx nx test testing-router-outlet`. You can also install [Jest Runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner) to execute your test by clicking on the `Run` button above each `describe` or `it` blocks. - -For testing with Cypress, you will execute your test inside the `app.component.cy.ts` and run `npx nx component-test testing-router-outlet` to execute your test suites. You can add the `--watch` flag to execute your test in watch mode. - -# Statement - -The goal is to test multiple behaviors of the application described in each test file using [Angular Testing Library](https://testing-library.com/) and [Cypress Component Testing](https://docs.cypress.io/guides/component-testing/overview). - -:::note -I have created some `it` blocks but feel free to add more tests if you want. -::: diff --git a/docs/src/content/docs/challenges/testing/18-nested-components.md b/docs/src/content/docs/challenges/testing/18-nested-components.md deleted file mode 100644 index d7ba391c2..000000000 --- a/docs/src/content/docs/challenges/testing/18-nested-components.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: 🟠 Nested Components -description: Challenge 18 is about testing nested components -author: thomas-laforge -contributors: - - tomalaforge - - LMFinney -challengeNumber: 18 -command: testing-nested-components -sidebar: - order: 109 ---- - -## Information - -We have a small application that sends a title to a fake backend when the user types the value into an input. -If the title is correctly typed, you can send the request; otherwise you receive an error, and the request is not sent. -The application is created with nested components. `ChildComponent` is the container that includes four components: `ResultComponent`, `ButtonComponent`, `InputComponent` and `ErrorComponent`. However, since we are testing our component as a black box, the architecture of our components doesn't change anything. You can create your test, change how the components are structured, and your tests should still pass. That's the goal of integration tests. Never test internal implementation details!!!. - -You can play with it by running : `npx nx serve testing-nested`. - -The file named `child.component.spec.ts` will let you test your application using [Angular Testing Library](https://testing-library.com/) . To run the test suites, you need to run `npx nx test testing-nested`. You can also install [Jest Runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner) to execute your test by clicking on the `Run` button above each `describe` or `it` blocks. - -For testing with Cypress, you will execute your test inside the `child.component.cy.ts` and run `npx nx component-test testing-nested` to execute your test suites. You can add the `--watch` flag to execute your test in watch mode. - -# Statement - -The goal is to test multiple behaviors of the application describe inside each test files using [Angular Testing Library](https://testing-library.com/) and [Cypress Component Testing](https://docs.cypress.io/guides/component-testing/overview). - -:::note -I have created some `it` blocks but feel free to add more tests if you want. -::: diff --git a/docs/src/content/docs/challenges/testing/19-input-output.md b/docs/src/content/docs/challenges/testing/19-input-output.md deleted file mode 100644 index d77db7eb0..000000000 --- a/docs/src/content/docs/challenges/testing/19-input-output.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: 🟠 Input Output -description: Challenge 19 is about testing inputs and ouputs -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - svenson95 - - jdegand - - LMFinney -challengeNumber: 19 -command: testing-input-output -sidebar: - order: 110 ---- - -## Information - -We have a small counter application that increments or decrements a number. The `CounterComponent` takes an initial value as an `@Input` and emits the result of the counter as an `@Output` when we click on the **Send** button. Since we are testing our component as a black box, we only have access to our inputs and listen to the output values. We should not rely on any internal implementation details!!! - -You can play with it by running : `npx nx serve testing-input-output`. - -The file named `counter.component.spec.ts` will let you test your application using [Angular Testing Library](https://testing-library.com/) . To run the test suites, you need to run `npx nx test testing-input-output`. You can also install [Jest Runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner) to execute your test by clicking on the `Run` button above each `describe` or `it` blocks. - -For testing with Cypress, you will execute your test inside the `child.component.cy.ts` and run `npx nx component-test testing-input-output` to execute your test suites. You can add the `--watch` flag to execute your test in watch mode. - -# Statement - -The goal is to test multiple behaviors of the application described inside each test file using [Angular Testing Library](https://testing-library.com/) and [Cypress Component Testing](https://docs.cypress.io/guides/component-testing/overview). - -:::note -I have created some `it` blocks but feel free to add more tests if you want. -::: diff --git a/docs/src/content/docs/challenges/testing/20-modal.md b/docs/src/content/docs/challenges/testing/20-modal.md deleted file mode 100644 index 8a1d34c8b..000000000 --- a/docs/src/content/docs/challenges/testing/20-modal.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: 🟠 Modal -description: Challenge 20 is about testing modals -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - svenson95 - - jdegand - - LMFinney -challengeNumber: 20 -command: testing-modal -sidebar: - order: 111 ---- - -## Information - -In this small application, you have an input prompting you to enter a name, and a **Confirm** button to submit your form. -If you enter a name, a confirmation modal will appear; otherwise an error modal will be displayed. -In the confirmation modal, if you click the **Confirm** button, a message confirming the submission of the form will appear. If the user clicks on **Cancel**, an error message will be displayed. - -The goal of this challenge is to test the dialogs inside your application. To do so, we will test the full application like an end-to-end test will do. This means, we will test the `AppComponent` as a black box and react to events on the page. No internal details should be tested. The difference between an e2e test and integration test is that we will mock all API calls. _(All http requests are faked inside this application, but this would not be the case in a real enterprise application.)_ - -You can play with it by running : `npx nx serve testing-modal`. - -The file named `app.component.spec.ts` will let you test your application using [Angular Testing Library](https://testing-library.com/) . To run the test suites, you need to run `npx nx test testing-modal`. You can also install [Jest Runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner) to execute your test by clicking on the `Run` button above each `describe` or `it` blocks. - -For testing with Cypress, you will execute your test inside `app.component.cy.ts` and run `npx nx component-test testing-modal` to execute your test suites. You can add the `--watch` flag to execute your test in watch mode. - -# Statement - -The goal is to test multiple behaviors of the application described inside each test file using [Angular Testing Library](https://testing-library.com/) and [Cypress Component Testing](https://docs.cypress.io/guides/component-testing/overview). - -:::note -I have created some `it` blocks but feel free to add more tests if you want. -::: diff --git a/docs/src/content/docs/challenges/testing/23-harness.md b/docs/src/content/docs/challenges/testing/23-harness.md deleted file mode 100644 index 629ffdf5d..000000000 --- a/docs/src/content/docs/challenges/testing/23-harness.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: 🟢 Harness -description: Challenge 23 is about testing with component harnesses -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - svenson95 - - jdegand - - LMFinney -challengeNumber: 23 -command: testing-harness -sidebar: - order: 9 ---- - -## Information - -A component harness is a class that lets a test interact with a component via a supported API. - -The objective of this challenge is to have a better understanding of the CDK test harness API. In this initial challenge, we will only use Angular Material's built-in harnesses. - -Documentation for CDK Component Harness is [here](https://material.angular.io/cdk/test-harnesses/overview#api-for-test-authors). -Documentation for Angular Material component is [here](https://material.angular.io/components/button/overview). - -## Statement - -Test the functionality of `child.component.ts`, which consists of some inputs & checkboxes related to a `mat-slider`. Implement the prepared test suite, but feel free to include additional tests as well. - -**Note:** You are welcome to use [Angular Testing Library](https://testing-library.com/) if you wish. diff --git a/docs/src/content/docs/challenges/testing/24-harness-creation.md b/docs/src/content/docs/challenges/testing/24-harness-creation.md deleted file mode 100644 index d60456b01..000000000 --- a/docs/src/content/docs/challenges/testing/24-harness-creation.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: 🟠 Harness Creation -description: Challenge 24 is about creating a component harness. -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - jdegand -challengeNumber: 24 -command: testing-harness-creation -sidebar: - order: 112 ---- - -## Information - -The goal of this challenge is to create a test harness for `slider.component.ts`. The harness file, `slider.harness.ts`, has already been created. - -The following API needs to be implemented: - -```ts - async clickPlus(): Promise ; - - async clickMinus(): Promise; - - async getValue(): Promise ; - - async getMinValue(): Promise; - - async disabled(): Promise; - - async setValue(value: number): Promise; -``` - -Additionally, you should create a `HarnessPredicate` with the default predicate and the `minValue` property. - -```ts - static with( - this: ComponentHarnessConstructor, - options: SliderHarnessFilters = {} - ): HarnessPredicate; -``` - -Lastly, you will need to create the test suite for `app.component`. Some default tests have already been written, but feel free to add as many tests as you want and create as many harness methods as you need. - -> Angular Material documentation can be found [here](https://material.angular.io/cdk/test-harnesses/overview). - -Good luck !!! 💪 diff --git a/docs/src/content/docs/challenges/testing/28-checkbox.md b/docs/src/content/docs/challenges/testing/28-checkbox.md deleted file mode 100644 index 15b66eb73..000000000 --- a/docs/src/content/docs/challenges/testing/28-checkbox.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: 🟢 Checkbox -description: Challenge 28 is about testing a simple checkbox -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - jdegand - - LMFinney -challengeNumber: 28 -command: testing-checkbox -sidebar: - order: 10 ---- - -## Information - -This application is very simple. It consists of a checkbox that enables or disables a button. The primary goal of this application is to become familiar with the debug API of [Angular Testing Library](https://testing-library.com/). Knowing how to debug your tests is a crucial tool you need to have in your toolkit. - -You can find the documentation about debugging in Angular Testing Library [here](https://testing-library.com/docs/dom-testing-library/api-debugging#screenlogtestingplaygroundurl). - -The main functions to remember are as follows: - -- `logRoles(myDOMElement)`: prints out all ARIA roles within the tree of the given DOM element. ARIA roles are the primary selectors you should reach for in the first place. -- `screen.debug()` or `screen.debug(myDOMElement)`: prints the DOM inside the console. -- `screen.logTestingPlaygroundURL()` or `screen.logTestingPlaygroundURL(myDOMElement)`: this function is very powerful. It will create a playground to expose all elements, and you can interact with it to see the selectors you should choose for a DOM element. - -## Statement - -The goal of this challenge is not to submit an answer, but you can if you want. It's more about using the debugging API to play around. These tools will be of great help for the upcoming testing challenges. diff --git a/docs/src/content/docs/challenges/testing/29-real-life-application.md b/docs/src/content/docs/challenges/testing/29-real-life-application.md deleted file mode 100644 index fdbb84407..000000000 --- a/docs/src/content/docs/challenges/testing/29-real-life-application.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: 🔴 Real-life Application -description: Challenge 29 is about testing a real-life application -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - svenson95 - - LMFinney -challengeNumber: 29 -command: testing-real-life-application -sidebar: - order: 205 ---- - -## Information - -This application presents a greater challenge because it closely resembles a real-life application that you might encounter in your day-to-day activities as an Angular developer. What makes it more difficult is the need to handle asynchronous tasks and create appropriate mocks. - -The application is a typical todo list application. You can filter tickets, create new ones, assign each ticket, close others, and navigate to the details of each ticket. - -In this challenge, you will write tests for the `ListComponent`, which represents the global view, and the `RowComponent`, which represents a specific ticket. Additionally, you will need to write unit tests for the `TicketStoreService` using [Angular Testing Library](https://testing-library.com/) . _This library allows you to test services effectively._ - -Handling asynchronous tasks will be particularly challenging. It's important not to introduce any explicit waits in your tests, as this would introduce unnecessary delays. Instead, it's better to look for an element that needs to appear or disappear from the DOM. In this case, the test will naturally wait for the correct period of time, as the waits are already implemented within both libraries. Take advantage of these built-in functionalities to create efficient and reliable tests. - -You can play with it by running : `npx nx serve testing-real-life-application`. - -To run [Angular Testing Library](https://testing-library.com/) test suites, you need to run `npx nx test testing-real-life-application`. You can also install [Jest Runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner) to execute your test by clicking on the `Run` button above each `describe` or `it` blocks. - -For testing with Cypress, you will execute your test inside the `child.component.cy.ts` and run `npx nx component-test testing-real-life-application` to execute your test suites. You can add the `--watch` flag to execute your test in watch mode. - -# Statement - -The goal is to test multiple behaviors of the application describe inside each test files using [Angular Testing Library](https://testing-library.com/) and [Cypress Component Testing](https://docs.cypress.io/guides/component-testing/overview). - -:::note -I have created some `it` blocks but feel free to add more tests if you want. -::: diff --git a/docs/src/content/docs/challenges/testing/index.mdx b/docs/src/content/docs/challenges/testing/index.mdx deleted file mode 100644 index 0231ad2ed..000000000 --- a/docs/src/content/docs/challenges/testing/index.mdx +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Testing -prev: false -next: false -contributors: - - tomalaforge - - LMFinney -description: Introduction to testing challenges. -noCommentSection: true -sidebar: - order: 1 ---- - -import { LinkCard } from '@astrojs/starlight/components'; - -Testing is a crucial step in building scalable, maintainable, and trustworthy applications. -Testing should never be avoided, even in the face of short deadlines or strong pressure from the product team. -Nowadays, there are numerous awesome tools available that make it easy to test your code and provide a great developer experience. - -In this series of testing exercises, we will learn and master [Angular Testing Library](https://testing-library.com/docs/) and [Cypress Component Testing](https://docs.cypress.io/guides/component-testing/angular/overview) that simplifies DOM manipulation for testing any Angular component. - -The benefits of using Angular Testing Library or Cypress Component Testing are to test your component as a black box. You will only interact with what the user can do on the UI. However, the difference with end-to-end tests is that the backend is mocked, which makes the tests faster and more maintainable. -The goal is to mock as little as possible to test your component at a higher level than unit testing, which will make refactoring easier. -Within a real application, integration tests are the tests you will write the most. Learning how to write them will make your application more robust and more maintainable. - -Here is a series of 8 challenges that you can take in any order. - - - - - - - - - - - - - - - - diff --git a/docs/src/content/docs/challenges/typescript/15-function-overload.md b/docs/src/content/docs/challenges/typescript/15-function-overload.md deleted file mode 100644 index 44d289a77..000000000 --- a/docs/src/content/docs/challenges/typescript/15-function-overload.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: 🟠 Function Overload -description: Challenge 15 is about creating overload functions -author: thomas-laforge -contributors: - - tomalaforge - - LMFinney -challengeNumber: 15 -command: typescript-function-overload -blogLink: https://medium.com/ngconf/function-overloading-in-typescript-8236706b2c05 -sidebar: - order: 115 ---- - -## Information - -Angular uses TypeScript, and mastering TypeScript can help you avoid runtime errors by catching them at compile time. - -In this challenge, we have a function to create a vehicle. However, each vehicle type requires different mandatory properties. -Currently, we are getting an error at runtime if one property is missing, and we don't get the return Type, which is not ideal. -One solution would be to create a separate function for each vehicle type, but for this challenge, I want to use the same function and have TypeScript automatically complete the properties depending on the type passed as the first parameter. - -To achieve this, we will use overload functions. - -## Statement - -- Use function overload diff --git a/docs/src/content/docs/challenges/typescript/47-enums-vs-union-types.md b/docs/src/content/docs/challenges/typescript/47-enums-vs-union-types.md deleted file mode 100644 index 6ae54a72e..000000000 --- a/docs/src/content/docs/challenges/typescript/47-enums-vs-union-types.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: 🟢 Enums vs Union Types -description: Challenge 47 is about the comparison between enums and union types -author: sven-brodny -contributors: - - svenson95 - - jdegand - - LMFinney -challengeNumber: 47 -command: typescript-enums-vs-union-types -sidebar: - order: 18 ---- - -## Information - -[Enums](https://www.typescriptlang.org/docs/handbook/enums.html) allow developers to define a set of named constants that represent a specific type. TypeScript provides both numeric and string-based enums. - -```typescript -enum Difficulty { - EASY = 'EASY', - NORMAL = 'NORMAL', -} -``` - -On the other hand, [Union Types](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types) are simpler than enums, as they don't require any additional runtime or compilation overhead. - -```typescript -type Difficulty = 'EASY' | 'NORMAL'; -``` - -### Reasons to use Union Types - -Enums are a concept borrowed from languages like C# and Java. TypeScript enums are compiled into JavaScript objects with keys for both the names and values of the enum members. This results in larger output files and additional memory consumption, which can be particularly problematic in performance-critical applications. - -Enums have some more pitfalls as well: - -- Non-const enums do not fit the concept of "a typed superset of JavaScript." They violate the concept by emitting global JavaScript objects that live in runtime with a syntax that is not compatible with JavaScript (JavaScript uses dynamic typing rather than static typing; enums are a form of static typing). Since JavaScript has no compilation step, there is little or no value in having static typing. -- Const enums, in contrast, cannot be transpiled with Babel. But there are workarounds for this issue, e.g., using the `babel-plugin-const-enum` plugin. The TypeScript documentation about [const enums](https://www.typescriptlang.org/docs/handbook/enums.html#const-enums) says "_Do not use const enums at all_". -- To use enums, you have to import them. If you want to use enum values in a template, you'll need to declare a variable in your component too. -- Numeric enums are not type safe ... - -```typescript -enum Difficulty { - EASY = 0, - NORMAL = 1, -} -const hard: Difficulty = 2; // no error -``` - -### Reasons to use Enums - -Enums are the best option for code maintainability. It is easy to find all usages of a value in a project and enforce constraints. If you stick to assigning strings to the enum keys all the time, you can avoid a lot of issues. - -It's true that enums produce larger output files, but that's not always a real problem. As long as the enum does its job without any problems, it shouldn't be something you care that much about. - -Another good thing is that the necessary enum prefixes add meaning to otherwise meaningless values, so they can improve readability. For example, `HttpStatus.Forbidden` gives more information than `Forbidden`. - -### Mapped types - -A [mapped type](https://learntypescript.dev/08/l2-mapped-type) is the process of creating a new type by mapping type information from an existing type. - -```typescript -type Difficulty = { [K in 'EASY' | 'NORMAL']: string }; -``` - -### Conclusion - -Enums are not redundant, but in most cases, union types are preferred. Unless you care a lot about maintainability, enums may fit better. Here are some more interesting articles discussing this subject: - -- [Should You Use Enums or Union Types in Typescript?](https://www.bam.tech/article/should-you-use-enums-or-union-types-in-typescript) -- [Typescript has unions, so are enums redundant?](https://stackoverflow.com/questions/40275832/typescript-has-unions-so-are-enums-redundant) -- [Tidy TypeScript: Prefer union types over enums](https://fettblog.eu/tidy-typescript-avoid-enums/) - -## Statement - -The goal of this challenge is to refactor the enums `Difficulty` and `Direction`. - -- Refactor the `Difficulty` enum to **union type**. -- Refactor the `Direction` enum to **mapped type**. diff --git a/docs/src/content/docs/es/challenges/angular/1-projection.md b/docs/src/content/docs/es/challenges/angular/1-projection.md deleted file mode 100644 index 0b9d5cc17..000000000 --- a/docs/src/content/docs/es/challenges/angular/1-projection.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: 🟢 Proyección -description: Desafio 1 trata sobre aprender a proyectar elementos del DOM a través de componentes, -author: thomas-laforge -contributors: - - nelsongutidev -challengeNumber: 1 -command: angular-projection -blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5 -videoLinks: - - link: https://www.youtube.com/watch?v=npyEyUZxoIw&ab_channel=ArthurLannelucq - alt: Projection video by Arthur Lannelucq - flag: FR - - link: https://www.youtube.com/watch?v=yNrfvu7vTa4 - alt: Projection video by Amos Lucian Isaila - flag: ES -sidebar: - order: 1 ---- - -## Información - -En Angular, la proyección de contenido es una técnica poderosa para crear componentes altamente personalizables. Utilizar y comprender los conceptos de ng-content y ngTemplateOutlet puede mejorar significativamente su capacidad para crear componentes reutilizables. - -Puedes aprender todo sobre ng-content [aquí](https://angular.dev/guide/components/content-projection) desde la proyección simple hasta las más complejas. - -Para aprender sobre ngTemplateOutlet, puedes encontrar la documentación de la API [aquí](https://angular.dev/api/common/NgTemplateOutlet) junto con algunos ejemplos básicos. - -Con estas dos herramientas en la mano, ahora estás listo para asumir el desafío. - -## Declaración - -Comenzarás con una aplicación completamente funcional que incluye un tablero con una tarjeta de profesor y una tarjeta de estudiante. El objetivo es implementar la tarjeta de la ciudad. - -Aunque la aplicación funciona, la experiencia del desarrollador está lejos de ser óptima. Cada vez que necesitas implementar una nueva tarjeta, tienes que modificar el `card.component.ts`. En proyectos reales, este componente puede ser compartido entre muchas aplicaciones. El objetivo del desafío es crear un `CardComponent` que se pueda personalizar sin ninguna modificación. Una vez que hayas creado este componente, puedes comenzar a implementar el `CityCardComponent` y asegurarte de que no estás tocando el `CardComponent`. - -## Restricciones - -- Debes refactorizar el `CardComponent` and `ListItemComponent`. -- La directiva NgFor debe ser declarada y permanecer dentro del `CardComponent`. Puedes sentirte tentado a moverla al `ParentCardComponent` como `TeacherCardComponent`. -- CardComponent no debe contener ningún `NgIf` o `NgSwitch`. -- CSS: intenta evitar usar `::ng-deep`. Encuentra una mejor manera de manejar los estilos de CSS. diff --git a/docs/src/content/docs/es/challenges/angular/10-utility-wrapper-pipe.md b/docs/src/content/docs/es/challenges/angular/10-utility-wrapper-pipe.md deleted file mode 100644 index 1afacbdcc..000000000 --- a/docs/src/content/docs/es/challenges/angular/10-utility-wrapper-pipe.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: 🔴 Pipe Wrapper para utilidades -description: El desafío 10 trata sobre la creación de un pipe para envolver utilidades -author: thomas-laforge -contributors: - - ErickRodrCodes -challengeNumber: 10 -command: angular-utility-wrapper-pipe -sidebar: - order: 202 ---- - -El objetivo de esta serie de 3 desafíos de pipes es dominar **pipe** en Angular. - -Los pipes puros son una forma muy útil de transformar datos desde tu plantilla. La diferencia entre llamar a una función y un pipe es que los pipes puros son memorizados. Así que no serán recalculados en cada ciclo de detección de cambios si sus entradas no han cambiado. - -## Información: - -En este tercer ejercicio, quieres acceder a funciones de utilidades. Actualmente no puedes acceder a ellas directamente desde tu plantilla. El objetivo es crear un pipe específico para este archivo de utilidades donde necesitarás pasar el nombre de la función que quieres llamar y los argumentos necesarios. - -## Restricciones: - -- El tipo debe ser fuertemente definido. diff --git a/docs/src/content/docs/es/challenges/angular/13-highly-customizable-css.md b/docs/src/content/docs/es/challenges/angular/13-highly-customizable-css.md deleted file mode 100644 index a3aaa71c2..000000000 --- a/docs/src/content/docs/es/challenges/angular/13-highly-customizable-css.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: 🟠 Estilos CSS Altamente Personalizables -description: El desafío 13 trata sobre la creación de estilos CSS altamente personalizables -author: thomas-laforge -contributors: - - ErickRodrCodes -challengeNumber: 13 -command: angular-highly-customizable-css -sidebar: - order: 104 ---- - -## Información - -El estilo es un aspecto importante del trabajo diario de un desarrollador de frontend, pero a menudo se subestima. En las aplicaciones de Angular, frecuentemente veo a personas usando `@Input()` para personalizar el estilo de sus componentes. Sin embargo, `@Input()` solo debe usarse para lógica. Otras técnicas, como las **variables CSS** y **host-context** deben usarse para el estilo. - -En este desafío, necesitarás usar tanto variables CSS como `:host-context` para eliminar todos los `@Input()` de tu código. - -## Restricciones: - -- En tu presentación final, tu componente no debe contener ninguna línea de código. Todo el estilo debe manejarse dentro del decorador _(o archivos CSS externos si lo prefieres)_ diff --git a/docs/src/content/docs/es/challenges/angular/16-master-dependency-injection.md b/docs/src/content/docs/es/challenges/angular/16-master-dependency-injection.md deleted file mode 100644 index 8822f6f28..000000000 --- a/docs/src/content/docs/es/challenges/angular/16-master-dependency-injection.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: 🔴 Dominar la Inyección de Dependencias -description: El desafío 16 trata sobre dominar y entender como funciona la inyección de dependencias -author: thomas-laforge -contributors: - - ErickRodrCodes -challengeNumber: 16 -command: angular-master-dependency-injection -sidebar: - order: 203 ---- - -## Información - -Para completar exitosamente este desafío, necesitarás tener un buen entendimiento de cómo funciona la Inyección de [Dependencias dentro](https://angular.dev/guide/di/dependency-injection) de Angular. - -El objetivo es proporcionar en la tabla el `CurrencyService` a nivel de fila, para que cada fila muestre la moneda correcta. Actualmente, el `CurrencyService` solo se proporciona a nivel de tabla, lo que resulta en un error ya que se muestra la misma moneda en cada fila, a pesar de que cada producto tiene una moneda diferente. - -Una forma de lograr esto es agregando un segundo argumento al pipe, pero esto no está permitido para este desafío. - -## Declaración - -- Tu tarea es mostrar la moneda correcta para cada fila. - -## Restricciones - -- No puedes modificar el pipe. -- No puedes envolver la fila dentro de un componente, ya que esto rompería el diseño. diff --git a/docs/src/content/docs/es/challenges/angular/21-anchor-navigation.md b/docs/src/content/docs/es/challenges/angular/21-anchor-navigation.md deleted file mode 100644 index 2a20954e8..000000000 --- a/docs/src/content/docs/es/challenges/angular/21-anchor-navigation.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: 🟢 Navegación con Anclas -description: El desafío 21 trata sobre la navegación dentro de la página con anclas -author: thomas-laforge -contributors: - - ErickRodrCodes -challengeNumber: 21 -command: angular-anchor-navigation -sidebar: - order: 4 ---- - -## Información - -Comienzas con una aplicación que tiene navegación básica y navegación con anclas en el `HomeComponent`. Sin embargo, usar `href` recrea la ruta cada vez y recarga la página. - -## Declaración - -- Tu tarea es refactorizar esta aplicación para usar la herramienta de navegación integrada para que se ajuste mejor dentro del Marco de Angular. Puedes explorar el enrutador (comúnmente conocido como router), pero es mejor permanecer dentro de la plantilla y usar la directiva `RouterLink`. -- Para mejorar la experiencia del usuario, añade desplazamiento suave. diff --git a/docs/src/content/docs/es/challenges/angular/22-router-input.md b/docs/src/content/docs/es/challenges/angular/22-router-input.md deleted file mode 100644 index 854461e98..000000000 --- a/docs/src/content/docs/es/challenges/angular/22-router-input.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: 🟢 @RouterInput() -description: El desafío 22 trata sobre el uso del decorador @Input para utilizar parámetros del router. -author: thomas-laforge -contributors: - - nelsongutidev -challengeNumber: 22 -command: angular-router-input -blogLink: https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617 -sidebar: - order: 5 ---- - -## Información - -En esta aplicación, tomaremos tres pedazos de información dentro de nuestro `TestComponent` proporcionadas por el router: - -- Queremos obtener el `testId` que tenemos como parte de los parámetros de la URL. -- Queremos obtener `user` ubicado dentro de los parámetros de consulta (query params) de la URL. -- Queremos acceder a `permission` establecido dentro del objeto `data` de la ruta. - -En las versiones 15 o anteriores de Angular, usamos `ActivatedRoute` para obtener toda esta información y recibirla a través de observables para escuchar los cambios de URL. - -En la versión 16, Angular introdujo un nuevo `Input` que puede 'escuchar' los datos de la ruta. Puedes leer más al respecto [aquí](https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617). - -## Declaración - -El objetivo de este ejercicio es refactorizar el código para usar la nueva estrategia `RouterInput`. diff --git a/docs/src/content/docs/es/challenges/angular/31-module-to-standalone.md b/docs/src/content/docs/es/challenges/angular/31-module-to-standalone.md deleted file mode 100644 index 307fc64b3..000000000 --- a/docs/src/content/docs/es/challenges/angular/31-module-to-standalone.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 🟢 De Módulo a Standalone (Independiente) -description: El desafío 31 trata sobre migrar una aplicación basada en módulos a una aplicación independiente. -author: thomas-laforge -contributors: - - ErickRodrCodes -challengeNumber: 31 -command: angular-module-to-standalone -sidebar: - order: 6 ---- - -## Información - -En la versión 14 de Angular, se lanzaron los componentes standalone (o independientes, los cuales por traducción en español se hacen más fáciles de entender) y se estabilizaron en la versión 15. Si no has experimentado con ellos, nunca es tarde. Puedes probarlos en este desafío. - -Además, el objetivo es ver cómo **Nx** y los **componentes independientes** trabajan juntos, y experimentar el proceso de desacoplar tu aplicación con la librería en Nx y componentes independientes. - -Finalmente, los componentes independientes son muy simples de entender, pero los **componentes cargados con el método diferido routing/lazy-loaded** pueden ser un poco más difíciles de comprender. Este desafío te permitirá manipular componentes en diferentes niveles de anidación y trabajar con rutas de carga diferida. - -Después de completar este desafío, los componentes independientes no tendrán más secretos para ti. - -## Declaración - -El objetivo de este desafío es migrar tu aplicación de componentes basados en módulos a componentes independientes. - -## Nota - -También puedes probar el [esquema de Angular](https://angular.dev/reference/migrations/standalone) para migrar NgModule a componentes independientes. _(Dado que estamos usando nx, comienza tu comando con nx en lugar de ng)_ diff --git a/docs/src/content/docs/es/challenges/angular/32-change-detection-bug.md b/docs/src/content/docs/es/challenges/angular/32-change-detection-bug.md deleted file mode 100644 index f1dee1443..000000000 --- a/docs/src/content/docs/es/challenges/angular/32-change-detection-bug.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: 🟠 Bug de Detección de Cambios -description: El desafío 32 trata sobre depurar una aplicación que tiene problemas cuando se activa la detección de cambios -author: thomas-laforge -contributors: - - ErickRodrCodes -challengeNumber: 32 -command: angular-change-detection-bug -blogLink: https://medium.com/ngconf/function-calls-inside-template-are-dangerous-15f9822a6629 -sidebar: - order: 105 ---- - -:::note -Este desafío está inspirado en un ejemplo de la vida real que hemos simplificado para crear este interesante desafío. -::: - -## Información - -En esta pequeña aplicación, tenemos un menú de navegación para dirigir nuestra aplicación ya sea al `BarComponent` o al `FooComponent`. Sin embargo, nuestra aplicación no se está cargando y no se muestran errores en la consola. - -## Declaración - -El objetivo del desafío es depurar esta aplicación y hacer que funcione. - -## Pistas - -
    - Pista 1 - - Si comentas `routerLinkActive="isSelected"` dentro de `NavigationComponent`, la aplicación se carga correctamente. -
    - -
    - Pista 2 - -Si abres el [código fuente de `RouterLinkActive`](https://github.com/angular/angular/blob/main/packages/router/src/directives/router_link_active.ts) y vas a la **línea 196**, Angular está llamando a `this.cdr.markForCheck` dentro de una microTarea, lo que desencadena un nuevo ciclo de Detección de Cambios. Si comentas esta línea, la aplicación se carga de nuevo, sin embargo, el bug no está dentro del Framework de Angular. 😅😯 - -
    diff --git a/docs/src/content/docs/es/challenges/angular/33-decoupling-components.md b/docs/src/content/docs/es/challenges/angular/33-decoupling-components.md deleted file mode 100644 index 1af6a2d1a..000000000 --- a/docs/src/content/docs/es/challenges/angular/33-decoupling-components.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: 🟠 Desacoplando Componentes -description: El desafío 33 trata sobre desacoplar dos componentes fuertemente unidos utilizando Token de Inyección -author: thomas-laforge -contributors: - - ErickRodrCodes -challengeNumber: 33 -command: angular-decoupling-components -sidebar: - order: 106 ---- - -> Muchas gracias a **Robin Goetz** y su [Proyecto Spartan](https://github.com/goetzrobin/spartan). -> Este desafío fue propuesto por Robin y está fuertemente inspirado en su proyecto. - -## Información - -El objetivo de este desafío es separar el comportamiento de un componente a traves de su estilo. Para el propósito de este desafío, trabajaremos en un elemento botón. Al hacer clic en él, alternaremos una propiedad llamada _disabled_ para que cambie el estilo del elemento. Esto es bastante inútil en la vida real, pero el desafío tiene como objetivo demostrar un concepto útil. - -El comportamiento del componente (referido como el _cerebro_ en el stack de Spartan) se encuentra en la biblioteca del cerebro, la cual es llamada _"brain"_. La parte de estilo (referida como el casco y llamado como _helmet_) está dentro de la biblioteca _helmet_. Ambas bibliotecas no pueden depender una de la otra porque queremos poder publicarlas por separado. Para ayudarnos a abordar el problema, estamos utilizando la regla eslint de Nx. Puedes encontrar más detalles [aquí](https://nx.dev/core-features/enforce-module-boundaries). - -Sin embargo, el _helmet_ del botón necesita acceder al estado del componente para estilizar el botón de manera diferente según su estado. Como se mencionó anteriormente, no podemos importar la `BtnDisabledDirective` directamente en la biblioteca _helmet_ como se hace actualmente. Si vas a [`BtnHelmetDirective`](../../libs/decoupling/helmet/src/lib/btn-style.directive.ts), te encontrarás con un error de linting. **Un proyecto etiquetado con `type:hlm` solo puede depender de libs etiquetadas con `type:core`**. - -## Declaración - -El objetivo de este desafío es encontrar una forma de desacoplar ambas Directivas. - -### Pista - -
    - Pista 1 - Lee cuidadosamente el título del desafío 😇 -
    diff --git a/docs/src/content/docs/es/challenges/angular/39-injection-token.md b/docs/src/content/docs/es/challenges/angular/39-injection-token.md deleted file mode 100644 index 03422d342..000000000 --- a/docs/src/content/docs/es/challenges/angular/39-injection-token.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: 🟠 InjectionToken -description: Desafio de Angular 39 para aprender sobre el poder del InjectionToken -author: thomas-laforge -contributors: - - nelsongutidev -challengeNumber: 39 -command: angular-injection-token -videoLinks: - - link: https://www.youtube.com/watch?v=ntggdQycFyc - alt: Injection Token by Arthur Lannelucq - flag: FR -sidebar: - order: 118 ---- - -## Información - -En esta pequeña aplicación, comenzamos con un `VideoComponent` que contiene un timer de **1 segundo**. El equipo de desarrollo decidió usar una constante global para almacenar el valor del temporizador: `DEFAULT_TIMER`. Sin embargo, unas semanas más tarde, el equipo de producto quiere agregar una nueva pantalla para llamadas telefónicas llamada `PhoneComponent`, y queremos reutilizar el `TimerComponent`. Sin embargo, el equipo de producto quiere un temporizador de **2 segundos**. ¿Cómo podemos lograr esto? - -## Enunciado - -Actualmente, el temporizador sigue siendo de 1 segundo para el `PhoneComponent`. El objetivo de este desafío es cambiar el valor del temporizador a 2 segundos para el `PhoneComponent`. - -## Restricciones - -Se prohíbe el uso de `@Input`. Este ejemplo es básico, y el uso de `@Input` podría ser una buena opción, pero en aplicaciones más complejas, el componente que necesitamos actualizar puede estar profundamente anidado, lo que hace que el uso de `@Input` sea un diseño realmente malo. - -## Pista - -
    - Pista 1 - -Mirar este [blog post](https://itnext.io/stop-being-scared-of-injectiontokens-ab22f72f0fe9) puede ser de gran ayuda. - -
    diff --git a/docs/src/content/docs/es/challenges/angular/4-typed-context-outlet.md b/docs/src/content/docs/es/challenges/angular/4-typed-context-outlet.md deleted file mode 100644 index 7cd7e957a..000000000 --- a/docs/src/content/docs/es/challenges/angular/4-typed-context-outlet.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: 🔴 ContextOutlet en forma de tipo -description: El desafío 4 se trata de tipificar de manera fuerte las directivas de ngContextOutlet -author: thomas-laforge -contributors: - - ErickRodrCodes -challengeNumber: 4 -command: angular-typed-context-outlet -blogLink: https://medium.com/@thomas.laforge/ngtemplateoutlet-type-checking-5d2dcb07a2c6 -sidebar: - order: 201 ---- - -## Información - -:::note[Nota] - -Las declaraciones de tipos permanecerán en ingles, asi como los nombres de los objetos y sus miembros. - -::: - -Angular ofrece la function estática [`ngTemplateContextGuard`](https://angular.dev/guide/directives/structural-directives#improving-template-type-checking-for-custom-directives) para reforzar el tipo de una directiva estructural. - -Sin embargo, el contexto de **NgTemplateOutlet** es de tipo **Object**. Con la ayuda de la guardia mencionada anteriormente, podemos mejorar ese comportamiento. - -## Declaración - -En este desafío, queremos aprender como reforzar el tipo de nuestro ng-template en AppComponent. - -Este desafío ofrece dos niveles de complejidad: - -### Nivel 1: una Interfase conocida - -A continuación tenemos estas lineas de código: - -![Any en Person](../../../../../assets/4/unknown-person.png) - -Como se puede observar, "name" es de tipo "any". La meta es inferir el tipo correcto. - -### Nivel 2: una Interfase genérica - -Actualmente, tenemos estas lineas de código: - -![Any en Student](../../../../../assets/4/unknown-student.png) - -Como puede apreciarse, "student" es de tipo "any". Queremos inferir el tipo de manera correcta. - -Pero en esta parte, podemos pasar a ListComponent, una lista de **cualquier cosa**. Aun asi, queremos inferir de manera correcta el tipo de dato. diff --git a/docs/src/content/docs/es/challenges/angular/5-crud-application.md b/docs/src/content/docs/es/challenges/angular/5-crud-application.md deleted file mode 100644 index 803a33d6f..000000000 --- a/docs/src/content/docs/es/challenges/angular/5-crud-application.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: 🟢 Aplicación CRUD -description: El desafío 5 se trata de refactorizar una aplicación CRUD. -author: thomas-laforge -contributors: - - ErickRodrCodes -challengeNumber: 5 -command: angular-crud-application -sidebar: - order: 2 ---- - -## Información - -Comunicar y tener acceso a un estado global o local en sincronización con tu backend es el corazón de cualquier aplicación. Usted necesita dominar las siguientes mejores practicas para construir aplicaciones en Angular de manera solida y confiable. - -## Declaración - -En este desafió tenemos una pequeña aplicación CRUD, la cual puede obtener una lista de COSAS POR HACER, actualizar y borrar algunos de los elementos de dicha lista. - -Actualmente tenemos un ejemplo funcional, pero repleto de practicas erróneas. - -### Paso 1: Refactorizar con mejores practicas. - -Usted necesitara: - -- Evite el uso del tipo **any**. Use interfaces para prevenir los errores de tipo en Typescript. -- Use un **servicio separado** para todas las llamadas de http, y use **Signals** para la lista de cosas por hacer. -- No **mutar** los datos - -```typescript -// Evite esto -this.todos[todoUpdated.id - 1] = todoUpdated; - -// en vez de ello, use algo como esto, pero necesitara mejorar la lógica de manera que preserve el mismo orden. -this.todos = [...this.todos.filter((t) => t.id !== todoUpdated.id), todoUpdated]; -``` - -### Step 2: Mejorar - -- Agregue un botón para **borrar** : _Documentación de la API falsa_ -- Opera de manera correcta los **errores**. _(Globalmente)_ -- Agrega un indicador global de **carga**. _Puedes utilizar MatProgressSpinnerModule_ - -### Step 3: Mantenibilidad!! adiciona algunos tests - -- Adiciona 2/3 tests - -### Step 4: Creatividad!!! Domina tu estado. - -- Usa de manera apropiada **un component store de ngrx**, **ngrx/store**, **rxAngular**, **tanstack-query** o **ngrx/signal-store** como estado local de tu componente. -- Tener un indicador de Carga/Error **localizado**. Por ejemplo: Solo en el elemento seleccionado de la lista siendo procesado y **desactivar** todos los botones de dicho elemento. _(Pista: Necesitaras crear un ItemComponent)_ diff --git a/docs/src/content/docs/es/challenges/angular/6-structural-directive.md b/docs/src/content/docs/es/challenges/angular/6-structural-directive.md deleted file mode 100644 index c81967383..000000000 --- a/docs/src/content/docs/es/challenges/angular/6-structural-directive.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: 🟠 Directiva Estructural -description: El Desafío 6 se trata de generar una Directiva Estructural que manipule los permisos -author: thomas-laforge -contributors: - - ErickRodrCodes -challengeNumber: 6 -command: angular-structural-directive -blogLink: https://medium.com/@thomas.laforge/create-a-custom-structural-directive-to-manage-permissions-like-a-pro-11a1acad30ad -sidebar: - order: 102 ---- - -## Información - -Las Directivas Estructurales son in concepto importante que necesitaras dominar para mejorar tus habilidades y conocimientos en Angular. Esta es la primera parte del desafío. - -En Angular, "Guard" es un concepto muy importante por que siempre las vas a necesitar en cada aplicación que construyas. - -## Declaración - -En LoginComponent, encontraras 6 botones correspondientes a 6 tipos de roles de usuario: - -:::note[Nota] - -Se dejaran los nombres de los roles en ingles. - -::: - -- Admin (Administrador) -- Manager (Gerente) -- Reader (Lector) -- Writer (Escritor) -- Reader and Writer (Lector y escritor) -- Client (Cliente) -- Everyone (Todos) - -## Paso 1 - -En `InformationComponent`, necesitaras mostrar la pieza de información correcta por cada rol usando una directiva estructural. - -### Restricciones: - -- No puedes usar `ngIf` o `@if` dentro de `InformationComponent`. -- No puedes importar un store dentro de `InformationComponent`. - -You should end up with something like below: - -```html -
    Información del Role1
    -``` - -```html -
    Información del Role1 y Role2
    -``` - -```html -
    Información solo para el Super Administrador
    -``` - -## Paso 2 - -En `Routes.ts`, deberás usar la guardia `CanMatch` para dirigir a todos los usuarios al correcto `DashboardComponent`. diff --git a/docs/src/content/docs/es/challenges/angular/8-pure-pipe.md b/docs/src/content/docs/es/challenges/angular/8-pure-pipe.md deleted file mode 100644 index 814783e3f..000000000 --- a/docs/src/content/docs/es/challenges/angular/8-pure-pipe.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: 🟢 Pipe Puro -description: El desafío 8 trata sobre la creación de un pipe puro -author: thomas-laforge -contributors: - - ErickRodrCodes - - kabrunko - dev -challengeNumber: 8 -command: angular-pure-pipe -blogLink: https://medium.com/ngconf/deep-dive-into-angular-pipes-c040588cd15d -sidebar: - order: 3 ---- - -El objetivo de esta serie de 3 desafíos de pipes es dominar **pipe** en Angular. - -Los pipes puros son una forma muy útil de transformar datos desde tu plantilla. La diferencia entre llamar a una función y un pipe es que los pipes puros son memorizados. Así que no serán recalculados en cada ciclo de detección de cambios si sus entradas no han cambiado. - -## Información - -En este primer ejercicio, llamas a una función simple dentro de tu plantilla. El objetivo es convertirla en un pipe. - -## Restricciones - -- El tipo debe ser fuertemente definido. diff --git a/docs/src/content/docs/es/challenges/angular/9-wrap-function-pipe.md b/docs/src/content/docs/es/challenges/angular/9-wrap-function-pipe.md deleted file mode 100644 index 11b652f94..000000000 --- a/docs/src/content/docs/es/challenges/angular/9-wrap-function-pipe.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: 🟠 Pipe Wrapper para funciones -description: El desafío 9 trata sobre la creación de un tubo para envolver funciones de componentes -author: thomas-laforge -contributors: - - ErickRodrCodes -challengeNumber: 9 -command: angular-wrap-function-pipe -blogLink: https://medium.com/ngconf/boost-your-apps-performance-by-wrapping-your-functions-inside-a-pipe-7e889a901d1d -sidebar: - order: 103 ---- - -El objetivo de esta serie de 3 desafíos de pipes es dominar **pipe** en Angular. - -Los pipes puros son una forma muy útil de transformar datos desde tu plantilla. La diferencia entre llamar a una función y un pipe es que los pipes puros son memorizados. Así que no serán recalculados en cada ciclo de detección de cambios si sus entradas no han cambiado. - -## Información: - -En este segundo ejercicio, estás llamando a múltiples funciones dentro de tu plantilla. Puedes crear un pipe específico para cada una de las funciones, pero esto sería demasiado engorroso. -El objetivo es crear un pipe `wrapFn` para envolver tu función de retorno a través de un pipe. Tu función DEBE permanecer dentro de tu componente. **`WrapFn` debe ser altamente reutilizable.** - -## Restricciones: - -- El tipo debe ser fuertemente definido. diff --git a/docs/src/content/docs/es/challenges/performance/12-optimize-change-detection.md b/docs/src/content/docs/es/challenges/performance/12-optimize-change-detection.md deleted file mode 100644 index 7990d893a..000000000 --- a/docs/src/content/docs/es/challenges/performance/12-optimize-change-detection.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: 🟠 Optimizar el Change Detection al desplazarse -description: Desafío 12 sobre la optimización del número de ciclos de detección de cambios al desplazarse -author: thomas-laforge -contributors: - - nelsongutidev -challengeNumber: 12 -command: performance-optimize-change-detection -sidebar: - order: 107 ---- - -## Información - -En Angular, hay una biblioteca llamada Zone.js que realiza mucha magia para simplificar la vida del desarrollador. Zone.js parchea todos los eventos del DOM para que vuelva a verificar y volver a renderizar la vista cuando algo ha cambiado dentro de la aplicación. El desarrollador no tiene que activar manualmente la detección de cambios. - -Sin embargo, a veces Zone.js activa mucha más detección de cambios de la necesaria. Por ejemplo, cuando se está escuchando un evento de desplazamiento, cada evento de desplazamiento generará un nuevo ciclo de detección de cambios. - -En este desafío, solo necesitamos actualizar la vista en una posición de desplazamiento específica para mostrar u ocultar un botón. Todos los demás ciclos son innecesarios. - -Para tener una mejor visualización del problema, perfila tu aplicación con Angular Dev Tools. - -:::note -Si no sabes cómo usarlo, lee [la página de introducción al rendimiento](/es/challenges/performance/) primero y vuelve después. -::: - -Puedes obtener más detalles sobre la contaminación de la zona y cómo resolverla [aquí](https://angular.dev/best-practices/zone-pollution). - -El siguiente video explicará más a fondo el problema de esta aplicación. - - - -## Enunciado - -Tu objetivo para este desafío es evitar todos los ciclos de detección de cambios innecesarios y activar una detección de cambios solo cuando sea necesario. - -## Restricción: - -No puedes optar por no usar Zone.js globalmente. Si este código forma parte de un proyecto grande y optas por no usar Zone.js, sin duda romperás tu aplicación. diff --git a/docs/src/content/docs/es/challenges/performance/34-default-vs-onpush.md b/docs/src/content/docs/es/challenges/performance/34-default-vs-onpush.md deleted file mode 100644 index d96367299..000000000 --- a/docs/src/content/docs/es/challenges/performance/34-default-vs-onpush.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: 🟢 Default vs OnPush -description: El desafío 34 trata sobre aprender la diferencia entre las estrategias de detección de cambios Default y OnPush. -author: thomas-laforge -contributors: - - nelsongutidev -challengeNumber: 34 -command: performance-default-vs-onpush -sidebar: - order: 7 ---- - -## Información - -En este desafío, exploraremos las diferencias e impactos de usar `ChangeDetectionStrategy.Default` versus `ChangeDetectionStrategy.OnPush`. - -Puedes leer la [documentación de Angular](https://angular.dev/best-practices/skipping-subtrees) para aprender más sobre las diferencias entre estas estrategias. - -En este desafío, todos los componentes comienzan con la estrategia `Default`. Cuando escribas letras dentro del campo de entrada, notarás que todos los componentes se resaltan en naranja. - -:::note[Nota] -Agregué resaltado de color a cada componente y cada fila para proporcionar una mejor visualización de cuándo se vuelve a renderizar un componente. -::: - -Como puedes ver, cada letra desencadena un nuevo ciclo de detección de cambios, y todos los componentes se vuelven a renderizar, lo que causa problemas de rendimiento. - -Utilicemos la Angular DevTool para perfilar nuestra aplicación y comprender cómo esta herramienta puede ayudarnos a entender qué está sucediendo dentro de nuestra aplicación. - -:::note[Nota] -Si no sabes cómo usarlo, lee primero [la página de introducción al rendimiento](/es/challenges/performance/) y vuelve después. -::: - -Ahora, comienza a perfilar tu aplicación y escribe algunas letras dentro del campo de entrada para desencadenar algunos ciclos de detección de cambios. - -Si haces clic en una de las barras (indicada por la flecha amarilla en la imagen a continuación), puedes ver que `PersonListComponent`, `RandomComponent` y todos los `MatListItem` se ven afectados por el ciclo de detección de cambios, incluso cuando solo interactuamos con el campo de entrada. - -![profiler record](../../../../../assets/performance/34/profiler-record.png 'Registro del Profiler') - -## Enunciado - -El objetivo de este desafío es mejorar el agrupamiento de la detección de cambios dentro de la aplicación utilizando la estrategia de detección de cambios `OnPush`, pero no solo eso... - -## Pistas: - -
    - Pista 1 - -Utiliza `ChangeDetectionStrategy.OnPush`, pero esto no será suficiente. - -
    - -
    - Pista 2 - -Crea componentes más pequeños para separar mejor el campo de entrada de la lista. - -
    diff --git a/docs/src/content/docs/es/challenges/performance/35-memoization.md b/docs/src/content/docs/es/challenges/performance/35-memoization.md deleted file mode 100644 index 89a657f5f..000000000 --- a/docs/src/content/docs/es/challenges/performance/35-memoization.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: 🟢 Memoización -description: El desafío 35 trata sobre cómo funcionan las tuberías puras -author: thomas-laforge -contributors: - - nelsongutidev -challengeNumber: 35 -command: performance-memoization -sidebar: - order: 8 ---- - -
    Desafío #35
    - -## Información - -En Angular, los pure pipes son muy poderosas porque el valor se memoiza, lo que significa que si el valor de entrada no cambia, la función `transform` del pipe no se vuelve a calcular y se emite el valor en caché. - -Puedes aprender más sobre pipes en la [documentación de Angular](https://angular.dev/guide/pipes) y en este [artículo de inmersión profunda](https://medium.com/ngconf/deep-dive-into-angular-pipes-c040588cd15d). - -En este desafío, comenzamos con un botón para cargar una lista de personas. Cada persona está asociada con un número y utilizaremos el cálculo de Fibonacci para crear una computación pesada que ralentizará la aplicación. - -Una vez que se carga la lista, intenta escribir algunas letras dentro del campo de entrada. Te darás cuenta de que la aplicación es muy lenta, a pesar de que solo estás realizando una escritura muy básica. - -:::note[Nota] -No nos centraremos en la carga inicial de la lista en este desafío. -::: - -Utilicemos la Angular DevTool para perfilar nuestra aplicación y comprender cómo esta herramienta puede ayudarnos a entender qué está sucediendo dentro de nuestra aplicación. - -:::note[Nota] -Si no sabes cómo usarlo, lee primero [la página de introducción al rendimiento](/es/challenges/performance/) y vuelve después. -::: - -Ahora, comienza a perfilar tu aplicación y escribe algunas letras dentro del campo de entrada. Verás que aparecen algunas barras rojas en el panel del perfilador. - -Si haces clic en una de las barras (indicada por la flecha amarilla en la imagen a continuación), verás que el ciclo de detección de cambios está tardando más de 3 segundos en `PersonListComponent`. - -![profiler record](../../../../../assets/performance/35/memoize-profiler.png 'Registro del perfilador') - -## Enunciado - -El objetivo de este desafío es comprender qué está causando esta latencia y mejorarla. - -## Pistas: - -
    - Pista 1 - -Utiliza `Pipes` para memoizar el cálculo de Fibonacci. - -
    diff --git a/docs/src/content/docs/es/challenges/performance/36-ngfor-optimization.md b/docs/src/content/docs/es/challenges/performance/36-ngfor-optimization.md deleted file mode 100644 index ae7ae7911..000000000 --- a/docs/src/content/docs/es/challenges/performance/36-ngfor-optimization.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: 🟢 Optimización de NgFor -description: El Desafío 36 trata sobre como funciona trackby -author: thomas-laforge -contributors: - - nelsongutidev -challengeNumber: 36 -command: performance-ngfor-optimization -sidebar: - order: 13 ---- - -## Información - -En esta aplicación, tenemos una lista de individuos que podemos agregar, eliminar o actualizar. Si abres el panel de desarrollador de Chrome presionando **F12**, ve a la pestaña source y expande el elemento para ver la lista, notarás que cada vez que agregas, eliminas o actualizas un elemento de la lista, se destruyen y vuelven a inicializar todos los elementos del DOM. (Ver video a continuación). - - - -También podemos usar la Angular DevTool para perfilar nuestra aplicación y entender qué está sucediendo dentro de ella. Te mostraré cómo hacerlo en el siguiente video. - - - -:::note -Si no sabes cómo usarlo, lee primero [la página de introducción al rendimiento](/es/challenges/performance/) y vuelve después. -::: - -Si necesitas más información sobre `NgFor`, te invito a leer primero la [documentación](https://angular.dev/api/common/NgFor). - -## Enunciado - -El objetivo de este desafío es entender qué está causando esta actualización del DOM y solucionarlo. diff --git a/docs/src/content/docs/es/challenges/performance/37-optimize-big-list.md b/docs/src/content/docs/es/challenges/performance/37-optimize-big-list.md deleted file mode 100644 index e1ac099d4..000000000 --- a/docs/src/content/docs/es/challenges/performance/37-optimize-big-list.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: 🟠 Optimizando una lista larga -description: El desafio 37 trata sobre como optimizar una lista grande de elementos -author: thomas-laforge -contributors: - - nelsongutidev -challengeNumber: 37 -command: performance-optimize-big-list -sidebar: - order: 117 ---- - -## Información - -En esta aplicación, renderizaremos una lista de 100,000 individuos al hacer clic en el botón loadList. Si abres el panel de desarrollo de Chrome presionando F12, ve al ícono de Fuente y expande el elemento para ver la lista, notarás que los 100,000 elementos se renderizan en el DOM, aunque solo podemos ver alrededor de 20 elementos en el área visible. Este proceso lleva mucho tiempo, por lo que la aplicación es muy lenta al mostrar la lista. - -Podemos utilizar la Herramienta de Desarrollo de Angular para perfilar nuestra aplicación y entender lo que está sucediendo en su interior. Te mostraré cómo hacerlo en el siguiente video. - - -:::[nota] -Si no sabes cómo usarlo, lee la página de introducción al rendimiento primero y regresa después. -::: - -Enunciado -El objetivo de este desafío es implementar una alternativa mejor para mostrar una lista grande de elementos. - -Pistas: - -
    - Pista 1 -Si no estás seguro por dónde empezar, te recomiendo leer la documentación de virtualización de Angular CDK. - -
    diff --git a/docs/src/content/docs/es/challenges/performance/index.mdx b/docs/src/content/docs/es/challenges/performance/index.mdx deleted file mode 100644 index b5a690310..000000000 --- a/docs/src/content/docs/es/challenges/performance/index.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Rendimiento en Angular -prev: false -next: false -contributors: - - nelsongutidev -description: Aprende a usar la extensión de Chrome Angular Devtools. -noCommentSection: true -sidebar: - order: 1 ---- - -import { LinkCard } from '@astrojs/starlight/components'; - -En esta serie de desafíos sobre rendimiento, aprenderás cómo optimizar y mejorar el rendimiento de tu aplicación Angular. - -Antes de comenzar a resolver cualquier desafío, te invito a descargar la [extensión de Chrome Angular DevTools](https://chrome.google.com/webstore/detail/angular-devtools/ienfalfjdbdpebioblfackkekamfmbnh) si aún no lo has hecho. - -Esta extensión te permite perfilar tu aplicación y detectar problemas de rendimiento, lo cual es muy útil para entender dónde pueden ocurrir problemas de rendimiento. - -## Cómo usarlo - -Cuando sirves una aplicación Angular, puedes inspeccionar una página presionando F12, lo cual abrirá las herramientas de desarrollo de Chrome. Luego navega a la pestaña Angular. Desde allí, puedes seleccionar la pestaña Profiler como se muestra a continuación. - -![profiler tab](../../../../../assets/performance/profiler-tab.png 'Profiler tab') - -Ahora puedes perfilar tu aplicación haciendo clic en el botón de grabación. Puedes interactuar con tu aplicación y ver cuándo se activa la detección de cambios y qué componentes se vuelven a renderizar. - -:::tip[Aprende más] -Puedes obtener más información en la [página de documentación](https://angular.io/guide/devtools). -::: - -Ahora que sabes cómo usar la Angular DevTool, puedes elegir un desafío, perfilarlo y resolverlo. - - - - - - diff --git a/docs/src/content/docs/es/challenges/signal/30-interop-rxjs-signal.md b/docs/src/content/docs/es/challenges/signal/30-interop-rxjs-signal.md deleted file mode 100644 index 0f6f85315..000000000 --- a/docs/src/content/docs/es/challenges/signal/30-interop-rxjs-signal.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: 🔴 Interoperatividad Rxjs/Signal (Señales) -description: El desafío 30 trata sobre aprender a mezclar señales con Rxjs -author: thomas-laforge -contributors: - - ErickRodrCodes -challengeNumber: 30 -command: signal-interop-rxjs-signal -sidebar: - order: 204 ---- - -## Información - -En este desafío, tenemos una pequeña aplicación reactiva utilizando **RxJS** y **NgRx/Component-Store**. - -El objetivo de este desafío es usar la nueva **API de Señales** introducida en Angular v16. Sin embargo, no debemos convertir todo. Ciertas partes del código son más adecuadas para RxJS que para Señales. Dependerá de ti determinar el umbral y observar cómo **Señal y RxJS coexisten**, así como cómo se logra la interoperatividad en Angular. - -## Nota - -- Puedes usar cualquier biblioteca de terceros si lo deseas, como **ngrx/signal-store**, **tanstack-query** o **rxAngular**. diff --git a/docs/src/content/docs/es/guides/checkout-answer.md b/docs/src/content/docs/es/guides/checkout-answer.md deleted file mode 100644 index 1d5962b70..000000000 --- a/docs/src/content/docs/es/guides/checkout-answer.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Revisar la Respuesta de Alguien -description: Guía para revisar la respuesta de otra persona. -contributors: - - nelsongutidev -sidebar: - order: 3 ---- - -Todas las respuestas a los Desafíos de Angular se presentarán en forma de Pull Request (PR). Para verlas y seguirlas, navega a través de la página **Files Changes** en GitHub. Sin embargo, entender y seguir este proceso puede no ser sencillo si no estás familiarizado con la interfaz. En muchos casos, puedes preferir revisar la rama y revisar la solución en tu IDE preferido. - -Esta guía ha sido creada para ayudarte a lograr esto. - -## Revisar localmente una PR de otra persona - -### Sincroniza tu repositorio - -Primero necesitas sincronizar tu fork para asegurarte de que está al día con el repositorio del que hiciste fork. - -Esto se puede lograr haciendo clic en el botón **Sync fork** en la página principal de tu fork. - -![Sync project header](../../../../assets/fork-sync.png) - -La imagen de arriba muestra que mi rama está atrasada respecto a la rama principal por 8 commits, y necesito sincronizarla para estar al día. - -![Sync project update modal](../../../../assets/sync-fork-update.png) - -### Revisar localmente - -Navega a la PR que deseas revisar localmente y obtén su ID. La encontrarás en el título de la PR (como se muestra a continuación). - -![PR header](../../../../assets/PR-header.png) - -A continuación, ve a cualquier terminal dentro de tu directorio de proyecto y ejecuta el siguiente comando: - -```bash -gh pr checkout -``` diff --git a/docs/src/content/docs/es/guides/contribute.md b/docs/src/content/docs/es/guides/contribute.md deleted file mode 100644 index 9b3a8684c..000000000 --- a/docs/src/content/docs/es/guides/contribute.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Contribuye -description: Guía para contribuir al proyecto -contributors: - - nelsongutidev -sidebar: - order: 4 ---- - -Puedes contribuir a este repositorio de muchas maneras: - -🔥 Crea un nuevo desafío siguiendo las instrucciones [aquí](/guides/create-challenge). - -🔥 Resuelve desafíos y envía los resultados. (guía [aquí](/guides/resolve-challenge)). - -🔥 Comenta las soluciones de otros proporcionando retroalimentación constructiva y afectuosa. - -🔥 Corrige errores tipográficos o de inglés dentro de la documentación. - -🔥 Envía un issue para sugerir nuevas ideas de desafíos o reportar un error. - -🔥 Patrocina el proyecto [aquí](https://github.com/sponsors/tomalaforge) diff --git a/docs/src/content/docs/es/guides/create-challenge.md b/docs/src/content/docs/es/guides/create-challenge.md deleted file mode 100644 index e44afbb45..000000000 --- a/docs/src/content/docs/es/guides/create-challenge.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Crea tu propio desafío -description: Guía para crear un desafío -contributors: - - nelsongutidev -sidebar: - order: 5 ---- - -Tienes una idea que quieres compartir, un error interesante con el que estás luchando en uno de tus proyectos privados o secundarios, o un tip de Angular que descubriste. Todas estas posibilidades son un buen punto de partida para crear un desafío y compartir la solución con los demás. - -Pero, ¿cómo empiezas a crear estos desafíos? - -## Configuración de Plantillas (Boilerplate) - -Para agilizar el proceso, he creado un generador Nx que configurará todo el boilerplate por ti y te preparará más rápido. La forma más sencilla de ejecutarlo es utilizando la consola Nx: ve a Nx Console > generate > @angular-challenges/cli - challenge - -### Parámetros - -#### parámetros obligatorios - -- title: El título que quieres darle a tu desafío. - :::note[Nota] - El título debe tener un máximo de 25 caracteres. - ::: - -- challengeDifficulty: La dificultad que crees que tiene tu desafío. Hay tres niveles de dificultad: 🟢 fácil / 🟠 medio / 🔴 difícil - -- name: nombre de la aplicación Nx. - :::note[Nota] - Debe escribirse en **kebab-case** - ::: - -- docRepository: La categoría de tu Desafío: Nx, Angular, Angular Performance, Rxjs, NgRx, Typescript. - -#### parámetros opcionales - -- directory: Si quieres que tu aplicación se encuentre en una carpeta específica dentro de `apps`. - -- addTest: Si quieres agregar configuración de pruebas. - -### Qué se crea - -- El generador creará todos los archivos necesarios para tener una nueva aplicación de trabajo. Todos estos archivos se crearán dentro de `apps/${directory}/${name}` - -- Se creará un archivo Markdown con la configuración mínima dentro de `docs/src/content/docs/challenges/${docRepository}` - -## Creación del Desafío - -Lo único que queda por hacer es crear tu desafío. 🚀 - -:::danger[Importante] - -No olvides actualizar la documentación para presentar tu desafío y proporcionar tus instrucciones. - -::: - -¡Es tu turno de actuar! 💪 - -## Envío de la Solución - -Después de una semana más o menos, no olvides proporcionar tu solución a tu desafío. diff --git a/docs/src/content/docs/es/guides/faq.md b/docs/src/content/docs/es/guides/faq.md deleted file mode 100644 index da1e95f18..000000000 --- a/docs/src/content/docs/es/guides/faq.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Preguntas Frecuentes -description: Preguntas frecuentes sobre el proyecto -contributors: - - nelsongutidev -sidebar: - order: 7 ---- - -
    - ¿Por qué mi aplicación no se está iniciando o por qué encuentro errores en mi terminal cuando ejecuto `nx serve`? - - La mayoría de las veces, este problema surge porque sus node_modules están desactualizados y necesita actualizarlos ejecutando `npm ci`. - -Si el proceso de instalación falla, puede resolverlo eliminando su carpeta node_modules usando el comando `rm -rf node_modules` o `npx npkill` y luego volviendo a ejecutar `npm ci`. - -Si el problema persiste, informe el problema [aquí](https://github.com/tomalaforge/angular-challenges/issues/new). - -
    diff --git a/docs/src/content/docs/es/guides/getting-started.md b/docs/src/content/docs/es/guides/getting-started.md deleted file mode 100644 index f533f94fd..000000000 --- a/docs/src/content/docs/es/guides/getting-started.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Inicio -description: Una guía para comenzar con los Desafíos de Angular -contributors: - - nelsongutidev - - 1fbr -sidebar: - order: 1 ---- - -Para comenzar con Desafíos de Angular, siga estos pasos: - -## Crea una cuenta de GitHub - -Si desea enviar una solución, deberá tener su propia cuenta de GitHub. Además, tener una cuenta de GitHub siempre es beneficioso y es gratis. - -## Crea un fork del proyecto de GitHub - -Navegue al [Repositorio de Desafíos de Angular](https://github.com/tomalaforge/angular-challenges) y haga clic en el Fork button in the header. This will create a copy of this repository on your own GitHub page. - -## Clone el repositorio en su máquina local - -Seleccione un directorio en su computadora local y clone este repositorio. - -Abra una terminal, navegue hasta el directorio elegido y escriba el siguiente comando: - -```bash -git clone https://github.com/[YOUR_GITHUB_NAME]/angular-challenges.git -``` - -:::note -Puede encontrar la URL de clonación haciendo clic en el botón <> Code en su propia instancia del repositorio de Desafíos de Angular. - -![Header of GitHub workspace](../../../../assets/header-github.png) - -::: - -## Abra el proyecto en su IDE favorito - -Abra el proyecto en cualquier IDE de su elección. - -## Instale todas las dependencias - -```bash -npm ci -``` - -## Escoja un desafío - -Su proyecto ahora está corriendo. El único paso restante es elegir un desafío 🚀 - -Cada desafío consta de: - -- Nombre: indicando de qué se trata el desafío. -- Número: orden de creación. El número no tiene ningún significado en particular, pero ayuda para hacer referencia en la sección de Pull Request de GitHub. -- Badge: ayuda a visualizar el grado de dificultad. Es totalmente subjetivo 😅 - - 🟢 fácil - - 🟠 medio - - 🔴 difícil diff --git a/docs/src/content/docs/es/guides/rebase.md b/docs/src/content/docs/es/guides/rebase.md deleted file mode 100644 index 8f60580f0..000000000 --- a/docs/src/content/docs/es/guides/rebase.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Hacer rebase a tu rama -description: Guía para hacer rebase a tu rama -contributors: - - nelsongutidev -sidebar: - order: 6 ---- - -En ocasiones, pueden agregarse cambios al proyecto. Intentaré hacer cambios que no rompan nada, pero a veces es inevitable. - -La mayoría de las veces, no necesitarás hacer rebase a tu solución, pero aquí hay una guía para ayudarte a saber cómo hacerlo en caso de ser necesario. - -:::note[Nota] -Esta guía es aplicable a cualquier Proyecto de Código Abierto. -::: - -## Pasos para hacer rebase a tu rama - -### Sincroniza tu repositorio - -Primero, necesitas sincronizar tu fork para asegurarte de que esté actualizado con el repositorio bifurcado. - -Puedes lograr esto haciendo clic en el botón Sync fork en la página principal de tu fork. - -![Sync project header](../../../../assets/fork-sync.png) - -La imagen de arriba muestra que mi rama está detrás de la rama principal por 8 commits, y necesito sincronizarla para estar actualizada. - -![Sync project update modal](../../../../assets/sync-fork-update.png) - -### Abre una terminal - -Abre cualquier terminal de tu elección, ya sea la de tu IDE favorito o una instancia independiente. - -### Git - -Sigue los siguientes comandos para hacer rebase a tu rama local: - -- git checkout main -- git pull -- git checkout [tu rama] -- git rebase main -- Resuelve los conflictos - -En este paso, el rebase puede detenerse porque tu rama local tiene archivos conflictivos con la rama principal. Corrígelos. Después de esto: - -- git add . -- git rebase --continue - -Si tu rama no tiene conflictos, se mostrará un mensaje de éxito. - -### Envía tu trabajo de vuelta a la rama remota - -Finalmente, envía tu trabajo de vuelta a GitHub: - -- git push -f diff --git a/docs/src/content/docs/es/guides/resolve-challenge.md b/docs/src/content/docs/es/guides/resolve-challenge.md deleted file mode 100644 index ac8922107..000000000 --- a/docs/src/content/docs/es/guides/resolve-challenge.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Resolver un Desafío -description: Guía para resolver un desafío -contributors: - - nelsongutidev - - 1fbr -sidebar: - order: 2 ---- - -En esta guía, aprenderás cómo resolver un desafío y enviar una respuesta al repositorio principal de GitHub. - -## Introducción - -Este repositorio ha sido creado utilizando [Nx](https://nx.dev/getting-started/intro). Nx es un monorepositorio que te permite almacenar múltiples aplicaciones dentro del mismo espacio de trabajo. Cada desafío es una aplicación separada. Si abres el directorio `apps`, encontrarás múltiples directorios, cada uno relacionado con un desafío específico. Cada directorio representa una aplicación `Nx` completa e independiente. Para ejecutar e iniciar una, abre tu terminal y ejecuta: - -```bash -npx nx serve -``` - -:::note[Nota] -Si no estás seguro de tu `NOMBRE_DE_LA_APLICACION`, abre el archivo README.md. El comando `serve` está escrito allí, con un enlace a la documentación del desafío. -::: - -:::note[Nota] -Si `nx` está instalado globalmente en tu dispositivo, puedes omitir el uso de `npx`. - -Para instalar `nx` globalmente, ejecuta - -```bash -npm i -g nx -``` - -::: - -## Crear una Rama de Git - -Antes de comenzar a implementar tu solución para resolver un desafío, crea una rama de git para comprometer tu trabajo. - -```bash -git checkout -b -``` - -## Resolver el Desafío - -Sigue las instrucciones para resolver el desafío. - -## Hacer Commit y Enviar tu Trabajo - -El último paso es hacer `commit` a tu trabajo siguiendo las [Directrices Convencionales](https://www.conventionalcommits.org/en/v1.0.0/). - -Finalmente, envía tu trabajo al repositorio remoto con el siguiente comando - -```bash - git push --set-upstream origin -``` - -:::tip[No es necesario que lo memorices] -No tienes que recordar el comando con precisión. Solo necesitas recordar `git push` y si es la primera vez que estás enviando esta rama, `git` te proporcionará el comando completo. -::: - -## Enviar tu Trabajo al Repositorio Principal - -Ahora, todo tu trabajo está ubicado dentro de tu instancia local del repositorio de Desafíos de Angular. - -El siguiente paso es ir a la página principal de [Desafíos de Angular](https://github.com/tomalaforge/angular-challenges) y crear una nueva Pull Request. - -Si no es asi, es posible que hayas hecho incorrectamente uno de los pasos anteriores o puedes ir a la pestaña Pull Request y hacer click en el botón New pull request. - -Una vez hayas escogido las dos ramas a comparar, deberías llegar a la siguiente página: - -![Vista de nuevo pull request](../../../../assets/new-pull-request.png) - -En la sección de título, comienza con Answer: seguido de tu challenge number. Después de eso, eres libre de agregar cualquier cosa que desees. - -:::danger[Importante] -Esto es muy importante. Le permite a otros saber qué desafío estás intentando resolver. -::: - -En la sección de descripción, puedes agregar preguntas, problemas que hayas encontrado o cualquier otra cosa que quieras compartir. Puedes dejarlo vacío si no tienes nada que decir. - -Ahora puedes hacer click en Create pull request. - -Lo leeré y comentaré cuando tenga algo de tiempo libre. - -:::note[Nota] -Todos son bienvenidos a comentar y leer otros PR. -::: - -:::tip[Campeón de OSS] -🔥 Una vez que hayas completado este tutorial, estarás listo para contribuir a cualquier otro repositorio público de GitHub y enviar un PR. Es tan fácil como eso. 🔥 -::: diff --git a/docs/src/content/docs/es/index.mdx b/docs/src/content/docs/es/index.mdx deleted file mode 100644 index 317a76b61..000000000 --- a/docs/src/content/docs/es/index.mdx +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Bienvenido a Desafíos de Angular -description: Comienza resolviendo esos desafíos y convirtiéndote en un mejor ingeniero FrontEnd de Angular. -template: splash -noCommentSection: true -hero: - tagline: ¡Comienza ahora y conviértete en un experto en Angular! - image: - file: ../../../assets/angular-challenge.webp - actions: - - text: Inicio - link: /es/guides/getting-started/ - icon: right-arrow - variant: primary - - text: Ir al Desafío más reciente - link: /es/challenges/angular/60-async-redirect/ - icon: rocket - - text: Dar una estrella - link: https://github.com/tomalaforge/angular-challenges - icon: github - variant: secondary ---- - -import { Card, CardGrid } from '@astrojs/starlight/components'; -import MyIcon from '../../../components/MyIcon.astro'; -import SubscriptionForm from '../../../components/SubscriptionForm.astro'; - - - - Este repositorio contiene 60 Desafíos relacionados con Angular, Nx, RxJS, Ngrx y Typescript. - Estos desafíos se resuelven en torno a problemas de la vida real o características específicas para mejorar tus habilidades. - - - - - - - - Uno de los objetivos de este repositorio es reducir la barrera de - entrada para el Software de Código Abierto (OSS). Al participar en estos - desafíos, aprenderás cómo empezar a contribuir a cualquier otro Proyecto de - Código Abierto. - - - - Aprender y practicar un framework siempre es un desafío. Este conjunto de - desafíos proporciona casos de uso del mundo real para aplicar lo que has - estado aprendiendo. Cualquiera puede comentar u ofrecer asistencia.{' '} - - Aprender solo es genial, pero aprender junto a otros te llevará más lejos. - - - - - ¿Tienes un problema, un error interesante o una idea? No lo dudes;{' '} - crea tus propios desafíos sin perder tiempo. - - - - Completar estos desafíos te preparará para cualquier desafío técnico que - puedas encontrar en un rol de frontend durante las entrevistas. - - - - Este proyecto es gratuito y pretende seguir siéndolo el mayor tiempo posible. Sin embargo, todo se lleva a cabo durante mi tiempo libre, incluyendo la creación de retos y la revisión de pull requests (PRs). El patrocinio puede apoyarme y contribuir al crecimiento del proyecto. - - - ---- - - - - diff --git a/docs/src/content/docs/fr/challenges/angular/1-projection.md b/docs/src/content/docs/fr/challenges/angular/1-projection.md deleted file mode 100644 index 509752c38..000000000 --- a/docs/src/content/docs/fr/challenges/angular/1-projection.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: 🟢 Projection -description: Le challenge 1 consiste à apprendre à projeter des éléments DOM à travers des composants -author: thomas-laforge -contributors: - - alannelucq -challengeNumber: 1 -command: angular-projection -blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5 -videoLinks: - - link: https://www.youtube.com/watch?v=npyEyUZxoIw&ab_channel=ArthurLannelucq - alt: Projection video by Arthur Lannelucq - flag: FR - - link: https://www.youtube.com/watch?v=yNrfvu7vTa4 - alt: Projection video by Amos Lucian Isaila - flag: ES -sidebar: - order: 1 ---- - -## Information - -Dans Angular, la projection de contenu est une technique puissante pour créer des composants hautement personnalisables. Utiliser et comprendre les concepts liés aux ng-content et ngTemplateOutlet peut grandement améliorer votre capacité à créer des composants réutilisables. - -Vous pouvez tout apprendre sur ng-content [ici](https://angular.dev/guide/components/content-projection), de la projection de contenu la plus simple jusqu'à des utilisations plus complexes. - -Pour en savoir plus sur ngTemplateOutlet, vous pouvez trouver la documentation de l'API [ici](https://angular.io/api/common/NgTemplateOutlet) avec quelques exemples de base. - -Avec ces deux outils en main, vous êtes maintenant prêt à relever le défi. - -## Énoncé - -Vous commencerez avec une application entièrement fonctionnelle qui comprend un tableau de bord contenant une carte pour les enseignants et une carte pour les élèves. L'objectif est de mettre en place la carte de la ville. - -Bien que l'application fonctionne, l'expérience développeur est loin d'être optimale. Chaque fois que vous devez implémenter une nouvelle carte, vous devez modifier le `card.component.ts`. Dans des projets réels, ce composant pourrait être partagé entre de nombreuses applications. Le but du défi est de créer un `CardComponent` qui peut être personnalisé sans aucune modification. Une fois que vous aurez créé ce composant, vous pourrez commencer à implémenter le `CityCardComponent` et vous assurer de ne pas toucher au `CardComponent`. - -## Contraintes - -- Vous devez refactoriser le `CardComponent` et le `ListItemComponent`. -- La boucle `@for` doit être déclarée et rester à l'intérieur du `CardComponent`. Vous pourriez être tenté de la déplacer dans le `ParentCardComponent` comme `TeacherCardComponent`. -- Le composant `CardComponent` ne doit contenir aucune condition. -- CSS: essayez d'éviter d'utiliser `::ng-deep`. Trouvez un meilleur moyen de gérer le style CSS. - -## Challenges Bonus - -- Utilisez l'API des signals pour gérer l'état de vos composants (documentation [ici](https://angular.dev/guide/signals)) -- Pour référencer le template, utilisez une directive au lieu d'une magic string ([Qu'est-ce qui pose problème avec les magic string ?](https://softwareengineering.stackexchange.com/a/365344)) diff --git a/docs/src/content/docs/fr/challenges/angular/21-anchor-navigation.md b/docs/src/content/docs/fr/challenges/angular/21-anchor-navigation.md deleted file mode 100644 index e8e7ea947..000000000 --- a/docs/src/content/docs/fr/challenges/angular/21-anchor-navigation.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: 🟢 Naviguer sur une page -description: Le challenge 21 consiste à apprendre à utiliser la navigation intégrée d'Angular -author: thomas-laforge -contributors: - - alannelucq -challengeNumber: 21 -command: angular-anchor-navigation -sidebar: - order: 4 ---- - -## Information - -Vous commencez avec une application qui possède une navigation de base et une navigation par ancre dans le `HomeComponent`. Cependant, l'utilisation de `href` recrée le chemin à chaque fois et rafraîchit la page. - -## Énoncé - -- Votre tâche consiste à refactoriser cette application pour utiliser la navigation intégrée afin de mieux s'intégrer dans le Framework Angular. Vous pouvez explorer le router, mais il est préférable de rester dans le template et d'utiliser la directive `RouterLink`. -- Pour améliorer l'expérience utilisateur, ajoutez un scroll fluide. diff --git a/docs/src/content/docs/fr/challenges/angular/22-router-input.md b/docs/src/content/docs/fr/challenges/angular/22-router-input.md deleted file mode 100644 index 4bb9c8359..000000000 --- a/docs/src/content/docs/fr/challenges/angular/22-router-input.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: 🟢 @RouterInput() -description: Challenge 22 is about using the @Input decorator to retreive router params. -author: thomas-laforge -contributors: - - alannelucq -challengeNumber: 22 -command: angular-router-input -blogLink: https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617 -sidebar: - order: 5 ---- - -## Information - -Dans cette application, nous récupérons trois informations depuis le routeur dans notre `TestComponent` : - -- `testId` qui est situé dans les paramètres de l'URL. -- `user` qui est situé dans les paramètres de la requête de l'URL. -- `permission` qui est défini dans l'objet `data` de la route. - -Jusqu'à la version 15 d'Angular, nous devions utiliser le `ActivatedRoute` pour obtenir toutes ces informations et les récupérer via des observables pour écouter sur les changements d'URL. - -Depuis la version 16, Angular a introduit un nouvel `Input` qui peut écouter les changements de données d'une route. Vous pouvez en savoir plus [ici](https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617). - -## Énoncé - -L'objectif de cet exercice est de refactoriser le code pour utiliser la nouvelle stratégie `RouterInput`. diff --git a/docs/src/content/docs/fr/challenges/angular/31-module-to-standalone.md b/docs/src/content/docs/fr/challenges/angular/31-module-to-standalone.md deleted file mode 100644 index bd0356610..000000000 --- a/docs/src/content/docs/fr/challenges/angular/31-module-to-standalone.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 🟢 Module vers Standalone -description: Le challenge 31 consiste à migrer une application basée sur des modules vers une application standalone. -author: thomas-laforge -contributors: - - alannelucq -challengeNumber: 31 -command: angular-module-to-standalone -sidebar: - order: 6 ---- - -## Information - -Dans la version 14 d'Angular, les composants standalone ont été introduits et sont devenus stables dans la version 15. Si vous ne les avez pas encore essayés, il n'est jamais trop tard. Vous pouvez les essayer dans ce challenge. - -L'objectif est de voir comment **Nx** et les **composants standalone** fonctionnent ensemble, et d'expérimenter le processus de découplage de votre application avec la bibliothèque Nx et les composants standalone. - -Les composants standalone sont très simples à comprendre mais les utilisations de ces composants dans **le routing et via du lazy-loading** peuvent être un peu plus difficiles à appréhender. Ce challenge vous permettra de manipuler des composants à différents niveaux d'imbrication et de travailler avec des routes qui utilisent du lazy loading. - -Après avoir complété ce défi, les composants standalone n'auront plus aucun secret pour vous. - -## Énoncé - -L'objectif de ce challenge est de migrer votre application depuis des composants basés sur des modules vers des composants standalone. - -## Note - -Vous pouvez également tester le [schematic Angular](https://angular.dev/reference/migrations/standalone) pour migrer les NgModule vers des composants standalone. _(Comme nous utilisons Nx, commencez votre commande par nx au lieu de ng)_ diff --git a/docs/src/content/docs/fr/challenges/angular/46-simple-animations.md b/docs/src/content/docs/fr/challenges/angular/46-simple-animations.md deleted file mode 100644 index d20446040..000000000 --- a/docs/src/content/docs/fr/challenges/angular/46-simple-animations.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: 🟢 Animations Simples -description: Le challenge 46 consiste à apprendre comment utiliser l'API d'animations intégrée dans Angular -author: sven-brodny -contributors: - - alannelucq -challengeNumber: 46 -command: angular-simple-animations -sidebar: - order: 17 ---- - -## Information - -Il s'agit du premier des deux challenges sur les animations. Le but de cette série est de maîtriser les animations en Angular. - -Des animations bien conçues peuvent rendre votre application plus agréable et plus intuitive à utiliser, mais elles ne sont pas seulement cosmétiques. Les animations peuvent améliorer votre application et l'expérience utilisateur de plusieurs façons : - -- Sans animations, les transitions de pages web peuvent sembler abruptes et désagréables. -- Le mouvement améliore grandement l'expérience utilisateur, les animations permettent donc aux utilisateurs de percevoir la réponse de l'application à leurs actions. -- De bonnes animations attirent intuitivement l'attention de l'utilisateur là où elle est nécessaire. - -Je vous recommande de lire la [documentation officielle](https://angular.dev/guide/animations). Vous y apprendrez tout ce qui est nécessaire pour réussir ce challenge. - -Vous pouvez également regarder cet [exemple fonctionnel](https://svenson95.github.io/ng-xmp-animations/) et ce [repertoire git](https://github.com/svenson95/ng-xmp-animations) pour vous inspirer. - -## Énoncé - -L'objectif de ce challenge est d'ajouter des animations qui doivent être déclenchées lorsque l'utilisateur arrive sur la page ou la recharge. - -## Contraintes - -- N'utilisez aucun CSS et utilisez l'API intégrée d'Angular `@angular/animations`. -- Ne déclenchez pas les animations avec un bouton comme dans les exemples, mais lorsque l'utilisateur entre ou recharge la page. - -### Niveau 1 - -Ajoutez une animation de fondu ou de déplacement pour les paragraphes sur le côté gauche. - - - -### Niveau 2 - -Ajoutez une animation en cascade pour la liste sur le côté droit. - - diff --git a/docs/src/content/docs/fr/challenges/angular/5-crud-application.md b/docs/src/content/docs/fr/challenges/angular/5-crud-application.md deleted file mode 100644 index 0ef30ec4d..000000000 --- a/docs/src/content/docs/fr/challenges/angular/5-crud-application.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: 🟢 Application CRUD -description: Le challenge 5 consiste à refactoriser une application CRUD -author: thomas-laforge -contributors: - - alannelucq -challengeNumber: 5 -command: angular-crud-application -sidebar: - order: 2 ---- - -## Information - -Communiquer et synchroniser un état global ou local avec votre backend est au cœur de toute application. Vous devrez maîtriser les meilleures pratiques suivantes pour construire des applications Angular solides et fiables. - -## Énoncé - -Dans cet exercice, vous avez une petite application CRUD dans laquelle vous pouvez récupérer, mettre à jour et supprimer des tâches. - -Pour le moment, nous avons un exemple fonctionnel mais qui est rempli de nombreuses mauvaises pratiques. - -### Étape 1 : refactoriser avec les meilleures pratiques - -Ce que vous devrez faire: - -- Évitez d'utiliser **any** comme type. Utiliser des interfaces pour tirer parti du système de typage de Typescript permet d'éviter les erreurs. -- Utilisez un **service séparé** pour tous vos appels HTTP et utilisez un **Signal** pour votre liste de tâches. -- Ne **mutez** pas les données - -```typescript -// À éviter -this.todos[todoUpdated.id - 1] = todoUpdated; - -// Privilégier une approche comme celle-ci, mais qui doit être améliorée car nous voulons toujours conserver le même ordre -this.todos = [...this.todos.filter((t) => t.id !== todoUpdated.id), todoUpdated]; -``` - -### Étape 2 : Améliorer - -- Ajoutez un bouton **Supprimer** : _Documentation de l'API fictive_ -- Gérez correctement les **erreurs**. _(De façon globale)_ -- Ajoutez un **indicateur de chargement** global. _Vous pouvez utilisez le MatProgressSpinnerModule_ - -### Étape 3 : Maintenabilité !! (ajoutez des tests) - -- Ajoutez 2/3 tests - -### Étape 4 : Effet waouw !!! (maîtrisez votre état). - -- Utilisez le **component store de ngrx**, **ngrx/store**, **rxAngular**, **tanstack-query** ou **ngrx/signal-store** pour gérer l'état local de votre composant. -- Ayez un indicateur de chargement/erreur **localisé** , par exemple uniquement sur la tâche en cours de traitement et **désactivez** tous les boutons sur cette tâche. _(Astuce: vous devrez créer un ItemComponent)_ diff --git a/docs/src/content/docs/fr/challenges/angular/8-pure-pipe.md b/docs/src/content/docs/fr/challenges/angular/8-pure-pipe.md deleted file mode 100644 index 0932e7a67..000000000 --- a/docs/src/content/docs/fr/challenges/angular/8-pure-pipe.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: 🟢 Pipe pur -description: Le challenge 8 consiste à créer un pipe pur -author: thomas-laforge -contributors: - - alannelucq -challengeNumber: 8 -command: angular-pure-pipe -blogLink: https://medium.com/ngconf/deep-dive-into-angular-pipes-c040588cd15d -sidebar: - order: 3 ---- - -## Information - -Il s'agit du premier des trois challenges `@Pipe()`. L'objectif de cette série est de maîtriser les **pipes** en Angular. - -Les pipes sont un moyen très puissant de transformer les données dans votre template. La différence entre appeler une fonction et un pipe réside dans le fait que les pipes purs sont mémorisés. Ils ne seront donc pas recalculés à chaque cycle de détection des changements si les données en entrée n'ont pas changées. - -Les pipes sont conçus pour être efficaces et optimisés pour la performance. Ils utilisent des mécanismes de détection des changements pour ne recalculer la valeur que si la donnée en entrée change, ce qui minimise les calculs inutiles et améliore les performances de rendu. - -Par défaut, un pipe est pur. Vous devez être conscient que définir `pure` à false est susceptible d'être inefficace, car cela augmente le nombre de rerenders. - -:::note -Un pipe **pur** est appelé uniquement lorsque la valeur change. -Un pipe **impur** est appelé à chaque cycle de détection des changements. -::: - -Il existe quelques pipes prédéfinis utiles comme DatePipe, UpperCasePipe et CurrencyPipe. Pour en savoir plus sur les pipes dans Angular, consultez la documentation de l'API [ici](https://angular.dev/guide/pipes). - -## Énoncé - -Dans cet exercice, vous devez refactoriser une fonction de transformation à l'intérieur d'un composant qui est appelée dans votre template. L'objectif est de convertir cette fonction en un pipe. - -## Contraintes - -- Doit être fortement typé diff --git a/docs/src/content/docs/fr/guides/checkout-answer.md b/docs/src/content/docs/fr/guides/checkout-answer.md deleted file mode 100644 index 9a16f2a51..000000000 --- a/docs/src/content/docs/fr/guides/checkout-answer.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Consulter la réponse de quelqu'un d'autre -description: Guide pour consulter la réponse de quelqu'un d'autre. -contributors: - - alannelucq -sidebar: - order: 3 ---- - -Toutes les réponses aux Challenges Angular seront présentées sous la forme d'une pull request (PR). Pour les consulter -et -les suivre, naviguez dans la page Files Changes sur GitHub. Cependant, comprendre et suivre ce processus peut ne pas -être simple si vous n'êtes pas familier avec l'interface. Dans de nombreux cas, vous préférerez peut-être vous mettre -sur la branche et examiner la réponse dans votre IDE préféré. - -## Installer la CLI de GitHub - -Suivez les instructions pour votre système d'exploitation [ici](https://github.com/cli/cli#installation). - -## Consulter la PR de quelqu'un d'autre en local - -### Synchronisez votre dépôt - -Tout d'abord, vous devez synchroniser votre fork pour vous assurer qu'il soit à jour avec le dépôt forké. - -Cela peut être réalisé en cliquant sur le bouton Sync fork sur la page principale de votre fork. - -![Sync project header](../../../../assets/fork-sync.png) - -L'image ci-dessus montre que ma branche a 8 commits de retard par rapport à la branche principale, et je dois la -synchroniser pour qu'elle soit à jour. - -![Sync project update modal](../../../../assets/sync-fork-update.png) - -### Consulter la PR en local - -Recherchez la PR que vous souhaitez consulter en local et récupérez son ID. Vous le trouverez dans le titre de la -PR (comme illustré ci-dessous). - -![PR header](../../../../assets/PR-header.png) - -Ensuite, ouvrez n'importe quel terminal dans le répertoire de votre projet et exécutez la commande suivante : - -```bash -gh pr checkout -``` - -Si vous ne vous souvenez pas de la commande, cliquez sur le bouton Code sur le côté droit de l'en-tête, et vous pourrez -facilement la copier/coller. - -![PR code modal](../../../../assets/PR-code-btn-modal.png) - -:::note -Si la commande ne fonctionne pas ou échoue, l'interface CLI de GitHub vous guidera à travers le processus. -::: - -🔥 Vous pouvez maintenant consulter la réponse en local et la lancer pour la tester. 🔥 - - diff --git a/docs/src/content/docs/fr/guides/contribute.md b/docs/src/content/docs/fr/guides/contribute.md deleted file mode 100644 index 69e8d4a2b..000000000 --- a/docs/src/content/docs/fr/guides/contribute.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Comment contribuer ? -description: Guide pour savoir comment contribuer à ce projet. -contributors: - - alannelucq -sidebar: - order: 4 ---- - -Vous pouvez contribuer à ce projet de plusieurs manières : - -🔥 Créer un nouveau challenge en suivant ces [instructions](/guides/create-challenge). - -🔥 Répondre aux challenges et soumettez les résultats (guide [ici](/guides/resolve-challenge)). - -🔥 Donner des retours bienveillants et constructifs sur les solutions des autres. - -🔥 Corriger les fautes de frappe dans la documentation. - -🔥 Aider à la traduction de la documentation. - -🔥 Créer une issue pour suggérer de nouvelles idées de challenges ou signaler un bug. - -🔥 Sponsoriser le projet [ici](https://github.com/sponsors/tomalaforge). diff --git a/docs/src/content/docs/fr/guides/create-challenge.md b/docs/src/content/docs/fr/guides/create-challenge.md deleted file mode 100644 index a197db052..000000000 --- a/docs/src/content/docs/fr/guides/create-challenge.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Créer un challenge -description: Guide sur comment créer un challenge -contributors: - - alannelucq -sidebar: - order: 5 ---- - -Vous avez une idée à partager, un bug intéressant avec lequel vous luttez dans l'un de vos projets privés ou -secondaires, ou une astuce Angular que vous avez découverte ? Toutes ces situations sont un bon point de départ pour -créer un challenge et partager votre solution avec les autres. - -Comment commencer à créer ces challenges ? - -## Configuration de base - -Pour simplifier le processus, j'ai créé un générateur Nx qui configurera tout le code de base pour vous. Le moyen le -plus -simple de l'exécuter est d'utiliser la console Nx : allez dans Nx Console > generate > @angular-challenges/cli - -challenge. - -Vous pouvez également utiliser [l'extension Nx Console](https://nx.dev/getting-started/editor-setup) de votre IDE pour -générer les fichiers. - -### Paramètres - -#### Paramètres obligatoires - -- title: Le titre que vous souhaitez donner à votre challenge. - :::note - Le titre doit comporter un maximum de 25 caractères. - ::: - -- challengeDifficulty: La difficulté estimée de votre challenge. Il y a trois niveaux de difficulté : 🟢 facile / - 🟠 moyen / 🔴 difficile -- name: Le nom de l'application Nx. - :::note - Il doit être écrit en **kebab-case**. - ::: -- docRepository: La catégorie de votre challenge : Nx, Angular, Angular Performance, Rxjs, NgRx, Typescript, ou - Forms. - -#### Paramètres optionnels - -- directory: Si vous souhaitez que votre application soit située dans un dossier spécifique à l'intérieur - de `apps`. -- addTest: Si vous souhaitez ajouter une configuration de test. - -### Qu'est-ce qui est créé ? - -- Le générateur créera tous les fichiers nécessaires pour avoir une nouvelle application fonctionnelle. Tous ces - fichiers seront créés dans apps/${directory}/${name}. -- Un fichier Markdown avec une configuration minimale sera créé dans docs/src/content/docs/challenges/${docRepository}. - -## Création d'un challenge - -La seule chose qu'il vous reste à faire est de créer votre challenge. 🚀 - -:::danger -N'oubliez pas de mettre à jour la documentation pour présenter votre challenge et fournir vos instructions. -::: - -À vous de jouer !!! 💪 - -## Soumission d'une solution - -Après environ une semaine, fournissez une pull request de la solution de votre challenge. diff --git a/docs/src/content/docs/fr/guides/faq.md b/docs/src/content/docs/fr/guides/faq.md deleted file mode 100644 index abbba29af..000000000 --- a/docs/src/content/docs/fr/guides/faq.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: FAQ -description: Foire Aux Questions -contributors: - - alannelucq -sidebar: - order: 7 ---- - -
    - - Pourquoi mon application ne démarre-t-elle pas, ou pourquoi est-ce que je rencontre des erreurs dans mon terminal lorsque je lance `nx serve` ? - - -La plupart du temps, ce problème survient parce que vos node_modules sont obsolètes et que vous devez les mettre à jour -en exécutant `npm ci`. - -Si le processus d'installation échoue, vous pouvez résoudre ce problème en supprimant votre dossier node_modules en -utilisant la commande `rm -rf node_modules` ou `npx npkill`, puis en relançant `npm ci`. - -Si le problème persiste, veuillez signaler le -problème [ici](https://github.com/tomalaforge/angular-challenges/issues/new). - -
    diff --git a/docs/src/content/docs/fr/guides/getting-started.md b/docs/src/content/docs/fr/guides/getting-started.md deleted file mode 100644 index 562043b6b..000000000 --- a/docs/src/content/docs/fr/guides/getting-started.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Comment démarrer -contributors: - - tomalaforge -description: Un guide sur la manière de commencer avec sur Angular Challenges. -sidebar: - order: 1 ---- - -Pour commencer avec les Challenges Angular, suivez ces étapes : - -## Créez un compte GitHub - -Si vous souhaitez soumettre une réponse, vous devrez avoir votre propre compte GitHub. De plus, avoir un compte GitHub est toujours bénéfique et c'est gratuit. - -## Forkez le projet GitHub - -Accédez au [répertoire des Challenges Angular](https://github.com/tomalaforge/angular-challenges) et cliquez sur le bouton Fork dans l'en-tête. Cela créera une copie de ce dépôt sur votre propre page GitHub. - -## Clonez le dépôt sur votre machine locale - -Sélectionnez un répertoire sur votre ordinateur local et clonez ce dépôt. - -Ouvrez un terminal, accédez au répertoire choisi et tapez la commande suivante : - -```bash -git clone https://github.com/[VOTRE_NOM_GITHUB]/angular-challenges.git -``` - -:::note -Vous pouvez trouver l'URL de clonage en cliquant sur le bouton <> Code dans votre propre instance du dépôt des Challenges Angular. - -![Header of GitHub workspace](../../../../assets/header-github.png) - -::: - -## Ouvrez le projet dans votre IDE préféré - -Ouvrez le projet dans n'importe quel IDE de votre choix. - -## Installez toutes les dépendances - -```bash -npm ci -``` - -## Choisissez un challenge - -Votre projet est maintenant opérationnel. La seule étape restante est de choisir un challenge 🚀 - -Chaque challenge se compose de : - -- Nom : indiquant de quoi traite le défi. -- Numéro : ordre de création. Le numéro n'a pas de signification particulière mais aide pour la référence dans la section des Demandes de Tirage (Pull Requests) GitHub. -- Badge : aide à visualiser le degré de difficulté. C'est entièrement subjectif 😅 - - 🟢 facile - - 🟠 moyen - - 🔴 difficile diff --git a/docs/src/content/docs/fr/guides/rebase.md b/docs/src/content/docs/fr/guides/rebase.md deleted file mode 100644 index bf50ebb71..000000000 --- a/docs/src/content/docs/fr/guides/rebase.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Rebase votre branche -description: Guide pour faire un rebase de sa branche et récupérer les derniers changements. -contributors: - - alannelucq -sidebar: - order: 6 ---- - -Parfois, des modifications peuvent être ajoutées au projet. Je vais essayer de faire des changements qui ne cassent -rien, mais parfois, c'est inévitable. - -La plupart du temps, vous n'aurez pas besoin de rebaser votre solution, mais voici un guide pour vous aider à savoir -comment le faire. - -:::note -Ce guide est applicable à tout projet Open Source. -::: - -## Étapes pour rebaser votre branche - -### Synchronisez votre dépôt - -Tout d'abord, vous devez synchroniser votre fork pour vous assurer qu'il est à jour avec le dépôt forké. - -Vous pouvez le faire en cliquant sur le bouton Sync fork sur la page principale de votre fork. - -![Sync project header](../../../../assets/fork-sync.png) - -L'image ci-dessus montre que ma branche a 8 commits de retard par rapport à la branche principale et que je dois la -synchroniser pour qu'elle soit à jour. - -![Sync project update modal](../../../../assets/sync-fork-update.png) - -### Ouvrez un terminal - -Ouvrez le terminal de votre choix, soit celui de votre IDE préféré, soit une instance autonome. - -### Git - -Exécutez les commandes suivantes pour rebaser votre branche locale : - -- git checkout main -- git pull -- git checkout [votre branche] -- git rebase main -- Résolvez les conflits - -À cette étape, le rebase peut s'arrêter parce que votre branche locale a des fichiers en conflit avec la branche -principale. Corrigez-les. - -Une fois que c'est fait : - -- git add . -- git rebase --continue - -Si votre branche n'a pas de conflit, un message de succès sera affiché. - -### Envoyez votre travail vers la branche distante - -Enfin, envoyez votre travail vers GitHub : - -- git push -f diff --git a/docs/src/content/docs/fr/guides/resolve-challenge.md b/docs/src/content/docs/fr/guides/resolve-challenge.md deleted file mode 100644 index 0031a5981..000000000 --- a/docs/src/content/docs/fr/guides/resolve-challenge.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Résoudre un Challenge -contributors: - - tomalaforge -description: Guide pour résoudre un challenge -sidebar: - order: 2 ---- - -Dans ce guide, vous apprendrez comment résoudre un challenge et soumettre une réponse sur le répertoire principal de GitHub. - -## Introduction - -Ce répertoire utilise [Nx](https://nx.dev/getting-started/intro). Nx est un monorépo qui vous permet de stocker plusieurs applications à l'intérieur du même espace de travail. Chaque challenge est une application distincte. Si vous ouvrez le répertoire `apps`, vous trouverez plusieurs dossiers, chacun lié à un challenge spécifique. Chaque dossier représente une application autonome complète `Nx`. Pour exécuter et démarrer l'une d'entre elles, ouvrez votre terminal et exécutez : - -```bash -npx nx serve -``` - -:::note -Si vous n'êtes pas sûr de votre `NOM_APPLICATION`, ouvrez le fichier README.md. La commande `serve` y est écrite, avec un lien vers la documentation du challenge. -::: - -:::note -Si vous installez `nx` globalement sur votre ordinateur, vous éviterez de préfixer chaque commande par `npx`. - -Pour installer `nx` globalement, exécutez - -```bash -npm i -g nx -``` - -::: - -## Créer une Branche Git - -Avant de commencer à résoudre un challenge, créez une branche git pour y ajouter vos modifications. - -```bash -git checkout -b -``` - -## Résoudre un Challenge - -Suivez les instructions décrites sur chaque Challenge pour le résoudre. - -## Commitez et Pousser votre Travail - -La dernière étape consiste à valider votre travail en suivant les [Conventional Guidelines](https://www.conventionalcommits.org/en/v1.0.0/). - -Enfin, poussez votre travail vers le répertoire distant avec la commande suivante - -```bash - git push --set-upstream origin -``` - -:::tip[Pas besoin de retenir la commande par coeur] -Vous n'avez pas besoin de mémoriser précisément la commande. Il vous suffit de vous rappeler `git push `et si c'est la première fois que vous poussez cette branche, `git` vous fournira la commande complète. -::: - -## Soumettre votre Travail sur le répertoire Principal - -Maintenant, tout votre travail se trouve dans votre instance locale du dépôt de Angular Challenges. - -La prochaine étape est de vous rendre sur la page principale de Angular Challenges et de créer une nouvelle Pull Request. - -GitHub devrait afficher en en-tête une notification pour vous aider à créer la pull request. - -Si ce n'est pas le cas, vous avez soit mal effectué l'une des étapes précédentes, soit vous pouvez vous rendre sur l'onglet Pull Request et cliquer sur le bouton New pull request. - -Une fois que vous avez choisi les deux branches à comparer, vous devriez arriver sur la page suivante : - -![New pull request screen](../../../../assets/new-pull-request.png) - -Dans la section du titre, commencez par Réponse : suivi de votre numéro de challenge. Ensuite, vous êtes libre d'ajouter tout ce que vous souhaitez. - -:::danger -C'est très important. Cela permet aux autres de savoir quel challenge vous tentez de résoudre. -::: - -Dans la section de description, vous pouvez ajouter des questions, des problèmes rencontrés ou tout autre contenu que vous souhaitez partager. Vous pouvez laisser vide si vous n'avez rien à dire. - -Vous pouvez maintenant cliquer sur Créer pull request. - -## Avoir un Retour - -Pour continuer à donner des retours de qualités, sponsorise le project sur Github: - -
      -
    • $5 pour une review
    • -
    • $25 pour des reviews a vie
    • -
    • Créez un challenge/Contribuez pour des reviews à vie
    • -
    - -:::note -Tout le monde peut commenter ou lire les Pull Requests des autres participants. -::: - -:::tip[Champion OSS] -🔥 Une fois que vous avez terminé ce tutoriel, vous êtes prêt à contribuer à n'importe quel répertoire public GitHub et à soumettre une PR. C'est aussi simple que ça. 🔥 -::: diff --git a/docs/src/content/docs/fr/index.mdx b/docs/src/content/docs/fr/index.mdx deleted file mode 100644 index 574f16871..000000000 --- a/docs/src/content/docs/fr/index.mdx +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Bienvenue sur Angular Challenges -description: Commence par résoudre ces défis et deviens un meilleur ingénieur FrontEnd Angular. -template: splash -noCommentSection: true -hero: - tagline: Commence maintenant et deviens un expert Angular ! - image: - file: ../../../assets/angular-challenge.webp - actions: - - text: C'est parti ! - link: /guides/getting-started/ - icon: right-arrow - variant: primary - - text: Aller au dernier Challenge - link: /fr/challenges/angular/60-async-redirect/ - icon: rocket - - text: Donne une étoile - link: https://github.com/tomalaforge/angular-challenges - icon: github - variant: secondary ---- - -import { Card, CardGrid } from '@astrojs/starlight/components'; -import MyIcon from '../../../components/MyIcon.astro'; -import SubscriptionForm from '../../../components/SubscriptionForm.astro'; - - - - Ce répertoire rassemble 60 Défis liés à Angular, Nx, RxJS, Ngrx et Typescript. Ces défis portent sur des problèmes réels ou des fonctionnalités spécifiques pour améliorer vos compétences. - - - - - - - - L'un des objectifs de ce répertoire est de rendre plus accessible les - contributions aux logiciels Open Source (OSS). En résolvant ces défis, vous - apprendrez comment commencer à contribuer à n'importe quel projet Open Source. - - - - Apprendre et démarrer sur un nouveau framework est toujours difficile. Cette - série de défis propose des cas d'utilisation réels pour appliquer ce que vous - avez appris. N'importe qui peut commenter ou aider.{' '} - - Apprendre seul est bien, mais apprendre aux côtés des autres vous fera - progresser davantage et plus rapidement. - - - - - Avez-vous un problème, un bug intéressant ou une idée ? N'hésitez pas ;{' '} - créez vos propres challenges sans perdre de temps. - - - - Résoudre ces challenges vous préparera aux éventuels défis techniques que vous - pourriez rencontrer lors d'un entretien pour un rôle d'ingénieur frontend. - - - - Ce projet est gratuit et vise à le rester le plus longtemps possible. Cependant, tout est réalisé pendant mon temps libre, y compris la création de challenges et la relecture des pull requests. Le sponsoring peut me soutenir et contribuer à la croissance du projet. - - - ---- - - - - diff --git a/docs/src/content/docs/guides/checkout-answer.md b/docs/src/content/docs/guides/checkout-answer.md deleted file mode 100644 index 2e56ce162..000000000 --- a/docs/src/content/docs/guides/checkout-answer.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Check out Somebody's Answer -description: Guide to checking out someone else's answer. -contributors: - - tomalaforge - - gsgonzalez88 - - 1fbr - - jdegand -sidebar: - order: 3 ---- - -All Angular Challenges answers will be presented in the form of a pull request (PR). To view and follow them, navigate through the **Files Changes** page on GitHub. However, understanding and following this process may not be straightforward if you are not familiar with the interface. In many cases, you may prefer to check out the branch and review the solution in your preferred IDE. - -## Install the GitHub CLI - -Follow the instructions for your operating system [here](https://github.com/cli/cli#installation). - -## Checkout a PR locally from someone else - -### Sync your repository - -First, you need to synchronize your fork to ensure it is up-to-date with the forked repository. - -This can be achieved by clicking the **Sync fork** button on the main page of your fork. - -![Sync project header](../../../assets/fork-sync.png) - -The image above shows that my branch is behind the main branch by 8 commits, and I need to synchronize it to be up to date. - -![Sync project update modal](../../../assets/sync-fork-update.png) - -### Checkout locally - -Navigate to the PR you wish to check out locally and obtain its ID. You will find it in the title of the PR (as shown below). - -![PR header](../../../assets/PR-header.png) - -Next, go to any terminal within your project directory and run the following command: - -```bash -gh pr checkout -``` - -If you don't remember the command, click on the Code button on the right side of the header, and you can easily copy/paste the command. - -![PR code modal](../../../assets/PR-code-btn-modal.png) - -:::note -If the command doesn't work or fails, GitHub CLI will guide you through the process. -::: - -🔥 You can now navigate through the solution locally and serve it to test it. 🔥 - -### Checkout with GitHub Codespaces - -You can checkout any **open** PR with GitHub Codespaces. After clicking the code button, you can navigate to the codespaces tab and click the green button to create a codespace on the PR's branch. After the codespace initializes, you can serve the app. diff --git a/docs/src/content/docs/guides/contribute.md b/docs/src/content/docs/guides/contribute.md deleted file mode 100644 index 45f164a4f..000000000 --- a/docs/src/content/docs/guides/contribute.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Contribute -description: Guide to contribute -contributors: - - tomalaforge - - jdegand -sidebar: - order: 4 ---- - -You can contribute to this repository in many ways: - -🔥 Create a new challenge by following these [instructions](/guides/create-challenge). - -🔥 Answer challenges and submit the results (guide [here](/guides/resolve-challenge)). - -🔥 Give caring, constructive feedback on other people's solutions. - -🔥 Correct typos within the documentation. - -🔥 Assist with the documentation's translation. - -🔥 File an issue to suggest new challenge ideas or report a bug. - -🔥 Sponsor the project [here](https://github.com/sponsors/tomalaforge). diff --git a/docs/src/content/docs/guides/create-challenge.md b/docs/src/content/docs/guides/create-challenge.md deleted file mode 100644 index 4b01d6bb8..000000000 --- a/docs/src/content/docs/guides/create-challenge.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Create your own challenge -description: Guide to create your own challenge -contributors: - - tomalaforge - - gsgonzalez88 - - jdegand -sidebar: - order: 5 ---- - -You have an idea you want to share, an interesting bug you are struggling with in one of your private or side projects, or an Angular trick you discovered. All of these possibilities are a good starting point to create a challenge and share the solution with others. - -How do you start creating these challenges? - -## Boilerplate Setup - -To streamline the process, I have created an Nx generator that will set up all the boilerplate for you. The easiest way to run it is by using the Nx console: go to the Nx Console > generate > @angular-challenges/cli - challenge. - -Alternatively, you may utilize your IDE's [Nx Console extension](https://nx.dev/getting-started/editor-setup) to generate the files. - -### Parameters - -#### mandatory parameters - -- title: The title you want to give to your challenge. - :::note - The title must be a maximum of 25 characters. - ::: - -- author: Your name - :::note - Your name should be in kebab-case. (e.g. john-doe) - ::: - :::note - Don't forget to update your personal information inside the file at your name. - ::: - -- challengeDifficulty: The difficulty you think your challenge has. There are three difficulty levels : 🟢 easy / 🟠 medium / 🔴 hard - -- docRepository: The category of your Challenge is Nx, Angular, Angular Performance, Rxjs, NgRx, Typescript, Forms or Signals. - -#### optional parameters - -- challengeNumber: You can specify a challenge number if a challenge is being submitted. (If empty, the number will be the next one). -- directory: If you want your application to be located in a specific folder inside `apps`. -- addTest: If you want to add test configuration. - -### What is created? - -- The generator will create all the files needed to have a new working application. All these files will be created inside `apps/${directory}/${name}`. -- A Markdown file with minimal setup will be created inside `docs/src/content/docs/challenges/${docRepository}`. - -## Challenge Creation - -The only thing left to do is create your challenge. 🚀 - -:::danger -Don't forget to update the docs to introduce your challenge and provide your instructions. -::: - -It's your turn to act!!! 💪 - -## Solution Submission - -After one week or so, provide a pull request of your solution to your challenge. diff --git a/docs/src/content/docs/guides/faq.md b/docs/src/content/docs/guides/faq.md deleted file mode 100644 index 93a29c964..000000000 --- a/docs/src/content/docs/guides/faq.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: FAQ -description: Answer to question -contributors: - - tomalaforge - - jdegand -sidebar: - order: 7 ---- - -
    - Why is my application not starting, or why do I encounter errors in my terminal when I run `nx serve`? - - Most of the time, this issue arises because your node_modules are outdated, and you need to update them by running `npm ci`. - -If the installation process fails, you can resolve it by deleting your node_modules folder using the command `rm -rf node_modules` or `npx npkill` and then re-running `npm ci`. - -If the problem persists, please report the issue [here](https://github.com/tomalaforge/angular-challenges/issues/new). - -
    diff --git a/docs/src/content/docs/guides/getting-started.md b/docs/src/content/docs/guides/getting-started.md deleted file mode 100644 index e707fa36c..000000000 --- a/docs/src/content/docs/guides/getting-started.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Getting Started -description: A guide on how to get started with Angular Challenges. -contributors: - - tomalaforge - - 1fbr - - ho-ssain - - jdegand -sidebar: - order: 1 ---- - -To get started with Angular Challenges, follow these steps: - -## Create a GitHub Account - -If you wish to submit an answer, you will need to have your own GitHub account. Additionally, having a GitHub account is always beneficial, and it's free. - -## Fork the GitHub project - -Navigate to the [Angular Challenges Repository](https://github.com/tomalaforge/angular-challenges) and click on the Fork button in the header. This will create a copy of this repository on your own GitHub profile. - -## Clone the repository to your local machine - -Select a directory on your local computer and clone this repository. - -Open a terminal, navigate to the chosen directory, and type the following command: - -```bash -git clone https://github.com/[YOUR_GITHUB_NAME]/angular-challenges.git -``` - -:::note -You can find the clone URL by clicking on the <> Code button in your own instance of the Angular Challenges repository. - -![Header of GitHub workspace](../../../assets/header-github.png) - -::: - -## Open the project in your favourite IDE - -Open the project in any IDE of your choice. - -## Install all dependencies - -```bash -npm ci -``` - -## Choose a challenge - -Your project is now up and running. The only remaining step is to choose a challenge 🚀 - -Each challenge consists of: - -- Name: indicating what the challenge is about. -- Number: order of creation. The number doesn't have any particular meaning but helps for reference in GitHub Pull Request section. -- Badge: helps visualize the degree of difficulty. It's entirely subjective 😅 - - 🟢 easy - - 🟠 medium - - 🔴 difficult - -## (Alternately) Use GitHub Codespaces - -From your own instance of the Angular Challenges repository, click the code button and navigate to the codespaces tab. - -![Codespaces tab](../../../assets/codespaces.png) - -Click the `Create codespace on main` button, and you will navigate to a GitHub codespace. - -If you never used a GitHub codespace before, I would recommend you try this short interactive [GitHub Skills Tutorial](https://github.com/skills/code-with-codespaces). - -When you navigate to the codespace, there will be a prompt to install the recommended `VS Code` plugins. If you plan on creating a challenge, you can use the `Nx plugin` to generate the starter code. Either way, the codespace will install the dependencies, and you can create a new branch, tackle any challenge, and create a pull request. - -When you push to a branch, you do not have to provide a GitHub token. - -Once you are finished, remember to pause or delete your codespace. If you don't, GitHub will automatically pause an idle codespace after 30 minutes. You do have a generous amount of free codespace time per month, but it is still important not to waste your allotment. - -In the GitHub codespace, copy and paste will be blocked until you give permission. - -The GitHub codespace uses port forwarding to serve the projects. Click the prompt after running `npx nx serve [project-name]` to navigate to `localhost:4200`. diff --git a/docs/src/content/docs/guides/rebase.md b/docs/src/content/docs/guides/rebase.md deleted file mode 100644 index e91badfb6..000000000 --- a/docs/src/content/docs/guides/rebase.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Rebase your branch -description: Guide to rebase a branch to latest change -contributors: - - tomalaforge -sidebar: - order: 6 ---- - -Sometimes, changes may be added to the project. I'll attempt to make changes that won't break anything, but sometimes it's inevitable. - -Most of the time, you won't need to rebase your solution, but here is a guide to help you know how to do it. - -:::note -This guide is applicable to any Open Source Project. -::: - -## Steps to rebase your branch - -### Sync your repository - -First, you need to synchronize your fork to ensure it's up to date with the forked repository. - -You can achieve this by clicking the Sync fork button on the main page of your fork. - -![Sync project header](../../../assets/fork-sync.png) - -The image above shows that my branch is behind of the main branch by 8 commits, and I need to synchronize it to be up to date. - -![Sync project update modal](../../../assets/sync-fork-update.png) - -### Open a terminal - -Open any terminal of your choice, either the one from your favorite IDE or a standalone instance. - -### Git - -Follow the following commands to rebase your local branch: - -- git checkout main -- git pull -- git checkout [your branch] -- git rebase main -- Resolve Conflicts - -At this step, the rebase may stop because your local branch has conflicting files with the main branch. Correct them. After this is done: - -- git add . -- git rebase --continue - -If your branch doesn't have any conflicts, a success message will be shown. - -### Push your work back to the remote branch - -Finally, push your work back to GitHub: - -- git push -f diff --git a/docs/src/content/docs/guides/resolve-challenge.md b/docs/src/content/docs/guides/resolve-challenge.md deleted file mode 100644 index 0b30556a8..000000000 --- a/docs/src/content/docs/guides/resolve-challenge.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Resolve a Challenge -description: Guide to resolve a challenge -contributors: - - tomalaforge - - 1fbr - - gsgonzalez88 -sidebar: - order: 2 ---- - -In this guide, you will learn how to resolve a challenge and submit an answer to the main GitHub repository. - -## Introduction - -This repository is powered by [Nx](https://nx.dev/getting-started/intro). Nx is a monorepository that allows you to store multiple applications inside the same workspace. Each challenge is a separate application. If you open the `apps` directory, you will find multiple directories, each related to a specific challenge. Each directory represents a complete standalone `Nx` application. To run and start with one, open your terminal and run: - -```bash -npx nx serve -``` - -:::note -If you are unsure of your `APPLICATION_NAME`, open the README.md file. The `serve` command is written there, with a link to the challenge documentation. -::: - -:::note -If `nx` is installed globally on your device, you can skip using `npx`. - -To install `nx` globally, run - -```bash -npm i -g nx -``` - -::: - -## Create a Git Branch - -Before you start implementing your solution to resolve a challenge, create a git branch to commit your work. - -```bash -git checkout -b -``` - -## Resolve the Challenge - -Follow the instructions to resolve the challenge. - -## Commit and Push your Work - -The last step is to commit your work following the [Conventional Guidelines](https://www.conventionalcommits.org/en/v1.0.0/). - -Finally, push your work to the remote repository with the following command - -```bash - git push --set-upstream origin -``` - -:::tip[Don't remember it] -You don't have to remember the command precisely. You just need to remember `git push` and if it's the first time you are pushing this branch, `git` will provide you with the complete command. -::: - -## Submit your Work to the Main Repository - -Now, all your work is located insite your local instance of the Angular Challenges repository. - -The next step is to go to the main [Angular Challenges page](https://github.com/tomalaforge/angular-challenges) and create a new Pull Request. - -GitHub should display a notification header to help you create the pull request. - -If it's not the case, you either have done one of the previous steps incorrectly or you can go to the Pull Request tab and click the button New pull request. - -Once you have chosen the two branches to compare, you should arrive on the following page: - -![New pull request screen](../../../assets/new-pull-request.png) - -In the title section, start with Answer: followed by your challenge number. After that, you are free to add anything you would like. - -:::danger -This is very important. It lets others know which challenge you are attempting to resolve. -::: - -In the description section, you can add questions, troubles you encountered, or anything else you want to share. You can leave it empty if you don't have anything to say. - -You can now click on Create pull request. - -## Get a review - -To continue providing valuable feedback and reviews, support the project on Github: - -
      -
    • $5 per review
    • -
    • $25 for lifetime reviews
    • -
    • Create a challenge/Contribute for lifetime reviews
    • -
    - -:::note -You should still submit your PR to join the list of answered challenges. And you can still be reviewed by a community member. 🔥 - -Everyone is welcome to comment and read other PRs. 💪 -::: - -:::tip[OSS champion] -🔥 Once you have completed this tutorial, you are ready to contribute to any other public GitHub repository and submit a PR. It is as easy as that. 🔥 -::: diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx deleted file mode 100644 index e058db552..000000000 --- a/docs/src/content/docs/index.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Welcome to Angular Challenges -description: Get started by resolving these challenges and become a better Angular Front-End engineer. -template: splash -noCommentSection: true -hero: - tagline: Start now and become an Angular Expert! - image: - file: ../../assets/angular-challenge.webp - actions: - - text: Get Started - link: /guides/getting-started/ - icon: right-arrow - variant: primary - - text: Go to the latest Challenge - link: /challenges/angular/60-async-redirect/ - icon: rocket - - text: Give a star - link: https://github.com/tomalaforge/angular-challenges - icon: github - variant: secondary ---- - -import { Card, CardGrid } from '@astrojs/starlight/components'; -import MyIcon from '../../components/MyIcon.astro'; - -import SubscriptionForm from '../../components/SubscriptionForm.astro'; - - - - This repository gathers 60 Challenges related to Angular, Nx, RxJS, Ngrx and Typescript. - These challenges resolve around real-life issues or specific features to elevate your skills. - - - - - - - - One of the goals of this repository is to lower the barrier to entry - for Open Source Software (OSS). By engaging with these challenges, you will - learn how to start contributing to any other open-source project. - - - - Learning and practicing a new framework is always challenging. This set of   - challenges provide real-world use cases to apply what you've been learning. - Anyone can comment or offer assistance. - - Learning alone is great, but learning alongside others will get you further. - - - - - Do you have an issue, an interesting bug, or an idea? Don't hesitate;{' '} - create your own challenges without wasting any time. - - - - By completing these challenges, you'll be ready for any technical questions - that may come up during a frontend job interview. - - - - This project is free and aims to remain so for as long as possible. However, everything is accomplished during my free time, including creating challenges and reviewing pull requests (PRs). Sponsorship can support me and contribute to the growth of the project. - - - ---- - - - - diff --git a/docs/src/content/docs/leaderboard/answers.mdx b/docs/src/content/docs/leaderboard/answers.mdx deleted file mode 100644 index 03a1f2a69..000000000 --- a/docs/src/content/docs/leaderboard/answers.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Challenges answered -description: leaderboard showing the number of challenges answered. -noCommentSection: true -prev: false -next: false ---- - -import LeaderboardAnswer from '../../../components/leaderboard/LeaderboardAnswer.svelte'; - -Join the list and start your Angular Challenges journey by reading the [Getting Started](/guides/getting-started) guide. - - diff --git a/docs/src/content/docs/leaderboard/challenges.mdx b/docs/src/content/docs/leaderboard/challenges.mdx deleted file mode 100644 index f5db034ba..000000000 --- a/docs/src/content/docs/leaderboard/challenges.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Number of Challenges Created -description: leaderboard showing the number of challenges created. -noCommentSection: true -prev: false -next: false ---- - -import LeaderboardChallenge from '../../../components/leaderboard/LeaderboardChallenge.svelte'; - -A challenge is missing, create your own one and get on the leaderboard! -Read the [Create Challenge](/guides/create-challenge) guide to learn how to create a challenge. - - diff --git a/docs/src/content/docs/leaderboard/commit.mdx b/docs/src/content/docs/leaderboard/commit.mdx deleted file mode 100644 index 1dcbbca6f..000000000 --- a/docs/src/content/docs/leaderboard/commit.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Number of contributions -description: leaderboard showing the number of contributions. -noCommentSection: true -prev: false -next: false ---- - -import LeaderboardCommit from '../../../components/leaderboard/LeaderboardCommit.svelte'; - -You want to improve the project, fix a typo, add some documentation to one challenges, or translate a page? This leaderboard shows the number of contributions per user. -This repository is open source and you can contribute to it. Read the [contribution](/guides/contribute) guide to get started. - - diff --git a/docs/src/content/docs/pt/challenges/angular/1-projection.md b/docs/src/content/docs/pt/challenges/angular/1-projection.md deleted file mode 100644 index 2dd44690e..000000000 --- a/docs/src/content/docs/pt/challenges/angular/1-projection.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: 🟢 Projeção -description: Desafio 1 é sobre aprender a projetar elementos DOM através de componentes -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 1 -command: angular-projection -blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5 -videoLinks: - - link: https://www.youtube.com/watch?v=npyEyUZxoIw&ab_channel=ArthurLannelucq - alt: Projection video by Arthur Lannelucq - flag: FR - - link: https://www.youtube.com/watch?v=yNrfvu7vTa4 - alt: Projection video by Amos Lucian Isaila - flag: ES -sidebar: - order: 1 ---- - -## Informação - -Em Angular, projeção de conteúdo é uma técnica robusta para criar componente altamente personalizados. Usar e entender os conceitos do ng-content e ngTemplateOutlet pode melhorar significativamente sua habilidade na criação de componentes compartilháveis. - -Você pode aprender tudo sobre ng-content [aqui](https://angular.dev/guide/components/content-projection), desde projeção simples até casos mais complexos. - -Para aprender sobre ngTemplateOutlet, você pode acessar a documentação [aqui](https://angular.dev/api/common/NgTemplateOutlet) junto a alguns exemplos básicos. - -Com essas duas ferramentas em mãos, você está pronto para realizar o desafio. - -## Declaração - -Você começará com uma aplicação totalmente funcional que inclui um dashboard, que possui um cartão de professor e de estudante. O objetivo é implementar o cartão de cidade. - -Apesar da aplicação funcionar, a experiência do desenvolvedor (DX) está nem um pouco otimizada. Toda vez que você precisar implementar um novo cartão, você terá que modificar o `card.component.ts`. Em projetos reais, esse componente pode ser compartilhado entre várias aplicações. O objetivo do desafio é criar um `CardComponent` que possa ser personalizado sem nenhuma modificação. Uma vez criado o componente, você pode começar a implementar o `CityCardComponent` e assegurar que não mexerá no `CardComponent`. - -## Restrições - -- Você deve refatorar o `CardComponent` e `ListItemComponent`. -- A diretiva `NgFor` deve ser declarada e permanecer dentro do `CardComponent`. Você pode ficar instigado em querer mover ela para o `ParentCardComponent` como `TeacherCardComponent`. -- `CardComponent` não deve conter nenhum `NgIf` ou `NgSwitch`. -- CSS: tente evitar usar `::ng-deep`. Ache uma maneira melhor para lidar com o CSS. - -## Desafios Bônus - -- Tente trabalhar com a nova sintaxe nativa de controle de fluxo para laços e condicionais (documentação [aqui](https://angular.dev/guide/templates/control-flow)) -- Usa a signal API para gerenciar o estado de seus componentes (documentação [aqui](https://angular.dev/guide/signals)) -- Para referenciar o template, use uma diretiva ao invés de strings mágicas diff --git a/docs/src/content/docs/pt/challenges/angular/10-utility-wrapper-pipe.md b/docs/src/content/docs/pt/challenges/angular/10-utility-wrapper-pipe.md deleted file mode 100644 index 6b0135632..000000000 --- a/docs/src/content/docs/pt/challenges/angular/10-utility-wrapper-pipe.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: 🔴 Pipe Empacotador de Utilidade -description: Desafio 10 é sobre a criação de um pipe para empacotar utilidades -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 10 -command: angular-utility-wrapper-pipe -sidebar: - order: 202 ---- - -## Informação - -Este é o terceiro de três desafios `@Pipe()`, sendo o objetivo dominar **pipes** em Angular. - -Pipes são uma maneira bem poderosa de transformar dados em seu template. A diferença entre chamar uma função e um pipe é que pipes puros são memoizados. Por isso, eles não são recalculados em cada ciclo de detecção de mudanças se suas entradas não mudarem. - -Pipes são eficientes e otimizados para performance. Eles usam mecanismos de detecção de mudanças para apenas recalcular o valor se sua entrada mudar, afim de minimizar cálculos desnecessários e melhorar a performance de renderização. - -Por padrão um pipe é puro, por isso você deve ter cuidado que ao configurar `pipe` como falso deixar mais propenso a ser ineficiente, uma vez que aumenta o número de renderizações. - -:::note[Nota] -Um pipe **puro** é chamado apenas quando o valor muda.\ -Um pipe **impuro** é chamado em cada ciclo da mudança de deteccção. -::: - -Há alguns pipes pré-definidos bem úteis como DatePipe, UpperCasePipe e CurrencyPipe. Para aprender mais sobre pipes em Angular, dê uma olhada na documentação da API [aqui](https://angular.dev/guide/pipes). - -## Declaração - -Neste exercício, você quer acessar algumas funções úteis. Atualmente você não consegue acessá-las diretamente do seu template. O objetivo é criar um pipe específico para o arquivo de úteis, e você precisará passar o nome da função que deseja chamar e os argumentos necessários. - -## Restrições - -- Deve ser fortemente tipado diff --git a/docs/src/content/docs/pt/challenges/angular/13-highly-customizable-css.md b/docs/src/content/docs/pt/challenges/angular/13-highly-customizable-css.md deleted file mode 100644 index de0b96b45..000000000 --- a/docs/src/content/docs/pt/challenges/angular/13-highly-customizable-css.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: 🟠 CSS Altamente Personalizável -description: Desafio 13 é sobre criar estilos CSS altamente personalizáveis -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 13 -command: angular-highly-customizable-css -sidebar: - order: 104 ---- - -## Informação - -Estilização é um aspecto importante do trabalho diário de um desenvolvedor frontend, mas é muitas vezes subestimado. Em aplicações Angular, eu frequentemente vejo pessoas usando `@Input()` para personalizar o estilo de seus componentes. No entanto, `@Input()` deve ser usado apenas para lógica. Outras técnicas, como **variáveis CSS** e **host-context** devem ser usadas para estilização. - -Neste desafio, você precisará usar tanto variáveis CSS como `:host-context` para remover todos `@Input()` de seu código. - -## Restrições - -- Na sua submissão final, seu componente não deve conter nenhuma linha de código. Toda a estilização deve ser manipulada dentro do decorador _(ou arquivos css externos se preferir)_ diff --git a/docs/src/content/docs/pt/challenges/angular/16-master-dependency-injection.md b/docs/src/content/docs/pt/challenges/angular/16-master-dependency-injection.md deleted file mode 100644 index 008e8b280..000000000 --- a/docs/src/content/docs/pt/challenges/angular/16-master-dependency-injection.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: 🔴 Dominando Injeção de Dependência -description: Desafio 16 é sobre dominar como injeção de dependência funciona -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 16 -command: angular-master-dependency-injection -sidebar: - order: 203 ---- - -## Informação - -Para completar este desafio com sucesso, precisaremos ter um bom entendimento de como Injeção de Dependência funciona dentro do Angular. - -O objetivo é providenciar o `CurrencyService` no nível de linha, para que cada linha ilustre a moeda correta. Atualmente, `CurrencyService` é providenciado apenas em nível de tabela, o que resulta em um erro que mostrar a mesma moeda para cada linha, apesar de cada produto ter uma moeda diferente. - -Uma maneira de alcançar isso é adicionando um segundo argumento para o pipe, mas isso não é permitido para este desafio. - -## Declaração - -- Sua tarefa é mostrar a moeda correta para cada linha. - -## Restrições - -- Você não pode modificar o pipe. -- Você não pode envolver a linha dentro de um componente, uma vez que isso quebrará o layout. diff --git a/docs/src/content/docs/pt/challenges/angular/21-anchor-navigation.md b/docs/src/content/docs/pt/challenges/angular/21-anchor-navigation.md deleted file mode 100644 index 8ef34755e..000000000 --- a/docs/src/content/docs/pt/challenges/angular/21-anchor-navigation.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: 🟢 Navegação por Âncora -description: Desafio 21 é sobre navegação dentro de uma página por âncora -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 21 -command: angular-anchor-navigation -sidebar: - order: 4 ---- - -## Informação - -Você começa com uma aplicação que tem uma navegação básica e navegação por âncora no `HomeComponent`. No entanto, usando `href` recria o caminho toda vez e recarrega a página. - -## Declaração - -- Sua tarefa é refatorar essa aplicação para usar a ferramenta nativa de navegação para melhor ajuste com o framework Angular. Você pode explorar o roteador, mas é melhor permanecer dentro do template e usar a diretiva `RouterLink`. -- Para melhorar a experiência do usuário, adicionar rolagem suave. diff --git a/docs/src/content/docs/pt/challenges/angular/22-router-input.md b/docs/src/content/docs/pt/challenges/angular/22-router-input.md deleted file mode 100644 index ff24f96e3..000000000 --- a/docs/src/content/docs/pt/challenges/angular/22-router-input.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: 🟢 @RouterInput() -description: Desafio 22 é sobre o uso do decorador @Input para recuperar parâmetros do roteador. -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 22 -command: angular-router-input -blogLink: https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617 -sidebar: - order: 5 ---- - -## Informação - -Nesta aplicação, recuperamos 3 pedaços de informação, dentro do nosso `TestComponent`, providenciados pelo roteador: - -- Queremos recuperar `testId` encontrado nos parâmetros da URL. -- Queremos obter `user` localizado nos parâmetros query da URL. -- Queremos acessar `permission` atribuído no objeto `data` da rota. - -Na versão 15 ou mais recente do Angular, usamos `ActivatedRoute` para obter todas as informações e recebê-las através de observables para escutarmos mudanças na URL. - -Na versão 16, Angular introduziu um novo `Input` que pode ouvir os dados da rota. Você pode ler mais sobre [aqui](https://medium.com/ngconf/accessing-route-params-in-angular-1f8e12770617). - -## Declaração - -O objetivo deste exercício é refatorar o código para usar a nova estratégia `RouterInput`. diff --git a/docs/src/content/docs/pt/challenges/angular/31-module-to-standalone.md b/docs/src/content/docs/pt/challenges/angular/31-module-to-standalone.md deleted file mode 100644 index e4878fd38..000000000 --- a/docs/src/content/docs/pt/challenges/angular/31-module-to-standalone.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 🟢 Módulo para Standalone -description: Desafio 31 é sobre migrar uma aplicação baseada em módulos para uma aplicação baseada em componentes standalone. -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 31 -command: angular-module-to-standalone -sidebar: - order: 6 ---- - -## Informação - -Em v14, componentes standalone foram lançados e foram estabilizados na v15. Se você ainda não brincou com eles, nunca é tarde. Você pode tentar neste desafio. - -Além disso, o objetivo é ver como **Nx** e **componentes standalone** trabalham juntos, e experimentar o processo de desacoplagem de sua aplicação com a biblioteca Nx e componentes standalone. - -Finalmente, componentes standalone são bem simples de entender, mas **componentes de roteameanto/lazy-loaded** podem ser um pouco difíceis de compreender. Este desafio permitirá manipular componentes em diferentes níveis de aninhamento e trabalhar com rotas carregadas preguiçosamente (lazy-loaded). - -Após completar este desafio, componentes standalone não serão mais segredo para você. - -## Declaração - -O objetivo deste desafio é migrar sua aplicação de componentes baseados em módulos para componentes standalone. - -## Nota - -Você também pode testar o [Angular schematic](https://angular.dev/reference/migrations/standalone) para migrar NgModule para componentes Standalone. _(Como estamos usando nx, comece seu comando com nx ao invés de ng)_ diff --git a/docs/src/content/docs/pt/challenges/angular/32-change-detection-bug.md b/docs/src/content/docs/pt/challenges/angular/32-change-detection-bug.md deleted file mode 100644 index 534a250f6..000000000 --- a/docs/src/content/docs/pt/challenges/angular/32-change-detection-bug.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: 🟠 Bug na Detecção de Mudanças -description: Desafio 32 é sobre debuggar uma aplicação que tem um problema quando a detecção de mudanças é disparada -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 32 -command: angular-change-detection-bug -blogLink: https://medium.com/ngconf/function-calls-inside-template-are-dangerous-15f9822a6629 -sidebar: - order: 105 ---- - -:::note[Nota] -Este desafio é inspirado por um exemplo real que eu simplifiquei para criar um desafio legal. -::: - -## Informação - -Neste pequena aplicação, nós temos um menu de navegação que roteia nossa aplicação ou para `BarComponent` ou para `FooComponent`. No entanto, a aplicação não está carregando e os erros não são mostrado dentro do console. - -## Declaração - -O objetivo do desafio é debuggar a aplicação e fazer ela funcionar. - -## Dicas - -
    - Dica 1 - - Se você comentar `routerLinkActive="isSelected"` dentro de `NavigationComponent`, a aplicação carregará corretamente. -
    - -
    - Dica 2 - -Se você abrir o [código-fonte de `RouterLinkActive`](https://github.com/angular/angular/blob/main/packages/router/src/directives/router_link_active.ts) e ir na **linha 196**, verá que o Angular chama `this.cdr.markForCheck` dentro de uma microTask, na qual dispara um novo ciclo de detecção de mudanças (CD). Se você comentar essa linha, a aplicação carrega novamente, mas o bug não é dentro do framework Angular. 😅😯 - -
    diff --git a/docs/src/content/docs/pt/challenges/angular/39-injection-token.md b/docs/src/content/docs/pt/challenges/angular/39-injection-token.md deleted file mode 100644 index b6f4ae8e1..000000000 --- a/docs/src/content/docs/pt/challenges/angular/39-injection-token.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: 🟠 InjectionToken -description: Desafio 39 é sobre o poder da injeção de dependência -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 39 -command: angular-injection-token -videoLinks: - - link: https://www.youtube.com/watch?v=ntggdQycFyc - alt: Injection Token by Arthur Lannelucq - flag: FR -sidebar: - order: 118 ---- - -## Informação - -Nesta pequena aplicação, começamos com um `VideoComponent` contendo um temporizador de **1-segundo**. O time de desenvolvimento decidiu usar uma constante global para armazenar o valor do temporizador: `DEFAULT_TIMER`. No entanto, algumas semanas depois, o time de produto quer adicionar uma nova tela para chamadas de celular nomeada `PhoneComponent`, e nós queremos reutilizar o `TimerComponent`. Entretanto, o time de produto quer um temporizador de **2-segundos**. Como conseguiremos isso? - -## Declaração - -Atualmente, o temporizador ainda é de 1 segundo para o `PhoneComponent`. O objetivo deste desafio é mudar o valor do temporizador para 2 segundos para o `PhoneComponent`. - -## Restrições - -O uso de `@Input` é proibido. O exemplo é básico e usar `@Input` pode ser uma boa opção, mas em aplicações mais complexas, o componente que precisamos atualizar pode estar profundamente aninhado, fazendo o uso de `@Input` um design bem ruim. - -## Dicas - -
    - Dica 1 - -Ler esta [postagem de blog](https://itnext.io/stop-being-scared-of-injectiontokens-ab22f72f0fe9) pode ser de grande ajuda. - -
    diff --git a/docs/src/content/docs/pt/challenges/angular/4-typed-context-outlet.md b/docs/src/content/docs/pt/challenges/angular/4-typed-context-outlet.md deleted file mode 100644 index 63dff6a16..000000000 --- a/docs/src/content/docs/pt/challenges/angular/4-typed-context-outlet.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: 🔴 ContextOutlet Tipado -description: Desafio 4 é sobre tipagem forte em diretivas ngContextOutlet -author: thomas-laforge -contributors: - - tomalaforge - - tomer953 - - svenson95 - - jdegand -challengeNumber: 4 -command: angular-typed-context-outlet -blogLink: https://medium.com/@thomas.laforge/ngtemplateoutlet-type-checking-5d2dcb07a2c6 -sidebar: - order: 201 ---- - -## Informação - -Você pode melhorar a verificação de tipo do template para diretivas personalizadas adicionando guardas de propriedades de template na definição de sua diretiva. Angular oferece a função estática [`ngTemplateContextGuard`](https://angular.dev/guide/directives/structural-directives#improving-template-type-checking-for-custom-directives) para tipar fortemente diretivas estruturais. - -No entanto, o contexto do tipo do **NgTemplateOutlet** é **Object**. Mas com a a ajuda do guarda acima, podemos melhorar esse comportamento. - -## Declaração - -Neste exercício, queremos aprender como tipar fortemente nosso `ng-template` no `AppComponent`. - -Este exercício tem dois níveis de complexidade. - -### Nível 1: Interface Conhecida - -Atualmente nós temos o seguinte trecho de código. - -![Unkown Person](../../../../../assets/4/unknown-person.png 'Unkown Person') - -Como podemos ver, `name` é do tipo `any`. Queremos inferir o tipo correto usando a diretiva personalizada `PersonDirective`. - -### Level 2: Interface Genérica - -No momento presente, temos o seguinte trecho de código. - -![Unkown Student](../../../../../assets/4/unknown-student.png 'Unkown Student') - -Como podemos ver, `student` é do tipo `any`. Queremos inferir o tipo correto usando a diretiva personalizada `ListDirective`. - -Mas nesta parte, queremos passar uma lista de **qualquer objeto** para `LPersonistComponent`. E também queremos que o tipo correto seja inferido. diff --git a/docs/src/content/docs/pt/challenges/angular/44-view-transition.md b/docs/src/content/docs/pt/challenges/angular/44-view-transition.md deleted file mode 100644 index b8b3e9bc5..000000000 --- a/docs/src/content/docs/pt/challenges/angular/44-view-transition.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: 🔴 Transição de View -description: Desafio 44 você aprenderá a nova API para animação de transição de view -author: thomas-laforge -contributors: - - kabrunko-dev - - svenson95 -challengeNumber: 44 -command: angular-view-transition -sidebar: - order: 208 ---- - -## Informação - -Este é o segundo de três desafios animation, sendo o objetivo dominar animations em Angular. - -A View Transition API é uma nova API que fornece um conjunto de funcionalidades, permitindo desenvolvedores controlarem e manipularem as transições e animações entre views dentro de uma aplicação. -Isso tem um papel importante na melhoria da experiência do usuário (UX), trazendo vida a aplicações com transições atraentes e cativantes afim de guiar usuários por diferentes páginas e seções da aplicação. - -O objetivo deste desafio é aprender a manipular todos os tipos de transições propostas pela API. - -Para usar a API, Angular tem uma função `withViewTransitions()` que deve ser injetada dentro da configurações do roteador. - -Eu recomendaria a leitura da [documentação Chrome](https://developer.chrome.com/docs/web-platform/view-transitions). Você aprenderá tudo o que é necessário para completar o desafio com sucesso. - -Aqui, no entanto, um pequeno resumo: -Primeiramente, cada elemento DOM tem dois estados; um `old` para quando o elemento está deixando a página, e um `new` para quando está entrando na página: - -```css -::view-transition-old(root) { -/ / animação -} - -::view-transition-new(root) { -/ / animação -} -``` - -Para apontar um elemento em específico, você deve adicionar o seletor `view-transition-name` em uma classe CSS no nó DOM, como ilustrado abaixo: - -```css -.specific-element { - view-transition-name: specific-element; -} -``` - -Isso permite criar uma animação para aquele elemento apenas. - -Por último, se um mesmo elemento está presente em ambas as views, você pode automatizar a transição atribuindo o mesmo **nome da transição**. - -:::danger[Importante] -Lembre-se, você pode ter apenas UM ÚNICO `view-transition-name` por página. -::: - -## Declaração - -O objetivo deste desafio é realizar a transição entre os estados mostrados no vídeo abaixo: - - - -Para o estado final mostrado no vídeo seguinte: - - - -Observe os pontos: - -- O cabeçalho desliza para dentro e para fora -- Cada elemento transiciona suavemente para sua nova localização - -### Nível 1 - -Foque apenas no primeiro thumbnail e crie uma transição agradável e transparente - -### Nível 2 - -Crie a mesma transição atraente para todos os thumbnails, mas sem duplicar o `view-transition-name`. Note que a página tem apenas 3 thumbnails; em um cenário real, você pode ter muito mais. - -### Nível 3 - -Mude para a localização Y correta quando navegando para frente e para trás entre as páginas. diff --git a/docs/src/content/docs/pt/challenges/angular/45-react-in-angular.md b/docs/src/content/docs/pt/challenges/angular/45-react-in-angular.md deleted file mode 100644 index a7fa38654..000000000 --- a/docs/src/content/docs/pt/challenges/angular/45-react-in-angular.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: 🔴 React em angular -description: Desafio 5 é sobre aprender como se beneficiar das várias bibliotecas em React -author: wandrille-guesdon -contributors: - - tomalaforge 45 -command: angular-react-in-angular -sidebar: - order: 209 ---- - -O objetivo deste desafio é usar um componente React dentro de uma aplicação Angular. - -Muitos componentes estão disponíveis em React, e pode ser interessante usar eles em uma aplicação Angular. O objetivo é criar um componente React e usar em uma aplicação Angular. - -## Informação - -Neste desafio temos uma simples aplicação e um componente React `ReactPost` em `app/react` para ilustrar um componente React de uma biblioteca. - -## Declaração - -- Sua tarefa é mostrar as postagens com o componente React `ReactPost`. -- Quando selecionar uma postagem, a postagem deve ser destacada. - -Para brincar com o componente React, você deve começar instalando as dependências do React. - -```bash -npm i --save react react-dom -npm i --save-dev @types/react @types/react-dom -``` - -## Restrições - -- Não transforme o componente React em um componente Angular. O componente React é bem simples e pode ser escrito facilmente em Angular. No entanto, o **objetivo é usar o componente React**. - -### Dica - -
    - Dica 1 - Configuração - Permita arquivos React no tsconfig.json - -``` -{ -... -"compilerOptions": { - ... - "jsx": "react" -}, -... -} -``` - -
    - -
    - Dica 2 - Initialização - Crie uma raiz react com `createRoot(...)` -
    - -
    - Dica 3 - Visualização - Para renderizar o componente, ele deve parecer com: - ``` - .render( - - ... - - ) - ``` - -
    - -
    - Dica 4 - Design - Não esqueça de permitir o arquivo react no Tailwind. -
    diff --git a/docs/src/content/docs/pt/challenges/angular/46-simple-animations.md b/docs/src/content/docs/pt/challenges/angular/46-simple-animations.md deleted file mode 100644 index 2ef7e1760..000000000 --- a/docs/src/content/docs/pt/challenges/angular/46-simple-animations.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: 🟢 Animações Simples -description: Desafio 46 é sobre aprender a API de animação integrada do Angular -author: sven-brodny -contributors: - - svenson95 -challengeNumber: 46 -command: angular-simple-animations -sidebar: - order: 17 ---- - -## Informação - -Este é o primeiro de dois desafios de animação, o objetivo desta série é dominar animações no Angular. - -Animações bem desenhadas pode fazer sua aplicação mais divertida e direta para usar, mas elas não são apenas comésticas. Animações pode melhorar sua aplicação e a experiência do usuário de várias maneiras: - -- Sem animações, transições de página web podem parecer abruptas e desagradáveis. -- Movimento aumenta bastante a experiência do usuário, uma vez que animações dão a usuários a change de detectar as respostas da aplicação para suas ações. -- Boas animações intuitivamente chama a atenção do usuário para onde é necessário. - -Eu recomendaria você ler a [documentação oficial](https://angular.dev/guide/animations) Você aprenderá tudo o que é necessário para completar o desafio com sucesso. - -Caso contrário, olhe este [exemplo funcional](https://svenson95.github.io/ng-xmp-animations/) e o [repositório git](https://github.com/svenson95/ng-xmp-animations) para se inspirar. - -## Declaração - -O objetivo deste desafio é adicionar animações, elas devem executar quando o usuário acessa a página ou a recarrega. - -## Restrições - -- Não use nenhum CSS e use a API integrada do Angular `@angular/animations`. -- Não dispare as animações com um botão como nos exemplos, mas quando o usuário entrar ou recarregar a página. - -### Nível 1 - -Adicionar uma animação de movimento e fading para os parágrados no lado esquerdo. - - - -### Nível 2 - -Adicionar uma animação cambaleante para a lista no lado direito. - - - - - - - - diff --git a/docs/src/content/docs/pt/challenges/angular/5-crud-application.md b/docs/src/content/docs/pt/challenges/angular/5-crud-application.md deleted file mode 100644 index 3c6a04fda..000000000 --- a/docs/src/content/docs/pt/challenges/angular/5-crud-application.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: 🟢 Aplicação Crud -description: Desafio 5 é sobre refatorar uma aplicação crud is about refactoring a crud application -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 5 -command: angular-crud-application -sidebar: - order: 2 ---- - -## Informação - -Comunicar e ter um estado global/local em sincronia com seu backend é o coração de qualquer aplicação. Você necessitará dominar as seguintes melhores práticas para construir aplicações Angular fortes e confiáveis. - -## Declaração - -Neste exercício, você tem uma pequena aplicação CRUD, que tem uma lista de TODOS, atualiza e exclui alguns todos. - -Atualmente temos um exemplo funcional, mas cheio de más práticas. - -### Passo 1: refatorar com melhores práticas - -O que você precisará: - -- Evite **any** como um tipo. Use Interface para aproveitar o sistema de tipos do Typescript para evitar erros -- Use um **serviço separado** para todas suas chamadas http e use um **Signal** para sua lista de todos -- Não **mute** em seus dados - -```typescript -// Evite isto -this.todos[todoUpdated.id - 1] = todoUpdated; - -// Prefira algo assim, mas precisa melhorar, porque queremos manter a mesma ordem. -this.todos = [...this.todos.filter((t) => t.id !== todoUpdated.id), todoUpdated]; -``` - -### Passo 2: Melhore - -- Adicione um botão **Deletar**: _Documentação de API falsa_ -- Lide com **erros** corretamente. _(Globalmente)_ -- Adicione um indicador de **carregamento** global. _Você pode usar MatProgressSpinnerModule_ - -### Passo 3: Manutenibilidade!! adicione alguns testes - -- Adicione 2/3 testes - -### Step 4: Incrível!!! domine seu estado. - -- Use o **componente store do ngrx**, **ngrx/store**, **rxAngular**, **tanstack-query** ou **ngrx/signal-store** como estado local de seu componente. -- Tenha um indicador de carregamento/erro **localizado**, e.g. apenas no Todo sendo processado e **desabilite** todos os botões do Todo processado. _(Dica: você precisará criar um ItemComponent)_ diff --git a/docs/src/content/docs/pt/challenges/angular/6-structural-directive.md b/docs/src/content/docs/pt/challenges/angular/6-structural-directive.md deleted file mode 100644 index f8607b06d..000000000 --- a/docs/src/content/docs/pt/challenges/angular/6-structural-directive.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: 🟠 Diretiva Estrutural -description: Desafio 6 é sobre criar uma diretiva estrutural para manipular permissões -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 6 -command: angular-structural-directive -blogLink: https://medium.com/@thomas.laforge/create-a-custom-structural-directive-to-manage-permissions-like-a-pro-11a1acad30ad -sidebar: - order: 102 ---- - -## Informação - -Diretiva estrutural é um conceito importante que você necessita dominar para melhorar suas habilidades e conhecimentos angular. Isso será a primeira parte deste desafio. - -Guarda é também muito importante uma vez que você sempre precisará em cada aplicação que construir. - -## Declaração - -Em LoginComponent, você encontrará 6 botões correspondentes para 6 diferentes funções de usuário. - -:::note[Nota] -Deixaram-se os nomes das funções em inglês. -::: - -- Admin (Administrador) -- Manager (Gerente) -- Reader (Leitor) -- Writer (Escritor) -- Reader and Writer (Leitor e Escritor) -- Client (Cliente) -- Everyone (Todos) - -## Passo 1 - -Em `InformationComponent`, precisa mostrar a informação correta para cada função usando uma diretiva estrutural. - -### Restrições - -- sem `ngIf` ou `@if` dentro de `InformationComponent` -- importart a store dentro de `InformationComponent` não é permitido. - -Você deve terminar com algo semelhante com o código abaixo: - -```html -
    Info for Role1
    -``` - -```html -
    Info for Role1 and Role2
    -``` - -```html -
    Info Only for superadmin
    -``` - -## Passo 2 - -Em `Routes.ts`, você deve rotear todos os usuários para o `DashboardComponent` correto usando a guarda `CanMatch`. diff --git a/docs/src/content/docs/pt/challenges/angular/8-pure-pipe.md b/docs/src/content/docs/pt/challenges/angular/8-pure-pipe.md deleted file mode 100644 index 65dea73d8..000000000 --- a/docs/src/content/docs/pt/challenges/angular/8-pure-pipe.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: 🟢 Pipe Puro -description: Desafio 8 é sobre criar um pipe puro -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 8 -command: angular-pure-pipe -blogLink: https://medium.com/ngconf/deep-dive-into-angular-pipes-c040588cd15d -sidebar: - order: 3 ---- - -## Informação - -Este é o primeiro de três desafios `@Pipe()`, sendo o objetivo dominar **pipes** em Angular. - -Pipes são uma maneira bem poderosa de transformar dados em seu template. A diferença entre chamar uma função e um pipe é que pipes puros são memoizados. Por isso, eles não são recalculados em cada ciclo de detecção de mudanças se suas entradas não mudarem. - -Pipes são eficientes e otimizados para performance. Eles usam mecanismos de detecção de mudanças para apenas recalcular o valor se sua entrada mudar, afim de minimizar cálculos desnecessários e melhorar a performance de renderização. - -Por padrão um pipe é puro, por isso você deve ter cuidado que ao configurar `pipe` como falso deixar mais propenso a ser ineficiente, uma vez que aumenta o número de renderizações. - -:::note[Nota] -Um pipe **puro** é chamado apenas quando o valor muda.\ -Um pipe **impuro** é chamado em cada ciclo da mudança de deteccção. -::: - -Há alguns pipes pré-definidos bem úteis como DatePipe, UpperCasePipe e CurrencyPipe. Para aprender mais sobre pipes em Angular, dê uma olhada na documentação da API [aqui](https://angular.dev/guide/pipes). - -## Declaração - -Neste exercício, você precisa refatorar uma função de transformação dentro de um componente, o qual é chamado dentro de seu template. O objetivo é converter essa função em um pipe. - -## Restrições - -- Deve ser fortemente tipado diff --git a/docs/src/content/docs/pt/challenges/angular/9-wrap-function-pipe.md b/docs/src/content/docs/pt/challenges/angular/9-wrap-function-pipe.md deleted file mode 100644 index c72b7b463..000000000 --- a/docs/src/content/docs/pt/challenges/angular/9-wrap-function-pipe.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: 🟠 Pipe Empacotador de Função -description: Challenge 9 is about creating a pipe to wrap component fonctions -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 9 -command: angular-wrap-function-pipe -blogLink: https://medium.com/ngconf/boost-your-apps-performance-by-wrapping-your-functions-inside-a-pipe-7e889a901d1d -sidebar: - order: 103 ---- - -## Informação - -Este é o segundo de três desafios `@Pipe()`, sendo o objetivo dominar **pipes** em Angular. - -Pipes são uma maneira bem poderosa de transformar dados em seu template. A diferença entre chamar uma função e um pipe é que pipes puros são memoizados. Por isso, eles não são recalculados em cada ciclo de detecção de mudanças se suas entradas não mudarem. - -Pipes são eficientes e otimizados para performance. Eles usam mecanismos de detecção de mudanças para apenas recalcular o valor se sua entrada mudar, afim de minimizar cálculos desnecessários e melhorar a performance de renderização. - -Por padrão um pipe é puro, por isso você deve ter cuidado que ao configurar `pipe` como falso deixar mais propenso a ser ineficiente, uma vez que aumenta o número de renderizações. - -:::note[Nota] -Um pipe **puro** é chamado apenas quando o valor muda.\ -Um pipe **impuro** é chamado em cada ciclo da mudança de deteccção. -::: - -Há alguns pipes pré-definidos bem úteis como DatePipe, UpperCasePipe e CurrencyPipe. Para aprender mais sobre pipes em Angular, dê uma olhada na documentação da API [aqui](https://angular.dev/guide/pipes). - -## Declaração - -Neste exercício, você está chamando várias funções dentro de seu template. Você pode criar um pipe específico para cada uma das funções, mas isso dará muito trabalho. O objetivo é criar um pipe `wrapFn` que empacote sua função callback através do pipe. Sua função DEVE permanecer dentro do seu componentes. **`WrapFn` deve ser reutilizável**. - -## Restrições - -- Deve ser fortemente tipado diff --git a/docs/src/content/docs/pt/challenges/forms/41-control-value-accessor.md b/docs/src/content/docs/pt/challenges/forms/41-control-value-accessor.md deleted file mode 100644 index cad37f205..000000000 --- a/docs/src/content/docs/pt/challenges/forms/41-control-value-accessor.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: 🟠 Control Value Accessor -description: Desafio 41 é sobre criar um controle personalizado de formulário que implemente a interface Control Value Accessor. -author: stanislav-gavrilov -contributors: - - kabrunko-dev -challengeNumber: 41 -command: forms-control-value-accessor -sidebar: - order: 1 ---- - -## Informação - -Neste desafio, o objetivo é criar um campo personalizado de formulário que use a Form API do Angular `ControlValueAccessor`. Você pode achar a documentação [aqui](https://angular.dev/api/forms/ControlValueAccessor). A interface é crucial para criar controles personalizados de formulário que interaja de forma transparente com a API dos formulários do Angular. - -## Declaração - -O objetivo principal é usar controle no `feedbackForm` para eliminar a necessidade de uso do `@Output` afim de recuperar o valor e injetar ele no `FormGroup`. -Além disso, você é obrigado a integrar validação para o novo controle afim de assegurar que os dados de avaliação existam. (O botão de submissão do formulário deve ser desabilitado se o formulário é inválido). - -Atualmente, a avaliação é programada desta maneira: - -```html - -``` - -```ts -rating: string | null = null; - -onFormSubmit(): void { - this.feedBackSubmit.emit({ - ...this.feedbackForm.value, - rating: this.rating, // fora do FormGroup e sem validação - }); -} -``` - -O objetivo é incluir a avaliação no `FormGroup` - -```html - -``` diff --git a/docs/src/content/docs/pt/challenges/rxjs/38-rxjs-catch-error.md b/docs/src/content/docs/pt/challenges/rxjs/38-rxjs-catch-error.md deleted file mode 100644 index 8d9d6fc4c..000000000 --- a/docs/src/content/docs/pt/challenges/rxjs/38-rxjs-catch-error.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: 🟢 catchError -description: Desafio 38 é sobre aprender conclusão de observable -author: devesh-chaudhari -command: rxjs-catch-error -contributors: - - kabrunko-dev -challengeNumber: 38 -sidebar: - order: 14 ---- - -## Informação - -### Como usar a aplicação - -Nossa aplicação possui um formulário com um input textual e um botão "Fetch". Ao clicar o botão, dados são requeridos de uma [API gratuita](https://jsonplaceholder.typicode.com/). - -Os valores aceitos para requisições de sucesso estão limitados em: posts, comments, albums, photos, todos, and users. Qualquer outro valor, resultará em erro na requisição. - -### Bug - -Um bug foi identificado na nossa aplicação. Usuários conseguem apenas recuperar dados até uma requisição fracassar. Quando uma requisição retorna com erro, os usuários não conseguem mais enviar outras requisições. - -### Aprendizados - -Esta aplicação providencia uma oportunidade de entender onde colocar o operador [`catchError`](https://rxjs.dev/api/operators/catchError) corretamente. Se colocado de forma incorreta, a inscrição será completada, impedindo usuários de enviar mais requisições. O objetivo é preservar a inscrição através do manuseio dos erro nos observables internos de forma apropriada. - -## Declaração - -O objetivo é usar o operator catchError para lidar com o gerenciamento de erro dentro do seu fluxo de dados Rxjs. - -## Restrições - -Usuários devem ser aptos para logar o valor/erro cada vez que clicam o botão "Fetch". diff --git a/docs/src/content/docs/pt/challenges/signal/30-interop-rxjs-signal.md b/docs/src/content/docs/pt/challenges/signal/30-interop-rxjs-signal.md deleted file mode 100644 index b70f54d17..000000000 --- a/docs/src/content/docs/pt/challenges/signal/30-interop-rxjs-signal.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: 🔴 Interoperabilidade Rxjs/Signal -description: Desafio 30 é sobre aprender como misturar signal com Rxjs -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 30 -command: signal-interop-rxjs-signal -sidebar: - order: 204 ---- - -## Informação - -Neste desafio, temos uma pequena aplicação reativa que usa **RxJs** e **NgRx/Component-Store**. - -O objetivo deste desafio é usar a nova **API Signal** introduzida no Angular v16. No entanto, não devemos converter tudo. Certas parte do código são mais adequadas com RxJS do que Signal. É sua decisão determinar o limite e observar como **Signal e RXJS coexistem**, além de como a interoperabilidade é feita no Angular. - -## Nota - -- Você pode usar qualquer biblioteca de terceiros se quiser, como **ngrx/signal-store**, **tanstack-query** ou **rxAngular**. diff --git a/docs/src/content/docs/pt/challenges/signal/43-signal-input.md b/docs/src/content/docs/pt/challenges/signal/43-signal-input.md deleted file mode 100644 index 810175b34..000000000 --- a/docs/src/content/docs/pt/challenges/signal/43-signal-input.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: 🟢 Signal Input -description: Desafio 43 é sobre como usar signal inputs -author: thomas-laforge -contributors: - - kabrunko-dev -challengeNumber: 43 -command: signal-signal-input -sidebar: - order: 16 ---- - -## Informação - -Finalmente, o dia chegou quando o time Angular introduziu um input reativo. Essa funcionalidade bastante requisitada é esperada há anos. A versão 17.1 introduz `SignalInput`. Ao invés de utilizar o velho conhecido decorador `@Input`, agora você tem uma função que retorna um signal. - -```ts -// jeito antigo -@Input() age?: number; - -// novo jeito -age = input() -``` - -Se você quiser inputs obrigatórios - -```ts -// jeito antigo -@Input({required: true}) age!: number; - -// novo jeito -age = input.required() -``` - -Se você queria obter um signal de um input, você tinha que usar um setter para configurar seu signal a partir de um input. - -```ts -// jeito antigo -age = signal(0) -@Input({alias: 'age'}) set _age(age: number){ - this.age.set(age) -}; - -// novo jeito -age = input() -``` - -## Declaração - -Nesta pequena aplicação, o objetivo é refatorar o `UserComponent` para utilizar `SignalInput`. - -- Você tem inputs obrigatórios e opcionais. -- Você pode usar a função `transform` para o input `age` e converter a propriedade diretamente para um número. diff --git a/docs/src/content/docs/pt/guides/checkout-answer.md b/docs/src/content/docs/pt/guides/checkout-answer.md deleted file mode 100644 index 309f413b7..000000000 --- a/docs/src/content/docs/pt/guides/checkout-answer.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Verifique a resposta dos outros -description: Guia para verificar a resposta de outra pessoa -contributors: - - kabrunko-dev -sidebar: - order: 3 ---- - -Todas as respostas do Desafios Angular são apresentadas na forma de Pull Request (PR). Para ver e seguir elas, navegue pela página **Files Changes** no GitHub. Entretanto, entender e seguir esse processo pode não ser direto se você não estiver familiarizado com a interface. Muitas vezes, você pode preferir verificar a branch e revisar a solução na sua IDE de preferência. - -Este guia foi criado para ajudar você a conseguir isso. - -## Confire PR de outra pessoa localmente - -### Sincronize seu repositório - -Primeiro, você precisa sincronizar seu fork para garantir que ele está atualizado com o repositório bifurcado. - -Isso pode ser feito clicando no botão Sync fork na página principal de seu fork. - -![Sync project header](../../../../assets/fork-sync.png) - -A imagem acima mostra que minha branch está atrás da branch principal por 8 commits, e será necessário sincronizá-la para deixar ela atualizada. - -![Sync project update modal](../../../../assets/sync-fork-update.png) - -### Confira localmente - -Vá até o PR que desejar conferir localmente e pegue seu ID. Você o achará no título do PR (como mostrado abaixo). - -![PR header](../../../../assets/PR-header.png) - -Depois, abra um terminal dentro do diretório de seu projeto e execute o seguinte comando: - -```bash -gh pr checkout -``` - -Se você não lembrar o comando, clique no butão <> Code no lado direito do cabeçalho e você poderá copiar/colar o comando. - -![PR code modal](../../../../assets/PR-code-btn-modal.png) - -:::note[Nota] -Se o comando não funcionar ou fracassar, a CLI do GitHub vai guiar você durante o processo. -::: - -🔥 Agora você pode navegar nas soluções localmente e rodá-las para testar. 🔥 - - diff --git a/docs/src/content/docs/pt/guides/contribute.md b/docs/src/content/docs/pt/guides/contribute.md deleted file mode 100644 index 729f7c5db..000000000 --- a/docs/src/content/docs/pt/guides/contribute.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Contribua -description: Guia para contribuir -contributors: - - kabrunko-dev -sidebar: - order: 4 ---- - -Você pode contribuir para este repositório das seguintes maneiras: - -🔥 Criar um novo desafio seguindo as instruções [aqui](/pt/guides/create-challenge). - -🔥 Responder desafios e submeter sua resposta (guia [aqui](/pt/guides/resolve-challenge)). - -🔥 Comentar as soluções de outras pessoas dando feedback construtivo e solidário. - -🔥 Corrigindo erros de digitação (typos) ou erros de inglês na documentação. - -🔥 Enviar um problema (issue) para sugerir novas ideias de desafios ou reportar um bug. - -🔥 Patrocinar o projeto [aqui](https://github.com/sponsors/tomalaforge). diff --git a/docs/src/content/docs/pt/guides/create-challenge.md b/docs/src/content/docs/pt/guides/create-challenge.md deleted file mode 100644 index d7c39db66..000000000 --- a/docs/src/content/docs/pt/guides/create-challenge.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Crie seu próprio desafio -description: Guia para criar seu próprio desafio -contributors: - - kabrunko-dev -sidebar: - order: 5 ---- - -Você tem uma ideia que gostaria de compartilhar, um bug interessante que você está batendo a cabeça em um de seus projetos pessoais ou um truque no Angular que você descobriu. Todas essas possibilidades são um bom ponto de partida para criar um desafio e compartilhar a solução com as outras pessoas. - -Mas como você pode criar esses desafios? - -## Código Boilerplate - -Para simplificar o processo, criei um gerador Nx que configurará todo código boilerplate para você começar mais rápido. A maneira mais fácil de rodar o código, é usando o console Nx: vá para Nx Console > generate > @angular-challenges/cli - challenge - -### Parâmetros - -#### parâmetros obrigatórios - -- title: O título que você deseja dar para seu desafio. - :::note[Nota] - O título deve ter no máximo 25 caracteres. - ::: - -- challengeDifficulty: A dificuldade que você acredita que o desafio tem. Têm três níveis de dificuldade: 🟢 fácil / 🟠 médio / 🔴 difícil -- name: nome da aplicação Nx. - :::note[Nota] - Deve ser escrito em **kebab-case**. - ::: -- docRepository: A categoria do seu desafio: Nx, Angular, Angular Performance, Rxjs, NgRx, Typescript. - -#### parâmetros opcionais - -- directory: Se você quiser que sua aplicação esteja localizada dentro de uma pasta específica de `apps`. -- addTest: Se você quer adicionar configuração de testes. - -### O que é criado - -- O gerador criará todos os arquivos necessários para ter uma nova aplicação funcional. Todos esses arquivos serão criado dentro de `apps/${directory}/${name}` -- Um arquivo Markdown com uma configuração mínima será criado dentro de `docs/src/content/docs/challenges/${docRepository}` - -## Criação do Desafio - -A única coisa que falta é criar seu desafio. 🚀 - -:::danger[Importante] -Não esqueça de atualizar a documentação para introduzir seu desafio e providenciar suas instruções. -::: - -É sua vez de agir!!! 💪 - -## Submissão da Solução - -Depois de uma semana mais ou menos, não esqueça de providenciar sua solução para seu desafio. diff --git a/docs/src/content/docs/pt/guides/faq.md b/docs/src/content/docs/pt/guides/faq.md deleted file mode 100644 index af4505f40..000000000 --- a/docs/src/content/docs/pt/guides/faq.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: FAQ -description: Respostas para perguntas -contributors: - - kabrunko-dev -sidebar: - order: 7 ---- - -
    - Por que minha aplicação não roda ou por que eu encontro erros no meu terminal quando executo `nx serve`? - - Na maioria das vezes, o problema surge por que seu `node_modules` está desatualizado e você precisa atualizá-lo executando o comando `npm ci`. - -Se a instalação fracassar, você pode resolver deletando o diretório `node_modules` através do comando `rm -rf node_modules` ou `npx npkill`, e depois executar `npm ci` novamente. - -Se o problema persistir, por favor reporte ele [aqui](https://github.com/tomalaforge/angular-challenges/issues/new). - -
    diff --git a/docs/src/content/docs/pt/guides/getting-started.md b/docs/src/content/docs/pt/guides/getting-started.md deleted file mode 100644 index 57e501bd6..000000000 --- a/docs/src/content/docs/pt/guides/getting-started.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Começando -description: Um guia de como começar com Desafios Angular. -contributors: - - kabrunko-dev -sidebar: - order: 1 ---- - -Para começar com Desafios Angular, siga os seguintes passos: - -## Crie uma conta GitHub - -Se você desejar submeter uma resposta, será necessário ter uma conta pessoal no GitHub. Além disso, ter uma conta GitHub é sempre benéfico e é de graça. - -## Crie um fork do projeto GitHub - -Navegue para o [reposítório do Desafios Angular](https://github.com/tomalaforge/angular-challenges) e clique no botão Fork no cabeçalho. Isso criará uma cópia do repositório no seu GitHub pessoal. - -## Clone o repositório para sua máquina local - -Escolha um diretório/pasta no seu computador e clone o repositório. - -Abra um terminal, navegue até a pasta selecionada e digite o comando: - -```bash -git clone https://github.com/[SEU_NOME_GITHUB]/angular-challenges.git -``` - -:::note[Nota] -Você pode achar a URL para clonar clicando no botão <> Code na sua própria instância do repositório do Desafios Angular. - -![Header of GitHub workspace](../../../../assets/header-github.png) - -::: - -## Abra o projeto na sua IDE favorita - -Abra o projeto em uma IDE de sua escolha. - -## Instale todas dependências - -```bash -npm ci -``` - -## Escolha um desafio - -O seu projeto está pronto e funcional. O que falta agora é escolher um desafio 🚀 - -Cada desafio consiste em: - -- Nome: indica sobre o que o desafio é. -- Número: ordem de criação. O número não tem nenhum significado, mas ajuda na referência para a seção de Pull Request no GitHub. -- Indicador: ajuda a visualizar o grau de dificuldade. É totalmente subjetivo 😅 - - 🟢 fácil - - 🟠 médio - - 🔴 difícil diff --git a/docs/src/content/docs/pt/guides/rebase.md b/docs/src/content/docs/pt/guides/rebase.md deleted file mode 100644 index d4bf356d1..000000000 --- a/docs/src/content/docs/pt/guides/rebase.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Rebase sua branch -description: Guia para realizar rebase em uma branch e atualizá-la com as mudanças mais recentes -contributors: - - kabrunko-dev -sidebar: - order: 6 ---- - -De tempos em tempos, mudanças podem ser adicionadas no projeto. Eu tentarei fazer mudanças que não quebrem nada, mas algumas vezes é inevitável. - -Na maioria das vezes, você não precisará fazer rebase na sua solução, mas aqui está um guia para ajudar em como fazer isso. - -:::note[Nota] -Este guia é aplicável para qualquer Projeto de Código Aberto. -::: - -## Passos para fazer rebase na sua branch - -### Sincronize seu repositório - -Primeiro, você precisa sincronizar seu fork para garantir que está tudo atualizado com o repositório bifurcado. - -Você pode fazer isso clicando no botão Sync fork na página principal de seu fork. - -![Sync project header](../../../../assets/fork-sync.png) - -A imagem acima mostra que minha branch está atrás da branch principal por 8 commits e eu preciso sincronizar para atualizar ela com as mudanças mais recentes. - -![Sync project update modal](../../../../assets/sync-fork-update.png) - -### Abra um terminal - -Abra um terminal de sua escolha, pode ser tanto na sua IDE favorita ou uma instância independente. - -### Git - -Siga os seguintes comandos para realizar um rebase na sua branch local: - -- git checkout main -- git pull -- git checkout [sua branch] -- git rebase main -- Resolva Conflitos - -Neste passo, o rebase pode parar, porque sua branch local tem arquivos conflitantes com a branch principal. Corrija-os e depois disso feito: - -- git add . -- git rebase --continue - -Se sua branch não tem nenhum conflito, uma mensagem de sucesso será mostrada. - -### Faça um Push do seu trabalho para a branch remota - -Por último, faça um push do seu trabalho de volta para o GitHub: - -- git push -f diff --git a/docs/src/content/docs/pt/guides/resolve-challenge.md b/docs/src/content/docs/pt/guides/resolve-challenge.md deleted file mode 100644 index a36369183..000000000 --- a/docs/src/content/docs/pt/guides/resolve-challenge.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Resolva um desafio -description: Guia de como resolver um desafio -contributors: - - kabrunko-dev -sidebar: - order: 2 ---- - -Neste guia, você aprenderá como resolver um desafio e submeter uma resposta para o repositório principal no GitHub. - -## Introdução - -Este repositório é feito com [Nx](https://nx.dev/getting-started/intro). Nx é um monorepositório que permite armazenar múltiplas aplicações dentro de um mesmo espaço de trabalho. Cada desafio é uma aplicação separada. Se você abrir o diretório `apps`, achará várias pastas, sendo cada uma relacionada a um desafio específico. Cada diretório representa um aplicação `Nx` completa e independente. Para executar e começar uma aplicação, abra seu terminal e use: - -```bash -npx nx serve -``` - -:::note[Nota] -Se você não tem certeza quanto ao `NOME_APLICACAO`, abra o arquivo README.md do desafio. O comando `serve` está escrito nele com um link para a documentação do desafio. -::: - -:::note[Nota] -Se `nx` está instalado globalmente no seu dispositivo, você pode pular o uso de `npx`. - -Para instalar `nx` globalmente, execute: - -```bash -npm i -g nx -``` - -::: - -## Crie uma branch Git - -Antes de começar a implementação de sua solução para um desafio, crie uma branch para commitar seu trabalho. - -```bash -git checkout -b -``` - -## Resolva o Desafio - -Siga as instruções para resolver o desafio. - -## Commitar e fazer o _Push_ do seu trabalho - -O último passo é commitar seu trabalho seguindo o [Conventional Guidelines](https://www.conventionalcommits.org/en/v1.0.0/). - -Finalmente, faça um push do trabalho ao repositório remoto com o seguinte comando: - -```bash -git push --set-upstream origin -``` - -:::tip[Não precisa lembrar disso] -Você não precisa lembrar do comando. Você pode simplemente lembrar do `git push` e, se é a primeira vez que você faz um push na branch, `git` fornecerá para você o comando completo. -::: - -## Submeta seu Trabalho no Repositório Principal - -Agora, todo seu trabalho está localizado dentro de sua instância local do repositório do Desafios Angular. - -O próximo passo é ir para a [página principal do Desafios Angular](https://github.com/tomalaforge/angular-challenges) e criar um novo Pull Request. - -GitHub deve mostrar no cabeçalho uma notificação para ajudar a criação do pull request. - -Se não mostrar, você pode ter feito um dos passos anteriores errado ou você pode ir para a aba Pull Request e clicar no botão New pull request. - -Uma vez escolhidas as duas branches para comparar, você deve ser redirecionado para a seguinte página: - -![New pull request screen](../../../../assets/new-pull-request.png) - -Na seção do título, comece com Answer: seguido pelo número do desafio. Depois, você está livre para adicionar o que você desejar. - -:::danger[Importante] -Isso é muito importante. Isso deixará as outras pessoas saberem qual desafio você tentou resolver. -::: - -Na seção de descrição, você pode adicionar perguntas, problemas que encontrou ou qualquer coisa que queira compartilhar. Você pode deixar vazio caso não tenha nada para dizer. - -Agora você pode clicar em Create pull request. - -## Receber um Feedback - -Para continuar brindando comentarios y reseñas valiosas, ahora solo revisaré a aquellos que apoyen el proyecto en GitHub. - -
      -
    • $5 por reseña
    • -
    • $25 por reseñas de por vida
    • -
    • Crea un desafío/Contribuye para revisiones de por vida
    • -
    - -:::note[Nota] -Todo mundo é bem-vindo para comentar e ver outros PRs. -::: - -:::tip[Campeão OSS] -🔥 Ao terminar este tutorial, você está pronto para contribuir em qualquer outro repositório público do GitHub e submeter um PR. Simples assim. 🔥 -::: diff --git a/docs/src/content/docs/pt/index.mdx b/docs/src/content/docs/pt/index.mdx deleted file mode 100644 index 04c951475..000000000 --- a/docs/src/content/docs/pt/index.mdx +++ /dev/null @@ -1,97 +0,0 @@ ---- -title: Bem-vindos aos Desafios Angular -description: Comece resolvendo esses desafios e se torne um melhor desenvolvedor frontend Angular. -template: splash -noCommentSection: true -hero: - tagline: Comece agora e vire um especialista em Angular! - image: - file: ../../../assets/angular-challenge.webp - actions: - - text: Iniciar - link: /pt/guides/getting-started/ - icon: right-arrow - variant: primary - - text: Ir para o desafio mais recente - link: /pt/challenges/angular/60-async-redirect/ - icon: rocket - - text: Dar uma estrela - link: https://github.com/tomalaforge/angular-challenges - icon: github - variant: secondary ---- - -import { Card, CardGrid } from '@astrojs/starlight/components'; -import MyIcon from '../../../components/MyIcon.astro'; -import SubscriptionForm from '../../../components/SubscriptionForm.astro'; - - - - Este repositório possui 60 Desafios relacionados a Angular, Nx, RxJS, - Ngrx e Typescript. - Esses desafios são voltados para problemas reais ou funcionalidades específicas afim de - melhorar suas habilidades. - - -{' '} - - - - - -{' '} - - - Um dos objetivos desse repositório é diminuir a barreira de entrada - para o Software de Código Aberto (OSS). Ao realizar esses desafios, você - aprenderá como começar a contruibuir em qualquer outro Projeto de Código - Aberto. - - -{' '} - - - Aprender e praticar um novo framework é sempre desafiador. Este conjunto de - desafios possui casos de uso reais para aplicarmos o que aprendemos. Qualquer - um pode comentar e oferecer assistência. - - Aprender sozinho é legal, mas aprender junto com outras pessoas levará você - mais longe. - - - -{' '} - - - Tem algum problema, um bug interessante ou uma ideia? Não hesite; - crie seus próprios desafios sem perder tempo. - - -{' '} - - - Completar esses desafios vai preparar você para quaisquer desafios técnicos - que encontrar em uma entrevista para uma vaga frontend. - - - - Este projeto é livre e tem o objetivo de permanecer assim o máximo possível. No entanto, - tudo é feito durante meu tempo livre, incluindo a criação de desafios e revisão de pull requests (PRs). - Patrocinar pode me ajudar e contribuir para o crescimento do projeto. - - - ---- - - - - diff --git a/docs/src/content/docs/pt/leaderboard/answers.mdx b/docs/src/content/docs/pt/leaderboard/answers.mdx deleted file mode 100644 index c2302d3cf..000000000 --- a/docs/src/content/docs/pt/leaderboard/answers.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Desafios respondidos -description: tabela de classificação mostrando o número de desafios respondidos. -noCommentSection: true -prev: false -next: false ---- - -import LeaderboardAnswer from '../../../../components/leaderboard/LeaderboardAnswer.svelte'; - -Junte-se a lista e comece sua jornada Desafios Angular lendo o guia [Começando](/pt/guides/getting-started). - - diff --git a/docs/src/content/docs/pt/leaderboard/challenges.mdx b/docs/src/content/docs/pt/leaderboard/challenges.mdx deleted file mode 100644 index 2209af5e0..000000000 --- a/docs/src/content/docs/pt/leaderboard/challenges.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Número de Desafios Criados -description: tabela de classificação mostrando o número de desafios criados. -noCommentSection: true -prev: false -next: false ---- - -import LeaderboardChallenge from '../../../../components/leaderboard/LeaderboardChallenge.svelte'; - -Um desafio está faltando, crie seu próprio e entre para a tabela de classificação. -Leia o guia [Crie seu próprio desafio](/pt/guides/create-challenge) para aprender como criar um desafio. - - diff --git a/docs/src/content/docs/pt/leaderboard/commit.mdx b/docs/src/content/docs/pt/leaderboard/commit.mdx deleted file mode 100644 index 2a7695905..000000000 --- a/docs/src/content/docs/pt/leaderboard/commit.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Número de contribuições -description: tabela de classificação mostrando o número de contribuições. -noCommentSection: true -prev: false -next: false ---- - -import LeaderboardCommit from '../../../../components/leaderboard/LeaderboardCommit.svelte'; - -Quer melhorar o projeto, consertar um erro de digitação, adicionar alguma documentação para um desafio ou traduzir uma página? Esta tabela de classificação mostra o número de contribuição por usuário. -Este repositório é de código aberto e você pode contribuir. Leia o guia [Contribua](/pt/guides/contribute) para começar. - - diff --git a/docs/src/content/docs/ru/challenges/angular/4-typed-context-outlet.md b/docs/src/content/docs/ru/challenges/angular/4-typed-context-outlet.md deleted file mode 100644 index 7ff155e61..000000000 --- a/docs/src/content/docs/ru/challenges/angular/4-typed-context-outlet.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: 🔴 Типизация ContextOutlet -description: Испытание 4 про строгую типизацию ngContextOutlet директивы -author: thomas-laforge -contributors: - - stillst -challengeNumber: 4 -command: angular-typed-context-outlet -blogLink: https://medium.com/@thomas.laforge/ngtemplateoutlet-type-checking-5d2dcb07a2c6 -sidebar: - order: 201 ---- - -## Информация - -В Angular есть статическая функция [`ngTemplateContextGuard`](https://angular.dev/guide/directives/structural-directives#improving-template-type-checking-for-custom-directives) для строгой типизации структурных директив. - -Однако, контекстом **NgTemplateOutlet** является **Object**. Но с помощью вышеупомянутой гарда, мы можем улучшить это поведение. - -## Пояснение - -В этом испытании, мы хотим научиться строго типизировать ng-template в AppComponent. - -Это упражнение имеет два уровня сложности: - -### Уровень 1: Известный интерфейс - -Сейчас код выглядит следующим образом. - -![Unkown Person](../../../../../assets/4/unknown-person.png 'Unkown Person') - -Как мы видим, у переменной name тип "any". Мы хотим вывести правильный тип. - -### Уровень 2: Обобщённый интерфейс - -Сейчас код выглядит следующим образом. - -![Unkown Student](../../../../../assets/4/unknown-student.png 'Unkown Student') - -Как мы видим, у переменной student тип "any". Мы хотим вывести правильный тип. - -Но на этот раз, мы хотим передавать в `ListComponent` список из любых объектов. И мы все равно хотим, чтобы был выведен правильный тип. diff --git a/docs/src/content/docs/ru/challenges/performance/37-optimize-big-list.md b/docs/src/content/docs/ru/challenges/performance/37-optimize-big-list.md deleted file mode 100644 index 97f41b7f6..000000000 --- a/docs/src/content/docs/ru/challenges/performance/37-optimize-big-list.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: 🟠 Оптимизация больших списков -description: Задание 37 посвящено изучению того, как виртуализация оптимизирует рендеринг больших списков -author: thomas-laforge -contributors: - - Dinozavvvr -challengeNumber: 37 -command: performance-optimize-big-list -sidebar: - order: 117 ---- - -## Информация - -В этом приложении мы будем отображать список из 100 000 человек, нажав на кнопку **loadList**. Если вы откроете панель разработчика Chrome, нажав **F12**, перейдите на вкладку Source и разверните элемент, чтобы увидеть список, вы заметите, что все 100 000 элементов отображаются в DOM, хотя мы можем видеть только около 20 элементов в видимой области. Этот процесс занимает много времени, поэтому приложение очень медленно отображает список. - -Мы можем использовать Angular DevTool, чтобы профилировать наше приложение и понять, что происходит внутри нашего приложения. Я покажу вам, как это сделать в следующем видео. - - - -:::note -Если вы не знаете, как это сделать, сначала прочтите [введение в производительность](/challenges/performance/) и вернитесь после этого. -::: - -## Утверждение - -Цель этого испытания - реализовать лучшую альтернативу для отображения больших списков элементов. - -## Подсказки: - -
    - Подсказка 1 - -Если вы не уверены, с чего начать, я рекомендую прочитать [документацию Angular CDK о виртуализации](https://material.angular.io/cdk/scrolling/overview). - -
    diff --git a/docs/src/content/docs/ru/challenges/performance/40-web-worker.md b/docs/src/content/docs/ru/challenges/performance/40-web-worker.md deleted file mode 100644 index 3d595a137..000000000 --- a/docs/src/content/docs/ru/challenges/performance/40-web-worker.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: 🟠 Веб-воркеры -description: Испытание 40 о том как создать и использовать веб-воркер -author: thomas-laforge -contributors: - - stillst -challengeNumber: 40 -command: performance-web-worker -sidebar: - order: 119 ---- - -## Информация - -Это испытание было создано для [Angular Advent Calendar](https://angularchristmascalendar.com) 2023. - -Это простое приложение, где нужно нажать на кнопку **Discover**, чтобы увидеть сюрприз, скрывающийся за черным экраном. Тем не менее, взаимодействие с приложением оставляет желать лучшего. При нажатии на кнопку происходит зависание страницы, а затем, после краткой задержки, секрет раскрывается мгновенно и без какой-либо плавности в анимации. - -> Пояснение: Для того, чтобы вызвать зависание приложения, загрузчик использует функцию, выполняющую очень сложные вычисления. Хотя возможно было бы использовать обычный таймер, но это не суть данного испытания. - -Так как JavaScript работает в однопоточном режиме, выполнение ресурсоемких задач препятствует обновлению пользовательского интерфейса браузера и реагированию на клики мыши или другие действия. Задача этого испытания - разгрузить основной поток, перенеся сложные вычисления в отдельный поток. Для этой цели мы будем использовать веб-воркеры. Веб-воркеры способны запускать скрипты в фоне, не влияя на основной поток, что позволяет браузеру сохранять высокое качество пользовательского взаимодействия. - -В Angular использование этой технологии не так распространено, но внедрить её довольно легко. Есть схематик, который вы можете найти [здесь](https://angular.dev/ecosystem/web-workers) чтобы начать. - -## Пояснение - -Это испытание направлено на создание плавной анимации за счет перемещения функции, выполняющей сложные вычисления, в веб-воркер. - -Для начала, используя схематик, создайте веб-воркер и перенесите в него функцию, вызывающую проблемы. После этих шагов анимация должна стать плавной, а отображение процента выполнения — обновляться, тем самым значительно улучшив пользовательский опыт. - -:::note[Пояснение] -Поскольку мы находимся в рабочем пространстве Nx, просто замените команду `ng` на `nx` при запуске схематика. - -Если `nx` не установлен глобально на вашем компьютере, добавьте префикс `npx` к вашей команде. -::: diff --git a/docs/src/content/docs/ru/challenges/performance/index.mdx b/docs/src/content/docs/ru/challenges/performance/index.mdx deleted file mode 100644 index 53a7dc73d..000000000 --- a/docs/src/content/docs/ru/challenges/performance/index.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Производительность Angular-а -prev: false -next: false -contributors: - - Dinozavvvr -description: Узнайте, как использовать расширение Angular DevTools для Chrome. -noCommentSection: true -sidebar: - order: 1 ---- - -import { LinkCard } from '@astrojs/starlight/components'; - -В этой серии испытаний по производительности вы узнаете, как оптимизировать и улучшить производительность вашего приложения Angular. - -Прежде чем приступить к решению какого-либо испытания, я приглашаю вас скачать [расширение Angular DevTools для Chrome](https://chrome.google.com/webstore/detail/angular-devtools/ienfalfjdbdpebioblfackkekamfmbnh), если вы еще этого не сделали. - -Это расширение позволяет профилировать ваше приложение и обнаруживать проблемы производительности, что очень полезно для понимания мест, где могут возникать проблемы с производительностью. - -## Как его использовать - -При запуске приложения Angular вы можете проверить страницу, нажав F12, что откроет Инструменты разработчика Chrome. Затем перейдите на вкладку Angular. Оттуда вы можете выбрать вкладку Profiler, как показано ниже. - -![вкладка профилировщика](../../../../../assets/performance/profiler-tab.png 'Вкладка профилировщика') - -Теперь вы можете профилировать свое приложение, нажав кнопку записи. Вы можете играть с вашим приложением и видеть, когда срабатывает обнаружение изменений и какие компоненты перерисовываются. - -:::tip[Узнайте больше] -Вы можете узнать больше на [странице документации](https://angular.io/guide/devtools). -::: - -Теперь, когда вы знаете, как использовать Angular DevTool, вы можете выбрать испытание и решить его с использованием профилирования. - - - - - - diff --git a/docs/src/content/docs/ru/challenges/testing/17-router.md b/docs/src/content/docs/ru/challenges/testing/17-router.md deleted file mode 100644 index 118d52e29..000000000 --- a/docs/src/content/docs/ru/challenges/testing/17-router.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: 🟠 Роутер -description: Задача 17 посвящена тестрированию Роутера -author: thomas-laforge -contributors: - - Dinozavvvr -challengeNumber: 17 -command: testing-router -sidebar: - order: 108 ---- - -## Информация - -У нас есть функциональное приложение, которое позволяет просматривать доступные книги для выдачи в библиотеке. Если книга, которую вы ищете, доступна, вы будете перенаправлены на соответствующую книгу(и), в противном случае вы попадете на страницу ошибки. - -Файл с именем `app.component.spec.ts` позволит вам тестировать ваше приложение с использованием библиотеки Testing Library. Чтобы запустить наборы тестов, вы должны выполнить команду `npx nx test testing-router-outlet`. Вы также можете установить [Jest Runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner), чтобы выполнять тесты, щелкая на кнопку `Run` над каждым блоком `describe` или `it`. - -Для тестирования с использованием Cypress вы будете выполнять свои тесты внутри файла `app.component.cy.ts` и запускать команду `npx nx component-test testing-router-outlet` для выполнения наборов тестов. Вы можете добавить флаг `--watch`, чтобы выполнять ваши тесты в режиме наблюдения. - -# Задание - -Цель - протестировать несколько поведений приложения, описанных в каждом тестовом файле, с использованием библиотеки Testing Library и Cypress Component Testing. - -:::note -Я создал несколько блоков `it`, но вы можете добавить больше тестов, если хотите. -::: diff --git a/docs/src/content/docs/ru/challenges/testing/18-nested-components.md b/docs/src/content/docs/ru/challenges/testing/18-nested-components.md deleted file mode 100644 index 545837848..000000000 --- a/docs/src/content/docs/ru/challenges/testing/18-nested-components.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: 🟠 Вложенные компоненты -description: Задание 18 посвящено тестированию вложенных компонентов -author: thomas-laforge -contributors: - - Dinozavvvr -challengeNumber: 18 -command: testing-nested-components -sidebar: - order: 109 ---- - -## Информация - -У нас есть небольшое приложение, которое отправляет заголовок, введенный в поле ввода, на фейковый бэкэнд. -Если заголовок введен правильно, вы можете отправить запрос, в противном случае вы получите ошибку, и запрос не будет отправлен. -Приложение создано с использованием вложенных компонентов. `ChildComponent` - это контейнер, который включает в себя четыре компонента: `ResultComponent`, `ButtonComponent`, `InputComponent` и `ErrorComponent`. Однако, поскольку мы тестируем наш компонент как черный ящик, архитектура наших компонентов ничего не меняет. Вы можете создавать свои тесты, изменять структуру компонентов, и ваши тесты должны по-прежнему проходить. Вот цель интеграционных тестов. Никогда не тестируйте внутренние детали реализации!!!. - -Вы можете поиграть с ним, запустив: `npx nx serve testing-nested`. - -Файл с именем `child.component.spec.ts` позволит вам тестировать ваше приложение с использованием библиотеки Testing Library. Чтобы запустить наборы тестов, вы должны выполнить команду `npx nx test testing-nested`. Вы также можете установить [Jest Runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner), чтобы выполнять тесты, щелкая на кнопку `Run` над каждым блоком `describe` или `it`. - -Для тестирования с использованием Cypress вы будете выполнять свои тесты внутри файла `child.component.cy.ts` и запускать команду `npx nx component-test testing-nested` для выполнения наборов тестов. Вы можете добавить флаг `--watch`, чтобы выполнять ваши тесты в режиме наблюдения. - -# Задание - -Цель - протестировать несколько поведений приложения, описанных в каждом тестовом файле, с использованием библиотеки Testing Library и Cypress Component Testing. - -:::note -Я создал несколько блоков `it`, но вы можете добавить больше тестов, если хотите. -::: diff --git a/docs/src/content/docs/ru/challenges/testing/19-input-output.md b/docs/src/content/docs/ru/challenges/testing/19-input-output.md deleted file mode 100644 index 1d713cd0f..000000000 --- a/docs/src/content/docs/ru/challenges/testing/19-input-output.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 🟠 Ввод Вывод -description: Задача 19 посвящена тестированию Ввода и Вывода -author: thomas-laforge -contributors: - - Dinozavvvr -challengeNumber: 19 -command: testing-input-output -sidebar: - order: 110 ---- - -## Информация - -У нас есть небольшое приложение-счетчик, которое увеличивает или уменьшает число. `CounterComponent` принимает начальное значение в качестве `@Input` и отправляет результат счетчика как `@Output`, когда мы нажимаем на кнопку **Send**. Поскольку мы тестируем наш компонент как черный ящик, у нас есть доступ только к нашим входным данным и мы слушаем выходные значения. Не следует полагаться на внутренние детали реализации!!! - -Вы можете поиграть с ним, запустив: `npx nx serve testing-input-output`. - -Файл с именем `counter.component.spec.ts` позволит вам протестировать ваше приложение с использованием библиотеки Testing Library. Чтобы запустить наборы тестов, вы должны выполнить команду `npx nx test testing-input-output`. Вы также можете установить [Jest Runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner), чтобы выполнять тесты, щелкая на кнопку `Run` над каждым блоком `describe` или `it`. - -Для тестирования с использованием Cypress вы будете выполнять свои тесты внутри файла `child.component.cy.ts` и запускать команду `npx nx component-test testing-input-output` для выполнения наборов тестов. Вы можете добавить флаг `--watch`, чтобы выполнять ваши тесты в режиме наблюдения. - -# Задание - -Цель - протестировать несколько поведений приложения, описанных в каждом тестовом файле, с использованием библиотеки Testing Library и Cypress Component Testing. - -:::note -Я создал несколько блоков `it`, но вы можете добавить больше тестов, если хотите. -::: diff --git a/docs/src/content/docs/ru/challenges/testing/20-modal.md b/docs/src/content/docs/ru/challenges/testing/20-modal.md deleted file mode 100644 index aedd11362..000000000 --- a/docs/src/content/docs/ru/challenges/testing/20-modal.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: 🟠 Модальное окно -description: Задача 20 посвящена тестированию Модальных окн -author: thomas-laforge -contributors: - - Dinozavvvr -challengeNumber: 20 -command: testing-modal -sidebar: - order: 111 ---- - -## Информация - -В этом небольшом приложении у вас есть поле ввода, в котором вы должны ввести имя, и кнопка **Confirm** для отправки формы. -Если вы вводите имя, появится модальное окно подтверждения; в противном случае будет отображено модальное окно с ошибкой. -В модальном окне подтверждения, если пользователь нажимает кнопку **Confirm**, появится сообщение с подтверждением отправки формы. Если пользователь нажимает **Cancel**, будет отображено сообщение об ошибке. - -Цель этой задачи - протестировать модальные окна внутри вашего приложения. Для этого мы будем тестировать всё приложение, как это делает end-to-end тест. Это означает, что мы будем тестировать `AppComponent` как черный ящик и реагировать на события на странице. Не следует тестировать внутренние детали. Разница между e2e тестом и интеграционным тестом заключается в том, что мы будем подделывать все вызовы API. _(Все http-запросы фальсифицированы внутри этого приложения и отличаются от тех что присутствуют в реальном корпоративном приложении.)_ - -Вы можете поиграть с этим, запустив: `npx nx serve testing-modal`. - -Файл с именем `app.component.spec.ts` позволит вам тестировать ваше приложение с использованием библиотеки Testing Library. Чтобы запустить наборы тестов, вы должны выполнить команду `npx nx test testing-modal`. Вы также можете установить [Jest Runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner), чтобы выполнять тесты, щелкая на кнопку `Run` над каждым блоком `describe` или `it`. - -Для тестирования с использованием Cypress вы будете выполнять свои тесты внутри файла `app.component.cy.ts` и запускать команду `npx nx component-test testing-modal` для выполнения наборов тестов. Вы можете добавить флаг `--watch`, чтобы выполнять ваши тесты в режиме наблюдения. - -# Задание - -Цель - протестировать несколько поведений приложения, описанных в каждом тестовом файле, с использованием библиотеки Testing Library и Cypress Component Testing. - -:::note -Я создал несколько блоков `it`, но вы можете добавить больше тестов, если хотите. -::: diff --git a/docs/src/content/docs/ru/challenges/testing/23-harness.md b/docs/src/content/docs/ru/challenges/testing/23-harness.md deleted file mode 100644 index 185c87cf5..000000000 --- a/docs/src/content/docs/ru/challenges/testing/23-harness.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: 🟢 Harness -description: Задача 23 посвящена тестированию с использованием harness компонентов -author: thomas-laforge -contributors: - - webbomj -challengeNumber: 23 -command: testing-harness -sidebar: - order: 9 ---- - -## Информация - -Harness это класс, который позволяет тесту взаимодействовать с компонентом через поддерживаемый API. - -Цель этого задания - лучше понять CDK test harness API. В этом первоначальном задании мы будем использовать только встроенные harness Angular Material. - -Документация для harness компонентов CDK находится [здесь](https://material.angular.io/cdk/test-harnesses/overview#api-for-test-authors). -Документация для компонента Angular Material находится [здесь](https://material.angular.io/components/button/overview). - -## Пояснение - -Протестируйте функциональность `child.component.ts`, которая состоит из некоторых inputs & checkboxes, связанных с `mat-slider`. Реализуйте подготовленный набор тестов, но не стесняйтесь также включать дополнительные тесты. - -**Заметка:** Вы можете воспользоваться Testing Library, если хотите. diff --git a/docs/src/content/docs/ru/challenges/testing/24-harness-creation.md b/docs/src/content/docs/ru/challenges/testing/24-harness-creation.md deleted file mode 100644 index 130d57c51..000000000 --- a/docs/src/content/docs/ru/challenges/testing/24-harness-creation.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: 🟠 Создание harness класса -description: Задача 24 посвящено созданию компонента тестового стенда. -author: thomas-laforge -contributors: - - Dinozavvvr -challengeNumber: 24 -command: testing-harness-creation -sidebar: - order: 112 ---- - -## Информация - -Цель этой задачи - реализовать harness класс для `slider.component.ts`. Файл стенда, `slider.harness.ts`, уже создан. - -Необходимо реализовать следующее API: - -```ts - async clickPlus(): Promise ; - - async clickMinus(): Promise; - - async getValue(): Promise ; - - async getMinValue(): Promise; - - async disabled(): Promise; - - async setValue(value: number): Promise; -``` - -Кроме того, вы должны создать `HarnessPredicate` с предикатом по умолчанию и свойством `minValue`. - -```ts - static with( - this: ComponentHarnessConstructor, - options: SliderHarnessFilters = {} - ): HarnessPredicate; -``` - -Наконец, вам нужно создать набор тестов для `app.component`. Некоторые тесты по умолчанию уже написаны, но не стесняйтесь добавлять столько тестов, сколько вам нужно, и создавать столько методов, сколько вам потребуется. - -> Документация Angular Material доступна [здесь](https://material.angular.io/cdk/test-harnesses/overview). - -Удачи !!! 💪 diff --git a/docs/src/content/docs/ru/challenges/testing/28-checkbox.md b/docs/src/content/docs/ru/challenges/testing/28-checkbox.md deleted file mode 100644 index bf724504c..000000000 --- a/docs/src/content/docs/ru/challenges/testing/28-checkbox.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: 🟢 Checkbox -description: Задача 28 заключается в тестировании простого checkbox -author: thomas-laforge -contributors: - - webbomj -challengeNumber: 28 -command: testing-checkbox -sidebar: - order: 10 ---- - -## Информация - -Это приложение очень простое. Оно состоит из checkbox, который включает или отключает кнопку. Основная цель этого приложения - ознакомиться с API отладки библиотеки тестирования. Знание того, как отлаживать ваши тесты, является важным инструментом, который должен быть в вашем наборе инструментов. - -Вы можете найти документацию по отладке в Testing Library [здесь](https://testing-library.com/docs/dom-testing-library/api-debugging#screenlogtestingplaygroundurl). - -Основными функциями, которые необходимо запомнить, являются следующие: - -- `logRoles(myDOMElement)`: выводит все роли ARIA в дереве данного элемента DOM. Роли ARIA - это основные селекторы, к которым вам следует обратиться в первую очередь. -- `screen.debug()` или `screen.debug(myDOMElement)`: выводит DOM внутри консоли. -- `screen.logTestingPlaygroundURL()` или `screen.logTestingPlaygroundURL(myDOMElement)`: эта функция очень мощная. Она создаст игровую площадку для отображения всех элементов, и вы сможете взаимодействовать с ней, чтобы увидеть селекторы, которые вы должны выбрать для элемента DOM. - -## Пояснение - -Цель этого задания не в том, чтобы отправить ответ, но вы можете сделать это, если хотите. Это больше об изучении использования API отладки. Эти инструменты окажут большую помощь в предстоящих тестовых задачах. diff --git a/docs/src/content/docs/ru/challenges/testing/29-real-life-application.md b/docs/src/content/docs/ru/challenges/testing/29-real-life-application.md deleted file mode 100644 index 3953bb4c0..000000000 --- a/docs/src/content/docs/ru/challenges/testing/29-real-life-application.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: 🔴 Приложение из реальной жизни -description: Задача 29 посвящена тестированию приложения из реальной жизни -author: thomas-laforge -contributors: - - Dinozavvvr -challengeNumber: 29 -command: testing-real-life-application -sidebar: - order: 205 ---- - -## Информация - -Это приложение представляет собой большой вызов, потому что оно тесно напоминает приложение из реальной жизни, с которым вы можете столкнуться в своей повседневной деятельности в качестве разработчика Angular. Что делает его более сложным, так это необходимость обрабатывать асинхронные задачи и создавать соответствующие заглушки. - -Приложение - это типичное приложение для списка задач. Вы можете фильтровать заявки, создавать новые, назначать каждую заявку, закрывать другие и переходить к деталям каждой заявки. - -В этом вызове вы напишете тесты для `ListComponent`, который представляет глобальный вид, и `RowComponent`, который представляет конкретную заявку. Кроме того, вам нужно будет написать модульные тесты для `TicketStoreService`, используя библиотеку Testing Library. _Эта библиотека позволяет эффективно тестировать сервисы._ - -Особенно сложно будет обрабатывать асинхронные задачи. Важно не вводить явные ожидания(waits) в ваши тесты, так как это приведет к ненужным задержкам. Вместо этого лучше искать элемент, который должен появиться или исчезнуть из DOM. В этом случае тест будет естественным образом ожидать правильного периода времени, так как ожидания уже реализованы в обеих библиотеках. Воспользуйтесь встроенными функциональными возможностями для создания эффективных и надежных тестов. - -Вы можете поиграть с этим, запустив: `npx nx serve testing-real-life-application`. - -Чтобы запустить тесты Testing Library, вам нужно выполнить `npx nx test testing-real-life-application`. Вы также можете установить [Jest Runner](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner), чтобы выполнять тесты, нажимая на кнопку `Run` над каждым блоком `describe` или `it`. - -Для тестирования с помощью Cypress вы выполните свой тест внутри `child.component.cy.ts` и выполните `npx nx component-test testing-real-life-application`, чтобы запустить ваши тестовые наборы. Вы можете добавить флаг `--watch`, чтобы выполнять тесты в режиме наблюдения. - -# Задание - -Цель - протестировать множество поведений приложения, описанных в каждом тестовом файле, с использованием библиотеки Testing и Cypress Component Testing. - -:::note -Я создал несколько блоков `it`, но не стесняйтесь добавлять больше тестов, если хотите. -::: diff --git a/docs/src/content/docs/ru/challenges/testing/index.mdx b/docs/src/content/docs/ru/challenges/testing/index.mdx deleted file mode 100644 index 508c4b558..000000000 --- a/docs/src/content/docs/ru/challenges/testing/index.mdx +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Тестирование -prev: false -next: false -contributors: - - Dinozavvvr -description: Введение в задачи по тестированию. -noCommentSection: true -sidebar: - order: 1 ---- - -import { LinkCard } from '@astrojs/starlight/components'; - -Тестирование - это важный этап в создании масштабируемых, поддерживаемых и надежных приложений. -Тестирование никогда не должно быть упущено, даже в случае сжатых сроков или сильного давления со стороны команды продукта. -В наши дни существует множество замечательных инструментов, которые облегчают тестирование вашего кода и обеспечивают отличный опыт разработчика. - -В этой серии упражнений по тестированию мы изучим и освоим [Testing Library](https://testing-library.com/docs/) и [Cypress Component Testing](https://docs.cypress.io/guides/component-testing/angular/overview), которые упрощают манипуляции с DOM для тестирования любого компонента Angular. - -Преимущества использования Testing Library или Cypress Component Testing заключаются в том, что вы тестируете свой компонент как черный ящик. Вы будете взаимодействовать только с тем, что пользователь может делать на интерфейсе. Однако отличие от полноценных тестов заключается в том, что бэкэнд замокан, что делает тесты быстрее и более поддерживаемыми. -Цель состоит в том, чтобы мокать как можно меньше, чтобы тестировать ваш компонент на более высоком уровне, чем при модульном тестировании, что облегчит рефакторинг. -В реальном приложении интеграционные тесты - это тесты, которые вы будете писать больше всего. Изучение того, как их писать, сделает ваше приложение более надежным и поддерживаемым. - -Перед вами серия из 8 задач, которые вы можете решить в любом порядке. - - - - - - - - - - - - - - - - diff --git a/docs/src/content/docs/ru/guides/checkout-answer.md b/docs/src/content/docs/ru/guides/checkout-answer.md deleted file mode 100644 index e2cb8f46f..000000000 --- a/docs/src/content/docs/ru/guides/checkout-answer.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Изучайте чужие решения -description: Руководство по просмотру чужого ответа. -contributors: - - stillst - - 1fbr -sidebar: - order: 3 ---- - -Все ответы на испытания Angular представлены в виде Pull Request (PR). Чтобы их просмотреть и изучить, нужно перейти на страницу **Files Changes** на GitHub. Однако, если вы не знакомы с интерфейсом, процесс может быть не очевидным. Иногда посмотреть на решение в вашей любимой IDE может быть удобнее. - -Это руководство поможет вам с этим. - -## Проверьте чужой PR локально - -### Синхронизируйте свой репозиторий - -В начале вам нужно синхронизировать вашу копию репозитория, чтобы убедиться, что она находится в актуальном состоянии. - -Это можно сделать, нажав на кнопку **Sync fork** на главной странице репозитория. - -![Sync project header](../../../../assets/fork-sync.png) - -На изображении выше видно, что моя ветка отстает от основной ветки на 8 коммитов, и мне нужно синхронизировать ее, чтобы она была в актуальном состоянии. - -![Sync project update modal](../../../../assets/sync-fork-update.png) - -### Перейдите к PR - -Перейдите к PR, который вы хотите изучить локально, и узнайте его ID. Вы найдете его в заголовке PR (как показано ниже). - -![PR header](../../../../assets/PR-header.png) - -Далее откройте терминал в каталоге проекта и выполните следующую команду: - -```bash -gh pr checkout -``` - -Если вы не помните команду, нажмите на кнопку "Code" в правой части заголовка, и вы сможете легко скопировать/вставить команду. - -![PR code modal](../../../../assets/PR-code-btn-modal.png) - -:::note[Примечание] -Если команда не сработала, GitHub CLI подскажет, что делать. -::: - -🔥Теперь вы можете изучить решение локально и запустить его для тестирования.🔥 - - diff --git a/docs/src/content/docs/ru/guides/contribute.md b/docs/src/content/docs/ru/guides/contribute.md deleted file mode 100644 index c40075701..000000000 --- a/docs/src/content/docs/ru/guides/contribute.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Вносите свой вклад -description: Описание как помочь проекту -contributors: - - stillst -sidebar: - order: 4 ---- - -Вы можете помочь проекту многими способами: - -🔥 Создавайте новые испытания, следуя инструкциям [тут](/guides/create-challenge). - -🔥 Проходите испытания и отправляйте свои решения на ревью (руководство [тут](/guides/resolve-challenge)). - -🔥 Проводите ревью чужих решений, оставляя конструктивные и вежливые комментарии. - -🔥 Исправляйте опечатки и ошибки в документации. - -🔥 Оставляйте issues, чтобы предложить идеи новых испытаний или сообщить об ошибках. - -🔥 Поддерживайте проект [тут](https://github.com/sponsors/tomalaforge). diff --git a/docs/src/content/docs/ru/guides/create-challenge.md b/docs/src/content/docs/ru/guides/create-challenge.md deleted file mode 100644 index a77e4b0c2..000000000 --- a/docs/src/content/docs/ru/guides/create-challenge.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Создайте свое испытание -description: Руководство по созданию испытания -contributors: - - stillst -sidebar: - order: 5 ---- - -У вас есть идея, которой вы хотите поделиться, интересная ошибка, с которой вы боретесь в одном из своих проектов, или что-то необычное в Angular, что вы обнаружили. Всё это - хорошая отправная точка, чтобы создать испытание и поделиться её решением с другими. - -Но как начать создавать испытания? - -## Шаблон создания испытания - -Чтобы упростить этот процесс, я создал генератор Nx, который настроит все за вас и поможет вам быстрее начать. Проще всего его запустить в консоли Nx: перейдите в раздел Nx Console > generate > @angular-challenges/cli - challenge - -### Параметры - -#### обязательные параметры - -- title: Название, которое вы хотите дать испытанию. - :::note[Примечание] - Название должно быть не больше 25 символов. - ::: - -- challengeDifficulty: Сложность испытания. Есть три уровня сложности : 🟢 простой / 🟠 средний / 🔴 трудный -- name: Имя NX приложения. - :::note[Примечание] - Имя должно быть написано **kebab-case** - ::: -- docRepository: Категория испытания: Nx, Angular, Angular Performance, Rxjs, NgRx, Typescript. - -#### необязательные параметры - -- directory: Если вы не хотите, чтобы приложение находилось в стандартной папке внутри `apps`. -- addTest: Если хотите добавить конфигурацию теста. - -### Что будет создано - -- Генератор создаст все файлы, необходимые для нового рабочего приложения. Все эти файлы будут созданы внутри `apps/${directory}/${name}` -- Файл Markdown с минимальными настройками будет создан внутри `docs/src/content/docs/challenges/${docRepository}` - -## Создание испытания - -Все что осталось - создать испытание. 🚀 - -:::danger[Опасно] -Не забудьте обновить документацию, чтобы описать свою задачу и дать инструкции. -::: - -Дальше действовать будете вы!!! 💪 - -## Отправка решения - -Не забудьте представить своё решение задачи в течение недели. diff --git a/docs/src/content/docs/ru/guides/faq.md b/docs/src/content/docs/ru/guides/faq.md deleted file mode 100644 index 71a5ce660..000000000 --- a/docs/src/content/docs/ru/guides/faq.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Часто задаваемые вопросы -description: Ответы на вопросы -contributors: - - stillst -sidebar: - order: 7 ---- - -
    - Почему мое приложение не запускается, или почему я вижу ошибки в терминале при запуске `nx serve`? - -Чаще всего эта проблема возникает из-за того, что `node_modules` устарели, и вам нужно обновить их, выполнив команду `npm ci`. - -Если установка завершилась неудачно, вы можете попробовать решить эту проблему, удалив папку `node_modules` с помощью команды `rm -rf node_modules` или `npx npkill`, а затем снова выполнить `npm ci`. - -Если проблема сохранится, пожалуйста, сообщите о ней [тут](https://github.com/tomalaforge/angular-challenges/issues/new). - -
    diff --git a/docs/src/content/docs/ru/guides/getting-started.md b/docs/src/content/docs/ru/guides/getting-started.md deleted file mode 100644 index e269e9bc2..000000000 --- a/docs/src/content/docs/ru/guides/getting-started.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Первые шаги -description: Руководство о том, как начать работу с испытаниями Angular. -contributors: - - stillst - - 1fbr -sidebar: - order: 1 ---- - -Чтобы начать работу с испытаниями Angular, выполните следующие шаги: - -## Создайте аккаунт на GitHub - -Если вы захотите отправить свое решение для испытания, вам потребуется аккаунт на GitHub. Кроме того, иметь учетную запись на GitHub всегда полезно, тем более это бесплатно. - -## Скопируйте GitHub проект - -Перейдите в [Angular Challenges Repository](https://github.com/tomalaforge/angular-challenges) и нажмите на кнопку Fork в вверху страницы. Это создаст копию репозитория на вашей GitHub странице. - -## Клонируйте репозиторий на свой компьютер - -Выберите папку на своем компьютере и клонируйте репозиторий. - -Откройте терминал, перейдите в выбранный каталог и наберите команду: - -```bash -git clone https://github.com/[YOUR_GITHUB_NAME]/angular-challenges.git -``` - -:::note - -Вы можете найти URL адрес клонированного репозитория, нажав на кнопку <> Code в вашем собственном экземпляре репозитория Angular Challenges. - -![Header of GitHub workspace](../../../../assets/header-github.png) - -::: - -## Откройте проект в вашей любимой среде разработки - -Откройте проект в любой IDE на ваш выбор. - -## Установите все зависимости - -```bash -npm ci -``` - -## Выберите задачу - -Ваш проект сейчас поднят и запущен. Осталось только выбрать испытание 🚀 - -Каждое испытание состоит из: - -- Имя: описывает о чем испытание. -- Номер: порядковый номер создания. Этот номер не несет какого-то смысла, но служит для ссылки в секции GitHub Pull Request. -- Бейдж: показывает уровень сложности. Полностью субъективно 😅 - - 🟢 простое - - 🟠 среднее - - 🔴 сложное diff --git a/docs/src/content/docs/ru/guides/rebase.md b/docs/src/content/docs/ru/guides/rebase.md deleted file mode 100644 index dad4d2957..000000000 --- a/docs/src/content/docs/ru/guides/rebase.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Сделайте rebase вашей ветки -description: Руководство по rebase ветки на последние изменения -contributors: - - stillst -sidebar: - order: 6 ---- - -Иногда в проект могут вноситься изменения. Я стараюсь вносить изменения, которые ничего не сломают, но иногда этого не избежать. - -В большинстве случаев вам не придется делать rebase вашего решения, но вот руководство, которое поможет вам понять, как это сделать. - -:::note[Примечание] -Это руководство применимо к любому проекту с открытым исходным кодом. -::: - -## Шаги rebase - -### Синхронизируйте ваш репозиторий - -Во-первых, вам нужно синхронизировать вашу копию, чтобы убедиться, что она содержит последние изменения. - -Вы можете сделать это, нажав на кнопку Sync fork на главной странице вашего репозитория. - -![Sync project header](../../../../assets/fork-sync.png) - -На изображении выше видно, что моя ветка отстает от основной ветки на 8 коммитов, и мне нужно синхронизировать ее, чтобы она была в актуальном состоянии. - -![Sync project update modal](../../../../assets/sync-fork-update.png) - -### Откройте терминал - -Откройте любой терминал, будь то терминал в любимой IDE или отдельное приложение. - -### Гит - -Выполните следующие команды, чтобы сделать rebase локальной ветки: - -- git checkout main -- git pull -- git checkout [your branch] -- git rebase main -- Разрешите конфликты - -На этом этапе rebase может остановиться, потому что в вашей локальной ветке есть конфликтующие файлы с основной веткой. Исправьте это. После того как закончите: - -- git add . -- git rebase --continue - -Если в вашей ветке нет конфликтов, будет показано сообщение об успехе. - -### Отправьте свою работу в удаленный репозиторий - -Наконец, отправьте свою работу на GitHub: - -- git push -f diff --git a/docs/src/content/docs/ru/guides/resolve-challenge.md b/docs/src/content/docs/ru/guides/resolve-challenge.md deleted file mode 100644 index f2e472c62..000000000 --- a/docs/src/content/docs/ru/guides/resolve-challenge.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Пройдите испытание -description: Инструкция по прохождению испытания -contributors: - - stillst - - 1fbr -sidebar: - order: 2 ---- - -В этом руководстве вы узнаете, как пройти испытание и отправить свое решение. - -## Вступление - -Этот репозиторий работает под управлением [Nx](https://nx.dev/getting-started/intro). Nx - это монорепозиторий, который позволяет вам хранить несколько приложений в одном рабочем пространстве. -Каждое испытание - это отдельное приложение. Если вы откроете каталог `apps`, то обнаружите несколько директорий, каждая из которых относится к определенной задаче. Каждый каталог представляет собой полноценное приложение `Nx`. Чтобы запустить и начать работу с одним из них, откройте терминал и выполните команду: - -```bash -npx nx serve <ИМЯ_ПРИЛОЖЕНИЯ> -``` - -:::note[Примечание] -Если вы не уверены в названии испытания `ИМЯ_ПРИЛОЖЕНИЯ`, откройте файл README.md. Там написана команда `serve` со ссылкой на документацию по испытанию. -::: - -:::note[Примечание] -Если `nx` установлен глобально на вашем компьютере, вы можете опустить команду `npx`. -Чтобы установить `nx` глобально, выполните - -```bash -npm i -g nx -``` - -::: - -## Создайте Git Ветку - -Прежде чем приступить к реализации вашего решения испытания, создайте ветку git для фиксации своей работы. - -```bash -git checkout -b -``` - -## Пройдите испытание - -Изучите инструкции, чтобы пройти испытание. - -## Сделайте коммит и отправьте код в репозиторий - -Последний шаг - это создание коммита, который следовал бы правилам из [Соглашения о коммитах](https://www.conventionalcommits.org/ru/v1.0.0/). - -Наконец, отправьте свою работу в удаленный репозиторий с помощью следующей команды: - -```bash - git push --set-upstream origin -``` - -:::tip[Не запоминай команду] -Вам не нужно запоминать команду в точности. Нужно просто запомнить `git push`, и если вы впервые загружаете эту ветку в репозиторий, `git` подскажет вам полную команду. -::: - -## Отправьте свое решение в основной репозиторий - -Теперь все ваше решение находится в вашем экземпляре репозитория Angular Challenges. - -Следующий шаг - перейдите на главную страницу [Angular Challenges](https://github.com/tomalaforge/angular-challenges) и создайте новый запрос на слитие (Pull Request). - -GitHub должен показать уведомление, чтобы помочь вам создать pull request. - -Если этого не случилось, то вы либо неправильно выполнили один из предыдущих шагов, либо вам нужно перейти на вкладку Pull Request и нажать кнопку New pull request. - -После того как вы выберете две ветки для сравнения, вы попадете на следующую страницу: - -![New pull request screen](../../../../assets/new-pull-request.png) - -В заголовке напишите Answer:, затем номер вашего испытания. После этого можете добавить все, что пожелаете. - -:::danger[Опасно] -Порядковый номер очень важен. Он позволит другим узнать, какое испытание вы пытаетесь решить. -::: - -В разделе описания вы можете добавить вопросы, проблемы, с которыми столкнулись, или все остальное, чем захотите поделиться. Если нечего написать, можете оставить этот раздел пустым. - -Теперь вы можете нажать на кнопку Create pull request. - -## Поддержка - -Чтобы продолжать предоставлять ценные отзывы и рецензии, теперь я буду рецензировать только тех кто поддерживает проект на GitHub. - -
      -
    • $5 за рецензию
    • -
    • $25 за пожизненные рецензии
    • -
    • Создайте вызов/Внесите свой вклад в пожизненные обзоры
    • -
    - -:::note[Примечание] -Все желающие могут оставлять комментарии и читать другие PR. -::: - -:::tip[OSS чемпион] -🔥 После того как вы пройдете это руководство, вы сможете внести свой вклад в любой другой публичный репозиторий на GitHub. Да, это настолько просто.🔥 -::: diff --git a/docs/src/content/docs/ru/index.mdx b/docs/src/content/docs/ru/index.mdx deleted file mode 100644 index ae38c6227..000000000 --- a/docs/src/content/docs/ru/index.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Добро пожаловать в испытания Angular -description: Начните с прохождения этих испытаний и прокачайтесь как Angular разработчик. -template: splash -noCommentSection: true -hero: - tagline: Начните сейчас и станьте экспертом Angular! - image: - file: ../../../assets/angular-challenge.webp - actions: - - text: Начать - link: /ru/guides/getting-started/ - icon: right-arrow - variant: primary - - text: Перейти к последней задаче - link: /ru/challenges/angular/60-async-redirect/ - icon: rocket - - text: Добавить звезду - link: https://github.com/tomalaforge/angular-challenges - icon: github - variant: secondary ---- - -import { Card, CardGrid } from '@astrojs/starlight/components'; -import MyIcon from '../../../components/MyIcon.astro'; -import SubscriptionForm from '../../../components/SubscriptionForm.astro'; - - - - Этот репозиторий содержит 56 испытаний, связанных с Angular, Nx, RxJS, Ngrx и Typescript. - Испытания основаны на реальных задачах или инструментах для того, чтобы прокачать вас. - - - - - - - - Одна из целей этого репозитория снизить барьер для разработки открытого - программного обеспечения (OSS). Решив эти задачи, вы поймете, как начать - вносить свой вклад в любой другой проект с открытым исходным кодом. - - - - Изучение и использование нового фреймворка всегда сопряжено с трудностями. В - этом наборе испытаний содержатся реальные примеры задач, чтобы закрепить на - практике то, чему вы научились. Любой может оставить комментарий или - предложить помощь. - - Учиться одному - здорово, но обучение вместе с другими поможет вам добиться - большего. - - - - - У вас есть идея или интересный баг? Не стесняйтесь;{' '} - Создавайте свои собственные испытания не теряя времени. - - - - Прохождение этих испытаний подготовит вас к техническим задачам, с которыми вы - можете столкнуться во время собеседований на позицию фронтенд-разработчика. - - - - Это бесплатный проект, и он будет оставаться таковым как можно дольше. Однако - вся работа ведется в мое свободное время, включая создание новых испытаний и - ревью их решений(PRs). - Спонсорство может поддержать меня и способствовать развитию проекта. - - - - ---- - - - - diff --git a/docs/src/content/docs/subscription/index.mdx b/docs/src/content/docs/subscription/index.mdx deleted file mode 100644 index cf987d584..000000000 --- a/docs/src/content/docs/subscription/index.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Subscription -description: Subscribe to email. -noCommentSection: true ---- -import SubscriptionForm from '../../../components/SubscriptionForm.astro' - -
    If you want to be informed of new challenges, you can subscribe to the email form.
    - - diff --git a/docs/src/content/docs/zh-cn/challenges/angular/1-projection.md b/docs/src/content/docs/zh-cn/challenges/angular/1-projection.md deleted file mode 100644 index 9a21713fb..000000000 --- a/docs/src/content/docs/zh-cn/challenges/angular/1-projection.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: 🟢 投影 -description: 挑战1是学习如何通过组件投影DOM元素 -author: thomas-laforge -contributors: - - tomalaforge - - jdegand - - dmmishchenko - - kabrunko-dev - - svenson95 -challengeNumber: 1 -command: angular-projection -blogLink: https://medium.com/@thomas.laforge/create-a-highly-customizable-component-cc3a9805e4c5 -videoLinks: - - link: https://www.youtube.com/watch?v=npyEyUZxoIw&ab_channel=ArthurLannelucq - alt: Projection video by Arthur Lannelucq - flag: FR - - link: https://www.youtube.com/watch?v=yNrfvu7vTa4 - alt: Projection video by Amos Lucian Isaila - flag: ES -sidebar: - order: 1 ---- - -## 信息 - -在Angular中,内容投影是一种创建高度可定制组件的强大技术。利用和理解ng-contentngTemplateOutlet的概念可以显著增强你创建可共享组件的能力 - -你可以在[这里](https://angular.dev/guide/components/content-projection)了解ng-content 的所有内容,从简单的投影到更复杂的投影。 - -要了解ngTemplateOutlet,你可以在[这里](https://angular.io/api/common/NgTemplateOutlet)找到API文档和一些基本示例。 - -有了这两个工具,您现在就可以接受挑战了。 - -## 说明 - -您将从一个功能齐全的应用程序开始,该应用程序包括一个包含教师卡和学生卡的仪表盘。目标是实现城市卡。 - -虽然应用程序可以工作,但开发人员的体验还远没有达到最佳。每次需要实现新卡时,都必须修改`card.component.ts` 。在实际项目中,该组件可以在许多应用程序之间共享。该挑战的目标是创建一个 `CardComponent` ,它可以在不做任何修改的情况下进行自定义。一旦你创建了这个组件,你就可以开始实现 `CityCardComponent` ,并确保你没有触碰 `CardComponent` 。 - -## 约束 - -- 必须重构 `CardComponent` 和 `ListItemComponent`。 -- `NgFor` 指令必须声明并保持在 `CardComponent` 内。你可能想把它移到 `ParentCardComponent` ,比如 `TeacherCardComponent` 。 -- `CardComponent` 不应包含任何 `NgIf` 或 `NgSwitch` 。 -- CSS:尽量避免使用 `::ng-deep` 。寻找更好的方法来处理CSS样式。 - -## 挑战奖励 - -- 尝试使用新的内置控制流语法for循环和条件语句(文档在[这里](https://angular.dev/guide/templates/control-flow)) -- 使用signal API来管理组件状态(文档在[这里](https://angular.dev/guide/signals)) -- 要引用模板,请使用指令而不是魔术字符串([魔术字符串有什么问题?](https://softwareengineering.stackexchange.com/a/365344)) diff --git a/docs/src/content/docs/zh-cn/guides/checkout-answer.md b/docs/src/content/docs/zh-cn/guides/checkout-answer.md deleted file mode 100644 index 5ac31b98b..000000000 --- a/docs/src/content/docs/zh-cn/guides/checkout-answer.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: 查看某人的回答 -description: 查看某人的回答指南 -contributors: - - tomalaforge - - gsgonzalez88 - - 1fbr - - jdegand -sidebar: - order: 3 ---- - -所有Angular Challenges的答案都将以pull request (PR)的形式呈现。要查看和跟踪它们,请浏览GitHub上的**文件更改**页面。但是,如果您不熟悉界面,理解和遵循此过程可能并不简单。在许多情况下,您可能更喜欢签出分支并在您首选的IDE中检查解决方案。 - -## 安装 GitHub CLI - -在[这里](https://github.com/cli/cli#installation)按照操作系统的说明操作。 - -## 查看本地其他人的PR - -### 同步存储库 - -首先,您需要同步您的分支,以确保它与分支存储库是最新的。 - -这可以通过点击你的分支主页上的**Sync fork**按钮来实现。 - -![Sync project header](../../../../assets/fork-sync.png) - -上图显示我的分支落后于主分支 8 个提交,我需要将其同步才能保持最新。 - -![Sync project update modal](../../../../assets/sync-fork-update.png) - -### 本地检出查看 - -导航到你想在本地查看的PR并获取其ID。你可以在PR的标题中找到它(如下所示)。 - -![PR header](../../../../assets/PR-header.png) - -接下来,切换到项目目录中的任意终端,并运行以下命令: - -```bash -gh pr checkout -``` - -如果你不记得这个命令,点击标题右侧的Code按钮,你可以轻松地复制/粘贴这个命令。 - -![PR code modal](../../../../assets/PR-code-btn-modal.png) - -:::note[注意] -如果命令不起作用或失败,GitHub CLI会引导你完成整个过程。 -::: - -🔥您现在可以在本地浏览解决方案并提供服务以测试它。🔥 - -### 使用GitHub Codespaces检出查看 - -你可以使用GitHub Codespaces查看任何**打开**的PR。点击code按钮后,你可以导航到codespaces标签,然后点击绿色按钮,在PR的分支上创建一个codesace。codespace初始化后,就可以启动应用了。 diff --git a/docs/src/content/docs/zh-cn/guides/contribute.md b/docs/src/content/docs/zh-cn/guides/contribute.md deleted file mode 100644 index 7fea19df6..000000000 --- a/docs/src/content/docs/zh-cn/guides/contribute.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: 贡献 -description: 贡献指南 -contributors: - - tomalaforge - - jdegand -sidebar: - order: 4 ---- - -你可以通过以下多种方式为这个存储库做出贡献: - -🔥 依照以下[指示](/guides/create-challenge)创建一个新的挑战。 - -🔥 接受挑战并提交结果(指南 [在此](/guides/resolve-challenge))。 - -🔥 对他人提出的解决方案给予有建设性的、热情的反馈。 - -🔥 校正文档中的拼写错误。 - -🔥 协助翻译文档。 - -🔥 提交问题建议新的挑战想法或报告错误。 - -🔥 [在此](https://github.com/sponsors/tomalaforge)赞助该项目。 diff --git a/docs/src/content/docs/zh-cn/guides/create-challenge.md b/docs/src/content/docs/zh-cn/guides/create-challenge.md deleted file mode 100644 index 6b13e69cd..000000000 --- a/docs/src/content/docs/zh-cn/guides/create-challenge.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: 创建你自己的挑战 -description: 创建你自己的挑战指南 -contributors: - - tomalaforge - - gsgonzalez88 - - jdegand -sidebar: - order: 5 ---- - -你有一个想法想要分享,你正在努力解决某个私人项目或业余项目中的一个有趣的bug,或者你发现的一个Angular技巧。所有这些可能性都是创建挑战并与他人分享解决方案的良好起点。 - -如何开始创造这些挑战? - -## 样板设置 - -为了简化这个过程,我创建了一个Nx生成器,它将为您设置所有样板文件。运行它最简单的方法是使用Nx控制台:转到Nx Console > generate > @angular-challenges/cli - challenge。 - -或者,你也可以利用IDE的 [Nx Console extension](https://nx.dev/getting-started/editor-setup)来生成文件 - -### 参数 - -#### 强制参数 - -- title: 你想给你的挑战的标题。 - :::note[注意] - 标题长度不能超过25个字符。 - ::: - -- author: 你的名字 - - :::note[注意] - 你的名字应该使用烤肉串格式(如: john-doe) - ::: - - :::note[注意] - 别忘了在以你名字命名的文件中更新你的个人信息 - ::: - -- challengeDifficulty:你认为你的挑战有多大的难度。有三个难度级别:🟢简单/🟠中等/🔴困难 - -- docRepository: 你挑战的类别是Nx、Angular、Angular性能、Rxjs、NgRx、Typescript、表单或信号。 - -#### 可选参数 - -- challengeNumber: 当有挑战提交时,可以指定挑战号。(如果为空,该数字将是下一个数字)。 -- directory: 如果您希望您的应用程序位于 `apps` 中的特定文件夹中。 -- addTest: 如果您想添加测试配置。 - -### 创建了什么? - -- 生成器将创建新应用程序运行所需的所有文件。所有这些文件都将创建在 `apps/${directory}/${name}` 中 -- 将在 `docs/src/content/docs/challenges/${docRepository}` 中创建一个带有最小设置的Markdown文件。 - -## 创造挑战 - -剩下唯一要做的就是创造挑战。 🚀 - -:::danger[危险] -不要忘记更新文档以介绍您的挑战并提供说明。 -::: - -轮到你行动了!!💪 - -## 解决方案提交 - -大约一周后,提供一个针对您的挑战的解决方案的pull request。 diff --git a/docs/src/content/docs/zh-cn/guides/faq.md b/docs/src/content/docs/zh-cn/guides/faq.md deleted file mode 100644 index 0a79778b6..000000000 --- a/docs/src/content/docs/zh-cn/guides/faq.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: 常见问题解答 -description: 回答问题 -contributors: - - tomalaforge - - jdegand -sidebar: - order: 7 ---- - -
    - - 为什么我的应用程序没有启动,或者为什么我在运行`nx serve`时在终端中遇到错误? - - - 大多数情况下,出现这个问题是因为你的node_modules已经过时了,你需要通过运行 `npm ci` 来更新它们。 - -如果安装失败,可以通过 `rm -rf node_modules` 或 `npx npkill` 删除node_modules文件夹,然后重新运行 `npm ci` 来解决。 - -如果问题仍然存在,请在[这里](https://github.com/tomalaforge/angular-challenges/issues/new)报告问题。 - -
    diff --git a/docs/src/content/docs/zh-cn/guides/getting-started.md b/docs/src/content/docs/zh-cn/guides/getting-started.md deleted file mode 100644 index 53033cae6..000000000 --- a/docs/src/content/docs/zh-cn/guides/getting-started.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: 开始 -description: 关于如何开始Angular挑战的指南。 -contributors: - - tomalaforge - - 1fbr - - ho-ssain - - jdegand -sidebar: - order: 1 ---- - -要开始使用 Angular Challenges,请按照以下步骤操作: - -## 创建一个GitHub账户 - -如果你想提交答案,你需要拥有自己的GitHub账户。此外,拥有GitHub账户总是有益的,而且是免费的。 - -## Fork GitHub 项目 - -导航至 [Angular Challenges Repository](https://github.com/tomalaforge/angular-challenges) 在页面顶部点击 Fork 按钮。这将在您的 GitHub 个人资料中创建该存储库的副本。 - -## 将存储库克隆到您的本地机器上 - -在您的本地计算机上选择一个目录,然后克隆此存储库。 - -打开终端,导航到选择的目录,并输入以下命令: - -```bash -git clone https://github.com/[YOUR_GITHUB_NAME]/angular-challenges.git -``` - -:::note[注意] - -你可以通过点击Angular Challenges存储库中你自己的实例中的<> Code 按钮来找到克隆URL - -![Header of GitHub workspace](../../../../assets/header-github.png) - -::: - -## 在您最喜欢的IDE中打开该项目 - -使用您选择的任意集成开发环境(IDE)打开该项目。 - -## 安装所有依赖项 - -```bash -npm ci -``` - -## 选择一个挑战 - -您的项目现已启动并正在运行。剩下的唯一步骤是选择一个挑战 🚀 - -每项挑战包括: - -- Name: 表示挑战的内容。 -- Number: 创建顺序。 这个数字没有任何特别的含义,但有助于在 GitHub Pull Request 部分进行参考。 -- Badge: 有助于可视化难度程度。这完全是主观的 😅 - - 🟢 容易 - - 🟠 中等 - - 🔴 困难 - -## (交替) 使用 GitHub Codespaces - -在你自己的 Angular Challenges 存储库实例中,单击代码按钮并导航到 codespaces 选项卡。 - -![Codespaces tab](../../../../assets/codespaces.png) - -单击 `Create codespace on main` 按钮, 您将导航到 GitHub codespace - -如果您以前从未使用过 GitHub codespace,我建议您尝试这个简短的交互式 [GitHub Skills Tutorial](https://github.com/skills/code-with-codespaces). - -当您导航到codespace时,将出现一个提示,要求安装推荐的 `VS Code` 插件。如果您打算创建一个挑战,您可以使用 `Nx plugin` 来生成开始代码。无论哪种方式,codespace都将安装依赖项,你可以创建一个新分支,解决任何挑战,并创建一个pull request。 - -当您推送到分支时,您不必提供 GitHub 令牌。 - -一旦你完成,记得暂停或删除你的codesace。如果不这样做,GitHub将在30分钟后自动暂停空闲的codesace。你每个月确实有大量的免费codespace时间,但重要的是不要浪费你的分配时间 - -在GitHub codesace中,复制和粘贴将被阻止,直到你获得许可 - -GitHub codespace使用端口转发为项目提供服务。单击运行 `npx nx serve [project-name]` 后的提示符,导航到 `localhost:4200` 。 diff --git a/docs/src/content/docs/zh-cn/guides/rebase.md b/docs/src/content/docs/zh-cn/guides/rebase.md deleted file mode 100644 index a88ec24a6..000000000 --- a/docs/src/content/docs/zh-cn/guides/rebase.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: 变基分支 -description: 将分支变基到最新更改的指南 -contributors: - - tomalaforge -sidebar: - order: 6 ---- - -有时,可能会向项目添加更改。我会尝试做出不会破坏任何东西的更改,但有时这是不可避免的。 - -大多数情况下,您不需要变基您的解决方案,但这里有一个指南可以帮助您知道如何操作。 - -:::note[注意] -本指南适用于任何开源项目。 -::: - -## 变基分支的步骤 - -### 同步存储库 - -首先,你需要同步你的分支,以确保它与分支的存储库是最新的。 - -你可以通过点击你的fork主页面上的Sync fork按钮来实现这一点。 - -![Sync project header](../../../../assets/fork-sync.png) - -上图显示我的分支比主分支落后 8 个提交,我需要将其同步才能保持最新。 - -![Sync project update modal](../../../../assets/sync-fork-update.png) - -### 打开终端 - -打开您选择的任何终端,可以是您最喜欢的 IDE 中的终端,也可以是独立实例。 - -### Git - -请按照以下命令重新设置本地分支的基础: - -- git checkout main -- git pull -- git checkout [你的分支] -- git rebase main -- 解决冲突 - -在此步骤中,变基可能会停止,因为您的本地分支与主分支有冲突的文件。纠正它们。完成此操作后: - -- git add . -- git rebase --continue - -如果您的分支没有任何冲突,则会显示成功消息。 - -### 将你的工作推送到远程分支 - -最后,将你的工作推送到GitHub: - -- git push -f diff --git a/docs/src/content/docs/zh-cn/guides/resolve-challenge.md b/docs/src/content/docs/zh-cn/guides/resolve-challenge.md deleted file mode 100644 index a943fb311..000000000 --- a/docs/src/content/docs/zh-cn/guides/resolve-challenge.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: 解决挑战 -description: 解决挑战指南 -contributors: - - tomalaforge - - 1fbr - - gsgonzalez88 -sidebar: - order: 2 ---- - -在本指南中,您将学习如何解决挑战并向主GitHub存储库提交答案。 - -## 介绍 - -此存储库由 [Nx](https://nx.dev/getting-started/intro) 提供支持。Nx是一个 monorepository,允许您将多个应用程序存储在同一个工作区中。每个挑战都是一个单独的应用程序。如果您打开`apps`目录,您将找到多个目录,每个目录都与一个特定的挑战相关。每个目录都代表一个完整的独立的`Nx`应用程序。想要运行并从某个开始,请打开您的终端并运行: - -```bash -npx nx serve -``` - -:::note[注意] -如果您不确定 `APPLICATION_NAME` ,请打开README.md文件。 `serve` 命令写在那里,并有一个到挑战文档的链接。 -::: - -:::note[注意] - -如果您的设备已全局安装 `nx` ,则可以跳过使用 `npx` - -要全局安装 `nx` ,使用 - -```bash -npm i -g nx -``` - -::: - -## 创建 Git 分支 - -在你开始实现解决挑战的解决方案之前,创建一个git分支来提交你的工作。 - -```bash -git checkout -b -``` - -## 完成挑战 - -按照说明来完成挑战。 - -## 提交和推送您的工作 - -最后一步是按照常规的[指导方针](https://www.conventionalcommits.org/en/v1.0.0/)提交工作 - -最后,使用以下命令将工作推送到远程仓库 - -```bash - git push --set-upstream origin -``` - -:::tip[不用去记] -你不必精确地记住这个命令。你只需要记住 `git push` ,如果这是你第一次推送这个分支, `git` 将为你提供完整的命令。 -::: - -## 将您的工作提交到主仓库 - -现在,你所有的工作都位于Angular Challenges仓库的本地实例中。 - -下一步是转到Angular的主要[挑战页面](https://github.com/tomalaforge/angular-challenges),并创建一个新的Pull Request。 - -GitHub应该显示一个通知头来帮助你创建拉取请求。 - -如果不是这样,要么是你错误地执行了前面的某个步骤,要么你可以转到Pull Request选项卡并点击New pull request按钮 - -一旦你选择了要比较的两个分支,就会看到下面的页面: - -![New pull request screen](../../../../assets/new-pull-request.png) - -在标题部分,以Answer:开始,然后是你的挑战号。之后,您可以随意添加任何您想要的内容 - -:::danger[危险] -这非常重要。它让别人知道你试图解决的是什么挑战。 -::: - -在描述部分,您可以添加您遇到的问题、麻烦或任何其他您想要分享的内容。如果你没什么可说的,可以把它空着 - -现在你可以点击 Create pull request. - -## 获取审查 - -为了继续提供有价值的反馈和评论,请在Github上支持这个项目: - -
      -
    • 每次评论5美元
    • -
    • 终身评论25美元
    • -
    • 创建一个挑战/贡献终身评论
    • -
    - -:::note[注意] - -您仍然可以提交您的PR加入已回答的挑战列表。你仍然可以被社区成员审查🔥 - -欢迎大家评论和阅读其他PRs。💪 -::: - -:::tip[开源拥护者] -🔥完成本教程后,您就可以为任何其他公共GitHub存储库做出贡献并提交PR。就这么简单。🔥 -::: diff --git a/docs/src/content/docs/zh-cn/index.mdx b/docs/src/content/docs/zh-cn/index.mdx deleted file mode 100644 index 97abc22a3..000000000 --- a/docs/src/content/docs/zh-cn/index.mdx +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: 欢迎来到 Angular 挑战 -description: 从解决这些挑战开始,成为一名更好的Angular前端工程师. -template: splash -noCommentSection: true -hero: - tagline: 现在就开始成为Angular专家吧! - image: - file: ../../../assets/angular-challenge.webp - actions: - - text: 开始 - link: /zh-cn/guides/getting-started/ - icon: right-arrow - variant: primary - - text: 进入最新的挑战 - link: /zh-cn/challenges/signal/56-forms-and-signal/ - icon: rocket - - text: 给个星星 - link: https://github.com/tomalaforge/angular-challenges - icon: github - variant: secondary ---- - -import { Card, CardGrid } from '@astrojs/starlight/components'; -import MyIcon from '../../../components/MyIcon.astro'; - -import SubscriptionForm from '../../../components/SubscriptionForm.astro'; - - - - 该存储库包含与Angular, Nx, RxJS, NgrxTypescript相关的56个挑战。这些挑战围绕现实生活中的问题或特定功能,旨在提升您的技能。 - - - - - - - - 这个存储库的一个目标是降低进入开放源码软件(OSS)的门槛。通过参与这些挑战,您将学习如何开始为其他任何开源项目做出贡献 - - - - 学习和实践一个新的框架总是具有挑战性的。这些挑战提供了实际使用案例,可以让你将所学的知识应用到实际中。 - 任何人都可以发表评论或提供帮助。 - - 独自学习固然很棒,但与他人一起学习会让你走得更远。 - - - - - 你有任何问题、有趣的bug或者想法吗?不要犹豫,{' '}不要浪费任何时间创造属于你自己的挑战。 - - - - 通过完成这些挑战,您将为前端面试中可能出现的任何技术问题做好准备 - - - - 这个项目是免费的,并且希望能够长期保持免费。然而,所有工作都是在我的业余时间完成的,包括创建挑战和审核合并请求(PR)。赞助可以支持我,并有助于项目的成长。 - - - ---- - - - - diff --git a/docs/src/content/docs/zh-cn/leaderboard/answers.mdx b/docs/src/content/docs/zh-cn/leaderboard/answers.mdx deleted file mode 100644 index 812043baf..000000000 --- a/docs/src/content/docs/zh-cn/leaderboard/answers.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 挑战的回答 -description: 排行榜显示已回答的挑战数量 -noCommentSection: true -prev: false -next: false ---- - -import LeaderboardAnswer from '../../../../components/leaderboard/LeaderboardAnswer.svelte'; - -加入这个列表,通过阅读入门指南[开始](/zh-cn/guides/getting-started)你的Angular挑战之旅。 - diff --git a/docs/src/content/docs/zh-cn/leaderboard/challenges.mdx b/docs/src/content/docs/zh-cn/leaderboard/challenges.mdx deleted file mode 100644 index ce97799d1..000000000 --- a/docs/src/content/docs/zh-cn/leaderboard/challenges.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: 创建的挑战数量 -description: 排行榜显示创建的挑战数量 -noCommentSection: true -prev: false -next: false ---- - -import LeaderboardChallenge from '../../../../components/leaderboard/LeaderboardChallenge.svelte'; - -缺少挑战,创建自己的挑战并登上排行榜!阅读创建挑战指南来学习如何[创建挑战](/zh-cn/guides/create-challenge)。 - - diff --git a/docs/src/content/docs/zh-cn/leaderboard/commit.mdx b/docs/src/content/docs/zh-cn/leaderboard/commit.mdx deleted file mode 100644 index ea0448c99..000000000 --- a/docs/src/content/docs/zh-cn/leaderboard/commit.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: 贡献数量 -description: 显示贡献数量的排行榜 -noCommentSection: true -prev: false -next: false ---- - -import LeaderboardCommit from '../../../../components/leaderboard/LeaderboardCommit.svelte'; - -您想要改进项目,修复一个错别字,为一个挑战添加一些文档,或者翻译一个页面?这个排行榜显示了每个用户的贡献数量。这个存储库是开源的,您可以为它做出贡献。阅读贡献[贡献](/zh-cn/guides/contribute)指南开始。 - - diff --git a/docs/src/content/docs/zh-cn/subscription/index.mdx b/docs/src/content/docs/zh-cn/subscription/index.mdx deleted file mode 100644 index 1dde0610a..000000000 --- a/docs/src/content/docs/zh-cn/subscription/index.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 订阅 -description: Email订阅 -noCommentSection: true ---- -import SubscriptionForm from '../../../../components/SubscriptionForm.astro' - -
    如果您想了解新的挑战,可以订阅电子邮件
    - - diff --git a/docs/src/content/fr/challenges/angular/60-async-redirect.md b/docs/src/content/fr/challenges/angular/60-async-redirect.md deleted file mode 100644 index 4957a5ed7..000000000 --- a/docs/src/content/fr/challenges/angular/60-async-redirect.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: 🟢 async-redirect -description: Le défi 60 porte sur l'utilisation de la nouvelle fonction `redirectTo` du routeur Angular pour moderniser la logique de navigation. -author: thomas laforge -contributors: - - tomalaforge -challengeNumber: 60 -command: angular-async-redirect -sidebar: - order: 23 - badge: New ---- - -## Énoncé - -Dans ce défi, vous travaillez avec une application Angular qui utilise actuellement une méthode personnalisée `navigate` dans `dashboard.ts` pour gérer les changements de route. Avec l'introduction de la nouvelle fonction `redirectTo` dans le routeur Angular en version 20, l'objectif est de moderniser la base de code en supprimant l'ancienne méthode `navigate` et en refactorant l'application pour utiliser `redirectTo` pour toute la logique de redirection. - -Votre tâche est : - -- Localiser et supprimer la méthode `navigate` dans `dashboard.ts`. -- Refactoriser l'application pour utiliser la nouvelle fonction `redirectTo` du routeur Angular partout où une navigation est requise. - -Cela permettra à l'application de bénéficier des dernières fonctionnalités du routeur Angular et de respecter les meilleures pratiques en matière de navigation et de redirection. diff --git a/docs/src/content/i18n/en.json b/docs/src/content/i18n/en.json deleted file mode 100644 index 86d43a40c..000000000 --- a/docs/src/content/i18n/en.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "page.title.challenge": "Challenge", - "author.createdBy": "Created by", - "buttons.email": "Email subscription", - "buttons.star": "Give a star", - "buttons.sponsor": "Sponsor", - "buttons.clipboardCopy": "Copied!", - "challenge.footer.note": "Note", - "challenge.footer.running": "Start the project by executing:", - "challenge.footer.start": "The title of your PR must begin with", - "challenge.footer.reminder": "Reminder", - "challenge.footer.communityAnswers": "Community solutions", - "challenge.footer.authorAnswer": "Author's solution", - "challenge.footer.blogPost": "Article", - "challenge.footer.video": "Video", - "challenge.footer.gettingStarted.title": "To complete this challenge, start by reading: ", - "challenge.footer.gettingStarted.link": "Getting started", - "challenge.footer.upvoteAnswer": "You can upvote an answer with a 👍 if you like it", - "subscription.button": "Subscribe", - "subscription.email": "username@gmail.com", - "subscription.note.title": "Notes", - "subscription.note.description": "This email will only be used for sending new challenges updates", - "contributor.title": "Contributors", - "contributor.subtitle": "Thanks to all the contributors who have helped make this documentation better!", - "sponsors.description": "Big thanks to the people supporting this project: ", - "sponsors.joinButton": "Join the list" -} diff --git a/docs/src/content/i18n/es.json b/docs/src/content/i18n/es.json deleted file mode 100644 index e015e338a..000000000 --- a/docs/src/content/i18n/es.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "skipLink.label": "Saltar al contenido", - "search.label": "Búsqueda", - "search.shortcutLabel": "(Presiona / para Buscar)", - "search.cancelLabel": "Cancelar", - "search.devWarning": "La búsqueda solo está disponible en compilaciones para producción. \nIntenta hacer una compilación y vista previa del sitio para probarlo localmente.", - "themeSelect.accessibleLabel": "Seleccionar tema", - "themeSelect.dark": "Oscuro", - "themeSelect.light": "Claro", - "themeSelect.auto": "Automático", - "languageSelect.accessibleLabel": "Seleccionar idioma", - "menuButton.accessibleLabel": "Menú", - "sidebarNav.accessibleLabel": "Inicio", - "tableOfContents.onThisPage": "Contenido de la página", - "tableOfContents.overview": "Vista general", - "i18n.untranslatedContent": "El contenido de esta página no cuenta con una traducción en tu idioma.", - "page.editLink": "Editar página", - "page.lastUpdated": "Última actualización:", - "page.previousLink": "Anterior", - "page.nextLink": "Siguiente", - "404.text": "Página no encontrada. Por favor revisa la URL o intenta utilizando la barra de búsqueda.", - "expressiveCode.copyButtonCopied": "Copiado!", - "expressiveCode.copyButtonTooltip": "Copiar al portapapeles", - "expressiveCode.terminalWindowFallbackTitle": "Ventana de terminal", - "pagefind.clear_search": "Borrar", - "pagefind.load_more": "Cargar más resultados", - "pagefind.search_label": "Buscar en este sitio", - "pagefind.filters_label": "Filtros", - "pagefind.zero_results": "Sin resultados para tu búsqueda de [SEARCH_TERM]", - "pagefind.many_results": "[COUNT] resultados para tu búsqueda de [SEARCH_TERM]", - "pagefind.one_result": "[COUNT] resultado para tu búsqueda de [SEARCH_TERM]", - "pagefind.alt_search": "Sin resultados para tu búsqueda de [SEARCH_TERM]. Te estamos mostrando resultados para [DIFFERENT_TERM]", - "pagefind.search_suggestion": "Sin resultados para tu búsqueda de [SEARCH_TERM]. Intenta alguna de las siguientes búsquedas:", - "pagefind.searching": "Buscando [SEARCH_TERM]...", - "page.title.challenge": "Reto", - "author.createdBy": "Creado por", - "buttons.email": "Suscripción por correo", - "buttons.star": "Danos una estrella", - "buttons.sponsor": "Patrocínanos", - "buttons.clipboardCopy": "Copiado!", - "note": "Nota", - "running": "Inicia el proyecto ejecutando el siguiente comando:", - "start": "El título de tu PR debe iniciar con", - "reminder": "¡No lo olvides!", - "communityAnswers": "Respuestas de la comunidad", - "authorAnswer": "Respuesta del autor", - "blogPost": "Artículo", - "challenge.footer.note": "Nota", - "challenge.footer.running": "Inicia el proyecto ejecutando el siguiente comando:", - "challenge.footer.start": "El título de tu PR debe iniciar con", - "challenge.footer.reminder": "¡No lo olvides!", - "challenge.footer.communityAnswers": "Respuestas de la comunidad", - "challenge.footer.authorAnswer": "Respuesta del autor", - "challenge.footer.blogPost": "Artículo", - "challenge.footer.video": "Vídeo", - "challenge.footer.gettingStarted.title": "Para realizar este desafío, comienza por leer: ", - "challenge.footer.gettingStarted.link": "Inicio", - "challenge.footer.upvoteAnswer": "Puedes votar positivo una respuesta con un 👍 si te gusta", - "subscription.button": "Suscríbete", - "subscription.email": "usuario@gmail.com", - "subscription.note.title": "Notas", - "subscription.note.description": "Este correo se utilizará para informar acerca de nuevos retos", - "contributor.title": "Contributors", - "contributor.subtitle": "Thanks to all the contributors who have helped make this documentation better!", - "sponsors.description": "Big thanks to the people supporting this project: ", - "sponsors.joinButton": "Join the list" -} diff --git a/docs/src/content/i18n/fr.json b/docs/src/content/i18n/fr.json deleted file mode 100644 index 9be86272c..000000000 --- a/docs/src/content/i18n/fr.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "page.title.challenge": "Challenge", - "author.createdBy": "Créé par", - "buttons.email": "Souscrire newsletter", - "buttons.star": "Met une étoile", - "buttons.sponsor": "Sponsorise", - "buttons.clipboardCopy": "Copier!", - "challenge.footer.note": "Note", - "challenge.footer.running": "Démarre le projet en exécutant:", - "challenge.footer.start": "Le titre de ta PR doit commencer par", - "challenge.footer.reminder": "Rappel", - "challenge.footer.communityAnswers": "Solution de la communauté", - "challenge.footer.authorAnswer": "Solution de l'auteur", - "challenge.footer.blogPost": "Article", - "challenge.footer.video": "Video", - "challenge.footer.gettingStarted.title": "Pour faire ce challenge, commencer par lire: ", - "challenge.footer.gettingStarted.link": "Comment Démarrer", - "challenge.footer.upvoteAnswer": "Vous pouvez voter pour une réponse avec un 👍 si vous l'aimez", - "subscription.button": "Souscrit", - "subscription.email": "username@gmail.com", - "subscription.note.title": "Notes", - "subscription.note.description": "Cet email ne sera utilisé que pour envoyer les nouveaux challenges", - "contributor.title": "Contributeurs", - "contributor.subtitle": "Merci à tous les contributeurs qui ont aidé à améliorer cette documentation !", - "sponsors.description": "Un grand merci aux personnes supportant le project: ", - "sponsors.joinButton": "Rejoins-les" -} diff --git a/docs/src/content/i18n/pt.json b/docs/src/content/i18n/pt.json deleted file mode 100644 index 65ed7cfbd..000000000 --- a/docs/src/content/i18n/pt.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "page.title.challenge": "Desafio", - "author.createdBy": "Criado por", - "buttons.email": "Inscrição de Email", - "buttons.star": "Dar uma estrela", - "buttons.sponsor": "Patrocinar", - "buttons.clipboardCopy": "Copiado!", - "404.text": "Página não encontrada. Verifique a URL ou tente usar a barra de busca.", - "challenge.footer.note": "Nota", - "challenge.footer.running": "Rode o projeto executando o comando:", - "challenge.footer.start": "O título do seu PR deve começar com", - "challenge.footer.reminder": "Não esqueça", - "challenge.footer.communityAnswers": "Solução da Comunidade", - "challenge.footer.authorAnswer": "Solução do Autor do Desafio", - "challenge.footer.blogPost": "Artigo", - "challenge.footer.video": "Vídeo", - "challenge.footer.gettingStarted.title": "Para realizar este desafio, comece lendo: ", - "challenge.footer.gettingStarted.link": "Começando", - "challenge.footer.upvoteAnswer": "Você pode curtir uma resposta com 👍 se você gostar dela", - "subscription.button": "Inscrever-se", - "subscription.email": "usuario@gmail.com", - "subscription.note.title": "Notas", - "subscription.note.description": "Este email será apenas usado para enviar atualizações de novos desafios", - "contributor.title": "Contribuidores", - "contributor.subtitle": "Obrigado a todos os contribuidores que ajudaram a melhorar esta documentação!", - "sponsors.description": "Muito obrigado as pessoas que apoiam este projeto: ", - "sponsors.joinButton": "Juntar-se à lista" -} diff --git a/docs/src/content/i18n/ru.json b/docs/src/content/i18n/ru.json deleted file mode 100644 index 6c841cab8..000000000 --- a/docs/src/content/i18n/ru.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "page.title.challenge": "Испытание", - "author.createdBy": "Создано", - "buttons.email": "Подписаться на email рассылку", - "buttons.star": "Добавить звезду", - "buttons.sponsor": "Спонсировать", - "buttons.clipboardCopy": "Скопировано!", - "404.text": "Страница не найдена. Проверьте URL-адрес или воспользуйтесь строкой поиска.", - "challenge.footer.note": "Примечание", - "challenge.footer.running": "Запустите проект, выполнив команду:", - "challenge.footer.start": "Название вашего PR должно начинаться со слов", - "challenge.footer.reminder": "Не забудьте", - "challenge.footer.communityAnswers": "Решения сообщества", - "challenge.footer.authorAnswer": "Решение автора", - "challenge.footer.blogPost": "Статья", - "challenge.footer.video": "Видео", - "challenge.footer.gettingStarted.title": "Чтобы пройти это испытание, прочитайте:", - "challenge.footer.gettingStarted.link": "Первые шаги", - "challenge.footer.upvoteAnswer": "Вы можете проголосовать за ответ 👍 если он вам понравился", - "subscription.button": "Подписаться", - "subscription.email": "username@gmail.com", - "subscription.note.title": "Примечание", - "subscription.note.description": "Этот email будет использоваться только для сообщений о новых испытаниях", - "contributor.title": "Контрибьюторы", - "contributor.subtitle": "Спасибо всем контрибьюторам которые помогли сделать эту документацию лучше!", - "sponsors.description": "Big thanks to the people supporting this project: ", - "sponsors.joinButton": "Join the list" -} diff --git a/docs/src/content/i18n/zh-CN.json b/docs/src/content/i18n/zh-CN.json deleted file mode 100644 index 62cb71ec3..000000000 --- a/docs/src/content/i18n/zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "page.title.challenge": "挑战", - "author.createdBy": "创建者", - "buttons.email": "Email 订阅", - "buttons.star": "给个星星", - "buttons.sponsor": "赞助", - "buttons.clipboardCopy": "已复制!", - "challenge.footer.note": "注意", - "challenge.footer.running": "通过执行启动项目:", - "challenge.footer.start": "您的 PR 标题开头必须是", - "challenge.footer.reminder": "提醒", - "challenge.footer.communityAnswers": "社区解决方案", - "challenge.footer.authorAnswer": "作者的解决方案", - "challenge.footer.blogPost": "文章", - "challenge.footer.video": "视频", - "challenge.footer.gettingStarted.title": "要完成这个挑战,开始阅读: ", - "challenge.footer.gettingStarted.link": "开始", - "challenge.footer.upvoteAnswer": "如果你喜欢,可以使用👍给答案投票", - "subscription.button": "订阅", - "subscription.email": "username@gmail.com", - "subscription.note.title": "注意", - "subscription.note.description": "此电子邮件将仅用于发送新的挑战更新", - "contributor.title": "贡献者", - "contributor.subtitle": "感谢所有帮助本文档变得更好的贡献者!", - "sponsors.description": "非常感谢支持这个项目的人: ", - "sponsors.joinButton": "加入列表" -} diff --git a/docs/src/content/pt/challenges/angular/60-async-redirect.md b/docs/src/content/pt/challenges/angular/60-async-redirect.md deleted file mode 100644 index 4d23adbef..000000000 --- a/docs/src/content/pt/challenges/angular/60-async-redirect.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: 🟢 async-redirect -description: O desafio 60 trata do uso da nova função `redirectTo` no Angular Router para modernizar a lógica de navegação. -author: thomas laforge -contributors: - - tomalaforge -challengeNumber: 60 -command: angular-async-redirect -sidebar: - order: 23 - badge: New ---- - -## Enunciado - -Neste desafio, você está trabalhando com uma aplicação Angular que atualmente utiliza um método personalizado `navigate` em `dashboard.ts` para gerenciar mudanças de rota. Com a introdução da nova função `redirectTo` no Angular Router na versão 20, o objetivo é modernizar o código removendo o antigo método `navigate` e refatorando a aplicação para usar `redirectTo` em toda a lógica de redirecionamento. - -Sua tarefa é: - -- Localizar e deletar o método `navigate` em `dashboard.ts`. -- Refatorar a aplicação para usar a nova função `redirectTo` do Angular Router sempre que for necessário navegar. - -Isso garantirá que a aplicação aproveite os recursos mais recentes do roteamento Angular e mantenha as melhores práticas para navegação e redirecionamento. diff --git a/docs/src/content/ru/challenges/angular/60-async-redirect.md b/docs/src/content/ru/challenges/angular/60-async-redirect.md deleted file mode 100644 index 76527c0af..000000000 --- a/docs/src/content/ru/challenges/angular/60-async-redirect.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: 🟢 async-redirect -description: Задание 60 посвящено использованию новой функции `redirectTo` в Angular Router для модернизации логики навигации. -author: thomas laforge -contributors: - - tomalaforge -challengeNumber: 60 -command: angular-async-redirect -sidebar: - order: 23 - badge: New ---- - -## Условие - -В этом задании вы работаете с Angular-приложением, в котором для смены маршрутов используется собственный метод `navigate` в файле `dashboard.ts`. С появлением новой функции `redirectTo` в Angular Router версии 20, цель — модернизировать кодовую базу, удалив старый метод `navigate` и переработав приложение так, чтобы для всей логики перенаправления использовалась функция `redirectTo`. - -Ваша задача: - -- Найти и удалить метод `navigate` в файле `dashboard.ts`. -- Переписать приложение так, чтобы для навигации использовалась новая функция `redirectTo` из Angular Router везде, где это необходимо. - -Это позволит приложению использовать последние возможности Angular Router и соблюдать лучшие практики навигации и перенаправления. diff --git a/docs/src/content/zh-cn/challenges/angular/60-async-redirect.md b/docs/src/content/zh-cn/challenges/angular/60-async-redirect.md deleted file mode 100644 index ed6a0e261..000000000 --- a/docs/src/content/zh-cn/challenges/angular/60-async-redirect.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: 🟢 async-redirect -description: 挑战 60 旨在使用 Angular Router 的新 `redirectTo` 方法来现代化导航逻辑。 -author: thomas laforge -contributors: - - tomalaforge -challengeNumber: 60 -command: angular-async-redirect -sidebar: - order: 23 - badge: New ---- - -## 说明 - -在本挑战中,你将处理一个 Angular 应用,该应用当前在 `dashboard.ts` 中使用自定义的 `navigate` 方法来处理路由跳转。随着 Angular Router v20 引入了新的 `redirectTo` 方法,目标是通过删除旧的 `navigate` 方法并重构应用,使其在所有需要跳转的地方都使用 `redirectTo`,从而实现代码现代化。 - -你的任务是: - -- 找到并删除 `dashboard.ts` 文件中的 `navigate` 方法; -- 在需要导航的地方,重构应用以使用 Angular Router 的新 `redirectTo` 方法。 - -这样可以确保应用充分利用 Angular 路由的最新特性,并保持导航和重定向的最佳实践。 diff --git a/docs/src/env.d.ts b/docs/src/env.d.ts deleted file mode 100644 index acef35f17..000000000 --- a/docs/src/env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/docs/src/pages/auth/authorize.js b/docs/src/pages/auth/authorize.js deleted file mode 100644 index ec76aedae..000000000 --- a/docs/src/pages/auth/authorize.js +++ /dev/null @@ -1,21 +0,0 @@ -import { toHexString } from '../../utils/encrypt'; - -export const prerender = false; - -const GITHUB_OAUTH_AUTHORIZE_URL = 'https://github.com/login/oauth/authorize'; - -export async function GET({url, redirect}) { - - const myUrl = new URL(url); - const params = new URLSearchParams(myUrl.search); - const redirectUrl = params.get('redirect_uri'); - - const { GITHUB_CLIENT_ID } = import.meta.env; - - - const redirect_uri = `${myUrl.origin}/auth/authorized` - const state = toHexString(redirectUrl); - - const oauthParams = new URLSearchParams({ client_id:GITHUB_CLIENT_ID , redirect_uri, state }); - return redirect(`${GITHUB_OAUTH_AUTHORIZE_URL}?${oauthParams}`, 302) -} diff --git a/docs/src/pages/auth/authorized.js b/docs/src/pages/auth/authorized.js deleted file mode 100644 index f9a81223f..000000000 --- a/docs/src/pages/auth/authorized.js +++ /dev/null @@ -1,58 +0,0 @@ -import { fromHexString } from '../../utils/encrypt'; - -export const prerender = false; - -const GITHUB_OAUTH_ACCESS_TOKEN_URL = 'https://github.com/login/oauth/access_token'; - -export async function GET({ url, redirect, cookies}) { - - const myUrl = new URL(url); - const params = new URLSearchParams(myUrl.search); - const code = params.get('code'); - const state = params.get('state'); - const error = params.get('error'); - - const { GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET } = import.meta.env; - - const redirectUrl = new URL(fromHexString(state)); - - if (error && error === 'access_denied') { - redirect(redirectUrl.href, 302); - return; - } - - const init = { - method: 'POST', - body: new URLSearchParams({ client_id: GITHUB_CLIENT_ID, client_secret: GITHUB_CLIENT_SECRET , code, state }), - headers: { - Accept: 'application/json' - }, - }; - - let accessToken = ''; - let refreshToken = ''; - try { - const response = await fetch(GITHUB_OAUTH_ACCESS_TOKEN_URL, init); - if (response.ok) { - const data = await response.json(); - accessToken = data.access_token; - refreshToken = data.refresh_token; - } else { - throw new Error(`Access token response had status ${response.status}.`); - } - } catch (err) { - return new Response( - JSON.stringify({ - error: err.message - }), { - status: 503 - } - ) - } - - cookies.set('refresh', refreshToken, { secure: true, httpOnly: true, path: '/' }); - - redirectUrl.searchParams.set('token', accessToken); - - return redirect(redirectUrl.href, 302); -} diff --git a/docs/src/pages/auth/refresh.js b/docs/src/pages/auth/refresh.js deleted file mode 100644 index c4dd69bbb..000000000 --- a/docs/src/pages/auth/refresh.js +++ /dev/null @@ -1,62 +0,0 @@ -export const prerender = false; - -const GITHUB_OAUTH_REFRESH_TOKEN = 'https://github.com/login/oauth/access_token'; - -export async function GET({cookies}) { - - const refresh_token = cookies.get('refresh').value; - - const { GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET } = import.meta.env; - - - const init = { - method: 'POST', - body: new URLSearchParams({ client_id: GITHUB_CLIENT_ID, client_secret: GITHUB_CLIENT_SECRET, grant_type: "refresh_token" , refresh_token }), - headers: { - Accept: 'application/json' - }, - }; - - let accessToken = ''; - let refreshToken = ''; - try { - - const response = await fetch(GITHUB_OAUTH_REFRESH_TOKEN, init); - if (response.ok) { - const data = await response.json(); - if(data.error) { - cookies.delete('refresh'); - return new Response( - JSON.stringify({ - token: 'delete' - }), { - status: 200 - } - ) - } - - accessToken = data.access_token; - refreshToken = data.refresh_token; - } else { - throw new Error(`Access token response had status ${response.status}.`); - } - } catch (err) { - return new Response( - JSON.stringify({ - error: err.message - }), { - status: 503 - } - ) - } - - cookies.set('refresh', refreshToken, { secure: true, httpOnly: true, path: '/' }); - - return new Response( - JSON.stringify({ - token: accessToken - }), { - status: 200 - } - ) -} diff --git a/docs/src/styles/custom-css.css b/docs/src/styles/custom-css.css deleted file mode 100644 index 4083f9309..000000000 --- a/docs/src/styles/custom-css.css +++ /dev/null @@ -1,192 +0,0 @@ -:root { - --sl-color-black: #1b1b1d; - --sl-color-gray-6: #242526; - --sl-color-accent-high: #f10023; - --sl-icon-color: #fff; - --sl-color-text-invert: #fff; - --primary-color: var(--sl-color-bg-nav) !important; - --cardBgColor: #242526; - - --sl-color-green: #39a549; - --sl-hue-purple: 41; - --sl-color-purple-low: hsl(var(--sl-hue-orange), 39%, 22%); - --sl-color-purple: hsl(var(--sl-hue-orange), 82%, 63%); - --sl-color-purple-high: hsl(var(--sl-hue-orange), 82%, 87%); - - --color-btn: var(--sl-color-white); - --color-chip: rgb(35, 38, 47); - --color-chip-border: rgba(240, 246, 252, 0.1); - - --button-transition: opacity 100ms ease-in-out; - --button-hover-opacity: 0.85; -} - -:root[data-theme='light'], -[data-theme='light'] { - --sl-color-accent: #f10023; - --sl-color-accent-high: #f10023; - --sl-icon-color: rgb(35, 38, 47); - - --color-btn: white; - --color-chip: white; - --color-chip-border: rgb(33, 38, 45); -} - -html { - scroll-behavior: smooth; -} - -.github-success-btn { - border: 2px solid rgba(240, 246, 252, 0.1); - border-radius: 6px; - padding: 2px 8px; - background-color: rgb(35, 134, 54); - color: var(--color-btn); -} - -.github-neutral-btn { - border: 1px solid rgba(240, 246, 252, 0.1); - border-radius: 6px; - padding: 2px 8px; - background-color: rgb(33, 38, 45); - color: rgb(201, 209, 217); - fill: rgb(201, 209, 217); - display: inline-flex; - width: fit-content; - gap: 6px; - margin: 0px 2px; -} - -a.action, -.button-star, -.article-footer > a, -.button-hover > a.action-button { - transition: var(--button-transition); - - &:hover { - cursor: pointer; - opacity: var(--button-hover-opacity); - transition: var(--button-transition); - - &:not(.primary):not(.button-sponsor) { - opacity: 0.66; - } - } -} - -.article-footer { - margin-top: 3rem !important; - display: flex; - justify-content: center; - flex-wrap: wrap; - gap: 1.5rem; -} - -.article-footer > a { - border: 1px solid var(--sl-color-accent-high); - border-radius: 999rem; - padding: 1rem; - text-decoration: none; - color: var(--color-btn); - box-shadow: var(--sl-shadow-md); - font-size: var(--sl-text-lg); - line-height: var(--sl-line-height-headings); - display: flex; - gap: 0.5rem; - justify-content: center; - align-items: center; - margin-top: 0; - background-color: var(--sl-color-accent-high); - - &.action { - color: var(--color-btn); - } -} - -.article-footer > a > p { - margin: 0px !important; -} - -a.primary, -a.primary > svg { - color: var(--color-btn) !important; -} - -b { - color: var(--sl-color-accent-high) !important; -} - -.starlight-aside--tip b { - color: var(--sl-color-asides-text-accent); -} - -.main-page-footer { - margin-top: 2rem !important; - font-size: var(--sl-text-sm); - text-align: center; -} - -@media (max-width: 799px) { - .main-page-footer { - margin-top: 2rem !important; - font-size: var(--sl-text-xs); - } -} - -starlight-menu-button svg { - color: #1c1a1d; -} - -.right-sidebar-panel { - height: 100%; -} - -.right-sidebar-panel > div { - height: 100%; - display: flex; - flex-direction: column; - justify-content: space-between; -} - -.important-block { - border: solid 1px red; - padding: 16px; - background-color: #f100002e; -} - -.starlight-aside--note, -.starlight-aside--tip { - background-color: transparent; - border: solid 1px gray; - color: var(--sl-color-text); -} - -.starlight-aside--note .starlight-aside__title, -.starlight-aside--tip .starlight-aside__title { - color: var(--sl-color-white); -} - -.starlight-aside--danger { - background-color: #f100002e; - border: solid 1px red; - color: var(--sl-color-text); -} - -.starlight-aside--danger .starlight-aside__title { - color: red; -} - -details { - summary { - cursor: pointer; - } -} - -.body:where(.astro-v5tidmuc) { - height: 100%; -} - - -.astro-kmkmnagf { - align-items: center; -} diff --git a/docs/src/utils/encrypt.ts b/docs/src/utils/encrypt.ts deleted file mode 100644 index 99f5ab03f..000000000 --- a/docs/src/utils/encrypt.ts +++ /dev/null @@ -1,15 +0,0 @@ -export function toHexString(value: string): string { - return value - .split('') - .map((c) => c.charCodeAt(0).toString(16).padStart(2, '0')) - .join(''); -} - -export function fromHexString(hexString: string): string { - return ( - hexString - .match(/.{1,2}/g) - ?.map((byte) => String.fromCharCode(parseInt(byte, 16))) - .join('') ?? '' - ); -} diff --git a/docs/svelte.config.js b/docs/svelte.config.js deleted file mode 100644 index cbaee33df..000000000 --- a/docs/svelte.config.js +++ /dev/null @@ -1,5 +0,0 @@ -import { vitePreprocess } from '@astrojs/svelte'; - -export default { - preprocess: vitePreprocess(), -}; diff --git a/docs/tsconfig.json b/docs/tsconfig.json deleted file mode 100644 index b7243b92c..000000000 --- a/docs/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "astro/tsconfigs/strict", - "compilerOptions": { - "jsx": "react-jsx", - "jsxImportSource": "react" - } -} diff --git a/lessons/animations/lecture/advanced.md b/lessons/animations/lecture/advanced.md new file mode 100644 index 000000000..213a98258 --- /dev/null +++ b/lessons/animations/lecture/advanced.md @@ -0,0 +1 @@ +# Расширенные знания diff --git a/lessons/animations/lecture/basics.md b/lessons/animations/lecture/basics.md new file mode 100644 index 000000000..460854104 --- /dev/null +++ b/lessons/animations/lecture/basics.md @@ -0,0 +1 @@ +# Базовые знания diff --git a/apps/animations/simple-animations/.eslintrc.json b/lessons/animations/tasks/simple-animations/.eslintrc.json similarity index 100% rename from apps/animations/simple-animations/.eslintrc.json rename to lessons/animations/tasks/simple-animations/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/angular/46-simple-animations.md b/lessons/animations/tasks/simple-animations/README.md similarity index 96% rename from docs/src/content/docs/ru/challenges/angular/46-simple-animations.md rename to lessons/animations/tasks/simple-animations/README.md index 04d143c0f..ddcc83941 100644 --- a/docs/src/content/docs/ru/challenges/angular/46-simple-animations.md +++ b/lessons/animations/tasks/simple-animations/README.md @@ -1,3 +1,11 @@ +# Простые анимации + +### Как запускать + +```bash +npm run serve:angular-simple-animations +``` + --- title: 🟢 Простые Анимации description: Задача 46 заключается в изучении animation API интегрированного в Angular diff --git a/apps/animations/simple-animations/jest.config.ts b/lessons/animations/tasks/simple-animations/jest.config.ts similarity index 100% rename from apps/animations/simple-animations/jest.config.ts rename to lessons/animations/tasks/simple-animations/jest.config.ts diff --git a/apps/animations/simple-animations/src/app/app.component.ts b/lessons/animations/tasks/simple-animations/src/app/app.component.ts similarity index 100% rename from apps/animations/simple-animations/src/app/app.component.ts rename to lessons/animations/tasks/simple-animations/src/app/app.component.ts diff --git a/apps/animations/simple-animations/src/app/app.config.ts b/lessons/animations/tasks/simple-animations/src/app/app.config.ts similarity index 100% rename from apps/animations/simple-animations/src/app/app.config.ts rename to lessons/animations/tasks/simple-animations/src/app/app.config.ts diff --git a/apps/.gitkeep b/lessons/animations/tasks/simple-animations/src/assets/.gitkeep similarity index 100% rename from apps/.gitkeep rename to lessons/animations/tasks/simple-animations/src/assets/.gitkeep diff --git a/apps/animations/simple-animations/src/favicon.ico b/lessons/animations/tasks/simple-animations/src/favicon.ico similarity index 100% rename from apps/animations/simple-animations/src/favicon.ico rename to lessons/animations/tasks/simple-animations/src/favicon.ico diff --git a/apps/animations/simple-animations/src/index.html b/lessons/animations/tasks/simple-animations/src/index.html similarity index 100% rename from apps/animations/simple-animations/src/index.html rename to lessons/animations/tasks/simple-animations/src/index.html diff --git a/apps/animations/simple-animations/src/main.ts b/lessons/animations/tasks/simple-animations/src/main.ts similarity index 100% rename from apps/animations/simple-animations/src/main.ts rename to lessons/animations/tasks/simple-animations/src/main.ts diff --git a/apps/animations/simple-animations/src/styles.scss b/lessons/animations/tasks/simple-animations/src/styles.scss similarity index 100% rename from apps/animations/simple-animations/src/styles.scss rename to lessons/animations/tasks/simple-animations/src/styles.scss diff --git a/apps/animations/simple-animations/src/test-setup.ts b/lessons/animations/tasks/simple-animations/src/test-setup.ts similarity index 100% rename from apps/animations/simple-animations/src/test-setup.ts rename to lessons/animations/tasks/simple-animations/src/test-setup.ts diff --git a/apps/animations/view-transition/tailwind.config.js b/lessons/animations/tasks/simple-animations/tailwind.config.js similarity index 63% rename from apps/animations/view-transition/tailwind.config.js rename to lessons/animations/tasks/simple-animations/tailwind.config.js index 38183db2c..e04a557c1 100644 --- a/apps/animations/view-transition/tailwind.config.js +++ b/lessons/animations/tasks/simple-animations/tailwind.config.js @@ -1,11 +1,9 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); const { join } = require('path'); /** @type {import('tailwindcss').Config} */ module.exports = { content: [ join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), ], theme: { extend: {}, diff --git a/apps/dependency-injection/injection-token/tsconfig.app.json b/lessons/animations/tasks/simple-animations/tsconfig.app.json similarity index 100% rename from apps/dependency-injection/injection-token/tsconfig.app.json rename to lessons/animations/tasks/simple-animations/tsconfig.app.json diff --git a/apps/animations/simple-animations/tsconfig.editor.json b/lessons/animations/tasks/simple-animations/tsconfig.editor.json similarity index 100% rename from apps/animations/simple-animations/tsconfig.editor.json rename to lessons/animations/tasks/simple-animations/tsconfig.editor.json diff --git a/apps/best-practices/lazy-load-component/tsconfig.json b/lessons/animations/tasks/simple-animations/tsconfig.json similarity index 93% rename from apps/best-practices/lazy-load-component/tsconfig.json rename to lessons/animations/tasks/simple-animations/tsconfig.json index 4383e7eb8..ad7bd83cf 100644 --- a/apps/best-practices/lazy-load-component/tsconfig.json +++ b/lessons/animations/tasks/simple-animations/tsconfig.json @@ -13,17 +13,17 @@ "files": [], "include": [], "references": [ - { - "path": "./tsconfig.editor.json" - }, { "path": "./tsconfig.app.json" }, { "path": "./tsconfig.spec.json" + }, + { + "path": "./tsconfig.editor.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/dependency-injection/injection-token/tsconfig.spec.json b/lessons/animations/tasks/simple-animations/tsconfig.spec.json similarity index 100% rename from apps/dependency-injection/injection-token/tsconfig.spec.json rename to lessons/animations/tasks/simple-animations/tsconfig.spec.json diff --git a/apps/animations/view-transition/.eslintrc.json b/lessons/animations/tasks/view-transition/.eslintrc.json similarity index 100% rename from apps/animations/view-transition/.eslintrc.json rename to lessons/animations/tasks/view-transition/.eslintrc.json diff --git a/docs/src/content/docs/challenges/angular/44-view-transition.md b/lessons/animations/tasks/view-transition/README.md similarity index 95% rename from docs/src/content/docs/challenges/angular/44-view-transition.md rename to lessons/animations/tasks/view-transition/README.md index 74d0a88bb..eb40954f7 100644 --- a/docs/src/content/docs/challenges/angular/44-view-transition.md +++ b/lessons/animations/tasks/view-transition/README.md @@ -1,3 +1,13 @@ +# View Transition + +### Как запускать + +```bash +npm run serve:angular-view-transition +``` + +### Documentation and Instruction + --- title: 🔴 View Transition description: Challenge 44 is about learning the new view transition animation API @@ -82,3 +92,4 @@ Create the same appealing transition for all thumbnails without duplicating the ### Level 3 Shift to the correct Y location when navigating back and forth. + diff --git a/apps/animations/view-transition/src/app/app.component.ts b/lessons/animations/tasks/view-transition/src/app/app.component.ts similarity index 100% rename from apps/animations/view-transition/src/app/app.component.ts rename to lessons/animations/tasks/view-transition/src/app/app.component.ts diff --git a/apps/animations/view-transition/src/app/app.config.ts b/lessons/animations/tasks/view-transition/src/app/app.config.ts similarity index 100% rename from apps/animations/view-transition/src/app/app.config.ts rename to lessons/animations/tasks/view-transition/src/app/app.config.ts diff --git a/apps/animations/view-transition/src/app/blog/blog.component.ts b/lessons/animations/tasks/view-transition/src/app/blog/blog.component.ts similarity index 100% rename from apps/animations/view-transition/src/app/blog/blog.component.ts rename to lessons/animations/tasks/view-transition/src/app/blog/blog.component.ts diff --git a/apps/animations/view-transition/src/app/blog/thumbnail-header.component.ts b/lessons/animations/tasks/view-transition/src/app/blog/thumbnail-header.component.ts similarity index 100% rename from apps/animations/view-transition/src/app/blog/thumbnail-header.component.ts rename to lessons/animations/tasks/view-transition/src/app/blog/thumbnail-header.component.ts diff --git a/apps/animations/view-transition/src/app/blog/thumbnail.component.ts b/lessons/animations/tasks/view-transition/src/app/blog/thumbnail.component.ts similarity index 100% rename from apps/animations/view-transition/src/app/blog/thumbnail.component.ts rename to lessons/animations/tasks/view-transition/src/app/blog/thumbnail.component.ts diff --git a/apps/animations/view-transition/src/app/data.ts b/lessons/animations/tasks/view-transition/src/app/data.ts similarity index 100% rename from apps/animations/view-transition/src/app/data.ts rename to lessons/animations/tasks/view-transition/src/app/data.ts diff --git a/apps/animations/view-transition/src/app/post.model.ts b/lessons/animations/tasks/view-transition/src/app/post.model.ts similarity index 100% rename from apps/animations/view-transition/src/app/post.model.ts rename to lessons/animations/tasks/view-transition/src/app/post.model.ts diff --git a/apps/animations/view-transition/src/app/post/post-header.component.ts b/lessons/animations/tasks/view-transition/src/app/post/post-header.component.ts similarity index 100% rename from apps/animations/view-transition/src/app/post/post-header.component.ts rename to lessons/animations/tasks/view-transition/src/app/post/post-header.component.ts diff --git a/apps/animations/view-transition/src/app/post/post.component.ts b/lessons/animations/tasks/view-transition/src/app/post/post.component.ts similarity index 100% rename from apps/animations/view-transition/src/app/post/post.component.ts rename to lessons/animations/tasks/view-transition/src/app/post/post.component.ts diff --git a/apps/animations/simple-animations/src/assets/.gitkeep b/lessons/animations/tasks/view-transition/src/assets/.gitkeep similarity index 100% rename from apps/animations/simple-animations/src/assets/.gitkeep rename to lessons/animations/tasks/view-transition/src/assets/.gitkeep diff --git a/apps/animations/view-transition/src/assets/angular.webp b/lessons/animations/tasks/view-transition/src/assets/angular.webp similarity index 100% rename from apps/animations/view-transition/src/assets/angular.webp rename to lessons/animations/tasks/view-transition/src/assets/angular.webp diff --git a/apps/animations/view-transition/src/assets/guard.full.webp b/lessons/animations/tasks/view-transition/src/assets/guard.full.webp similarity index 100% rename from apps/animations/view-transition/src/assets/guard.full.webp rename to lessons/animations/tasks/view-transition/src/assets/guard.full.webp diff --git a/apps/animations/view-transition/src/assets/highly-custom.full.webp b/lessons/animations/tasks/view-transition/src/assets/highly-custom.full.webp similarity index 100% rename from apps/animations/view-transition/src/assets/highly-custom.full.webp rename to lessons/animations/tasks/view-transition/src/assets/highly-custom.full.webp diff --git a/apps/animations/view-transition/src/assets/profil.webp b/lessons/animations/tasks/view-transition/src/assets/profil.webp similarity index 100% rename from apps/animations/view-transition/src/assets/profil.webp rename to lessons/animations/tasks/view-transition/src/assets/profil.webp diff --git a/apps/animations/view-transition/src/assets/signal-cd.full.webp b/lessons/animations/tasks/view-transition/src/assets/signal-cd.full.webp similarity index 100% rename from apps/animations/view-transition/src/assets/signal-cd.full.webp rename to lessons/animations/tasks/view-transition/src/assets/signal-cd.full.webp diff --git a/apps/animations/view-transition/src/favicon.ico b/lessons/animations/tasks/view-transition/src/favicon.ico similarity index 100% rename from apps/animations/view-transition/src/favicon.ico rename to lessons/animations/tasks/view-transition/src/favicon.ico diff --git a/apps/animations/view-transition/src/index.html b/lessons/animations/tasks/view-transition/src/index.html similarity index 100% rename from apps/animations/view-transition/src/index.html rename to lessons/animations/tasks/view-transition/src/index.html diff --git a/apps/animations/view-transition/src/main.ts b/lessons/animations/tasks/view-transition/src/main.ts similarity index 100% rename from apps/animations/view-transition/src/main.ts rename to lessons/animations/tasks/view-transition/src/main.ts diff --git a/apps/animations/view-transition/src/styles.scss b/lessons/animations/tasks/view-transition/src/styles.scss similarity index 100% rename from apps/animations/view-transition/src/styles.scss rename to lessons/animations/tasks/view-transition/src/styles.scss diff --git a/apps/best-practices/lazy-load-component/tailwind.config.js b/lessons/animations/tasks/view-transition/tailwind.config.js similarity index 63% rename from apps/best-practices/lazy-load-component/tailwind.config.js rename to lessons/animations/tasks/view-transition/tailwind.config.js index 38183db2c..e04a557c1 100644 --- a/apps/best-practices/lazy-load-component/tailwind.config.js +++ b/lessons/animations/tasks/view-transition/tailwind.config.js @@ -1,11 +1,9 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); const { join } = require('path'); /** @type {import('tailwindcss').Config} */ module.exports = { content: [ join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), ], theme: { extend: {}, diff --git a/apps/forms/avoid-losing-form-data/tsconfig.app.json b/lessons/animations/tasks/view-transition/tsconfig.app.json similarity index 100% rename from apps/forms/avoid-losing-form-data/tsconfig.app.json rename to lessons/animations/tasks/view-transition/tsconfig.app.json diff --git a/apps/animations/view-transition/tsconfig.editor.json b/lessons/animations/tasks/view-transition/tsconfig.editor.json similarity index 100% rename from apps/animations/view-transition/tsconfig.editor.json rename to lessons/animations/tasks/view-transition/tsconfig.editor.json diff --git a/apps/forms/avoid-losing-form-data/tsconfig.json b/lessons/animations/tasks/view-transition/tsconfig.json similarity index 93% rename from apps/forms/avoid-losing-form-data/tsconfig.json rename to lessons/animations/tasks/view-transition/tsconfig.json index 3df17b921..5ec1db61c 100644 --- a/apps/forms/avoid-losing-form-data/tsconfig.json +++ b/lessons/animations/tasks/view-transition/tsconfig.json @@ -14,13 +14,13 @@ "include": [], "references": [ { - "path": "./tsconfig.editor.json" + "path": "./tsconfig.app.json" }, { - "path": "./tsconfig.app.json" + "path": "./tsconfig.editor.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/lessons/best-practices/lecture/advanced.md b/lessons/best-practices/lecture/advanced.md new file mode 100644 index 000000000..213a98258 --- /dev/null +++ b/lessons/best-practices/lecture/advanced.md @@ -0,0 +1 @@ +# Расширенные знания diff --git a/lessons/best-practices/lecture/basics.md b/lessons/best-practices/lecture/basics.md new file mode 100644 index 000000000..460854104 --- /dev/null +++ b/lessons/best-practices/lecture/basics.md @@ -0,0 +1 @@ +# Базовые знания diff --git a/apps/best-practices/default-vs-onpush/.eslintrc.json b/lessons/best-practices/tasks/default-vs-onpush/.eslintrc.json similarity index 100% rename from apps/best-practices/default-vs-onpush/.eslintrc.json rename to lessons/best-practices/tasks/default-vs-onpush/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/performance/34-default-vs-onpush.md b/lessons/best-practices/tasks/default-vs-onpush/README.md similarity index 96% rename from docs/src/content/docs/ru/challenges/performance/34-default-vs-onpush.md rename to lessons/best-practices/tasks/default-vs-onpush/README.md index 44f3be442..c79915e41 100644 --- a/docs/src/content/docs/ru/challenges/performance/34-default-vs-onpush.md +++ b/lessons/best-practices/tasks/default-vs-onpush/README.md @@ -1,3 +1,13 @@ +# Default vs OnPush + +## Как запускать + +```bash +npm run serve:performance-default-vs-onpush +``` + +## Документация + --- title: 🟢 Default vs OnPush description: Задача 34 заключается в изучении разницы между стратегией обнаружения изменений Default и OnPush. diff --git a/apps/best-practices/default-vs-onpush/src/app/app.component.ts b/lessons/best-practices/tasks/default-vs-onpush/src/app/app.component.ts similarity index 100% rename from apps/best-practices/default-vs-onpush/src/app/app.component.ts rename to lessons/best-practices/tasks/default-vs-onpush/src/app/app.component.ts diff --git a/apps/best-practices/default-vs-onpush/src/app/app.config.ts b/lessons/best-practices/tasks/default-vs-onpush/src/app/app.config.ts similarity index 100% rename from apps/best-practices/default-vs-onpush/src/app/app.config.ts rename to lessons/best-practices/tasks/default-vs-onpush/src/app/app.config.ts diff --git a/apps/best-practices/default-vs-onpush/src/app/person-list.component.ts b/lessons/best-practices/tasks/default-vs-onpush/src/app/person-list.component.ts similarity index 100% rename from apps/best-practices/default-vs-onpush/src/app/person-list.component.ts rename to lessons/best-practices/tasks/default-vs-onpush/src/app/person-list.component.ts diff --git a/apps/best-practices/default-vs-onpush/src/app/random.component.ts b/lessons/best-practices/tasks/default-vs-onpush/src/app/random.component.ts similarity index 100% rename from apps/best-practices/default-vs-onpush/src/app/random.component.ts rename to lessons/best-practices/tasks/default-vs-onpush/src/app/random.component.ts diff --git a/apps/animations/view-transition/src/assets/.gitkeep b/lessons/best-practices/tasks/default-vs-onpush/src/assets/.gitkeep similarity index 100% rename from apps/animations/view-transition/src/assets/.gitkeep rename to lessons/best-practices/tasks/default-vs-onpush/src/assets/.gitkeep diff --git a/apps/best-practices/default-vs-onpush/src/favicon.ico b/lessons/best-practices/tasks/default-vs-onpush/src/favicon.ico similarity index 100% rename from apps/best-practices/default-vs-onpush/src/favicon.ico rename to lessons/best-practices/tasks/default-vs-onpush/src/favicon.ico diff --git a/apps/best-practices/default-vs-onpush/src/index.html b/lessons/best-practices/tasks/default-vs-onpush/src/index.html similarity index 100% rename from apps/best-practices/default-vs-onpush/src/index.html rename to lessons/best-practices/tasks/default-vs-onpush/src/index.html diff --git a/apps/best-practices/default-vs-onpush/src/main.ts b/lessons/best-practices/tasks/default-vs-onpush/src/main.ts similarity index 100% rename from apps/best-practices/default-vs-onpush/src/main.ts rename to lessons/best-practices/tasks/default-vs-onpush/src/main.ts diff --git a/apps/best-practices/default-vs-onpush/src/styles.scss b/lessons/best-practices/tasks/default-vs-onpush/src/styles.scss similarity index 100% rename from apps/best-practices/default-vs-onpush/src/styles.scss rename to lessons/best-practices/tasks/default-vs-onpush/src/styles.scss diff --git a/apps/animations/simple-animations/tailwind.config.js b/lessons/best-practices/tasks/default-vs-onpush/tailwind.config.js similarity index 63% rename from apps/animations/simple-animations/tailwind.config.js rename to lessons/best-practices/tasks/default-vs-onpush/tailwind.config.js index 38183db2c..e04a557c1 100644 --- a/apps/animations/simple-animations/tailwind.config.js +++ b/lessons/best-practices/tasks/default-vs-onpush/tailwind.config.js @@ -1,11 +1,9 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); const { join } = require('path'); /** @type {import('tailwindcss').Config} */ module.exports = { content: [ join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), ], theme: { extend: {}, diff --git a/apps/forms/control-value-accessor/tsconfig.app.json b/lessons/best-practices/tasks/default-vs-onpush/tsconfig.app.json similarity index 100% rename from apps/forms/control-value-accessor/tsconfig.app.json rename to lessons/best-practices/tasks/default-vs-onpush/tsconfig.app.json diff --git a/apps/best-practices/default-vs-onpush/tsconfig.editor.json b/lessons/best-practices/tasks/default-vs-onpush/tsconfig.editor.json similarity index 61% rename from apps/best-practices/default-vs-onpush/tsconfig.editor.json rename to lessons/best-practices/tasks/default-vs-onpush/tsconfig.editor.json index d8c1efdf0..146b6d2da 100644 --- a/apps/best-practices/default-vs-onpush/tsconfig.editor.json +++ b/lessons/best-practices/tasks/default-vs-onpush/tsconfig.editor.json @@ -2,7 +2,7 @@ "extends": "./tsconfig.json", "include": [ "src/**/*.ts", - "../../../libs/shared/directives/src/lib/cd-flashing.directive.ts" + "../../../libs/shared/directives/src/lib/cd-flashing.directive.ts" ], "compilerOptions": { "types": [] diff --git a/apps/best-practices/memoization/tsconfig.json b/lessons/best-practices/tasks/default-vs-onpush/tsconfig.json similarity index 93% rename from apps/best-practices/memoization/tsconfig.json rename to lessons/best-practices/tasks/default-vs-onpush/tsconfig.json index 51c7908c5..5986b0db6 100644 --- a/apps/best-practices/memoization/tsconfig.json +++ b/lessons/best-practices/tasks/default-vs-onpush/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.editor.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/best-practices/lazy-load-component/.eslintrc.json b/lessons/best-practices/tasks/lazy-load-component/.eslintrc.json similarity index 100% rename from apps/best-practices/lazy-load-component/.eslintrc.json rename to lessons/best-practices/tasks/lazy-load-component/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/angular/52-lazy-load-component.md b/lessons/best-practices/tasks/lazy-load-component/README.md similarity index 96% rename from docs/src/content/docs/ru/challenges/angular/52-lazy-load-component.md rename to lessons/best-practices/tasks/lazy-load-component/README.md index a0697c784..748f67e2d 100644 --- a/docs/src/content/docs/ru/challenges/angular/52-lazy-load-component.md +++ b/lessons/best-practices/tasks/lazy-load-component/README.md @@ -1,3 +1,12 @@ +# lazy-load-component + +### Как запускать + +```bash +npm run serve:angular-lazy-load-component +``` + +## Документация --- title: 🟢 Ленивая загрузка компонента description: Испытание 52 посвящено изучению ленивой загрузки компонентов в Angular. diff --git a/apps/best-practices/lazy-load-component/jest.config.ts b/lessons/best-practices/tasks/lazy-load-component/jest.config.ts similarity index 100% rename from apps/best-practices/lazy-load-component/jest.config.ts rename to lessons/best-practices/tasks/lazy-load-component/jest.config.ts diff --git a/apps/best-practices/lazy-load-component/src/app/app.component.ts b/lessons/best-practices/tasks/lazy-load-component/src/app/app.component.ts similarity index 100% rename from apps/best-practices/lazy-load-component/src/app/app.component.ts rename to lessons/best-practices/tasks/lazy-load-component/src/app/app.component.ts diff --git a/apps/best-practices/lazy-load-component/src/app/app.module.ts b/lessons/best-practices/tasks/lazy-load-component/src/app/app.module.ts similarity index 100% rename from apps/best-practices/lazy-load-component/src/app/app.module.ts rename to lessons/best-practices/tasks/lazy-load-component/src/app/app.module.ts diff --git a/apps/best-practices/lazy-load-component/src/app/placeholder.component.ts b/lessons/best-practices/tasks/lazy-load-component/src/app/placeholder.component.ts similarity index 100% rename from apps/best-practices/lazy-load-component/src/app/placeholder.component.ts rename to lessons/best-practices/tasks/lazy-load-component/src/app/placeholder.component.ts diff --git a/apps/best-practices/lazy-load-component/src/app/top.component.ts b/lessons/best-practices/tasks/lazy-load-component/src/app/top.component.ts similarity index 100% rename from apps/best-practices/lazy-load-component/src/app/top.component.ts rename to lessons/best-practices/tasks/lazy-load-component/src/app/top.component.ts diff --git a/apps/best-practices/default-vs-onpush/src/assets/.gitkeep b/lessons/best-practices/tasks/lazy-load-component/src/assets/.gitkeep similarity index 100% rename from apps/best-practices/default-vs-onpush/src/assets/.gitkeep rename to lessons/best-practices/tasks/lazy-load-component/src/assets/.gitkeep diff --git a/apps/best-practices/lazy-load-component/src/favicon.ico b/lessons/best-practices/tasks/lazy-load-component/src/favicon.ico similarity index 100% rename from apps/best-practices/lazy-load-component/src/favicon.ico rename to lessons/best-practices/tasks/lazy-load-component/src/favicon.ico diff --git a/apps/best-practices/lazy-load-component/src/index.html b/lessons/best-practices/tasks/lazy-load-component/src/index.html similarity index 100% rename from apps/best-practices/lazy-load-component/src/index.html rename to lessons/best-practices/tasks/lazy-load-component/src/index.html diff --git a/apps/best-practices/lazy-load-component/src/main.ts b/lessons/best-practices/tasks/lazy-load-component/src/main.ts similarity index 100% rename from apps/best-practices/lazy-load-component/src/main.ts rename to lessons/best-practices/tasks/lazy-load-component/src/main.ts diff --git a/apps/best-practices/lazy-load-component/src/styles.scss b/lessons/best-practices/tasks/lazy-load-component/src/styles.scss similarity index 100% rename from apps/best-practices/lazy-load-component/src/styles.scss rename to lessons/best-practices/tasks/lazy-load-component/src/styles.scss diff --git a/apps/best-practices/lazy-load-component/src/test-setup.ts b/lessons/best-practices/tasks/lazy-load-component/src/test-setup.ts similarity index 100% rename from apps/best-practices/lazy-load-component/src/test-setup.ts rename to lessons/best-practices/tasks/lazy-load-component/src/test-setup.ts diff --git a/apps/best-practices/default-vs-onpush/tailwind.config.js b/lessons/best-practices/tasks/lazy-load-component/tailwind.config.js similarity index 63% rename from apps/best-practices/default-vs-onpush/tailwind.config.js rename to lessons/best-practices/tasks/lazy-load-component/tailwind.config.js index 38183db2c..e04a557c1 100644 --- a/apps/best-practices/default-vs-onpush/tailwind.config.js +++ b/lessons/best-practices/tasks/lazy-load-component/tailwind.config.js @@ -1,11 +1,9 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); const { join } = require('path'); /** @type {import('tailwindcss').Config} */ module.exports = { content: [ join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), ], theme: { extend: {}, diff --git a/apps/rxjs/catch-error/tsconfig.app.json b/lessons/best-practices/tasks/lazy-load-component/tsconfig.app.json similarity index 100% rename from apps/rxjs/catch-error/tsconfig.app.json rename to lessons/best-practices/tasks/lazy-load-component/tsconfig.app.json diff --git a/apps/components-and-templates/content-projection-default/tsconfig.editor.json b/lessons/best-practices/tasks/lazy-load-component/tsconfig.editor.json similarity index 100% rename from apps/components-and-templates/content-projection-default/tsconfig.editor.json rename to lessons/best-practices/tasks/lazy-load-component/tsconfig.editor.json diff --git a/apps/animations/simple-animations/tsconfig.json b/lessons/best-practices/tasks/lazy-load-component/tsconfig.json similarity index 93% rename from apps/animations/simple-animations/tsconfig.json rename to lessons/best-practices/tasks/lazy-load-component/tsconfig.json index 25ca437b4..84f8e79bc 100644 --- a/apps/animations/simple-animations/tsconfig.json +++ b/lessons/best-practices/tasks/lazy-load-component/tsconfig.json @@ -14,16 +14,16 @@ "include": [], "references": [ { - "path": "./tsconfig.app.json" + "path": "./tsconfig.editor.json" }, { - "path": "./tsconfig.spec.json" + "path": "./tsconfig.app.json" }, { - "path": "./tsconfig.editor.json" + "path": "./tsconfig.spec.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/forms/control-value-accessor/tsconfig.spec.json b/lessons/best-practices/tasks/lazy-load-component/tsconfig.spec.json similarity index 100% rename from apps/forms/control-value-accessor/tsconfig.spec.json rename to lessons/best-practices/tasks/lazy-load-component/tsconfig.spec.json diff --git a/apps/best-practices/memoization/.eslintrc.json b/lessons/best-practices/tasks/memoization/.eslintrc.json similarity index 100% rename from apps/best-practices/memoization/.eslintrc.json rename to lessons/best-practices/tasks/memoization/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/performance/35-memoization.md b/lessons/best-practices/tasks/memoization/README.md similarity index 96% rename from docs/src/content/docs/ru/challenges/performance/35-memoization.md rename to lessons/best-practices/tasks/memoization/README.md index 5240262d3..564cf7bc6 100644 --- a/docs/src/content/docs/ru/challenges/performance/35-memoization.md +++ b/lessons/best-practices/tasks/memoization/README.md @@ -1,3 +1,12 @@ +# Memoization + +### Как запускать + +```bash +npm run serve:performance-memoization +``` + +## Документация --- title: 🟢 Мемоизация description: Задача 35 заключается в изучении того, как работает чистые pipe diff --git a/apps/best-practices/memoization/src/app/app.component.ts b/lessons/best-practices/tasks/memoization/src/app/app.component.ts similarity index 100% rename from apps/best-practices/memoization/src/app/app.component.ts rename to lessons/best-practices/tasks/memoization/src/app/app.component.ts diff --git a/apps/best-practices/memoization/src/app/app.config.ts b/lessons/best-practices/tasks/memoization/src/app/app.config.ts similarity index 100% rename from apps/best-practices/memoization/src/app/app.config.ts rename to lessons/best-practices/tasks/memoization/src/app/app.config.ts diff --git a/apps/best-practices/memoization/src/app/generateList.ts b/lessons/best-practices/tasks/memoization/src/app/generateList.ts similarity index 100% rename from apps/best-practices/memoization/src/app/generateList.ts rename to lessons/best-practices/tasks/memoization/src/app/generateList.ts diff --git a/apps/best-practices/memoization/src/app/person-list.component.ts b/lessons/best-practices/tasks/memoization/src/app/person-list.component.ts similarity index 100% rename from apps/best-practices/memoization/src/app/person-list.component.ts rename to lessons/best-practices/tasks/memoization/src/app/person-list.component.ts diff --git a/apps/best-practices/memoization/src/app/person.model.ts b/lessons/best-practices/tasks/memoization/src/app/person.model.ts similarity index 100% rename from apps/best-practices/memoization/src/app/person.model.ts rename to lessons/best-practices/tasks/memoization/src/app/person.model.ts diff --git a/apps/best-practices/lazy-load-component/src/assets/.gitkeep b/lessons/best-practices/tasks/memoization/src/assets/.gitkeep similarity index 100% rename from apps/best-practices/lazy-load-component/src/assets/.gitkeep rename to lessons/best-practices/tasks/memoization/src/assets/.gitkeep diff --git a/apps/best-practices/memoization/src/favicon.ico b/lessons/best-practices/tasks/memoization/src/favicon.ico similarity index 100% rename from apps/best-practices/memoization/src/favicon.ico rename to lessons/best-practices/tasks/memoization/src/favicon.ico diff --git a/apps/best-practices/memoization/src/index.html b/lessons/best-practices/tasks/memoization/src/index.html similarity index 100% rename from apps/best-practices/memoization/src/index.html rename to lessons/best-practices/tasks/memoization/src/index.html diff --git a/apps/best-practices/memoization/src/main.ts b/lessons/best-practices/tasks/memoization/src/main.ts similarity index 100% rename from apps/best-practices/memoization/src/main.ts rename to lessons/best-practices/tasks/memoization/src/main.ts diff --git a/apps/best-practices/memoization/src/styles.scss b/lessons/best-practices/tasks/memoization/src/styles.scss similarity index 100% rename from apps/best-practices/memoization/src/styles.scss rename to lessons/best-practices/tasks/memoization/src/styles.scss diff --git a/lessons/best-practices/tasks/memoization/tailwind.config.js b/lessons/best-practices/tasks/memoization/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/best-practices/tasks/memoization/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/rxjs/hold-to-save-button/tsconfig.app.json b/lessons/best-practices/tasks/memoization/tsconfig.app.json similarity index 100% rename from apps/rxjs/hold-to-save-button/tsconfig.app.json rename to lessons/best-practices/tasks/memoization/tsconfig.app.json diff --git a/apps/best-practices/memoization/tsconfig.editor.json b/lessons/best-practices/tasks/memoization/tsconfig.editor.json similarity index 100% rename from apps/best-practices/memoization/tsconfig.editor.json rename to lessons/best-practices/tasks/memoization/tsconfig.editor.json diff --git a/apps/best-practices/default-vs-onpush/tsconfig.json b/lessons/best-practices/tasks/memoization/tsconfig.json similarity index 93% rename from apps/best-practices/default-vs-onpush/tsconfig.json rename to lessons/best-practices/tasks/memoization/tsconfig.json index 51c7908c5..5986b0db6 100644 --- a/apps/best-practices/default-vs-onpush/tsconfig.json +++ b/lessons/best-practices/tasks/memoization/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.editor.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/best-practices/ngfor-optimization/.eslintrc.json b/lessons/best-practices/tasks/ngfor-optimization/.eslintrc.json similarity index 100% rename from apps/best-practices/ngfor-optimization/.eslintrc.json rename to lessons/best-practices/tasks/ngfor-optimization/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/performance/36-ngfor-optimization.md b/lessons/best-practices/tasks/ngfor-optimization/README.md similarity index 94% rename from docs/src/content/docs/ru/challenges/performance/36-ngfor-optimization.md rename to lessons/best-practices/tasks/ngfor-optimization/README.md index 60949b71e..d6f5a17f3 100644 --- a/docs/src/content/docs/ru/challenges/performance/36-ngfor-optimization.md +++ b/lessons/best-practices/tasks/ngfor-optimization/README.md @@ -1,3 +1,12 @@ +# NgFor Optimization + +### Как запускать + +```bash +npm run serve:performance-ngfor-optimization +``` + +## Документация --- title: 🟢 NgFor Оптимизация description: Задача 36 заключается в изучении того, как работает track by diff --git a/apps/best-practices/ngfor-optimization/jest.config.ts b/lessons/best-practices/tasks/ngfor-optimization/jest.config.ts similarity index 100% rename from apps/best-practices/ngfor-optimization/jest.config.ts rename to lessons/best-practices/tasks/ngfor-optimization/jest.config.ts diff --git a/apps/best-practices/ngfor-optimization/src/app/app.component.ts b/lessons/best-practices/tasks/ngfor-optimization/src/app/app.component.ts similarity index 100% rename from apps/best-practices/ngfor-optimization/src/app/app.component.ts rename to lessons/best-practices/tasks/ngfor-optimization/src/app/app.component.ts diff --git a/apps/best-practices/ngfor-optimization/src/app/app.config.ts b/lessons/best-practices/tasks/ngfor-optimization/src/app/app.config.ts similarity index 100% rename from apps/best-practices/ngfor-optimization/src/app/app.config.ts rename to lessons/best-practices/tasks/ngfor-optimization/src/app/app.config.ts diff --git a/apps/best-practices/ngfor-optimization/src/app/generateList.ts b/lessons/best-practices/tasks/ngfor-optimization/src/app/generateList.ts similarity index 100% rename from apps/best-practices/ngfor-optimization/src/app/generateList.ts rename to lessons/best-practices/tasks/ngfor-optimization/src/app/generateList.ts diff --git a/apps/best-practices/ngfor-optimization/src/app/list.service.ts b/lessons/best-practices/tasks/ngfor-optimization/src/app/list.service.ts similarity index 100% rename from apps/best-practices/ngfor-optimization/src/app/list.service.ts rename to lessons/best-practices/tasks/ngfor-optimization/src/app/list.service.ts diff --git a/apps/best-practices/ngfor-optimization/src/app/person-list.component.ts b/lessons/best-practices/tasks/ngfor-optimization/src/app/person-list.component.ts similarity index 100% rename from apps/best-practices/ngfor-optimization/src/app/person-list.component.ts rename to lessons/best-practices/tasks/ngfor-optimization/src/app/person-list.component.ts diff --git a/apps/best-practices/ngfor-optimization/src/app/person.model.ts b/lessons/best-practices/tasks/ngfor-optimization/src/app/person.model.ts similarity index 100% rename from apps/best-practices/ngfor-optimization/src/app/person.model.ts rename to lessons/best-practices/tasks/ngfor-optimization/src/app/person.model.ts diff --git a/apps/best-practices/memoization/src/assets/.gitkeep b/lessons/best-practices/tasks/ngfor-optimization/src/assets/.gitkeep similarity index 100% rename from apps/best-practices/memoization/src/assets/.gitkeep rename to lessons/best-practices/tasks/ngfor-optimization/src/assets/.gitkeep diff --git a/apps/best-practices/ngfor-optimization/src/favicon.ico b/lessons/best-practices/tasks/ngfor-optimization/src/favicon.ico similarity index 100% rename from apps/best-practices/ngfor-optimization/src/favicon.ico rename to lessons/best-practices/tasks/ngfor-optimization/src/favicon.ico diff --git a/apps/best-practices/ngfor-optimization/src/index.html b/lessons/best-practices/tasks/ngfor-optimization/src/index.html similarity index 100% rename from apps/best-practices/ngfor-optimization/src/index.html rename to lessons/best-practices/tasks/ngfor-optimization/src/index.html diff --git a/apps/best-practices/ngfor-optimization/src/main.ts b/lessons/best-practices/tasks/ngfor-optimization/src/main.ts similarity index 100% rename from apps/best-practices/ngfor-optimization/src/main.ts rename to lessons/best-practices/tasks/ngfor-optimization/src/main.ts diff --git a/apps/best-practices/ngfor-optimization/src/styles.scss b/lessons/best-practices/tasks/ngfor-optimization/src/styles.scss similarity index 100% rename from apps/best-practices/ngfor-optimization/src/styles.scss rename to lessons/best-practices/tasks/ngfor-optimization/src/styles.scss diff --git a/apps/best-practices/ngfor-optimization/src/test-setup.ts b/lessons/best-practices/tasks/ngfor-optimization/src/test-setup.ts similarity index 100% rename from apps/best-practices/ngfor-optimization/src/test-setup.ts rename to lessons/best-practices/tasks/ngfor-optimization/src/test-setup.ts diff --git a/lessons/best-practices/tasks/ngfor-optimization/tailwind.config.js b/lessons/best-practices/tasks/ngfor-optimization/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/best-practices/tasks/ngfor-optimization/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/signal/bug-in-effect/tsconfig.app.json b/lessons/best-practices/tasks/ngfor-optimization/tsconfig.app.json similarity index 100% rename from apps/signal/bug-in-effect/tsconfig.app.json rename to lessons/best-practices/tasks/ngfor-optimization/tsconfig.app.json diff --git a/apps/best-practices/ngfor-optimization/tsconfig.editor.json b/lessons/best-practices/tasks/ngfor-optimization/tsconfig.editor.json similarity index 100% rename from apps/best-practices/ngfor-optimization/tsconfig.editor.json rename to lessons/best-practices/tasks/ngfor-optimization/tsconfig.editor.json diff --git a/apps/dependency-injection/injection-token/tsconfig.json b/lessons/best-practices/tasks/ngfor-optimization/tsconfig.json similarity index 93% rename from apps/dependency-injection/injection-token/tsconfig.json rename to lessons/best-practices/tasks/ngfor-optimization/tsconfig.json index e85865cf5..44ee2c78d 100644 --- a/apps/dependency-injection/injection-token/tsconfig.json +++ b/lessons/best-practices/tasks/ngfor-optimization/tsconfig.json @@ -22,7 +22,7 @@ "path": "./tsconfig.editor.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/rxjs/hold-to-save-button/tsconfig.spec.json b/lessons/best-practices/tasks/ngfor-optimization/tsconfig.spec.json similarity index 100% rename from apps/rxjs/hold-to-save-button/tsconfig.spec.json rename to lessons/best-practices/tasks/ngfor-optimization/tsconfig.spec.json diff --git a/apps/best-practices/optimize-change-detection/.eslintrc.json b/lessons/best-practices/tasks/optimize-change-detection/.eslintrc.json similarity index 100% rename from apps/best-practices/optimize-change-detection/.eslintrc.json rename to lessons/best-practices/tasks/optimize-change-detection/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/performance/12-optimize-change-detection.md b/lessons/best-practices/tasks/optimize-change-detection/README.md similarity index 95% rename from docs/src/content/docs/ru/challenges/performance/12-optimize-change-detection.md rename to lessons/best-practices/tasks/optimize-change-detection/README.md index e79736be9..6a34104b5 100644 --- a/docs/src/content/docs/ru/challenges/performance/12-optimize-change-detection.md +++ b/lessons/best-practices/tasks/optimize-change-detection/README.md @@ -1,3 +1,12 @@ +# Optimize Change Detection + +### Как запускать + +```bash +npm run serve:performance-optimize-change-detection +``` + +## Документация --- title: 🟠 Оптимизация обнаружения изменений description: Задание 12 посвящено оптимизации количества циклов обнаружения изменений при прокрутке diff --git a/apps/best-practices/optimize-change-detection/jest.config.ts b/lessons/best-practices/tasks/optimize-change-detection/jest.config.ts similarity index 100% rename from apps/best-practices/optimize-change-detection/jest.config.ts rename to lessons/best-practices/tasks/optimize-change-detection/jest.config.ts diff --git a/apps/best-practices/optimize-change-detection/src/app/app.component.ts b/lessons/best-practices/tasks/optimize-change-detection/src/app/app.component.ts similarity index 100% rename from apps/best-practices/optimize-change-detection/src/app/app.component.ts rename to lessons/best-practices/tasks/optimize-change-detection/src/app/app.component.ts diff --git a/apps/best-practices/ngfor-optimization/src/assets/.gitkeep b/lessons/best-practices/tasks/optimize-change-detection/src/assets/.gitkeep similarity index 100% rename from apps/best-practices/ngfor-optimization/src/assets/.gitkeep rename to lessons/best-practices/tasks/optimize-change-detection/src/assets/.gitkeep diff --git a/apps/best-practices/optimize-change-detection/src/favicon.ico b/lessons/best-practices/tasks/optimize-change-detection/src/favicon.ico similarity index 100% rename from apps/best-practices/optimize-change-detection/src/favicon.ico rename to lessons/best-practices/tasks/optimize-change-detection/src/favicon.ico diff --git a/apps/best-practices/optimize-change-detection/src/index.html b/lessons/best-practices/tasks/optimize-change-detection/src/index.html similarity index 100% rename from apps/best-practices/optimize-change-detection/src/index.html rename to lessons/best-practices/tasks/optimize-change-detection/src/index.html diff --git a/apps/best-practices/optimize-change-detection/src/main.ts b/lessons/best-practices/tasks/optimize-change-detection/src/main.ts similarity index 100% rename from apps/best-practices/optimize-change-detection/src/main.ts rename to lessons/best-practices/tasks/optimize-change-detection/src/main.ts diff --git a/apps/best-practices/optimize-change-detection/src/styles.scss b/lessons/best-practices/tasks/optimize-change-detection/src/styles.scss similarity index 100% rename from apps/best-practices/optimize-change-detection/src/styles.scss rename to lessons/best-practices/tasks/optimize-change-detection/src/styles.scss diff --git a/apps/best-practices/optimize-change-detection/src/test-setup.ts b/lessons/best-practices/tasks/optimize-change-detection/src/test-setup.ts similarity index 100% rename from apps/best-practices/optimize-change-detection/src/test-setup.ts rename to lessons/best-practices/tasks/optimize-change-detection/src/test-setup.ts diff --git a/apps/signal/forms-and-signal/tsconfig.app.json b/lessons/best-practices/tasks/optimize-change-detection/tsconfig.app.json similarity index 100% rename from apps/signal/forms-and-signal/tsconfig.app.json rename to lessons/best-practices/tasks/optimize-change-detection/tsconfig.app.json diff --git a/apps/best-practices/optimize-change-detection/tsconfig.editor.json b/lessons/best-practices/tasks/optimize-change-detection/tsconfig.editor.json similarity index 100% rename from apps/best-practices/optimize-change-detection/tsconfig.editor.json rename to lessons/best-practices/tasks/optimize-change-detection/tsconfig.editor.json diff --git a/apps/best-practices/ngfor-optimization/tsconfig.json b/lessons/best-practices/tasks/optimize-change-detection/tsconfig.json similarity index 93% rename from apps/best-practices/ngfor-optimization/tsconfig.json rename to lessons/best-practices/tasks/optimize-change-detection/tsconfig.json index e85865cf5..44ee2c78d 100644 --- a/apps/best-practices/ngfor-optimization/tsconfig.json +++ b/lessons/best-practices/tasks/optimize-change-detection/tsconfig.json @@ -22,7 +22,7 @@ "path": "./tsconfig.editor.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/rxjs/race-condition/tsconfig.spec.json b/lessons/best-practices/tasks/optimize-change-detection/tsconfig.spec.json similarity index 100% rename from apps/rxjs/race-condition/tsconfig.spec.json rename to lessons/best-practices/tasks/optimize-change-detection/tsconfig.spec.json diff --git a/lessons/components-and-templates/lecture/advanced.md b/lessons/components-and-templates/lecture/advanced.md new file mode 100644 index 000000000..213a98258 --- /dev/null +++ b/lessons/components-and-templates/lecture/advanced.md @@ -0,0 +1 @@ +# Расширенные знания diff --git a/lessons/components-and-templates/lecture/basics.md b/lessons/components-and-templates/lecture/basics.md new file mode 100644 index 000000000..460854104 --- /dev/null +++ b/lessons/components-and-templates/lecture/basics.md @@ -0,0 +1 @@ +# Базовые знания diff --git a/apps/components-and-templates/content-projection-default/.eslintrc.json b/lessons/components-and-templates/tasks/content-projection-default/.eslintrc.json similarity index 100% rename from apps/components-and-templates/content-projection-default/.eslintrc.json rename to lessons/components-and-templates/tasks/content-projection-default/.eslintrc.json diff --git a/docs/src/content/docs/challenges/angular/57-content-projection-default.md b/lessons/components-and-templates/tasks/content-projection-default/README.md similarity index 91% rename from docs/src/content/docs/challenges/angular/57-content-projection-default.md rename to lessons/components-and-templates/tasks/content-projection-default/README.md index 68bc9454a..90497c179 100644 --- a/docs/src/content/docs/challenges/angular/57-content-projection-default.md +++ b/lessons/components-and-templates/tasks/content-projection-default/README.md @@ -1,3 +1,13 @@ +# Content Projection Default + +### Как запускать + +```bash +npm run serve:angular-content-projection-default +``` + +### Documentation and Instruction + --- title: 🟢 Content Projection Default description: Challenge 57 is about content projection default container @@ -34,3 +44,4 @@ Your task is to refactor the existing shared component to remove all `input` pro - You must use `` for content projection. - Do not introduce additional properties or services to pass data. - Ensure that projected content is correctly styled and positioned as before. + diff --git a/apps/components-and-templates/content-projection-default/public/favicon.ico b/lessons/components-and-templates/tasks/content-projection-default/public/favicon.ico similarity index 100% rename from apps/components-and-templates/content-projection-default/public/favicon.ico rename to lessons/components-and-templates/tasks/content-projection-default/public/favicon.ico diff --git a/apps/components-and-templates/content-projection-default/src/app/app.component.ts b/lessons/components-and-templates/tasks/content-projection-default/src/app/app.component.ts similarity index 100% rename from apps/components-and-templates/content-projection-default/src/app/app.component.ts rename to lessons/components-and-templates/tasks/content-projection-default/src/app/app.component.ts diff --git a/apps/components-and-templates/content-projection-default/src/app/app.config.ts b/lessons/components-and-templates/tasks/content-projection-default/src/app/app.config.ts similarity index 100% rename from apps/components-and-templates/content-projection-default/src/app/app.config.ts rename to lessons/components-and-templates/tasks/content-projection-default/src/app/app.config.ts diff --git a/apps/components-and-templates/content-projection-default/src/app/card.component.ts b/lessons/components-and-templates/tasks/content-projection-default/src/app/card.component.ts similarity index 100% rename from apps/components-and-templates/content-projection-default/src/app/card.component.ts rename to lessons/components-and-templates/tasks/content-projection-default/src/app/card.component.ts diff --git a/apps/components-and-templates/content-projection-default/src/index.html b/lessons/components-and-templates/tasks/content-projection-default/src/index.html similarity index 100% rename from apps/components-and-templates/content-projection-default/src/index.html rename to lessons/components-and-templates/tasks/content-projection-default/src/index.html diff --git a/apps/components-and-templates/content-projection-default/src/main.ts b/lessons/components-and-templates/tasks/content-projection-default/src/main.ts similarity index 100% rename from apps/components-and-templates/content-projection-default/src/main.ts rename to lessons/components-and-templates/tasks/content-projection-default/src/main.ts diff --git a/apps/components-and-templates/content-projection-default/src/styles.scss b/lessons/components-and-templates/tasks/content-projection-default/src/styles.scss similarity index 100% rename from apps/components-and-templates/content-projection-default/src/styles.scss rename to lessons/components-and-templates/tasks/content-projection-default/src/styles.scss diff --git a/lessons/components-and-templates/tasks/content-projection-default/tailwind.config.js b/lessons/components-and-templates/tasks/content-projection-default/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/components-and-templates/tasks/content-projection-default/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/signal/function-call-effect/tsconfig.app.json b/lessons/components-and-templates/tasks/content-projection-default/tsconfig.app.json similarity index 100% rename from apps/signal/function-call-effect/tsconfig.app.json rename to lessons/components-and-templates/tasks/content-projection-default/tsconfig.app.json diff --git a/apps/forms/avoid-losing-form-data/tsconfig.editor.json b/lessons/components-and-templates/tasks/content-projection-default/tsconfig.editor.json similarity index 100% rename from apps/forms/avoid-losing-form-data/tsconfig.editor.json rename to lessons/components-and-templates/tasks/content-projection-default/tsconfig.editor.json diff --git a/apps/components-and-templates/content-projection-default/tsconfig.json b/lessons/components-and-templates/tasks/content-projection-default/tsconfig.json similarity index 93% rename from apps/components-and-templates/content-projection-default/tsconfig.json rename to lessons/components-and-templates/tasks/content-projection-default/tsconfig.json index 1b86db04e..ca98faf01 100644 --- a/apps/components-and-templates/content-projection-default/tsconfig.json +++ b/lessons/components-and-templates/tasks/content-projection-default/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.app.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/components-and-templates/crud-application/.eslintrc.json b/lessons/components-and-templates/tasks/crud-application/.eslintrc.json similarity index 100% rename from apps/components-and-templates/crud-application/.eslintrc.json rename to lessons/components-and-templates/tasks/crud-application/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/angular/5-crud-application.md b/lessons/components-and-templates/tasks/crud-application/README.md similarity index 96% rename from docs/src/content/docs/ru/challenges/angular/5-crud-application.md rename to lessons/components-and-templates/tasks/crud-application/README.md index ae25d5c51..e3ea3d831 100644 --- a/docs/src/content/docs/ru/challenges/angular/5-crud-application.md +++ b/lessons/components-and-templates/tasks/crud-application/README.md @@ -1,3 +1,12 @@ +# Crud application + +### Как запускать + +```bash +npm run serve:angular-crud-application +``` + +## Документация --- title: 🟢 Crud приложение description: Задача 5 посвящена рефакторингу crud-приложения diff --git a/apps/components-and-templates/crud-application/jest.config.ts b/lessons/components-and-templates/tasks/crud-application/jest.config.ts similarity index 100% rename from apps/components-and-templates/crud-application/jest.config.ts rename to lessons/components-and-templates/tasks/crud-application/jest.config.ts diff --git a/apps/components-and-templates/crud-application/src/app/app.component.ts b/lessons/components-and-templates/tasks/crud-application/src/app/app.component.ts similarity index 100% rename from apps/components-and-templates/crud-application/src/app/app.component.ts rename to lessons/components-and-templates/tasks/crud-application/src/app/app.component.ts diff --git a/apps/components-and-templates/crud-application/src/app/app.config.ts b/lessons/components-and-templates/tasks/crud-application/src/app/app.config.ts similarity index 100% rename from apps/components-and-templates/crud-application/src/app/app.config.ts rename to lessons/components-and-templates/tasks/crud-application/src/app/app.config.ts diff --git a/apps/best-practices/optimize-change-detection/src/assets/.gitkeep b/lessons/components-and-templates/tasks/crud-application/src/assets/.gitkeep similarity index 100% rename from apps/best-practices/optimize-change-detection/src/assets/.gitkeep rename to lessons/components-and-templates/tasks/crud-application/src/assets/.gitkeep diff --git a/apps/components-and-templates/crud-application/src/favicon.ico b/lessons/components-and-templates/tasks/crud-application/src/favicon.ico similarity index 100% rename from apps/components-and-templates/crud-application/src/favicon.ico rename to lessons/components-and-templates/tasks/crud-application/src/favicon.ico diff --git a/apps/components-and-templates/crud-application/src/index.html b/lessons/components-and-templates/tasks/crud-application/src/index.html similarity index 100% rename from apps/components-and-templates/crud-application/src/index.html rename to lessons/components-and-templates/tasks/crud-application/src/index.html diff --git a/apps/components-and-templates/crud-application/src/main.ts b/lessons/components-and-templates/tasks/crud-application/src/main.ts similarity index 100% rename from apps/components-and-templates/crud-application/src/main.ts rename to lessons/components-and-templates/tasks/crud-application/src/main.ts diff --git a/apps/components-and-templates/crud-application/src/polyfills.ts b/lessons/components-and-templates/tasks/crud-application/src/polyfills.ts similarity index 100% rename from apps/components-and-templates/crud-application/src/polyfills.ts rename to lessons/components-and-templates/tasks/crud-application/src/polyfills.ts diff --git a/apps/components-and-templates/crud-application/src/styles.scss b/lessons/components-and-templates/tasks/crud-application/src/styles.scss similarity index 100% rename from apps/components-and-templates/crud-application/src/styles.scss rename to lessons/components-and-templates/tasks/crud-application/src/styles.scss diff --git a/apps/components-and-templates/crud-application/src/test-setup.ts b/lessons/components-and-templates/tasks/crud-application/src/test-setup.ts similarity index 100% rename from apps/components-and-templates/crud-application/src/test-setup.ts rename to lessons/components-and-templates/tasks/crud-application/src/test-setup.ts diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.app.json b/lessons/components-and-templates/tasks/crud-application/tsconfig.app.json similarity index 85% rename from apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.app.json rename to lessons/components-and-templates/tasks/crud-application/tsconfig.app.json index d576a6fb8..2a1ca1b8d 100644 --- a/apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.app.json +++ b/lessons/components-and-templates/tasks/crud-application/tsconfig.app.json @@ -7,8 +7,7 @@ "useDefineForClassFields": false, "moduleResolution": "bundler" }, - "files": [ - "src/main.ts", "src/polyfills.ts"], + "files": ["src/main.ts", "src/polyfills.ts"], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] } diff --git a/apps/components-and-templates/crud-application/tsconfig.editor.json b/lessons/components-and-templates/tasks/crud-application/tsconfig.editor.json similarity index 100% rename from apps/components-and-templates/crud-application/tsconfig.editor.json rename to lessons/components-and-templates/tasks/crud-application/tsconfig.editor.json diff --git a/apps/components-and-templates/crud-application/tsconfig.json b/lessons/components-and-templates/tasks/crud-application/tsconfig.json similarity index 93% rename from apps/components-and-templates/crud-application/tsconfig.json rename to lessons/components-and-templates/tasks/crud-application/tsconfig.json index 52eb4f718..9134a053c 100644 --- a/apps/components-and-templates/crud-application/tsconfig.json +++ b/lessons/components-and-templates/tasks/crud-application/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "files": [], "include": [], "references": [ diff --git a/apps/components-and-templates/crud-application/tsconfig.spec.json b/lessons/components-and-templates/tasks/crud-application/tsconfig.spec.json similarity index 59% rename from apps/components-and-templates/crud-application/tsconfig.spec.json rename to lessons/components-and-templates/tasks/crud-application/tsconfig.spec.json index 4d9c75e39..b9534b857 100644 --- a/apps/components-and-templates/crud-application/tsconfig.spec.json +++ b/lessons/components-and-templates/tasks/crud-application/tsconfig.spec.json @@ -5,9 +5,6 @@ "module": "commonjs", "types": ["jest", "node", "@testing-library/jest-dom"] }, - "files": [ - "src/test-setup.ts" - ], - "include": [ - "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] + "files": ["src/test-setup.ts"], + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] } diff --git a/apps/components-and-templates/projection/.eslintrc.json b/lessons/components-and-templates/tasks/projection/.eslintrc.json similarity index 100% rename from apps/components-and-templates/projection/.eslintrc.json rename to lessons/components-and-templates/tasks/projection/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/angular/1-projection.md b/lessons/components-and-templates/tasks/projection/README.md similarity index 97% rename from docs/src/content/docs/ru/challenges/angular/1-projection.md rename to lessons/components-and-templates/tasks/projection/README.md index 3ff9c2ea9..8764a7113 100644 --- a/docs/src/content/docs/ru/challenges/angular/1-projection.md +++ b/lessons/components-and-templates/tasks/projection/README.md @@ -1,3 +1,12 @@ +# Projection + +### Как запускать + +```bash +npm run serve:angular-projection +``` + +## Документация --- title: 🟢 Проекция контента description: Challenge 1 заключается в изучении проекции элементов DOM через компоненты diff --git a/apps/components-and-templates/projection/jest.config.ts b/lessons/components-and-templates/tasks/projection/jest.config.ts similarity index 100% rename from apps/components-and-templates/projection/jest.config.ts rename to lessons/components-and-templates/tasks/projection/jest.config.ts diff --git a/apps/components-and-templates/projection/src/app/app.component.ts b/lessons/components-and-templates/tasks/projection/src/app/app.component.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/app.component.ts rename to lessons/components-and-templates/tasks/projection/src/app/app.component.ts diff --git a/apps/components-and-templates/projection/src/app/component/city-card/city-card.component.ts b/lessons/components-and-templates/tasks/projection/src/app/component/city-card/city-card.component.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/component/city-card/city-card.component.ts rename to lessons/components-and-templates/tasks/projection/src/app/component/city-card/city-card.component.ts diff --git a/apps/components-and-templates/projection/src/app/component/student-card/student-card.component.ts b/lessons/components-and-templates/tasks/projection/src/app/component/student-card/student-card.component.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/component/student-card/student-card.component.ts rename to lessons/components-and-templates/tasks/projection/src/app/component/student-card/student-card.component.ts diff --git a/apps/components-and-templates/projection/src/app/component/teacher-card/teacher-card.component.ts b/lessons/components-and-templates/tasks/projection/src/app/component/teacher-card/teacher-card.component.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/component/teacher-card/teacher-card.component.ts rename to lessons/components-and-templates/tasks/projection/src/app/component/teacher-card/teacher-card.component.ts diff --git a/apps/components-and-templates/projection/src/app/data-access/city.store.ts b/lessons/components-and-templates/tasks/projection/src/app/data-access/city.store.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/data-access/city.store.ts rename to lessons/components-and-templates/tasks/projection/src/app/data-access/city.store.ts diff --git a/apps/components-and-templates/projection/src/app/data-access/fake-http.service.ts b/lessons/components-and-templates/tasks/projection/src/app/data-access/fake-http.service.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/data-access/fake-http.service.ts rename to lessons/components-and-templates/tasks/projection/src/app/data-access/fake-http.service.ts diff --git a/apps/components-and-templates/projection/src/app/data-access/student.store.ts b/lessons/components-and-templates/tasks/projection/src/app/data-access/student.store.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/data-access/student.store.ts rename to lessons/components-and-templates/tasks/projection/src/app/data-access/student.store.ts diff --git a/apps/components-and-templates/projection/src/app/data-access/teacher.store.ts b/lessons/components-and-templates/tasks/projection/src/app/data-access/teacher.store.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/data-access/teacher.store.ts rename to lessons/components-and-templates/tasks/projection/src/app/data-access/teacher.store.ts diff --git a/apps/components-and-templates/projection/src/app/model/card.model.ts b/lessons/components-and-templates/tasks/projection/src/app/model/card.model.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/model/card.model.ts rename to lessons/components-and-templates/tasks/projection/src/app/model/card.model.ts diff --git a/apps/components-and-templates/projection/src/app/model/city.model.ts b/lessons/components-and-templates/tasks/projection/src/app/model/city.model.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/model/city.model.ts rename to lessons/components-and-templates/tasks/projection/src/app/model/city.model.ts diff --git a/apps/components-and-templates/projection/src/app/model/student.model.ts b/lessons/components-and-templates/tasks/projection/src/app/model/student.model.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/model/student.model.ts rename to lessons/components-and-templates/tasks/projection/src/app/model/student.model.ts diff --git a/apps/components-and-templates/projection/src/app/model/teacher.model.ts b/lessons/components-and-templates/tasks/projection/src/app/model/teacher.model.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/model/teacher.model.ts rename to lessons/components-and-templates/tasks/projection/src/app/model/teacher.model.ts diff --git a/apps/components-and-templates/projection/src/app/ui/card/card.component.ts b/lessons/components-and-templates/tasks/projection/src/app/ui/card/card.component.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/ui/card/card.component.ts rename to lessons/components-and-templates/tasks/projection/src/app/ui/card/card.component.ts diff --git a/apps/components-and-templates/projection/src/app/ui/list-item/list-item.component.ts b/lessons/components-and-templates/tasks/projection/src/app/ui/list-item/list-item.component.ts similarity index 100% rename from apps/components-and-templates/projection/src/app/ui/list-item/list-item.component.ts rename to lessons/components-and-templates/tasks/projection/src/app/ui/list-item/list-item.component.ts diff --git a/apps/components-and-templates/crud-application/src/assets/.gitkeep b/lessons/components-and-templates/tasks/projection/src/assets/.gitkeep similarity index 100% rename from apps/components-and-templates/crud-application/src/assets/.gitkeep rename to lessons/components-and-templates/tasks/projection/src/assets/.gitkeep diff --git a/apps/components-and-templates/projection/src/assets/img/city.png b/lessons/components-and-templates/tasks/projection/src/assets/img/city.png similarity index 100% rename from apps/components-and-templates/projection/src/assets/img/city.png rename to lessons/components-and-templates/tasks/projection/src/assets/img/city.png diff --git a/apps/components-and-templates/projection/src/assets/img/student.webp b/lessons/components-and-templates/tasks/projection/src/assets/img/student.webp similarity index 100% rename from apps/components-and-templates/projection/src/assets/img/student.webp rename to lessons/components-and-templates/tasks/projection/src/assets/img/student.webp diff --git a/apps/components-and-templates/projection/src/assets/img/teacher.png b/lessons/components-and-templates/tasks/projection/src/assets/img/teacher.png similarity index 100% rename from apps/components-and-templates/projection/src/assets/img/teacher.png rename to lessons/components-and-templates/tasks/projection/src/assets/img/teacher.png diff --git a/apps/components-and-templates/projection/src/assets/svg/trash.svg b/lessons/components-and-templates/tasks/projection/src/assets/svg/trash.svg similarity index 100% rename from apps/components-and-templates/projection/src/assets/svg/trash.svg rename to lessons/components-and-templates/tasks/projection/src/assets/svg/trash.svg diff --git a/apps/components-and-templates/projection/src/favicon.ico b/lessons/components-and-templates/tasks/projection/src/favicon.ico similarity index 100% rename from apps/components-and-templates/projection/src/favicon.ico rename to lessons/components-and-templates/tasks/projection/src/favicon.ico diff --git a/apps/components-and-templates/projection/src/index.html b/lessons/components-and-templates/tasks/projection/src/index.html similarity index 100% rename from apps/components-and-templates/projection/src/index.html rename to lessons/components-and-templates/tasks/projection/src/index.html diff --git a/apps/components-and-templates/projection/src/main.ts b/lessons/components-and-templates/tasks/projection/src/main.ts similarity index 100% rename from apps/components-and-templates/projection/src/main.ts rename to lessons/components-and-templates/tasks/projection/src/main.ts diff --git a/apps/components-and-templates/projection/src/polyfills.ts b/lessons/components-and-templates/tasks/projection/src/polyfills.ts similarity index 100% rename from apps/components-and-templates/projection/src/polyfills.ts rename to lessons/components-and-templates/tasks/projection/src/polyfills.ts diff --git a/apps/components-and-templates/projection/src/styles.scss b/lessons/components-and-templates/tasks/projection/src/styles.scss similarity index 100% rename from apps/components-and-templates/projection/src/styles.scss rename to lessons/components-and-templates/tasks/projection/src/styles.scss diff --git a/apps/components-and-templates/projection/src/test-setup.ts b/lessons/components-and-templates/tasks/projection/src/test-setup.ts similarity index 100% rename from apps/components-and-templates/projection/src/test-setup.ts rename to lessons/components-and-templates/tasks/projection/src/test-setup.ts diff --git a/lessons/components-and-templates/tasks/projection/tailwind.config.js b/lessons/components-and-templates/tasks/projection/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/components-and-templates/tasks/projection/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/directives-and-pipes/wrap-function-pipe/tsconfig.app.json b/lessons/components-and-templates/tasks/projection/tsconfig.app.json similarity index 85% rename from apps/directives-and-pipes/wrap-function-pipe/tsconfig.app.json rename to lessons/components-and-templates/tasks/projection/tsconfig.app.json index d576a6fb8..2a1ca1b8d 100644 --- a/apps/directives-and-pipes/wrap-function-pipe/tsconfig.app.json +++ b/lessons/components-and-templates/tasks/projection/tsconfig.app.json @@ -7,8 +7,7 @@ "useDefineForClassFields": false, "moduleResolution": "bundler" }, - "files": [ - "src/main.ts", "src/polyfills.ts"], + "files": ["src/main.ts", "src/polyfills.ts"], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] } diff --git a/apps/components-and-templates/projection/tsconfig.editor.json b/lessons/components-and-templates/tasks/projection/tsconfig.editor.json similarity index 100% rename from apps/components-and-templates/projection/tsconfig.editor.json rename to lessons/components-and-templates/tasks/projection/tsconfig.editor.json diff --git a/apps/components-and-templates/projection/tsconfig.json b/lessons/components-and-templates/tasks/projection/tsconfig.json similarity index 93% rename from apps/components-and-templates/projection/tsconfig.json rename to lessons/components-and-templates/tasks/projection/tsconfig.json index 52eb4f718..9134a053c 100644 --- a/apps/components-and-templates/projection/tsconfig.json +++ b/lessons/components-and-templates/tasks/projection/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "files": [], "include": [], "references": [ diff --git a/apps/components-and-templates/projection/tsconfig.spec.json b/lessons/components-and-templates/tasks/projection/tsconfig.spec.json similarity index 55% rename from apps/components-and-templates/projection/tsconfig.spec.json rename to lessons/components-and-templates/tasks/projection/tsconfig.spec.json index 38992e485..7aa46d88c 100644 --- a/apps/components-and-templates/projection/tsconfig.spec.json +++ b/lessons/components-and-templates/tasks/projection/tsconfig.spec.json @@ -5,9 +5,6 @@ "module": "commonjs", "types": ["jest", "node"] }, - "files": [ - "src/test-setup.ts" - ], - "include": [ - "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] + "files": ["src/test-setup.ts"], + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] } diff --git a/lessons/dependency-injection/lecture/advanced.md b/lessons/dependency-injection/lecture/advanced.md new file mode 100644 index 000000000..213a98258 --- /dev/null +++ b/lessons/dependency-injection/lecture/advanced.md @@ -0,0 +1 @@ +# Расширенные знания diff --git a/lessons/dependency-injection/lecture/basics.md b/lessons/dependency-injection/lecture/basics.md new file mode 100644 index 000000000..460854104 --- /dev/null +++ b/lessons/dependency-injection/lecture/basics.md @@ -0,0 +1 @@ +# Базовые знания diff --git a/apps/dependency-injection/injection-token/.eslintrc.json b/lessons/dependency-injection/tasks/injection-token/.eslintrc.json similarity index 100% rename from apps/dependency-injection/injection-token/.eslintrc.json rename to lessons/dependency-injection/tasks/injection-token/.eslintrc.json diff --git a/docs/src/content/docs/challenges/angular/39-injection-token.md b/lessons/dependency-injection/tasks/injection-token/README.md similarity index 91% rename from docs/src/content/docs/challenges/angular/39-injection-token.md rename to lessons/dependency-injection/tasks/injection-token/README.md index 4e2f3119d..7f5d581c7 100644 --- a/docs/src/content/docs/challenges/angular/39-injection-token.md +++ b/lessons/dependency-injection/tasks/injection-token/README.md @@ -1,3 +1,13 @@ +# InjectionToken + +### Как запускать + +```bash +npm run serve:angular-injection-token +``` + +### Documentation and Instruction + --- title: 🟠 InjectionToken description: Challenge 39 is about learning the power of dependency injection diff --git a/apps/dependency-injection/injection-token/jest.config.ts b/lessons/dependency-injection/tasks/injection-token/jest.config.ts similarity index 100% rename from apps/dependency-injection/injection-token/jest.config.ts rename to lessons/dependency-injection/tasks/injection-token/jest.config.ts diff --git a/apps/dependency-injection/injection-token/src/app/app.component.ts b/lessons/dependency-injection/tasks/injection-token/src/app/app.component.ts similarity index 100% rename from apps/dependency-injection/injection-token/src/app/app.component.ts rename to lessons/dependency-injection/tasks/injection-token/src/app/app.component.ts diff --git a/apps/dependency-injection/injection-token/src/app/app.config.ts b/lessons/dependency-injection/tasks/injection-token/src/app/app.config.ts similarity index 100% rename from apps/dependency-injection/injection-token/src/app/app.config.ts rename to lessons/dependency-injection/tasks/injection-token/src/app/app.config.ts diff --git a/apps/dependency-injection/injection-token/src/app/data.ts b/lessons/dependency-injection/tasks/injection-token/src/app/data.ts similarity index 100% rename from apps/dependency-injection/injection-token/src/app/data.ts rename to lessons/dependency-injection/tasks/injection-token/src/app/data.ts diff --git a/apps/dependency-injection/injection-token/src/app/phone.component.ts b/lessons/dependency-injection/tasks/injection-token/src/app/phone.component.ts similarity index 100% rename from apps/dependency-injection/injection-token/src/app/phone.component.ts rename to lessons/dependency-injection/tasks/injection-token/src/app/phone.component.ts diff --git a/apps/dependency-injection/injection-token/src/app/timer-container.component.ts b/lessons/dependency-injection/tasks/injection-token/src/app/timer-container.component.ts similarity index 100% rename from apps/dependency-injection/injection-token/src/app/timer-container.component.ts rename to lessons/dependency-injection/tasks/injection-token/src/app/timer-container.component.ts diff --git a/apps/dependency-injection/injection-token/src/app/timer.component.ts b/lessons/dependency-injection/tasks/injection-token/src/app/timer.component.ts similarity index 100% rename from apps/dependency-injection/injection-token/src/app/timer.component.ts rename to lessons/dependency-injection/tasks/injection-token/src/app/timer.component.ts diff --git a/apps/dependency-injection/injection-token/src/app/video.component.ts b/lessons/dependency-injection/tasks/injection-token/src/app/video.component.ts similarity index 100% rename from apps/dependency-injection/injection-token/src/app/video.component.ts rename to lessons/dependency-injection/tasks/injection-token/src/app/video.component.ts diff --git a/apps/components-and-templates/projection/src/assets/.gitkeep b/lessons/dependency-injection/tasks/injection-token/src/assets/.gitkeep similarity index 100% rename from apps/components-and-templates/projection/src/assets/.gitkeep rename to lessons/dependency-injection/tasks/injection-token/src/assets/.gitkeep diff --git a/apps/dependency-injection/injection-token/src/favicon.ico b/lessons/dependency-injection/tasks/injection-token/src/favicon.ico similarity index 100% rename from apps/dependency-injection/injection-token/src/favicon.ico rename to lessons/dependency-injection/tasks/injection-token/src/favicon.ico diff --git a/apps/dependency-injection/injection-token/src/index.html b/lessons/dependency-injection/tasks/injection-token/src/index.html similarity index 100% rename from apps/dependency-injection/injection-token/src/index.html rename to lessons/dependency-injection/tasks/injection-token/src/index.html diff --git a/apps/dependency-injection/injection-token/src/main.ts b/lessons/dependency-injection/tasks/injection-token/src/main.ts similarity index 100% rename from apps/dependency-injection/injection-token/src/main.ts rename to lessons/dependency-injection/tasks/injection-token/src/main.ts diff --git a/apps/dependency-injection/injection-token/src/styles.scss b/lessons/dependency-injection/tasks/injection-token/src/styles.scss similarity index 100% rename from apps/dependency-injection/injection-token/src/styles.scss rename to lessons/dependency-injection/tasks/injection-token/src/styles.scss diff --git a/apps/dependency-injection/injection-token/src/test-setup.ts b/lessons/dependency-injection/tasks/injection-token/src/test-setup.ts similarity index 100% rename from apps/dependency-injection/injection-token/src/test-setup.ts rename to lessons/dependency-injection/tasks/injection-token/src/test-setup.ts diff --git a/lessons/dependency-injection/tasks/injection-token/tailwind.config.js b/lessons/dependency-injection/tasks/injection-token/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/dependency-injection/tasks/injection-token/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/signal/pipe-observable-to-signal/tsconfig.app.json b/lessons/dependency-injection/tasks/injection-token/tsconfig.app.json similarity index 100% rename from apps/signal/pipe-observable-to-signal/tsconfig.app.json rename to lessons/dependency-injection/tasks/injection-token/tsconfig.app.json diff --git a/apps/dependency-injection/injection-token/tsconfig.editor.json b/lessons/dependency-injection/tasks/injection-token/tsconfig.editor.json similarity index 100% rename from apps/dependency-injection/injection-token/tsconfig.editor.json rename to lessons/dependency-injection/tasks/injection-token/tsconfig.editor.json diff --git a/apps/best-practices/optimize-change-detection/tsconfig.json b/lessons/dependency-injection/tasks/injection-token/tsconfig.json similarity index 93% rename from apps/best-practices/optimize-change-detection/tsconfig.json rename to lessons/dependency-injection/tasks/injection-token/tsconfig.json index e85865cf5..44ee2c78d 100644 --- a/apps/best-practices/optimize-change-detection/tsconfig.json +++ b/lessons/dependency-injection/tasks/injection-token/tsconfig.json @@ -22,7 +22,7 @@ "path": "./tsconfig.editor.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/animations/simple-animations/tsconfig.spec.json b/lessons/dependency-injection/tasks/injection-token/tsconfig.spec.json similarity index 80% rename from apps/animations/simple-animations/tsconfig.spec.json rename to lessons/dependency-injection/tasks/injection-token/tsconfig.spec.json index 9cfdcdeb3..1a4817a7d 100644 --- a/apps/animations/simple-animations/tsconfig.spec.json +++ b/lessons/dependency-injection/tasks/injection-token/tsconfig.spec.json @@ -5,11 +5,9 @@ "module": "commonjs", "types": ["jest", "node", "@testing-library/jest-dom"] }, - "files": [ - "src/test-setup.ts" - ], + "files": ["src/test-setup.ts"], "include": [ - "jest.config.ts", + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts" diff --git a/apps/dependency-injection/master-dependency-injection/.eslintrc.json b/lessons/dependency-injection/tasks/master-dependency-injection/.eslintrc.json similarity index 100% rename from apps/dependency-injection/master-dependency-injection/.eslintrc.json rename to lessons/dependency-injection/tasks/master-dependency-injection/.eslintrc.json diff --git a/docs/src/content/docs/challenges/angular/16-master-dependency-injection.md b/lessons/dependency-injection/tasks/master-dependency-injection/README.md similarity index 87% rename from docs/src/content/docs/challenges/angular/16-master-dependency-injection.md rename to lessons/dependency-injection/tasks/master-dependency-injection/README.md index caf99bd90..052087086 100644 --- a/docs/src/content/docs/challenges/angular/16-master-dependency-injection.md +++ b/lessons/dependency-injection/tasks/master-dependency-injection/README.md @@ -1,3 +1,13 @@ +# Master Dependancy Injection + +### Как запускать + +```bash +npm run serve:angular-master-dependency-injection +``` + +### Documentation and Instruction + --- title: 🔴 Master Dependency Injection description: Challenge 16 is about mastering how dependancy injection works @@ -28,3 +38,4 @@ One way to achieve this is by adding a second argument to the pipe, but this is - You cannot modify the pipe. - You cannot wrap the row inside a component, as this will break the layout. + diff --git a/apps/dependency-injection/master-dependency-injection/src/app/app.component.ts b/lessons/dependency-injection/tasks/master-dependency-injection/src/app/app.component.ts similarity index 100% rename from apps/dependency-injection/master-dependency-injection/src/app/app.component.ts rename to lessons/dependency-injection/tasks/master-dependency-injection/src/app/app.component.ts diff --git a/apps/dependency-injection/master-dependency-injection/src/app/currency.pipe.ts b/lessons/dependency-injection/tasks/master-dependency-injection/src/app/currency.pipe.ts similarity index 100% rename from apps/dependency-injection/master-dependency-injection/src/app/currency.pipe.ts rename to lessons/dependency-injection/tasks/master-dependency-injection/src/app/currency.pipe.ts diff --git a/apps/dependency-injection/master-dependency-injection/src/app/currency.service.ts b/lessons/dependency-injection/tasks/master-dependency-injection/src/app/currency.service.ts similarity index 100% rename from apps/dependency-injection/master-dependency-injection/src/app/currency.service.ts rename to lessons/dependency-injection/tasks/master-dependency-injection/src/app/currency.service.ts diff --git a/apps/dependency-injection/master-dependency-injection/src/app/product.model.ts b/lessons/dependency-injection/tasks/master-dependency-injection/src/app/product.model.ts similarity index 100% rename from apps/dependency-injection/master-dependency-injection/src/app/product.model.ts rename to lessons/dependency-injection/tasks/master-dependency-injection/src/app/product.model.ts diff --git a/apps/dependency-injection/injection-token/src/assets/.gitkeep b/lessons/dependency-injection/tasks/master-dependency-injection/src/assets/.gitkeep similarity index 100% rename from apps/dependency-injection/injection-token/src/assets/.gitkeep rename to lessons/dependency-injection/tasks/master-dependency-injection/src/assets/.gitkeep diff --git a/apps/dependency-injection/master-dependency-injection/src/favicon.ico b/lessons/dependency-injection/tasks/master-dependency-injection/src/favicon.ico similarity index 100% rename from apps/dependency-injection/master-dependency-injection/src/favicon.ico rename to lessons/dependency-injection/tasks/master-dependency-injection/src/favicon.ico diff --git a/apps/dependency-injection/master-dependency-injection/src/index.html b/lessons/dependency-injection/tasks/master-dependency-injection/src/index.html similarity index 100% rename from apps/dependency-injection/master-dependency-injection/src/index.html rename to lessons/dependency-injection/tasks/master-dependency-injection/src/index.html diff --git a/apps/dependency-injection/master-dependency-injection/src/main.ts b/lessons/dependency-injection/tasks/master-dependency-injection/src/main.ts similarity index 100% rename from apps/dependency-injection/master-dependency-injection/src/main.ts rename to lessons/dependency-injection/tasks/master-dependency-injection/src/main.ts diff --git a/apps/dependency-injection/master-dependency-injection/src/styles.scss b/lessons/dependency-injection/tasks/master-dependency-injection/src/styles.scss similarity index 100% rename from apps/dependency-injection/master-dependency-injection/src/styles.scss rename to lessons/dependency-injection/tasks/master-dependency-injection/src/styles.scss diff --git a/apps/signal/signal-input/tsconfig.app.json b/lessons/dependency-injection/tasks/master-dependency-injection/tsconfig.app.json similarity index 100% rename from apps/signal/signal-input/tsconfig.app.json rename to lessons/dependency-injection/tasks/master-dependency-injection/tsconfig.app.json diff --git a/apps/dependency-injection/master-dependency-injection/tsconfig.editor.json b/lessons/dependency-injection/tasks/master-dependency-injection/tsconfig.editor.json similarity index 100% rename from apps/dependency-injection/master-dependency-injection/tsconfig.editor.json rename to lessons/dependency-injection/tasks/master-dependency-injection/tsconfig.editor.json diff --git a/apps/dependency-injection/master-dependency-injection/tsconfig.json b/lessons/dependency-injection/tasks/master-dependency-injection/tsconfig.json similarity index 93% rename from apps/dependency-injection/master-dependency-injection/tsconfig.json rename to lessons/dependency-injection/tasks/master-dependency-injection/tsconfig.json index 51c7908c5..5986b0db6 100644 --- a/apps/dependency-injection/master-dependency-injection/tsconfig.json +++ b/lessons/dependency-injection/tasks/master-dependency-injection/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.editor.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/lessons/directives-and-pipes/lecture/advanced.md b/lessons/directives-and-pipes/lecture/advanced.md new file mode 100644 index 000000000..213a98258 --- /dev/null +++ b/lessons/directives-and-pipes/lecture/advanced.md @@ -0,0 +1 @@ +# Расширенные знания diff --git a/lessons/directives-and-pipes/lecture/basics.md b/lessons/directives-and-pipes/lecture/basics.md new file mode 100644 index 000000000..460854104 --- /dev/null +++ b/lessons/directives-and-pipes/lecture/basics.md @@ -0,0 +1 @@ +# Базовые знания diff --git a/apps/directives-and-pipes/pure-pipe/.eslintrc.json b/lessons/directives-and-pipes/tasks/pure-pipe/.eslintrc.json similarity index 100% rename from apps/directives-and-pipes/pure-pipe/.eslintrc.json rename to lessons/directives-and-pipes/tasks/pure-pipe/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/angular/8-pure-pipe.md b/lessons/directives-and-pipes/tasks/pure-pipe/README.md similarity index 95% rename from docs/src/content/docs/ru/challenges/angular/8-pure-pipe.md rename to lessons/directives-and-pipes/tasks/pure-pipe/README.md index 182262de6..6b13ad254 100644 --- a/docs/src/content/docs/ru/challenges/angular/8-pure-pipe.md +++ b/lessons/directives-and-pipes/tasks/pure-pipe/README.md @@ -1,3 +1,12 @@ +# Pure Pipe + +### Как запускать + +```bash +npm run serve:angular-pure-pipe +``` + +## Документация --- title: 🟢Чистый пайп description: Испытание 8 про создание чистого пайпа diff --git a/apps/directives-and-pipes/pure-pipe/src/app/app.component.ts b/lessons/directives-and-pipes/tasks/pure-pipe/src/app/app.component.ts similarity index 100% rename from apps/directives-and-pipes/pure-pipe/src/app/app.component.ts rename to lessons/directives-and-pipes/tasks/pure-pipe/src/app/app.component.ts diff --git a/apps/dependency-injection/master-dependency-injection/src/assets/.gitkeep b/lessons/directives-and-pipes/tasks/pure-pipe/src/assets/.gitkeep similarity index 100% rename from apps/dependency-injection/master-dependency-injection/src/assets/.gitkeep rename to lessons/directives-and-pipes/tasks/pure-pipe/src/assets/.gitkeep diff --git a/apps/directives-and-pipes/pure-pipe/src/favicon.ico b/lessons/directives-and-pipes/tasks/pure-pipe/src/favicon.ico similarity index 100% rename from apps/directives-and-pipes/pure-pipe/src/favicon.ico rename to lessons/directives-and-pipes/tasks/pure-pipe/src/favicon.ico diff --git a/apps/directives-and-pipes/pure-pipe/src/index.html b/lessons/directives-and-pipes/tasks/pure-pipe/src/index.html similarity index 100% rename from apps/directives-and-pipes/pure-pipe/src/index.html rename to lessons/directives-and-pipes/tasks/pure-pipe/src/index.html diff --git a/apps/directives-and-pipes/pure-pipe/src/main.ts b/lessons/directives-and-pipes/tasks/pure-pipe/src/main.ts similarity index 100% rename from apps/directives-and-pipes/pure-pipe/src/main.ts rename to lessons/directives-and-pipes/tasks/pure-pipe/src/main.ts diff --git a/apps/directives-and-pipes/pure-pipe/src/polyfills.ts b/lessons/directives-and-pipes/tasks/pure-pipe/src/polyfills.ts similarity index 100% rename from apps/directives-and-pipes/pure-pipe/src/polyfills.ts rename to lessons/directives-and-pipes/tasks/pure-pipe/src/polyfills.ts diff --git a/apps/directives-and-pipes/pure-pipe/src/styles.scss b/lessons/directives-and-pipes/tasks/pure-pipe/src/styles.scss similarity index 100% rename from apps/directives-and-pipes/pure-pipe/src/styles.scss rename to lessons/directives-and-pipes/tasks/pure-pipe/src/styles.scss diff --git a/apps/directives-and-pipes/pure-pipe/tsconfig.app.json b/lessons/directives-and-pipes/tasks/pure-pipe/tsconfig.app.json similarity index 85% rename from apps/directives-and-pipes/pure-pipe/tsconfig.app.json rename to lessons/directives-and-pipes/tasks/pure-pipe/tsconfig.app.json index d576a6fb8..2a1ca1b8d 100644 --- a/apps/directives-and-pipes/pure-pipe/tsconfig.app.json +++ b/lessons/directives-and-pipes/tasks/pure-pipe/tsconfig.app.json @@ -7,8 +7,7 @@ "useDefineForClassFields": false, "moduleResolution": "bundler" }, - "files": [ - "src/main.ts", "src/polyfills.ts"], + "files": ["src/main.ts", "src/polyfills.ts"], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] } diff --git a/apps/directives-and-pipes/pure-pipe/tsconfig.editor.json b/lessons/directives-and-pipes/tasks/pure-pipe/tsconfig.editor.json similarity index 100% rename from apps/directives-and-pipes/pure-pipe/tsconfig.editor.json rename to lessons/directives-and-pipes/tasks/pure-pipe/tsconfig.editor.json diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.json b/lessons/directives-and-pipes/tasks/pure-pipe/tsconfig.json similarity index 92% rename from apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.json rename to lessons/directives-and-pipes/tasks/pure-pipe/tsconfig.json index b2dbbf22e..d37528048 100644 --- a/apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.json +++ b/lessons/directives-and-pipes/tasks/pure-pipe/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "files": [], "include": [], "references": [ diff --git a/apps/directives-and-pipes/structural-directive/.eslintrc.json b/lessons/directives-and-pipes/tasks/structural-directive/.eslintrc.json similarity index 100% rename from apps/directives-and-pipes/structural-directive/.eslintrc.json rename to lessons/directives-and-pipes/tasks/structural-directive/.eslintrc.json diff --git a/docs/src/content/docs/challenges/angular/6-structural-directive.md b/lessons/directives-and-pipes/tasks/structural-directive/README.md similarity index 93% rename from docs/src/content/docs/challenges/angular/6-structural-directive.md rename to lessons/directives-and-pipes/tasks/structural-directive/README.md index 48cae6f56..b61278bb4 100644 --- a/docs/src/content/docs/challenges/angular/6-structural-directive.md +++ b/lessons/directives-and-pipes/tasks/structural-directive/README.md @@ -1,3 +1,13 @@ +# Structural Directive + +### Как запускать + +```bash +npm run serve:angular-structural-directive +``` + +### Documentation and Instruction + --- title: 🟠 Structural Directive description: Challenge 6 is about creating a structural directive to handle permissions diff --git a/apps/directives-and-pipes/structural-directive/src/app/app.component.ts b/lessons/directives-and-pipes/tasks/structural-directive/src/app/app.component.ts similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/app/app.component.ts rename to lessons/directives-and-pipes/tasks/structural-directive/src/app/app.component.ts diff --git a/apps/directives-and-pipes/structural-directive/src/app/app.config.ts b/lessons/directives-and-pipes/tasks/structural-directive/src/app/app.config.ts similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/app/app.config.ts rename to lessons/directives-and-pipes/tasks/structural-directive/src/app/app.config.ts diff --git a/apps/directives-and-pipes/structural-directive/src/app/button.component.ts b/lessons/directives-and-pipes/tasks/structural-directive/src/app/button.component.ts similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/app/button.component.ts rename to lessons/directives-and-pipes/tasks/structural-directive/src/app/button.component.ts diff --git a/apps/directives-and-pipes/structural-directive/src/app/dashboard/admin.component.ts b/lessons/directives-and-pipes/tasks/structural-directive/src/app/dashboard/admin.component.ts similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/app/dashboard/admin.component.ts rename to lessons/directives-and-pipes/tasks/structural-directive/src/app/dashboard/admin.component.ts diff --git a/apps/directives-and-pipes/structural-directive/src/app/dashboard/manager.component.ts b/lessons/directives-and-pipes/tasks/structural-directive/src/app/dashboard/manager.component.ts similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/app/dashboard/manager.component.ts rename to lessons/directives-and-pipes/tasks/structural-directive/src/app/dashboard/manager.component.ts diff --git a/apps/directives-and-pipes/structural-directive/src/app/information.component.ts b/lessons/directives-and-pipes/tasks/structural-directive/src/app/information.component.ts similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/app/information.component.ts rename to lessons/directives-and-pipes/tasks/structural-directive/src/app/information.component.ts diff --git a/apps/directives-and-pipes/structural-directive/src/app/login.component.ts b/lessons/directives-and-pipes/tasks/structural-directive/src/app/login.component.ts similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/app/login.component.ts rename to lessons/directives-and-pipes/tasks/structural-directive/src/app/login.component.ts diff --git a/apps/directives-and-pipes/structural-directive/src/app/routes.ts b/lessons/directives-and-pipes/tasks/structural-directive/src/app/routes.ts similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/app/routes.ts rename to lessons/directives-and-pipes/tasks/structural-directive/src/app/routes.ts diff --git a/apps/directives-and-pipes/structural-directive/src/app/user.model.ts b/lessons/directives-and-pipes/tasks/structural-directive/src/app/user.model.ts similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/app/user.model.ts rename to lessons/directives-and-pipes/tasks/structural-directive/src/app/user.model.ts diff --git a/apps/directives-and-pipes/structural-directive/src/app/user.store.ts b/lessons/directives-and-pipes/tasks/structural-directive/src/app/user.store.ts similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/app/user.store.ts rename to lessons/directives-and-pipes/tasks/structural-directive/src/app/user.store.ts diff --git a/apps/directives-and-pipes/pure-pipe/src/assets/.gitkeep b/lessons/directives-and-pipes/tasks/structural-directive/src/assets/.gitkeep similarity index 100% rename from apps/directives-and-pipes/pure-pipe/src/assets/.gitkeep rename to lessons/directives-and-pipes/tasks/structural-directive/src/assets/.gitkeep diff --git a/apps/directives-and-pipes/structural-directive/src/favicon.ico b/lessons/directives-and-pipes/tasks/structural-directive/src/favicon.ico similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/favicon.ico rename to lessons/directives-and-pipes/tasks/structural-directive/src/favicon.ico diff --git a/apps/directives-and-pipes/structural-directive/src/index.html b/lessons/directives-and-pipes/tasks/structural-directive/src/index.html similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/index.html rename to lessons/directives-and-pipes/tasks/structural-directive/src/index.html diff --git a/apps/directives-and-pipes/structural-directive/src/main.ts b/lessons/directives-and-pipes/tasks/structural-directive/src/main.ts similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/main.ts rename to lessons/directives-and-pipes/tasks/structural-directive/src/main.ts diff --git a/apps/directives-and-pipes/structural-directive/src/polyfills.ts b/lessons/directives-and-pipes/tasks/structural-directive/src/polyfills.ts similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/polyfills.ts rename to lessons/directives-and-pipes/tasks/structural-directive/src/polyfills.ts diff --git a/apps/directives-and-pipes/structural-directive/src/styles.scss b/lessons/directives-and-pipes/tasks/structural-directive/src/styles.scss similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/styles.scss rename to lessons/directives-and-pipes/tasks/structural-directive/src/styles.scss diff --git a/lessons/directives-and-pipes/tasks/structural-directive/tailwind.config.js b/lessons/directives-and-pipes/tasks/structural-directive/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/directives-and-pipes/tasks/structural-directive/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/directives-and-pipes/structural-directive/tsconfig.app.json b/lessons/directives-and-pipes/tasks/structural-directive/tsconfig.app.json similarity index 85% rename from apps/directives-and-pipes/structural-directive/tsconfig.app.json rename to lessons/directives-and-pipes/tasks/structural-directive/tsconfig.app.json index d576a6fb8..2a1ca1b8d 100644 --- a/apps/directives-and-pipes/structural-directive/tsconfig.app.json +++ b/lessons/directives-and-pipes/tasks/structural-directive/tsconfig.app.json @@ -7,8 +7,7 @@ "useDefineForClassFields": false, "moduleResolution": "bundler" }, - "files": [ - "src/main.ts", "src/polyfills.ts"], + "files": ["src/main.ts", "src/polyfills.ts"], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] } diff --git a/apps/directives-and-pipes/structural-directive/tsconfig.editor.json b/lessons/directives-and-pipes/tasks/structural-directive/tsconfig.editor.json similarity index 100% rename from apps/directives-and-pipes/structural-directive/tsconfig.editor.json rename to lessons/directives-and-pipes/tasks/structural-directive/tsconfig.editor.json diff --git a/apps/directives-and-pipes/structural-directive/tsconfig.json b/lessons/directives-and-pipes/tasks/structural-directive/tsconfig.json similarity index 92% rename from apps/directives-and-pipes/structural-directive/tsconfig.json rename to lessons/directives-and-pipes/tasks/structural-directive/tsconfig.json index b2dbbf22e..d37528048 100644 --- a/apps/directives-and-pipes/structural-directive/tsconfig.json +++ b/lessons/directives-and-pipes/tasks/structural-directive/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "files": [], "include": [], "references": [ diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/.eslintrc.json b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/.eslintrc.json similarity index 100% rename from apps/directives-and-pipes/utility-wrapper-pipe/.eslintrc.json rename to lessons/directives-and-pipes/tasks/utility-wrapper-pipe/.eslintrc.json diff --git a/docs/src/content/docs/challenges/angular/10-utility-wrapper-pipe.md b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/README.md similarity index 92% rename from docs/src/content/docs/challenges/angular/10-utility-wrapper-pipe.md rename to lessons/directives-and-pipes/tasks/utility-wrapper-pipe/README.md index f74bb1612..e0989cf0b 100644 --- a/docs/src/content/docs/challenges/angular/10-utility-wrapper-pipe.md +++ b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/README.md @@ -1,3 +1,13 @@ +# Utility Wrapper Pipe + +### Как запускать + +```bash +npm run serve:angular-utility-wrapper-pipe +``` + +### Documentation and Instruction + --- title: 🔴 Utility Wrapper Pipe description: Challenge 10 is about creating a pipe to wrap utilities diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/src/app/app.component.ts b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/app/app.component.ts similarity index 100% rename from apps/directives-and-pipes/utility-wrapper-pipe/src/app/app.component.ts rename to lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/app/app.component.ts diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/src/app/person.utils.ts b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/app/person.utils.ts similarity index 100% rename from apps/directives-and-pipes/utility-wrapper-pipe/src/app/person.utils.ts rename to lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/app/person.utils.ts diff --git a/apps/directives-and-pipes/structural-directive/src/assets/.gitkeep b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/assets/.gitkeep similarity index 100% rename from apps/directives-and-pipes/structural-directive/src/assets/.gitkeep rename to lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/assets/.gitkeep diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/src/favicon.ico b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/favicon.ico similarity index 100% rename from apps/directives-and-pipes/utility-wrapper-pipe/src/favicon.ico rename to lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/favicon.ico diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/src/index.html b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/index.html similarity index 100% rename from apps/directives-and-pipes/utility-wrapper-pipe/src/index.html rename to lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/index.html diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/src/main.ts b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/main.ts similarity index 100% rename from apps/directives-and-pipes/utility-wrapper-pipe/src/main.ts rename to lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/main.ts diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/src/polyfills.ts b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/polyfills.ts similarity index 100% rename from apps/directives-and-pipes/utility-wrapper-pipe/src/polyfills.ts rename to lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/polyfills.ts diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/src/styles.scss b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/styles.scss similarity index 100% rename from apps/directives-and-pipes/utility-wrapper-pipe/src/styles.scss rename to lessons/directives-and-pipes/tasks/utility-wrapper-pipe/src/styles.scss diff --git a/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/tsconfig.app.json b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/tsconfig.app.json new file mode 100644 index 000000000..2a1ca1b8d --- /dev/null +++ b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "target": "ES2022", + "useDefineForClassFields": false, + "moduleResolution": "bundler" + }, + "files": ["src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] +} diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.editor.json b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/tsconfig.editor.json similarity index 100% rename from apps/directives-and-pipes/utility-wrapper-pipe/tsconfig.editor.json rename to lessons/directives-and-pipes/tasks/utility-wrapper-pipe/tsconfig.editor.json diff --git a/apps/directives-and-pipes/wrap-function-pipe/tsconfig.json b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/tsconfig.json similarity index 92% rename from apps/directives-and-pipes/wrap-function-pipe/tsconfig.json rename to lessons/directives-and-pipes/tasks/utility-wrapper-pipe/tsconfig.json index b2dbbf22e..d37528048 100644 --- a/apps/directives-and-pipes/wrap-function-pipe/tsconfig.json +++ b/lessons/directives-and-pipes/tasks/utility-wrapper-pipe/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "files": [], "include": [], "references": [ diff --git a/apps/directives-and-pipes/wrap-function-pipe/.eslintrc.json b/lessons/directives-and-pipes/tasks/wrap-function-pipe/.eslintrc.json similarity index 100% rename from apps/directives-and-pipes/wrap-function-pipe/.eslintrc.json rename to lessons/directives-and-pipes/tasks/wrap-function-pipe/.eslintrc.json diff --git a/docs/src/content/docs/challenges/angular/9-wrap-function-pipe.md b/lessons/directives-and-pipes/tasks/wrap-function-pipe/README.md similarity index 93% rename from docs/src/content/docs/challenges/angular/9-wrap-function-pipe.md rename to lessons/directives-and-pipes/tasks/wrap-function-pipe/README.md index 5213fb079..e2b69ceb4 100644 --- a/docs/src/content/docs/challenges/angular/9-wrap-function-pipe.md +++ b/lessons/directives-and-pipes/tasks/wrap-function-pipe/README.md @@ -1,3 +1,13 @@ +# Wrap Function Pipe + +### Как запускать + +```bash +npm run serve:angular-wrap-function-pipe +``` + +### Documentation and Instruction + --- title: 🟠 Wrap Function Pipe description: Challenge 9 is about creating a pipe to wrap component fonctions diff --git a/apps/directives-and-pipes/wrap-function-pipe/src/app/app.component.ts b/lessons/directives-and-pipes/tasks/wrap-function-pipe/src/app/app.component.ts similarity index 100% rename from apps/directives-and-pipes/wrap-function-pipe/src/app/app.component.ts rename to lessons/directives-and-pipes/tasks/wrap-function-pipe/src/app/app.component.ts diff --git a/apps/directives-and-pipes/utility-wrapper-pipe/src/assets/.gitkeep b/lessons/directives-and-pipes/tasks/wrap-function-pipe/src/assets/.gitkeep similarity index 100% rename from apps/directives-and-pipes/utility-wrapper-pipe/src/assets/.gitkeep rename to lessons/directives-and-pipes/tasks/wrap-function-pipe/src/assets/.gitkeep diff --git a/apps/directives-and-pipes/wrap-function-pipe/src/favicon.ico b/lessons/directives-and-pipes/tasks/wrap-function-pipe/src/favicon.ico similarity index 100% rename from apps/directives-and-pipes/wrap-function-pipe/src/favicon.ico rename to lessons/directives-and-pipes/tasks/wrap-function-pipe/src/favicon.ico diff --git a/apps/directives-and-pipes/wrap-function-pipe/src/index.html b/lessons/directives-and-pipes/tasks/wrap-function-pipe/src/index.html similarity index 100% rename from apps/directives-and-pipes/wrap-function-pipe/src/index.html rename to lessons/directives-and-pipes/tasks/wrap-function-pipe/src/index.html diff --git a/apps/directives-and-pipes/wrap-function-pipe/src/main.ts b/lessons/directives-and-pipes/tasks/wrap-function-pipe/src/main.ts similarity index 100% rename from apps/directives-and-pipes/wrap-function-pipe/src/main.ts rename to lessons/directives-and-pipes/tasks/wrap-function-pipe/src/main.ts diff --git a/apps/directives-and-pipes/wrap-function-pipe/src/polyfills.ts b/lessons/directives-and-pipes/tasks/wrap-function-pipe/src/polyfills.ts similarity index 100% rename from apps/directives-and-pipes/wrap-function-pipe/src/polyfills.ts rename to lessons/directives-and-pipes/tasks/wrap-function-pipe/src/polyfills.ts diff --git a/apps/directives-and-pipes/wrap-function-pipe/src/styles.scss b/lessons/directives-and-pipes/tasks/wrap-function-pipe/src/styles.scss similarity index 100% rename from apps/directives-and-pipes/wrap-function-pipe/src/styles.scss rename to lessons/directives-and-pipes/tasks/wrap-function-pipe/src/styles.scss diff --git a/lessons/directives-and-pipes/tasks/wrap-function-pipe/tsconfig.app.json b/lessons/directives-and-pipes/tasks/wrap-function-pipe/tsconfig.app.json new file mode 100644 index 000000000..2a1ca1b8d --- /dev/null +++ b/lessons/directives-and-pipes/tasks/wrap-function-pipe/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "target": "ES2022", + "useDefineForClassFields": false, + "moduleResolution": "bundler" + }, + "files": ["src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"] +} diff --git a/apps/directives-and-pipes/wrap-function-pipe/tsconfig.editor.json b/lessons/directives-and-pipes/tasks/wrap-function-pipe/tsconfig.editor.json similarity index 100% rename from apps/directives-and-pipes/wrap-function-pipe/tsconfig.editor.json rename to lessons/directives-and-pipes/tasks/wrap-function-pipe/tsconfig.editor.json diff --git a/apps/directives-and-pipes/pure-pipe/tsconfig.json b/lessons/directives-and-pipes/tasks/wrap-function-pipe/tsconfig.json similarity index 92% rename from apps/directives-and-pipes/pure-pipe/tsconfig.json rename to lessons/directives-and-pipes/tasks/wrap-function-pipe/tsconfig.json index b2dbbf22e..d37528048 100644 --- a/apps/directives-and-pipes/pure-pipe/tsconfig.json +++ b/lessons/directives-and-pipes/tasks/wrap-function-pipe/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "files": [], "include": [], "references": [ diff --git a/lessons/forms/lecture/advanced.md b/lessons/forms/lecture/advanced.md new file mode 100644 index 000000000..213a98258 --- /dev/null +++ b/lessons/forms/lecture/advanced.md @@ -0,0 +1 @@ +# Расширенные знания diff --git a/lessons/forms/lecture/basics.md b/lessons/forms/lecture/basics.md new file mode 100644 index 000000000..460854104 --- /dev/null +++ b/lessons/forms/lecture/basics.md @@ -0,0 +1 @@ +# Базовые знания diff --git a/apps/forms/avoid-losing-form-data/.eslintrc.json b/lessons/forms/tasks/avoid-losing-form-data/.eslintrc.json similarity index 100% rename from apps/forms/avoid-losing-form-data/.eslintrc.json rename to lessons/forms/tasks/avoid-losing-form-data/.eslintrc.json diff --git a/docs/src/content/docs/challenges/forms/48-avoid-losing-form-data.md b/lessons/forms/tasks/avoid-losing-form-data/README.md similarity index 94% rename from docs/src/content/docs/challenges/forms/48-avoid-losing-form-data.md rename to lessons/forms/tasks/avoid-losing-form-data/README.md index 1af6c52c4..a2aa28285 100644 --- a/docs/src/content/docs/challenges/forms/48-avoid-losing-form-data.md +++ b/lessons/forms/tasks/avoid-losing-form-data/README.md @@ -1,3 +1,11 @@ +# Avoid losing form data + +### Как запускать + +```bash +npm run serve:forms-avoid-losing-form-data +``` + --- title: 🟠 Avoid losing form data description: Challenge 48 is about Bob 🧙‍♂️ the product owner, he wants to develop a new feature in response to customer complaints about losing form input information. @@ -38,3 +46,5 @@ Here's the feature expressed as a user story with a functional expectation:
  • Use the CanDeactivate guard in the new functional approach.
  • + + diff --git a/apps/forms/avoid-losing-form-data/src/app/app.component.ts b/lessons/forms/tasks/avoid-losing-form-data/src/app/app.component.ts similarity index 100% rename from apps/forms/avoid-losing-form-data/src/app/app.component.ts rename to lessons/forms/tasks/avoid-losing-form-data/src/app/app.component.ts diff --git a/apps/forms/avoid-losing-form-data/src/app/app.config.ts b/lessons/forms/tasks/avoid-losing-form-data/src/app/app.config.ts similarity index 100% rename from apps/forms/avoid-losing-form-data/src/app/app.config.ts rename to lessons/forms/tasks/avoid-losing-form-data/src/app/app.config.ts diff --git a/apps/forms/avoid-losing-form-data/src/app/app.routes.ts b/lessons/forms/tasks/avoid-losing-form-data/src/app/app.routes.ts similarity index 100% rename from apps/forms/avoid-losing-form-data/src/app/app.routes.ts rename to lessons/forms/tasks/avoid-losing-form-data/src/app/app.routes.ts diff --git a/apps/forms/avoid-losing-form-data/src/app/pages/join.component.ts b/lessons/forms/tasks/avoid-losing-form-data/src/app/pages/join.component.ts similarity index 100% rename from apps/forms/avoid-losing-form-data/src/app/pages/join.component.ts rename to lessons/forms/tasks/avoid-losing-form-data/src/app/pages/join.component.ts diff --git a/apps/forms/avoid-losing-form-data/src/app/pages/page.component.ts b/lessons/forms/tasks/avoid-losing-form-data/src/app/pages/page.component.ts similarity index 100% rename from apps/forms/avoid-losing-form-data/src/app/pages/page.component.ts rename to lessons/forms/tasks/avoid-losing-form-data/src/app/pages/page.component.ts diff --git a/apps/forms/avoid-losing-form-data/src/app/ui/dialog.component.ts b/lessons/forms/tasks/avoid-losing-form-data/src/app/ui/dialog.component.ts similarity index 100% rename from apps/forms/avoid-losing-form-data/src/app/ui/dialog.component.ts rename to lessons/forms/tasks/avoid-losing-form-data/src/app/ui/dialog.component.ts diff --git a/apps/forms/avoid-losing-form-data/src/app/ui/form.component.ts b/lessons/forms/tasks/avoid-losing-form-data/src/app/ui/form.component.ts similarity index 100% rename from apps/forms/avoid-losing-form-data/src/app/ui/form.component.ts rename to lessons/forms/tasks/avoid-losing-form-data/src/app/ui/form.component.ts diff --git a/apps/forms/avoid-losing-form-data/src/app/ui/nav.component.ts b/lessons/forms/tasks/avoid-losing-form-data/src/app/ui/nav.component.ts similarity index 100% rename from apps/forms/avoid-losing-form-data/src/app/ui/nav.component.ts rename to lessons/forms/tasks/avoid-losing-form-data/src/app/ui/nav.component.ts diff --git a/apps/directives-and-pipes/wrap-function-pipe/src/assets/.gitkeep b/lessons/forms/tasks/avoid-losing-form-data/src/assets/.gitkeep similarity index 100% rename from apps/directives-and-pipes/wrap-function-pipe/src/assets/.gitkeep rename to lessons/forms/tasks/avoid-losing-form-data/src/assets/.gitkeep diff --git a/apps/forms/avoid-losing-form-data/src/favicon.ico b/lessons/forms/tasks/avoid-losing-form-data/src/favicon.ico similarity index 100% rename from apps/forms/avoid-losing-form-data/src/favicon.ico rename to lessons/forms/tasks/avoid-losing-form-data/src/favicon.ico diff --git a/apps/forms/avoid-losing-form-data/src/index.html b/lessons/forms/tasks/avoid-losing-form-data/src/index.html similarity index 100% rename from apps/forms/avoid-losing-form-data/src/index.html rename to lessons/forms/tasks/avoid-losing-form-data/src/index.html diff --git a/apps/forms/avoid-losing-form-data/src/main.ts b/lessons/forms/tasks/avoid-losing-form-data/src/main.ts similarity index 100% rename from apps/forms/avoid-losing-form-data/src/main.ts rename to lessons/forms/tasks/avoid-losing-form-data/src/main.ts diff --git a/apps/forms/avoid-losing-form-data/src/styles.scss b/lessons/forms/tasks/avoid-losing-form-data/src/styles.scss similarity index 100% rename from apps/forms/avoid-losing-form-data/src/styles.scss rename to lessons/forms/tasks/avoid-losing-form-data/src/styles.scss diff --git a/apps/forms/avoid-losing-form-data/tailwind.config.js b/lessons/forms/tasks/avoid-losing-form-data/tailwind.config.js similarity index 65% rename from apps/forms/avoid-losing-form-data/tailwind.config.js rename to lessons/forms/tasks/avoid-losing-form-data/tailwind.config.js index 16f83c7f4..8716dc3c6 100644 --- a/apps/forms/avoid-losing-form-data/tailwind.config.js +++ b/lessons/forms/tasks/avoid-losing-form-data/tailwind.config.js @@ -1,11 +1,9 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); const { join } = require('path'); /** @type {import('tailwindcss').Config} */ module.exports = { content: [ join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), - ...createGlobPatternsForDependencies(__dirname), ], theme: { extend: {}, diff --git a/apps/best-practices/memoization/tsconfig.app.json b/lessons/forms/tasks/avoid-losing-form-data/tsconfig.app.json similarity index 87% rename from apps/best-practices/memoization/tsconfig.app.json rename to lessons/forms/tasks/avoid-losing-form-data/tsconfig.app.json index 403fe4f54..8b5631268 100644 --- a/apps/best-practices/memoization/tsconfig.app.json +++ b/lessons/forms/tasks/avoid-losing-form-data/tsconfig.app.json @@ -5,9 +5,7 @@ "types": [], "moduleResolution": "bundler" }, - "files": [ - "src/main.ts" - ], + "files": ["src/main.ts"], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] } diff --git a/apps/rxjs/hold-to-save-button/tsconfig.editor.json b/lessons/forms/tasks/avoid-losing-form-data/tsconfig.editor.json similarity index 100% rename from apps/rxjs/hold-to-save-button/tsconfig.editor.json rename to lessons/forms/tasks/avoid-losing-form-data/tsconfig.editor.json diff --git a/apps/animations/view-transition/tsconfig.json b/lessons/forms/tasks/avoid-losing-form-data/tsconfig.json similarity index 93% rename from apps/animations/view-transition/tsconfig.json rename to lessons/forms/tasks/avoid-losing-form-data/tsconfig.json index b94f8837d..830507fe9 100644 --- a/apps/animations/view-transition/tsconfig.json +++ b/lessons/forms/tasks/avoid-losing-form-data/tsconfig.json @@ -14,13 +14,13 @@ "include": [], "references": [ { - "path": "./tsconfig.app.json" + "path": "./tsconfig.editor.json" }, { - "path": "./tsconfig.editor.json" + "path": "./tsconfig.app.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/forms/control-value-accessor/.eslintrc.json b/lessons/forms/tasks/control-value-accessor/.eslintrc.json similarity index 100% rename from apps/forms/control-value-accessor/.eslintrc.json rename to lessons/forms/tasks/control-value-accessor/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/forms/41-control-value-accessor.md b/lessons/forms/tasks/control-value-accessor/README.md similarity index 94% rename from docs/src/content/docs/ru/challenges/forms/41-control-value-accessor.md rename to lessons/forms/tasks/control-value-accessor/README.md index 00f898f4f..8775649b0 100644 --- a/docs/src/content/docs/ru/challenges/forms/41-control-value-accessor.md +++ b/lessons/forms/tasks/control-value-accessor/README.md @@ -1,3 +1,12 @@ +# Control Value Accessor + +### Как запускать + +```bash +npm run serve:forms-control-value-accessor +``` + +## Документация --- title: 🟠 Control Value Accessor description: Испытание 41 про создание пользовательское поле формы которое использует интерфейс ControlValueAccessor. diff --git a/apps/forms/control-value-accessor/jest.config.ts b/lessons/forms/tasks/control-value-accessor/jest.config.ts similarity index 100% rename from apps/forms/control-value-accessor/jest.config.ts rename to lessons/forms/tasks/control-value-accessor/jest.config.ts diff --git a/apps/forms/control-value-accessor/src/app/app.component.ts b/lessons/forms/tasks/control-value-accessor/src/app/app.component.ts similarity index 100% rename from apps/forms/control-value-accessor/src/app/app.component.ts rename to lessons/forms/tasks/control-value-accessor/src/app/app.component.ts diff --git a/apps/forms/control-value-accessor/src/app/feedback-form/feedback-form.component.html b/lessons/forms/tasks/control-value-accessor/src/app/feedback-form/feedback-form.component.html similarity index 100% rename from apps/forms/control-value-accessor/src/app/feedback-form/feedback-form.component.html rename to lessons/forms/tasks/control-value-accessor/src/app/feedback-form/feedback-form.component.html diff --git a/apps/forms/control-value-accessor/src/app/feedback-form/feedback-form.component.scss b/lessons/forms/tasks/control-value-accessor/src/app/feedback-form/feedback-form.component.scss similarity index 100% rename from apps/forms/control-value-accessor/src/app/feedback-form/feedback-form.component.scss rename to lessons/forms/tasks/control-value-accessor/src/app/feedback-form/feedback-form.component.scss diff --git a/apps/forms/control-value-accessor/src/app/feedback-form/feedback-form.component.ts b/lessons/forms/tasks/control-value-accessor/src/app/feedback-form/feedback-form.component.ts similarity index 100% rename from apps/forms/control-value-accessor/src/app/feedback-form/feedback-form.component.ts rename to lessons/forms/tasks/control-value-accessor/src/app/feedback-form/feedback-form.component.ts diff --git a/apps/forms/control-value-accessor/src/app/rating-control/rating-control.component.html b/lessons/forms/tasks/control-value-accessor/src/app/rating-control/rating-control.component.html similarity index 100% rename from apps/forms/control-value-accessor/src/app/rating-control/rating-control.component.html rename to lessons/forms/tasks/control-value-accessor/src/app/rating-control/rating-control.component.html diff --git a/apps/forms/control-value-accessor/src/app/rating-control/rating-control.component.scss b/lessons/forms/tasks/control-value-accessor/src/app/rating-control/rating-control.component.scss similarity index 100% rename from apps/forms/control-value-accessor/src/app/rating-control/rating-control.component.scss rename to lessons/forms/tasks/control-value-accessor/src/app/rating-control/rating-control.component.scss diff --git a/apps/forms/control-value-accessor/src/app/rating-control/rating-control.component.ts b/lessons/forms/tasks/control-value-accessor/src/app/rating-control/rating-control.component.ts similarity index 100% rename from apps/forms/control-value-accessor/src/app/rating-control/rating-control.component.ts rename to lessons/forms/tasks/control-value-accessor/src/app/rating-control/rating-control.component.ts diff --git a/apps/forms/avoid-losing-form-data/src/assets/.gitkeep b/lessons/forms/tasks/control-value-accessor/src/assets/.gitkeep similarity index 100% rename from apps/forms/avoid-losing-form-data/src/assets/.gitkeep rename to lessons/forms/tasks/control-value-accessor/src/assets/.gitkeep diff --git a/apps/forms/control-value-accessor/src/favicon.ico b/lessons/forms/tasks/control-value-accessor/src/favicon.ico similarity index 100% rename from apps/forms/control-value-accessor/src/favicon.ico rename to lessons/forms/tasks/control-value-accessor/src/favicon.ico diff --git a/apps/forms/control-value-accessor/src/index.html b/lessons/forms/tasks/control-value-accessor/src/index.html similarity index 100% rename from apps/forms/control-value-accessor/src/index.html rename to lessons/forms/tasks/control-value-accessor/src/index.html diff --git a/apps/forms/control-value-accessor/src/main.ts b/lessons/forms/tasks/control-value-accessor/src/main.ts similarity index 100% rename from apps/forms/control-value-accessor/src/main.ts rename to lessons/forms/tasks/control-value-accessor/src/main.ts diff --git a/apps/forms/control-value-accessor/src/styles.scss b/lessons/forms/tasks/control-value-accessor/src/styles.scss similarity index 100% rename from apps/forms/control-value-accessor/src/styles.scss rename to lessons/forms/tasks/control-value-accessor/src/styles.scss diff --git a/apps/forms/control-value-accessor/src/test-setup.ts b/lessons/forms/tasks/control-value-accessor/src/test-setup.ts similarity index 100% rename from apps/forms/control-value-accessor/src/test-setup.ts rename to lessons/forms/tasks/control-value-accessor/src/test-setup.ts diff --git a/lessons/forms/tasks/control-value-accessor/tailwind.config.js b/lessons/forms/tasks/control-value-accessor/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/forms/tasks/control-value-accessor/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/animations/view-transition/tsconfig.app.json b/lessons/forms/tasks/control-value-accessor/tsconfig.app.json similarity index 87% rename from apps/animations/view-transition/tsconfig.app.json rename to lessons/forms/tasks/control-value-accessor/tsconfig.app.json index 403fe4f54..8b5631268 100644 --- a/apps/animations/view-transition/tsconfig.app.json +++ b/lessons/forms/tasks/control-value-accessor/tsconfig.app.json @@ -5,9 +5,7 @@ "types": [], "moduleResolution": "bundler" }, - "files": [ - "src/main.ts" - ], + "files": ["src/main.ts"], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] } diff --git a/apps/forms/control-value-accessor/tsconfig.editor.json b/lessons/forms/tasks/control-value-accessor/tsconfig.editor.json similarity index 100% rename from apps/forms/control-value-accessor/tsconfig.editor.json rename to lessons/forms/tasks/control-value-accessor/tsconfig.editor.json diff --git a/apps/forms/control-value-accessor/tsconfig.json b/lessons/forms/tasks/control-value-accessor/tsconfig.json similarity index 93% rename from apps/forms/control-value-accessor/tsconfig.json rename to lessons/forms/tasks/control-value-accessor/tsconfig.json index 25ca437b4..b12f9b1c0 100644 --- a/apps/forms/control-value-accessor/tsconfig.json +++ b/lessons/forms/tasks/control-value-accessor/tsconfig.json @@ -23,7 +23,7 @@ "path": "./tsconfig.editor.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/best-practices/lazy-load-component/tsconfig.spec.json b/lessons/forms/tasks/control-value-accessor/tsconfig.spec.json similarity index 80% rename from apps/best-practices/lazy-load-component/tsconfig.spec.json rename to lessons/forms/tasks/control-value-accessor/tsconfig.spec.json index 9cfdcdeb3..1a4817a7d 100644 --- a/apps/best-practices/lazy-load-component/tsconfig.spec.json +++ b/lessons/forms/tasks/control-value-accessor/tsconfig.spec.json @@ -5,11 +5,9 @@ "module": "commonjs", "types": ["jest", "node", "@testing-library/jest-dom"] }, - "files": [ - "src/test-setup.ts" - ], + "files": ["src/test-setup.ts"], "include": [ - "jest.config.ts", + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts" diff --git a/lessons/routing/lecture/advanced.md b/lessons/routing/lecture/advanced.md new file mode 100644 index 000000000..213a98258 --- /dev/null +++ b/lessons/routing/lecture/advanced.md @@ -0,0 +1 @@ +# Расширенные знания diff --git a/lessons/routing/lecture/basics.md b/lessons/routing/lecture/basics.md new file mode 100644 index 000000000..460854104 --- /dev/null +++ b/lessons/routing/lecture/basics.md @@ -0,0 +1 @@ +# Базовые знания diff --git a/apps/routing/anchor-navigation/.eslintrc.json b/lessons/routing/tasks/anchor-navigation/.eslintrc.json similarity index 100% rename from apps/routing/anchor-navigation/.eslintrc.json rename to lessons/routing/tasks/anchor-navigation/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/angular/21-anchor-navigation.md b/lessons/routing/tasks/anchor-navigation/README.md similarity index 90% rename from docs/src/content/docs/ru/challenges/angular/21-anchor-navigation.md rename to lessons/routing/tasks/anchor-navigation/README.md index cfcf035c3..f0da73dd2 100644 --- a/docs/src/content/docs/ru/challenges/angular/21-anchor-navigation.md +++ b/lessons/routing/tasks/anchor-navigation/README.md @@ -1,3 +1,12 @@ +# Anchor Navigation + +### Как запускать + +```bash +npm run serve:angular-anchor-navigation +``` + +## Документация --- title: 🟢Навигация по якорю description: Испытание 21 про навигацию на странице с помощью якоря diff --git a/apps/routing/anchor-navigation/jest.config.ts b/lessons/routing/tasks/anchor-navigation/jest.config.ts similarity index 100% rename from apps/routing/anchor-navigation/jest.config.ts rename to lessons/routing/tasks/anchor-navigation/jest.config.ts diff --git a/apps/routing/anchor-navigation/src/app/app.component.ts b/lessons/routing/tasks/anchor-navigation/src/app/app.component.ts similarity index 100% rename from apps/routing/anchor-navigation/src/app/app.component.ts rename to lessons/routing/tasks/anchor-navigation/src/app/app.component.ts diff --git a/apps/routing/anchor-navigation/src/app/app.config.ts b/lessons/routing/tasks/anchor-navigation/src/app/app.config.ts similarity index 100% rename from apps/routing/anchor-navigation/src/app/app.config.ts rename to lessons/routing/tasks/anchor-navigation/src/app/app.config.ts diff --git a/apps/routing/anchor-navigation/src/app/app.routes.ts b/lessons/routing/tasks/anchor-navigation/src/app/app.routes.ts similarity index 100% rename from apps/routing/anchor-navigation/src/app/app.routes.ts rename to lessons/routing/tasks/anchor-navigation/src/app/app.routes.ts diff --git a/apps/routing/anchor-navigation/src/app/foo.component.ts b/lessons/routing/tasks/anchor-navigation/src/app/foo.component.ts similarity index 100% rename from apps/routing/anchor-navigation/src/app/foo.component.ts rename to lessons/routing/tasks/anchor-navigation/src/app/foo.component.ts diff --git a/apps/routing/anchor-navigation/src/app/home.component.ts b/lessons/routing/tasks/anchor-navigation/src/app/home.component.ts similarity index 100% rename from apps/routing/anchor-navigation/src/app/home.component.ts rename to lessons/routing/tasks/anchor-navigation/src/app/home.component.ts diff --git a/apps/routing/anchor-navigation/src/app/nav-button.component.ts b/lessons/routing/tasks/anchor-navigation/src/app/nav-button.component.ts similarity index 100% rename from apps/routing/anchor-navigation/src/app/nav-button.component.ts rename to lessons/routing/tasks/anchor-navigation/src/app/nav-button.component.ts diff --git a/apps/forms/control-value-accessor/src/assets/.gitkeep b/lessons/routing/tasks/anchor-navigation/src/assets/.gitkeep similarity index 100% rename from apps/forms/control-value-accessor/src/assets/.gitkeep rename to lessons/routing/tasks/anchor-navigation/src/assets/.gitkeep diff --git a/apps/routing/anchor-navigation/src/favicon.ico b/lessons/routing/tasks/anchor-navigation/src/favicon.ico similarity index 100% rename from apps/routing/anchor-navigation/src/favicon.ico rename to lessons/routing/tasks/anchor-navigation/src/favicon.ico diff --git a/apps/routing/anchor-navigation/src/index.html b/lessons/routing/tasks/anchor-navigation/src/index.html similarity index 100% rename from apps/routing/anchor-navigation/src/index.html rename to lessons/routing/tasks/anchor-navigation/src/index.html diff --git a/apps/routing/anchor-navigation/src/main.ts b/lessons/routing/tasks/anchor-navigation/src/main.ts similarity index 100% rename from apps/routing/anchor-navigation/src/main.ts rename to lessons/routing/tasks/anchor-navigation/src/main.ts diff --git a/apps/routing/anchor-navigation/src/styles.scss b/lessons/routing/tasks/anchor-navigation/src/styles.scss similarity index 100% rename from apps/routing/anchor-navigation/src/styles.scss rename to lessons/routing/tasks/anchor-navigation/src/styles.scss diff --git a/apps/routing/anchor-navigation/src/test-setup.ts b/lessons/routing/tasks/anchor-navigation/src/test-setup.ts similarity index 100% rename from apps/routing/anchor-navigation/src/test-setup.ts rename to lessons/routing/tasks/anchor-navigation/src/test-setup.ts diff --git a/lessons/routing/tasks/anchor-navigation/tailwind.config.js b/lessons/routing/tasks/anchor-navigation/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/routing/tasks/anchor-navigation/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/best-practices/default-vs-onpush/tsconfig.app.json b/lessons/routing/tasks/anchor-navigation/tsconfig.app.json similarity index 87% rename from apps/best-practices/default-vs-onpush/tsconfig.app.json rename to lessons/routing/tasks/anchor-navigation/tsconfig.app.json index 403fe4f54..8b5631268 100644 --- a/apps/best-practices/default-vs-onpush/tsconfig.app.json +++ b/lessons/routing/tasks/anchor-navigation/tsconfig.app.json @@ -5,9 +5,7 @@ "types": [], "moduleResolution": "bundler" }, - "files": [ - "src/main.ts" - ], + "files": ["src/main.ts"], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] } diff --git a/apps/routing/anchor-navigation/tsconfig.editor.json b/lessons/routing/tasks/anchor-navigation/tsconfig.editor.json similarity index 100% rename from apps/routing/anchor-navigation/tsconfig.editor.json rename to lessons/routing/tasks/anchor-navigation/tsconfig.editor.json diff --git a/apps/routing/anchor-navigation/tsconfig.json b/lessons/routing/tasks/anchor-navigation/tsconfig.json similarity index 93% rename from apps/routing/anchor-navigation/tsconfig.json rename to lessons/routing/tasks/anchor-navigation/tsconfig.json index e85865cf5..44ee2c78d 100644 --- a/apps/routing/anchor-navigation/tsconfig.json +++ b/lessons/routing/tasks/anchor-navigation/tsconfig.json @@ -22,7 +22,7 @@ "path": "./tsconfig.editor.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/routing/anchor-navigation/tsconfig.spec.json b/lessons/routing/tasks/anchor-navigation/tsconfig.spec.json similarity index 78% rename from apps/routing/anchor-navigation/tsconfig.spec.json rename to lessons/routing/tasks/anchor-navigation/tsconfig.spec.json index 173fe9a7d..ca14cc622 100644 --- a/apps/routing/anchor-navigation/tsconfig.spec.json +++ b/lessons/routing/tasks/anchor-navigation/tsconfig.spec.json @@ -5,11 +5,9 @@ "module": "commonjs", "types": ["jest", "node"] }, - "files": [ - "src/test-setup.ts" - ], + "files": ["src/test-setup.ts"], "include": [ - "jest.config.ts", + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts" diff --git a/apps/routing/async-redirect/.eslintrc.json b/lessons/routing/tasks/async-redirect/.eslintrc.json similarity index 100% rename from apps/routing/async-redirect/.eslintrc.json rename to lessons/routing/tasks/async-redirect/.eslintrc.json diff --git a/docs/src/content/es/challenges/angular/60-async-redirect.md b/lessons/routing/tasks/async-redirect/README.md similarity index 89% rename from docs/src/content/es/challenges/angular/60-async-redirect.md rename to lessons/routing/tasks/async-redirect/README.md index 795fc2453..3e41ae05b 100644 --- a/docs/src/content/es/challenges/angular/60-async-redirect.md +++ b/lessons/routing/tasks/async-redirect/README.md @@ -1,3 +1,13 @@ +# async-redirect + +### Как запускать + +```bash +npm run serve:angular-async-redirect +``` + +### Documentation and Instruction + --- title: 🟢 async-redirect description: El desafío 60 trata sobre el uso de la nueva función `redirectTo` en Angular Router para modernizar la lógica de navegación. diff --git a/apps/routing/async-redirect/public/favicon.ico b/lessons/routing/tasks/async-redirect/public/favicon.ico similarity index 100% rename from apps/routing/async-redirect/public/favicon.ico rename to lessons/routing/tasks/async-redirect/public/favicon.ico diff --git a/apps/routing/async-redirect/src/app/admin-page.ts b/lessons/routing/tasks/async-redirect/src/app/admin-page.ts similarity index 100% rename from apps/routing/async-redirect/src/app/admin-page.ts rename to lessons/routing/tasks/async-redirect/src/app/admin-page.ts diff --git a/apps/routing/async-redirect/src/app/app.config.ts b/lessons/routing/tasks/async-redirect/src/app/app.config.ts similarity index 100% rename from apps/routing/async-redirect/src/app/app.config.ts rename to lessons/routing/tasks/async-redirect/src/app/app.config.ts diff --git a/apps/routing/async-redirect/src/app/app.ts b/lessons/routing/tasks/async-redirect/src/app/app.ts similarity index 100% rename from apps/routing/async-redirect/src/app/app.ts rename to lessons/routing/tasks/async-redirect/src/app/app.ts diff --git a/apps/routing/async-redirect/src/app/dashboard.ts b/lessons/routing/tasks/async-redirect/src/app/dashboard.ts similarity index 100% rename from apps/routing/async-redirect/src/app/dashboard.ts rename to lessons/routing/tasks/async-redirect/src/app/dashboard.ts diff --git a/apps/routing/async-redirect/src/app/profile-page.ts b/lessons/routing/tasks/async-redirect/src/app/profile-page.ts similarity index 100% rename from apps/routing/async-redirect/src/app/profile-page.ts rename to lessons/routing/tasks/async-redirect/src/app/profile-page.ts diff --git a/apps/routing/async-redirect/src/app/routes.ts b/lessons/routing/tasks/async-redirect/src/app/routes.ts similarity index 100% rename from apps/routing/async-redirect/src/app/routes.ts rename to lessons/routing/tasks/async-redirect/src/app/routes.ts diff --git a/apps/routing/async-redirect/src/app/user-page.ts b/lessons/routing/tasks/async-redirect/src/app/user-page.ts similarity index 100% rename from apps/routing/async-redirect/src/app/user-page.ts rename to lessons/routing/tasks/async-redirect/src/app/user-page.ts diff --git a/apps/routing/async-redirect/src/app/user-profile.service.ts b/lessons/routing/tasks/async-redirect/src/app/user-profile.service.ts similarity index 100% rename from apps/routing/async-redirect/src/app/user-profile.service.ts rename to lessons/routing/tasks/async-redirect/src/app/user-profile.service.ts diff --git a/apps/routing/async-redirect/src/index.html b/lessons/routing/tasks/async-redirect/src/index.html similarity index 100% rename from apps/routing/async-redirect/src/index.html rename to lessons/routing/tasks/async-redirect/src/index.html diff --git a/apps/routing/async-redirect/src/main.ts b/lessons/routing/tasks/async-redirect/src/main.ts similarity index 100% rename from apps/routing/async-redirect/src/main.ts rename to lessons/routing/tasks/async-redirect/src/main.ts diff --git a/apps/routing/async-redirect/src/styles.scss b/lessons/routing/tasks/async-redirect/src/styles.scss similarity index 100% rename from apps/routing/async-redirect/src/styles.scss rename to lessons/routing/tasks/async-redirect/src/styles.scss diff --git a/lessons/routing/tasks/async-redirect/tailwind.config.js b/lessons/routing/tasks/async-redirect/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/routing/tasks/async-redirect/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/apps/routing/async-redirect/tsconfig.app.json b/lessons/routing/tasks/async-redirect/tsconfig.app.json similarity index 100% rename from apps/routing/async-redirect/tsconfig.app.json rename to lessons/routing/tasks/async-redirect/tsconfig.app.json diff --git a/apps/routing/async-redirect/tsconfig.json b/lessons/routing/tasks/async-redirect/tsconfig.json similarity index 93% rename from apps/routing/async-redirect/tsconfig.json rename to lessons/routing/tasks/async-redirect/tsconfig.json index e70623587..bfc7233fb 100644 --- a/apps/routing/async-redirect/tsconfig.json +++ b/lessons/routing/tasks/async-redirect/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "compilerOptions": { "strict": true, "noImplicitOverride": true, diff --git a/apps/routing/router-input/.eslintrc.json b/lessons/routing/tasks/router-input/.eslintrc.json similarity index 100% rename from apps/routing/router-input/.eslintrc.json rename to lessons/routing/tasks/router-input/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/angular/22-router-input.md b/lessons/routing/tasks/router-input/README.md similarity index 93% rename from docs/src/content/docs/ru/challenges/angular/22-router-input.md rename to lessons/routing/tasks/router-input/README.md index 5d1a3e78e..8eb6f9683 100644 --- a/docs/src/content/docs/ru/challenges/angular/22-router-input.md +++ b/lessons/routing/tasks/router-input/README.md @@ -1,3 +1,12 @@ +# @RouterInput() + +### Как запускать + +```bash +npm run serve:angular-router-input +``` + +## Документация --- title: 🟢 @RouterInput() description: Задача 22 заключается в использовании декоратора @Input для получения параметров маршрутизатора. diff --git a/apps/routing/router-input/src/app/app.component.ts b/lessons/routing/tasks/router-input/src/app/app.component.ts similarity index 100% rename from apps/routing/router-input/src/app/app.component.ts rename to lessons/routing/tasks/router-input/src/app/app.component.ts diff --git a/apps/routing/router-input/src/app/app.config.ts b/lessons/routing/tasks/router-input/src/app/app.config.ts similarity index 100% rename from apps/routing/router-input/src/app/app.config.ts rename to lessons/routing/tasks/router-input/src/app/app.config.ts diff --git a/apps/routing/router-input/src/app/app.routes.ts b/lessons/routing/tasks/router-input/src/app/app.routes.ts similarity index 100% rename from apps/routing/router-input/src/app/app.routes.ts rename to lessons/routing/tasks/router-input/src/app/app.routes.ts diff --git a/apps/routing/router-input/src/app/home.component.ts b/lessons/routing/tasks/router-input/src/app/home.component.ts similarity index 100% rename from apps/routing/router-input/src/app/home.component.ts rename to lessons/routing/tasks/router-input/src/app/home.component.ts diff --git a/apps/routing/router-input/src/app/test.component.ts b/lessons/routing/tasks/router-input/src/app/test.component.ts similarity index 100% rename from apps/routing/router-input/src/app/test.component.ts rename to lessons/routing/tasks/router-input/src/app/test.component.ts diff --git a/apps/routing/anchor-navigation/src/assets/.gitkeep b/lessons/routing/tasks/router-input/src/assets/.gitkeep similarity index 100% rename from apps/routing/anchor-navigation/src/assets/.gitkeep rename to lessons/routing/tasks/router-input/src/assets/.gitkeep diff --git a/apps/routing/router-input/src/favicon.ico b/lessons/routing/tasks/router-input/src/favicon.ico similarity index 100% rename from apps/routing/router-input/src/favicon.ico rename to lessons/routing/tasks/router-input/src/favicon.ico diff --git a/apps/routing/router-input/src/index.html b/lessons/routing/tasks/router-input/src/index.html similarity index 100% rename from apps/routing/router-input/src/index.html rename to lessons/routing/tasks/router-input/src/index.html diff --git a/apps/routing/router-input/src/main.ts b/lessons/routing/tasks/router-input/src/main.ts similarity index 100% rename from apps/routing/router-input/src/main.ts rename to lessons/routing/tasks/router-input/src/main.ts diff --git a/apps/routing/router-input/src/styles.scss b/lessons/routing/tasks/router-input/src/styles.scss similarity index 100% rename from apps/routing/router-input/src/styles.scss rename to lessons/routing/tasks/router-input/src/styles.scss diff --git a/apps/components-and-templates/content-projection-default/tsconfig.app.json b/lessons/routing/tasks/router-input/tsconfig.app.json similarity index 87% rename from apps/components-and-templates/content-projection-default/tsconfig.app.json rename to lessons/routing/tasks/router-input/tsconfig.app.json index 403fe4f54..8b5631268 100644 --- a/apps/components-and-templates/content-projection-default/tsconfig.app.json +++ b/lessons/routing/tasks/router-input/tsconfig.app.json @@ -5,9 +5,7 @@ "types": [], "moduleResolution": "bundler" }, - "files": [ - "src/main.ts" - ], + "files": ["src/main.ts"], "include": ["src/**/*.d.ts"], "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] } diff --git a/apps/routing/router-input/tsconfig.editor.json b/lessons/routing/tasks/router-input/tsconfig.editor.json similarity index 100% rename from apps/routing/router-input/tsconfig.editor.json rename to lessons/routing/tasks/router-input/tsconfig.editor.json diff --git a/apps/routing/router-input/tsconfig.json b/lessons/routing/tasks/router-input/tsconfig.json similarity index 93% rename from apps/routing/router-input/tsconfig.json rename to lessons/routing/tasks/router-input/tsconfig.json index 51c7908c5..5986b0db6 100644 --- a/apps/routing/router-input/tsconfig.json +++ b/lessons/routing/tasks/router-input/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.editor.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/lessons/rxjs/lecture/advanced.md b/lessons/rxjs/lecture/advanced.md new file mode 100644 index 000000000..213a98258 --- /dev/null +++ b/lessons/rxjs/lecture/advanced.md @@ -0,0 +1 @@ +# Расширенные знания diff --git a/lessons/rxjs/lecture/basics.md b/lessons/rxjs/lecture/basics.md new file mode 100644 index 000000000..460854104 --- /dev/null +++ b/lessons/rxjs/lecture/basics.md @@ -0,0 +1 @@ +# Базовые знания diff --git a/apps/rxjs/catch-error/.eslintrc.json b/lessons/rxjs/tasks/catch-error/.eslintrc.json similarity index 100% rename from apps/rxjs/catch-error/.eslintrc.json rename to lessons/rxjs/tasks/catch-error/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/rxjs/38-rxjs-catch-error.md b/lessons/rxjs/tasks/catch-error/README.md similarity index 95% rename from docs/src/content/docs/ru/challenges/rxjs/38-rxjs-catch-error.md rename to lessons/rxjs/tasks/catch-error/README.md index 9e25662e1..562f5bef3 100644 --- a/docs/src/content/docs/ru/challenges/rxjs/38-rxjs-catch-error.md +++ b/lessons/rxjs/tasks/catch-error/README.md @@ -1,3 +1,12 @@ +# catchError + +### Как запускать + +```bash +npm run serve:rxjs-catch-error +``` + +## Документация --- title: 🟢 catchError description: Задача 38 посвященя изучению завершения Observable. diff --git a/apps/rxjs/catch-error/jest.config.ts b/lessons/rxjs/tasks/catch-error/jest.config.ts similarity index 100% rename from apps/rxjs/catch-error/jest.config.ts rename to lessons/rxjs/tasks/catch-error/jest.config.ts diff --git a/apps/rxjs/catch-error/src/app/app.component.css b/lessons/rxjs/tasks/catch-error/src/app/app.component.css similarity index 100% rename from apps/rxjs/catch-error/src/app/app.component.css rename to lessons/rxjs/tasks/catch-error/src/app/app.component.css diff --git a/apps/rxjs/catch-error/src/app/app.component.spec.ts b/lessons/rxjs/tasks/catch-error/src/app/app.component.spec.ts similarity index 100% rename from apps/rxjs/catch-error/src/app/app.component.spec.ts rename to lessons/rxjs/tasks/catch-error/src/app/app.component.spec.ts diff --git a/apps/rxjs/catch-error/src/app/app.component.ts b/lessons/rxjs/tasks/catch-error/src/app/app.component.ts similarity index 100% rename from apps/rxjs/catch-error/src/app/app.component.ts rename to lessons/rxjs/tasks/catch-error/src/app/app.component.ts diff --git a/apps/rxjs/catch-error/src/app/app.config.ts b/lessons/rxjs/tasks/catch-error/src/app/app.config.ts similarity index 100% rename from apps/rxjs/catch-error/src/app/app.config.ts rename to lessons/rxjs/tasks/catch-error/src/app/app.config.ts diff --git a/apps/routing/router-input/src/assets/.gitkeep b/lessons/rxjs/tasks/catch-error/src/assets/.gitkeep similarity index 100% rename from apps/routing/router-input/src/assets/.gitkeep rename to lessons/rxjs/tasks/catch-error/src/assets/.gitkeep diff --git a/apps/rxjs/catch-error/src/favicon.ico b/lessons/rxjs/tasks/catch-error/src/favicon.ico similarity index 100% rename from apps/rxjs/catch-error/src/favicon.ico rename to lessons/rxjs/tasks/catch-error/src/favicon.ico diff --git a/apps/rxjs/catch-error/src/index.html b/lessons/rxjs/tasks/catch-error/src/index.html similarity index 100% rename from apps/rxjs/catch-error/src/index.html rename to lessons/rxjs/tasks/catch-error/src/index.html diff --git a/apps/rxjs/catch-error/src/main.ts b/lessons/rxjs/tasks/catch-error/src/main.ts similarity index 100% rename from apps/rxjs/catch-error/src/main.ts rename to lessons/rxjs/tasks/catch-error/src/main.ts diff --git a/apps/rxjs/catch-error/src/styles.scss b/lessons/rxjs/tasks/catch-error/src/styles.scss similarity index 100% rename from apps/rxjs/catch-error/src/styles.scss rename to lessons/rxjs/tasks/catch-error/src/styles.scss diff --git a/apps/rxjs/catch-error/src/test-setup.ts b/lessons/rxjs/tasks/catch-error/src/test-setup.ts similarity index 100% rename from apps/rxjs/catch-error/src/test-setup.ts rename to lessons/rxjs/tasks/catch-error/src/test-setup.ts diff --git a/lessons/rxjs/tasks/catch-error/tailwind.config.js b/lessons/rxjs/tasks/catch-error/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/rxjs/tasks/catch-error/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/lessons/rxjs/tasks/catch-error/tsconfig.app.json b/lessons/rxjs/tasks/catch-error/tsconfig.app.json new file mode 100644 index 000000000..8b5631268 --- /dev/null +++ b/lessons/rxjs/tasks/catch-error/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/rxjs/catch-error/tsconfig.editor.json b/lessons/rxjs/tasks/catch-error/tsconfig.editor.json similarity index 100% rename from apps/rxjs/catch-error/tsconfig.editor.json rename to lessons/rxjs/tasks/catch-error/tsconfig.editor.json diff --git a/lessons/rxjs/tasks/catch-error/tsconfig.json b/lessons/rxjs/tasks/catch-error/tsconfig.json new file mode 100644 index 000000000..44ee2c78d --- /dev/null +++ b/lessons/rxjs/tasks/catch-error/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "target": "es2022", + "useDefineForClassFields": false, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" + }, + { + "path": "./tsconfig.editor.json" + } + ], + "extends": "../../../../tsconfig.base.json", + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/apps/rxjs/catch-error/tsconfig.spec.json b/lessons/rxjs/tasks/catch-error/tsconfig.spec.json similarity index 100% rename from apps/rxjs/catch-error/tsconfig.spec.json rename to lessons/rxjs/tasks/catch-error/tsconfig.spec.json diff --git a/apps/rxjs/high-order-operator-bug/.eslintrc.json b/lessons/rxjs/tasks/high-order-operator-bug/.eslintrc.json similarity index 100% rename from apps/rxjs/high-order-operator-bug/.eslintrc.json rename to lessons/rxjs/tasks/high-order-operator-bug/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/rxjs/11-high-order-operator-bug.md b/lessons/rxjs/tasks/high-order-operator-bug/README.md similarity index 92% rename from docs/src/content/docs/ru/challenges/rxjs/11-high-order-operator-bug.md rename to lessons/rxjs/tasks/high-order-operator-bug/README.md index f714016d9..1df3f7267 100644 --- a/docs/src/content/docs/ru/challenges/rxjs/11-high-order-operator-bug.md +++ b/lessons/rxjs/tasks/high-order-operator-bug/README.md @@ -1,3 +1,12 @@ +# High Order Operator Bug + +### Как запускать + +```bash +npm run serve:rxjs-high-order-operator-bug +``` + +## Документация --- title: 🟠 Ошибка в операторе высшего порядка RxJS description: Задача 11 посвящена устранению ошибки в RxJS из-за операторов высшего порядка diff --git a/apps/rxjs/high-order-operator-bug/src/app/app.component.ts b/lessons/rxjs/tasks/high-order-operator-bug/src/app/app.component.ts similarity index 100% rename from apps/rxjs/high-order-operator-bug/src/app/app.component.ts rename to lessons/rxjs/tasks/high-order-operator-bug/src/app/app.component.ts diff --git a/apps/rxjs/high-order-operator-bug/src/app/app.service.ts b/lessons/rxjs/tasks/high-order-operator-bug/src/app/app.service.ts similarity index 100% rename from apps/rxjs/high-order-operator-bug/src/app/app.service.ts rename to lessons/rxjs/tasks/high-order-operator-bug/src/app/app.service.ts diff --git a/apps/rxjs/high-order-operator-bug/src/app/localDB.service.ts b/lessons/rxjs/tasks/high-order-operator-bug/src/app/localDB.service.ts similarity index 100% rename from apps/rxjs/high-order-operator-bug/src/app/localDB.service.ts rename to lessons/rxjs/tasks/high-order-operator-bug/src/app/localDB.service.ts diff --git a/apps/rxjs/catch-error/src/assets/.gitkeep b/lessons/rxjs/tasks/high-order-operator-bug/src/assets/.gitkeep similarity index 100% rename from apps/rxjs/catch-error/src/assets/.gitkeep rename to lessons/rxjs/tasks/high-order-operator-bug/src/assets/.gitkeep diff --git a/apps/rxjs/high-order-operator-bug/src/favicon.ico b/lessons/rxjs/tasks/high-order-operator-bug/src/favicon.ico similarity index 100% rename from apps/rxjs/high-order-operator-bug/src/favicon.ico rename to lessons/rxjs/tasks/high-order-operator-bug/src/favicon.ico diff --git a/apps/rxjs/high-order-operator-bug/src/index.html b/lessons/rxjs/tasks/high-order-operator-bug/src/index.html similarity index 100% rename from apps/rxjs/high-order-operator-bug/src/index.html rename to lessons/rxjs/tasks/high-order-operator-bug/src/index.html diff --git a/apps/rxjs/high-order-operator-bug/src/main.ts b/lessons/rxjs/tasks/high-order-operator-bug/src/main.ts similarity index 100% rename from apps/rxjs/high-order-operator-bug/src/main.ts rename to lessons/rxjs/tasks/high-order-operator-bug/src/main.ts diff --git a/apps/rxjs/high-order-operator-bug/src/styles.scss b/lessons/rxjs/tasks/high-order-operator-bug/src/styles.scss similarity index 100% rename from apps/rxjs/high-order-operator-bug/src/styles.scss rename to lessons/rxjs/tasks/high-order-operator-bug/src/styles.scss diff --git a/apps/rxjs/high-order-operator-bug/tsconfig.app.json b/lessons/rxjs/tasks/high-order-operator-bug/tsconfig.app.json similarity index 100% rename from apps/rxjs/high-order-operator-bug/tsconfig.app.json rename to lessons/rxjs/tasks/high-order-operator-bug/tsconfig.app.json diff --git a/apps/rxjs/high-order-operator-bug/tsconfig.editor.json b/lessons/rxjs/tasks/high-order-operator-bug/tsconfig.editor.json similarity index 100% rename from apps/rxjs/high-order-operator-bug/tsconfig.editor.json rename to lessons/rxjs/tasks/high-order-operator-bug/tsconfig.editor.json diff --git a/lessons/rxjs/tasks/high-order-operator-bug/tsconfig.json b/lessons/rxjs/tasks/high-order-operator-bug/tsconfig.json new file mode 100644 index 000000000..fdba355ce --- /dev/null +++ b/lessons/rxjs/tasks/high-order-operator-bug/tsconfig.json @@ -0,0 +1,29 @@ +{ + "extends": "../../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.editor.json" + } + ], + "compilerOptions": { + "target": "es2022", + "useDefineForClassFields": false, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/apps/rxjs/hold-to-save-button/.eslintrc.json b/lessons/rxjs/tasks/hold-to-save-button/.eslintrc.json similarity index 100% rename from apps/rxjs/hold-to-save-button/.eslintrc.json rename to lessons/rxjs/tasks/hold-to-save-button/.eslintrc.json diff --git a/docs/src/content/docs/challenges/rxjs/49-hold-to-save-button.md b/lessons/rxjs/tasks/hold-to-save-button/README.md similarity index 93% rename from docs/src/content/docs/challenges/rxjs/49-hold-to-save-button.md rename to lessons/rxjs/tasks/hold-to-save-button/README.md index 050ccc48a..d8f69b6e8 100644 --- a/docs/src/content/docs/challenges/rxjs/49-hold-to-save-button.md +++ b/lessons/rxjs/tasks/hold-to-save-button/README.md @@ -1,3 +1,13 @@ +# Hold to send button + +### Как запускать + +```bash +npm run serve:rxjs-hold-to-save-button +``` + +### Documentation and Instruction + --- title: 🟠 Hold to save button description: You're tasked with implementing Lucie's button design, requiring holding it for a set time to save, taking over from Sacha; functionalities include configuring duration, countdown initiation on "mousedown", progress bar reset on "mouseleave" or "mouseup", reflecting remaining time, and simulating save request on hold completion, using RxJS operators and ensuring declarative code. @@ -44,3 +54,4 @@ Here is the prototype made by Lucie:
  • Perhaps the following RxJS operators can help you: interval, takeUntil, switchMap, takeWhile/retry...
  • + diff --git a/apps/rxjs/hold-to-save-button/jest.config.ts b/lessons/rxjs/tasks/hold-to-save-button/jest.config.ts similarity index 100% rename from apps/rxjs/hold-to-save-button/jest.config.ts rename to lessons/rxjs/tasks/hold-to-save-button/jest.config.ts diff --git a/apps/rxjs/hold-to-save-button/src/app/app.component.ts b/lessons/rxjs/tasks/hold-to-save-button/src/app/app.component.ts similarity index 100% rename from apps/rxjs/hold-to-save-button/src/app/app.component.ts rename to lessons/rxjs/tasks/hold-to-save-button/src/app/app.component.ts diff --git a/apps/rxjs/hold-to-save-button/src/app/app.config.ts b/lessons/rxjs/tasks/hold-to-save-button/src/app/app.config.ts similarity index 100% rename from apps/rxjs/hold-to-save-button/src/app/app.config.ts rename to lessons/rxjs/tasks/hold-to-save-button/src/app/app.config.ts diff --git a/apps/rxjs/high-order-operator-bug/src/assets/.gitkeep b/lessons/rxjs/tasks/hold-to-save-button/src/assets/.gitkeep similarity index 100% rename from apps/rxjs/high-order-operator-bug/src/assets/.gitkeep rename to lessons/rxjs/tasks/hold-to-save-button/src/assets/.gitkeep diff --git a/apps/rxjs/hold-to-save-button/src/favicon.ico b/lessons/rxjs/tasks/hold-to-save-button/src/favicon.ico similarity index 100% rename from apps/rxjs/hold-to-save-button/src/favicon.ico rename to lessons/rxjs/tasks/hold-to-save-button/src/favicon.ico diff --git a/apps/rxjs/hold-to-save-button/src/index.html b/lessons/rxjs/tasks/hold-to-save-button/src/index.html similarity index 100% rename from apps/rxjs/hold-to-save-button/src/index.html rename to lessons/rxjs/tasks/hold-to-save-button/src/index.html diff --git a/apps/rxjs/hold-to-save-button/src/main.ts b/lessons/rxjs/tasks/hold-to-save-button/src/main.ts similarity index 100% rename from apps/rxjs/hold-to-save-button/src/main.ts rename to lessons/rxjs/tasks/hold-to-save-button/src/main.ts diff --git a/apps/rxjs/hold-to-save-button/src/styles.scss b/lessons/rxjs/tasks/hold-to-save-button/src/styles.scss similarity index 100% rename from apps/rxjs/hold-to-save-button/src/styles.scss rename to lessons/rxjs/tasks/hold-to-save-button/src/styles.scss diff --git a/apps/rxjs/hold-to-save-button/src/test-setup.ts b/lessons/rxjs/tasks/hold-to-save-button/src/test-setup.ts similarity index 100% rename from apps/rxjs/hold-to-save-button/src/test-setup.ts rename to lessons/rxjs/tasks/hold-to-save-button/src/test-setup.ts diff --git a/lessons/rxjs/tasks/hold-to-save-button/tailwind.config.js b/lessons/rxjs/tasks/hold-to-save-button/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/rxjs/tasks/hold-to-save-button/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/lessons/rxjs/tasks/hold-to-save-button/tsconfig.app.json b/lessons/rxjs/tasks/hold-to-save-button/tsconfig.app.json new file mode 100644 index 000000000..8b5631268 --- /dev/null +++ b/lessons/rxjs/tasks/hold-to-save-button/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/signal/bug-in-effect/tsconfig.editor.json b/lessons/rxjs/tasks/hold-to-save-button/tsconfig.editor.json similarity index 100% rename from apps/signal/bug-in-effect/tsconfig.editor.json rename to lessons/rxjs/tasks/hold-to-save-button/tsconfig.editor.json diff --git a/apps/rxjs/hold-to-save-button/tsconfig.json b/lessons/rxjs/tasks/hold-to-save-button/tsconfig.json similarity index 93% rename from apps/rxjs/hold-to-save-button/tsconfig.json rename to lessons/rxjs/tasks/hold-to-save-button/tsconfig.json index 4383e7eb8..84f8e79bc 100644 --- a/apps/rxjs/hold-to-save-button/tsconfig.json +++ b/lessons/rxjs/tasks/hold-to-save-button/tsconfig.json @@ -23,7 +23,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/best-practices/ngfor-optimization/tsconfig.spec.json b/lessons/rxjs/tasks/hold-to-save-button/tsconfig.spec.json similarity index 80% rename from apps/best-practices/ngfor-optimization/tsconfig.spec.json rename to lessons/rxjs/tasks/hold-to-save-button/tsconfig.spec.json index 9cfdcdeb3..1a4817a7d 100644 --- a/apps/best-practices/ngfor-optimization/tsconfig.spec.json +++ b/lessons/rxjs/tasks/hold-to-save-button/tsconfig.spec.json @@ -5,11 +5,9 @@ "module": "commonjs", "types": ["jest", "node", "@testing-library/jest-dom"] }, - "files": [ - "src/test-setup.ts" - ], + "files": ["src/test-setup.ts"], "include": [ - "jest.config.ts", + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts" diff --git a/apps/rxjs/race-condition/.eslintrc.json b/lessons/rxjs/tasks/race-condition/.eslintrc.json similarity index 100% rename from apps/rxjs/race-condition/.eslintrc.json rename to lessons/rxjs/tasks/race-condition/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/rxjs/14-race-condition.md b/lessons/rxjs/tasks/race-condition/README.md similarity index 91% rename from docs/src/content/docs/ru/challenges/rxjs/14-race-condition.md rename to lessons/rxjs/tasks/race-condition/README.md index e5b0e9032..80b243688 100644 --- a/docs/src/content/docs/ru/challenges/rxjs/14-race-condition.md +++ b/lessons/rxjs/tasks/race-condition/README.md @@ -1,3 +1,12 @@ +# Race Condition + +### Как запускать + +```bash +npm run serve:rxjs-race-condition +``` + +## Документация --- title: 🟢 Состояние гонки description: Задача 14 посвящена race condition в Rxjs diff --git a/apps/rxjs/race-condition/cypress.config.ts b/lessons/rxjs/tasks/race-condition/cypress.config.ts similarity index 100% rename from apps/rxjs/race-condition/cypress.config.ts rename to lessons/rxjs/tasks/race-condition/cypress.config.ts diff --git a/apps/rxjs/race-condition/cypress/fixtures/example.json b/lessons/rxjs/tasks/race-condition/cypress/fixtures/example.json similarity index 100% rename from apps/rxjs/race-condition/cypress/fixtures/example.json rename to lessons/rxjs/tasks/race-condition/cypress/fixtures/example.json diff --git a/apps/rxjs/race-condition/cypress/support/commands.ts b/lessons/rxjs/tasks/race-condition/cypress/support/commands.ts similarity index 100% rename from apps/rxjs/race-condition/cypress/support/commands.ts rename to lessons/rxjs/tasks/race-condition/cypress/support/commands.ts diff --git a/apps/rxjs/race-condition/cypress/support/component-index.html b/lessons/rxjs/tasks/race-condition/cypress/support/component-index.html similarity index 100% rename from apps/rxjs/race-condition/cypress/support/component-index.html rename to lessons/rxjs/tasks/race-condition/cypress/support/component-index.html diff --git a/apps/rxjs/race-condition/cypress/support/component.ts b/lessons/rxjs/tasks/race-condition/cypress/support/component.ts similarity index 100% rename from apps/rxjs/race-condition/cypress/support/component.ts rename to lessons/rxjs/tasks/race-condition/cypress/support/component.ts diff --git a/apps/rxjs/race-condition/cypress/tsconfig.json b/lessons/rxjs/tasks/race-condition/cypress/tsconfig.json similarity index 100% rename from apps/rxjs/race-condition/cypress/tsconfig.json rename to lessons/rxjs/tasks/race-condition/cypress/tsconfig.json diff --git a/apps/rxjs/race-condition/jest.config.ts b/lessons/rxjs/tasks/race-condition/jest.config.ts similarity index 100% rename from apps/rxjs/race-condition/jest.config.ts rename to lessons/rxjs/tasks/race-condition/jest.config.ts diff --git a/apps/rxjs/race-condition/src/app/app.component.cy.ts b/lessons/rxjs/tasks/race-condition/src/app/app.component.cy.ts similarity index 100% rename from apps/rxjs/race-condition/src/app/app.component.cy.ts rename to lessons/rxjs/tasks/race-condition/src/app/app.component.cy.ts diff --git a/apps/rxjs/race-condition/src/app/app.component.ts b/lessons/rxjs/tasks/race-condition/src/app/app.component.ts similarity index 100% rename from apps/rxjs/race-condition/src/app/app.component.ts rename to lessons/rxjs/tasks/race-condition/src/app/app.component.ts diff --git a/apps/rxjs/race-condition/src/app/app.config.ts b/lessons/rxjs/tasks/race-condition/src/app/app.config.ts similarity index 100% rename from apps/rxjs/race-condition/src/app/app.config.ts rename to lessons/rxjs/tasks/race-condition/src/app/app.config.ts diff --git a/apps/rxjs/race-condition/src/app/topic-dialog.component.ts b/lessons/rxjs/tasks/race-condition/src/app/topic-dialog.component.ts similarity index 100% rename from apps/rxjs/race-condition/src/app/topic-dialog.component.ts rename to lessons/rxjs/tasks/race-condition/src/app/topic-dialog.component.ts diff --git a/apps/rxjs/race-condition/src/app/topic.service.ts b/lessons/rxjs/tasks/race-condition/src/app/topic.service.ts similarity index 100% rename from apps/rxjs/race-condition/src/app/topic.service.ts rename to lessons/rxjs/tasks/race-condition/src/app/topic.service.ts diff --git a/apps/rxjs/hold-to-save-button/src/assets/.gitkeep b/lessons/rxjs/tasks/race-condition/src/assets/.gitkeep similarity index 100% rename from apps/rxjs/hold-to-save-button/src/assets/.gitkeep rename to lessons/rxjs/tasks/race-condition/src/assets/.gitkeep diff --git a/apps/rxjs/race-condition/src/favicon.ico b/lessons/rxjs/tasks/race-condition/src/favicon.ico similarity index 100% rename from apps/rxjs/race-condition/src/favicon.ico rename to lessons/rxjs/tasks/race-condition/src/favicon.ico diff --git a/apps/rxjs/race-condition/src/index.html b/lessons/rxjs/tasks/race-condition/src/index.html similarity index 100% rename from apps/rxjs/race-condition/src/index.html rename to lessons/rxjs/tasks/race-condition/src/index.html diff --git a/apps/rxjs/race-condition/src/main.ts b/lessons/rxjs/tasks/race-condition/src/main.ts similarity index 100% rename from apps/rxjs/race-condition/src/main.ts rename to lessons/rxjs/tasks/race-condition/src/main.ts diff --git a/apps/rxjs/race-condition/src/styles.scss b/lessons/rxjs/tasks/race-condition/src/styles.scss similarity index 100% rename from apps/rxjs/race-condition/src/styles.scss rename to lessons/rxjs/tasks/race-condition/src/styles.scss diff --git a/apps/rxjs/race-condition/src/test-setup.ts b/lessons/rxjs/tasks/race-condition/src/test-setup.ts similarity index 100% rename from apps/rxjs/race-condition/src/test-setup.ts rename to lessons/rxjs/tasks/race-condition/src/test-setup.ts diff --git a/apps/rxjs/race-condition/tsconfig.app.json b/lessons/rxjs/tasks/race-condition/tsconfig.app.json similarity index 100% rename from apps/rxjs/race-condition/tsconfig.app.json rename to lessons/rxjs/tasks/race-condition/tsconfig.app.json diff --git a/apps/rxjs/race-condition/tsconfig.editor.json b/lessons/rxjs/tasks/race-condition/tsconfig.editor.json similarity index 100% rename from apps/rxjs/race-condition/tsconfig.editor.json rename to lessons/rxjs/tasks/race-condition/tsconfig.editor.json diff --git a/apps/rxjs/race-condition/tsconfig.json b/lessons/rxjs/tasks/race-condition/tsconfig.json similarity index 94% rename from apps/rxjs/race-condition/tsconfig.json rename to lessons/rxjs/tasks/race-condition/tsconfig.json index 3879b94cd..36940a50f 100644 --- a/apps/rxjs/race-condition/tsconfig.json +++ b/lessons/rxjs/tasks/race-condition/tsconfig.json @@ -25,7 +25,7 @@ "path": "./cypress/tsconfig.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/best-practices/optimize-change-detection/tsconfig.spec.json b/lessons/rxjs/tasks/race-condition/tsconfig.spec.json similarity index 78% rename from apps/best-practices/optimize-change-detection/tsconfig.spec.json rename to lessons/rxjs/tasks/race-condition/tsconfig.spec.json index 173fe9a7d..ca14cc622 100644 --- a/apps/best-practices/optimize-change-detection/tsconfig.spec.json +++ b/lessons/rxjs/tasks/race-condition/tsconfig.spec.json @@ -5,11 +5,9 @@ "module": "commonjs", "types": ["jest", "node"] }, - "files": [ - "src/test-setup.ts" - ], + "files": ["src/test-setup.ts"], "include": [ - "jest.config.ts", + "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts" diff --git a/lessons/signal/lecture/advanced.md b/lessons/signal/lecture/advanced.md new file mode 100644 index 000000000..213a98258 --- /dev/null +++ b/lessons/signal/lecture/advanced.md @@ -0,0 +1 @@ +# Расширенные знания diff --git a/lessons/signal/lecture/basics.md b/lessons/signal/lecture/basics.md new file mode 100644 index 000000000..460854104 --- /dev/null +++ b/lessons/signal/lecture/basics.md @@ -0,0 +1 @@ +# Базовые знания diff --git a/apps/signal/bug-in-effect/.eslintrc.json b/lessons/signal/tasks/bug-in-effect/.eslintrc.json similarity index 100% rename from apps/signal/bug-in-effect/.eslintrc.json rename to lessons/signal/tasks/bug-in-effect/.eslintrc.json diff --git a/docs/src/content/docs/challenges/signal/50-bug-effect-signal.md b/lessons/signal/tasks/bug-in-effect/README.md similarity index 92% rename from docs/src/content/docs/challenges/signal/50-bug-effect-signal.md rename to lessons/signal/tasks/bug-in-effect/README.md index 46f07c6bd..e3f3b8a6f 100644 --- a/docs/src/content/docs/challenges/signal/50-bug-effect-signal.md +++ b/lessons/signal/tasks/bug-in-effect/README.md @@ -1,3 +1,13 @@ +# Bug in Effect ? + +### Как запускать + +```bash +npm run serve:signal-bug-in-effect +``` + +### Documentation and Instruction + --- title: 🟢 Bug in Effect description: Challenge 50 is about understanding why an effect is not triggered. @@ -38,3 +48,4 @@ To ensure this feature works properly, try this out to reproduce the bug after s ## Bonus Challenge - Try to implement this feature with a `computed` signal. + diff --git a/apps/signal/bug-in-effect/src/app/app.component.ts b/lessons/signal/tasks/bug-in-effect/src/app/app.component.ts similarity index 100% rename from apps/signal/bug-in-effect/src/app/app.component.ts rename to lessons/signal/tasks/bug-in-effect/src/app/app.component.ts diff --git a/apps/signal/bug-in-effect/src/app/app.config.ts b/lessons/signal/tasks/bug-in-effect/src/app/app.config.ts similarity index 100% rename from apps/signal/bug-in-effect/src/app/app.config.ts rename to lessons/signal/tasks/bug-in-effect/src/app/app.config.ts diff --git a/apps/rxjs/race-condition/src/assets/.gitkeep b/lessons/signal/tasks/bug-in-effect/src/assets/.gitkeep similarity index 100% rename from apps/rxjs/race-condition/src/assets/.gitkeep rename to lessons/signal/tasks/bug-in-effect/src/assets/.gitkeep diff --git a/apps/signal/bug-in-effect/src/favicon.ico b/lessons/signal/tasks/bug-in-effect/src/favicon.ico similarity index 100% rename from apps/signal/bug-in-effect/src/favicon.ico rename to lessons/signal/tasks/bug-in-effect/src/favicon.ico diff --git a/apps/signal/bug-in-effect/src/index.html b/lessons/signal/tasks/bug-in-effect/src/index.html similarity index 100% rename from apps/signal/bug-in-effect/src/index.html rename to lessons/signal/tasks/bug-in-effect/src/index.html diff --git a/apps/signal/bug-in-effect/src/main.ts b/lessons/signal/tasks/bug-in-effect/src/main.ts similarity index 100% rename from apps/signal/bug-in-effect/src/main.ts rename to lessons/signal/tasks/bug-in-effect/src/main.ts diff --git a/apps/signal/bug-in-effect/src/styles.scss b/lessons/signal/tasks/bug-in-effect/src/styles.scss similarity index 100% rename from apps/signal/bug-in-effect/src/styles.scss rename to lessons/signal/tasks/bug-in-effect/src/styles.scss diff --git a/lessons/signal/tasks/bug-in-effect/tailwind.config.js b/lessons/signal/tasks/bug-in-effect/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/signal/tasks/bug-in-effect/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/lessons/signal/tasks/bug-in-effect/tsconfig.app.json b/lessons/signal/tasks/bug-in-effect/tsconfig.app.json new file mode 100644 index 000000000..8b5631268 --- /dev/null +++ b/lessons/signal/tasks/bug-in-effect/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/signal/forms-and-signal/tsconfig.editor.json b/lessons/signal/tasks/bug-in-effect/tsconfig.editor.json similarity index 100% rename from apps/signal/forms-and-signal/tsconfig.editor.json rename to lessons/signal/tasks/bug-in-effect/tsconfig.editor.json diff --git a/apps/signal/bug-in-effect/tsconfig.json b/lessons/signal/tasks/bug-in-effect/tsconfig.json similarity index 93% rename from apps/signal/bug-in-effect/tsconfig.json rename to lessons/signal/tasks/bug-in-effect/tsconfig.json index 3df17b921..830507fe9 100644 --- a/apps/signal/bug-in-effect/tsconfig.json +++ b/lessons/signal/tasks/bug-in-effect/tsconfig.json @@ -20,7 +20,7 @@ "path": "./tsconfig.app.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/signal/forms-and-signal/.eslintrc.json b/lessons/signal/tasks/forms-and-signal/.eslintrc.json similarity index 100% rename from apps/signal/forms-and-signal/.eslintrc.json rename to lessons/signal/tasks/forms-and-signal/.eslintrc.json diff --git a/docs/src/content/docs/challenges/signal/56-forms-and-signal.md b/lessons/signal/tasks/forms-and-signal/README.md similarity index 89% rename from docs/src/content/docs/challenges/signal/56-forms-and-signal.md rename to lessons/signal/tasks/forms-and-signal/README.md index 077fd822f..a4463c1ed 100644 --- a/docs/src/content/docs/challenges/signal/56-forms-and-signal.md +++ b/lessons/signal/tasks/forms-and-signal/README.md @@ -1,3 +1,13 @@ +# forms and signal + +### Как запускать + +```bash +npm run serve:signal-forms-and-signal +``` + +### Documentation and Instruction + --- title: 🔴 forms and signal description: Challenge 56 is about working with reactive forms and signals @@ -25,3 +35,4 @@ The objective of this challenge is to make sure that the selected quantity is pr The solution must use reactive forms and signals. Additionally, as an optional side challenge, you may refactor the code to use template-driven forms. + diff --git a/apps/signal/forms-and-signal/public/favicon.ico b/lessons/signal/tasks/forms-and-signal/public/favicon.ico similarity index 100% rename from apps/signal/forms-and-signal/public/favicon.ico rename to lessons/signal/tasks/forms-and-signal/public/favicon.ico diff --git a/apps/signal/forms-and-signal/src/app/app.component.ts b/lessons/signal/tasks/forms-and-signal/src/app/app.component.ts similarity index 100% rename from apps/signal/forms-and-signal/src/app/app.component.ts rename to lessons/signal/tasks/forms-and-signal/src/app/app.component.ts diff --git a/apps/signal/forms-and-signal/src/app/app.config.ts b/lessons/signal/tasks/forms-and-signal/src/app/app.config.ts similarity index 100% rename from apps/signal/forms-and-signal/src/app/app.config.ts rename to lessons/signal/tasks/forms-and-signal/src/app/app.config.ts diff --git a/apps/signal/forms-and-signal/src/app/app.routes.ts b/lessons/signal/tasks/forms-and-signal/src/app/app.routes.ts similarity index 100% rename from apps/signal/forms-and-signal/src/app/app.routes.ts rename to lessons/signal/tasks/forms-and-signal/src/app/app.routes.ts diff --git a/apps/signal/forms-and-signal/src/app/checkout.component.ts b/lessons/signal/tasks/forms-and-signal/src/app/checkout.component.ts similarity index 100% rename from apps/signal/forms-and-signal/src/app/checkout.component.ts rename to lessons/signal/tasks/forms-and-signal/src/app/checkout.component.ts diff --git a/apps/signal/forms-and-signal/src/app/dashboard.component.ts b/lessons/signal/tasks/forms-and-signal/src/app/dashboard.component.ts similarity index 100% rename from apps/signal/forms-and-signal/src/app/dashboard.component.ts rename to lessons/signal/tasks/forms-and-signal/src/app/dashboard.component.ts diff --git a/apps/signal/forms-and-signal/src/app/order.component.ts b/lessons/signal/tasks/forms-and-signal/src/app/order.component.ts similarity index 100% rename from apps/signal/forms-and-signal/src/app/order.component.ts rename to lessons/signal/tasks/forms-and-signal/src/app/order.component.ts diff --git a/apps/signal/forms-and-signal/src/app/payment.component.ts b/lessons/signal/tasks/forms-and-signal/src/app/payment.component.ts similarity index 100% rename from apps/signal/forms-and-signal/src/app/payment.component.ts rename to lessons/signal/tasks/forms-and-signal/src/app/payment.component.ts diff --git a/apps/signal/forms-and-signal/src/app/products.ts b/lessons/signal/tasks/forms-and-signal/src/app/products.ts similarity index 100% rename from apps/signal/forms-and-signal/src/app/products.ts rename to lessons/signal/tasks/forms-and-signal/src/app/products.ts diff --git a/apps/signal/forms-and-signal/src/index.html b/lessons/signal/tasks/forms-and-signal/src/index.html similarity index 100% rename from apps/signal/forms-and-signal/src/index.html rename to lessons/signal/tasks/forms-and-signal/src/index.html diff --git a/apps/signal/forms-and-signal/src/main.ts b/lessons/signal/tasks/forms-and-signal/src/main.ts similarity index 100% rename from apps/signal/forms-and-signal/src/main.ts rename to lessons/signal/tasks/forms-and-signal/src/main.ts diff --git a/apps/signal/forms-and-signal/src/styles.scss b/lessons/signal/tasks/forms-and-signal/src/styles.scss similarity index 100% rename from apps/signal/forms-and-signal/src/styles.scss rename to lessons/signal/tasks/forms-and-signal/src/styles.scss diff --git a/lessons/signal/tasks/forms-and-signal/tailwind.config.js b/lessons/signal/tasks/forms-and-signal/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/signal/tasks/forms-and-signal/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/lessons/signal/tasks/forms-and-signal/tsconfig.app.json b/lessons/signal/tasks/forms-and-signal/tsconfig.app.json new file mode 100644 index 000000000..8b5631268 --- /dev/null +++ b/lessons/signal/tasks/forms-and-signal/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/signal/function-call-effect/tsconfig.editor.json b/lessons/signal/tasks/forms-and-signal/tsconfig.editor.json similarity index 100% rename from apps/signal/function-call-effect/tsconfig.editor.json rename to lessons/signal/tasks/forms-and-signal/tsconfig.editor.json diff --git a/apps/signal/forms-and-signal/tsconfig.json b/lessons/signal/tasks/forms-and-signal/tsconfig.json similarity index 93% rename from apps/signal/forms-and-signal/tsconfig.json rename to lessons/signal/tasks/forms-and-signal/tsconfig.json index 3df17b921..830507fe9 100644 --- a/apps/signal/forms-and-signal/tsconfig.json +++ b/lessons/signal/tasks/forms-and-signal/tsconfig.json @@ -20,7 +20,7 @@ "path": "./tsconfig.app.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/apps/signal/function-call-effect/.eslintrc.json b/lessons/signal/tasks/function-call-effect/.eslintrc.json similarity index 100% rename from apps/signal/function-call-effect/.eslintrc.json rename to lessons/signal/tasks/function-call-effect/.eslintrc.json diff --git a/docs/src/content/docs/challenges/signal/51-function-call-effect.md b/lessons/signal/tasks/function-call-effect/README.md similarity index 86% rename from docs/src/content/docs/challenges/signal/51-function-call-effect.md rename to lessons/signal/tasks/function-call-effect/README.md index e2a94694c..324f0da1f 100644 --- a/docs/src/content/docs/challenges/signal/51-function-call-effect.md +++ b/lessons/signal/tasks/function-call-effect/README.md @@ -1,3 +1,13 @@ +# Function call in effect + +### Как запускать + +```bash +npm run serve:signal-function-call-effect +``` + +### Documentation and Instruction + --- title: 🟢 Function call in effect description: Challenge 51 is about understanding why an effect is triggered too often. @@ -23,3 +33,4 @@ The objective of this challenge is to identify and resolve the cause of these ex ## Constraints - You cannot modify the `UserService` file. + diff --git a/apps/signal/function-call-effect/src/app/action.component.ts b/lessons/signal/tasks/function-call-effect/src/app/action.component.ts similarity index 100% rename from apps/signal/function-call-effect/src/app/action.component.ts rename to lessons/signal/tasks/function-call-effect/src/app/action.component.ts diff --git a/apps/signal/function-call-effect/src/app/app.component.ts b/lessons/signal/tasks/function-call-effect/src/app/app.component.ts similarity index 100% rename from apps/signal/function-call-effect/src/app/app.component.ts rename to lessons/signal/tasks/function-call-effect/src/app/app.component.ts diff --git a/apps/signal/function-call-effect/src/app/app.config.ts b/lessons/signal/tasks/function-call-effect/src/app/app.config.ts similarity index 100% rename from apps/signal/function-call-effect/src/app/app.config.ts rename to lessons/signal/tasks/function-call-effect/src/app/app.config.ts diff --git a/apps/signal/function-call-effect/src/app/user.service.ts b/lessons/signal/tasks/function-call-effect/src/app/user.service.ts similarity index 100% rename from apps/signal/function-call-effect/src/app/user.service.ts rename to lessons/signal/tasks/function-call-effect/src/app/user.service.ts diff --git a/apps/signal/bug-in-effect/src/assets/.gitkeep b/lessons/signal/tasks/function-call-effect/src/assets/.gitkeep similarity index 100% rename from apps/signal/bug-in-effect/src/assets/.gitkeep rename to lessons/signal/tasks/function-call-effect/src/assets/.gitkeep diff --git a/apps/signal/function-call-effect/src/favicon.ico b/lessons/signal/tasks/function-call-effect/src/favicon.ico similarity index 100% rename from apps/signal/function-call-effect/src/favicon.ico rename to lessons/signal/tasks/function-call-effect/src/favicon.ico diff --git a/apps/signal/function-call-effect/src/index.html b/lessons/signal/tasks/function-call-effect/src/index.html similarity index 100% rename from apps/signal/function-call-effect/src/index.html rename to lessons/signal/tasks/function-call-effect/src/index.html diff --git a/apps/signal/function-call-effect/src/main.ts b/lessons/signal/tasks/function-call-effect/src/main.ts similarity index 100% rename from apps/signal/function-call-effect/src/main.ts rename to lessons/signal/tasks/function-call-effect/src/main.ts diff --git a/apps/signal/function-call-effect/src/styles.scss b/lessons/signal/tasks/function-call-effect/src/styles.scss similarity index 100% rename from apps/signal/function-call-effect/src/styles.scss rename to lessons/signal/tasks/function-call-effect/src/styles.scss diff --git a/lessons/signal/tasks/function-call-effect/tailwind.config.js b/lessons/signal/tasks/function-call-effect/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/signal/tasks/function-call-effect/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/lessons/signal/tasks/function-call-effect/tsconfig.app.json b/lessons/signal/tasks/function-call-effect/tsconfig.app.json new file mode 100644 index 000000000..8b5631268 --- /dev/null +++ b/lessons/signal/tasks/function-call-effect/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/signal/pipe-observable-to-signal/tsconfig.editor.json b/lessons/signal/tasks/function-call-effect/tsconfig.editor.json similarity index 100% rename from apps/signal/pipe-observable-to-signal/tsconfig.editor.json rename to lessons/signal/tasks/function-call-effect/tsconfig.editor.json diff --git a/lessons/signal/tasks/function-call-effect/tsconfig.json b/lessons/signal/tasks/function-call-effect/tsconfig.json new file mode 100644 index 000000000..830507fe9 --- /dev/null +++ b/lessons/signal/tasks/function-call-effect/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "es2022", + "useDefineForClassFields": false, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.editor.json" + }, + { + "path": "./tsconfig.app.json" + } + ], + "extends": "../../../../tsconfig.base.json", + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/apps/signal/pipe-observable-to-signal/.eslintrc.json b/lessons/signal/tasks/pipe-observable-to-signal/.eslintrc.json similarity index 100% rename from apps/signal/pipe-observable-to-signal/.eslintrc.json rename to lessons/signal/tasks/pipe-observable-to-signal/.eslintrc.json diff --git a/docs/src/content/docs/challenges/signal/54-pipe-observable-to-signal.md b/lessons/signal/tasks/pipe-observable-to-signal/README.md similarity index 81% rename from docs/src/content/docs/challenges/signal/54-pipe-observable-to-signal.md rename to lessons/signal/tasks/pipe-observable-to-signal/README.md index 2b88b528f..1b88fcd56 100644 --- a/docs/src/content/docs/challenges/signal/54-pipe-observable-to-signal.md +++ b/lessons/signal/tasks/pipe-observable-to-signal/README.md @@ -1,3 +1,13 @@ +# Pipe Observable to Signal + +### Как запускать + +```bash +npm run serve:signal-pipe-observable-to-signal +``` + +### Documentation and Instruction + --- title: 🔴 Pipe Observable to Signal description: Challenge 54 is about refactoring an application using observable to signals @@ -20,3 +30,4 @@ We have a legacy application that is using observables to store a state. Signals So, the goal of this challenge is to refactor the following application to be a fully signal-based application. When you are done, neither the pipe nor the service should import RxJS. Be careful along the way; everything might not work as you wish. + diff --git a/apps/signal/pipe-observable-to-signal/src/app/app.component.ts b/lessons/signal/tasks/pipe-observable-to-signal/src/app/app.component.ts similarity index 100% rename from apps/signal/pipe-observable-to-signal/src/app/app.component.ts rename to lessons/signal/tasks/pipe-observable-to-signal/src/app/app.component.ts diff --git a/apps/signal/pipe-observable-to-signal/src/app/currency.pipe.ts b/lessons/signal/tasks/pipe-observable-to-signal/src/app/currency.pipe.ts similarity index 100% rename from apps/signal/pipe-observable-to-signal/src/app/currency.pipe.ts rename to lessons/signal/tasks/pipe-observable-to-signal/src/app/currency.pipe.ts diff --git a/apps/signal/pipe-observable-to-signal/src/app/currency.service.ts b/lessons/signal/tasks/pipe-observable-to-signal/src/app/currency.service.ts similarity index 100% rename from apps/signal/pipe-observable-to-signal/src/app/currency.service.ts rename to lessons/signal/tasks/pipe-observable-to-signal/src/app/currency.service.ts diff --git a/apps/signal/pipe-observable-to-signal/src/app/product-row.component.ts b/lessons/signal/tasks/pipe-observable-to-signal/src/app/product-row.component.ts similarity index 100% rename from apps/signal/pipe-observable-to-signal/src/app/product-row.component.ts rename to lessons/signal/tasks/pipe-observable-to-signal/src/app/product-row.component.ts diff --git a/apps/signal/pipe-observable-to-signal/src/app/product.model.ts b/lessons/signal/tasks/pipe-observable-to-signal/src/app/product.model.ts similarity index 100% rename from apps/signal/pipe-observable-to-signal/src/app/product.model.ts rename to lessons/signal/tasks/pipe-observable-to-signal/src/app/product.model.ts diff --git a/apps/signal/function-call-effect/src/assets/.gitkeep b/lessons/signal/tasks/pipe-observable-to-signal/src/assets/.gitkeep similarity index 100% rename from apps/signal/function-call-effect/src/assets/.gitkeep rename to lessons/signal/tasks/pipe-observable-to-signal/src/assets/.gitkeep diff --git a/apps/signal/pipe-observable-to-signal/src/favicon.ico b/lessons/signal/tasks/pipe-observable-to-signal/src/favicon.ico similarity index 100% rename from apps/signal/pipe-observable-to-signal/src/favicon.ico rename to lessons/signal/tasks/pipe-observable-to-signal/src/favicon.ico diff --git a/apps/signal/pipe-observable-to-signal/src/index.html b/lessons/signal/tasks/pipe-observable-to-signal/src/index.html similarity index 100% rename from apps/signal/pipe-observable-to-signal/src/index.html rename to lessons/signal/tasks/pipe-observable-to-signal/src/index.html diff --git a/apps/signal/pipe-observable-to-signal/src/main.ts b/lessons/signal/tasks/pipe-observable-to-signal/src/main.ts similarity index 100% rename from apps/signal/pipe-observable-to-signal/src/main.ts rename to lessons/signal/tasks/pipe-observable-to-signal/src/main.ts diff --git a/apps/signal/pipe-observable-to-signal/src/styles.scss b/lessons/signal/tasks/pipe-observable-to-signal/src/styles.scss similarity index 100% rename from apps/signal/pipe-observable-to-signal/src/styles.scss rename to lessons/signal/tasks/pipe-observable-to-signal/src/styles.scss diff --git a/lessons/signal/tasks/pipe-observable-to-signal/tailwind.config.js b/lessons/signal/tasks/pipe-observable-to-signal/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/signal/tasks/pipe-observable-to-signal/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/lessons/signal/tasks/pipe-observable-to-signal/tsconfig.app.json b/lessons/signal/tasks/pipe-observable-to-signal/tsconfig.app.json new file mode 100644 index 000000000..8b5631268 --- /dev/null +++ b/lessons/signal/tasks/pipe-observable-to-signal/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/best-practices/lazy-load-component/tsconfig.editor.json b/lessons/signal/tasks/pipe-observable-to-signal/tsconfig.editor.json similarity index 53% rename from apps/best-practices/lazy-load-component/tsconfig.editor.json rename to lessons/signal/tasks/pipe-observable-to-signal/tsconfig.editor.json index b10364017..a8ac182c0 100644 --- a/apps/best-practices/lazy-load-component/tsconfig.editor.json +++ b/lessons/signal/tasks/pipe-observable-to-signal/tsconfig.editor.json @@ -2,6 +2,5 @@ "extends": "./tsconfig.json", "include": ["src/**/*.ts"], "compilerOptions": {}, - "exclude": [ - "jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] } diff --git a/lessons/signal/tasks/pipe-observable-to-signal/tsconfig.json b/lessons/signal/tasks/pipe-observable-to-signal/tsconfig.json new file mode 100644 index 000000000..830507fe9 --- /dev/null +++ b/lessons/signal/tasks/pipe-observable-to-signal/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "es2022", + "useDefineForClassFields": false, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.editor.json" + }, + { + "path": "./tsconfig.app.json" + } + ], + "extends": "../../../../tsconfig.base.json", + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/apps/signal/signal-input/.eslintrc.json b/lessons/signal/tasks/signal-input/.eslintrc.json similarity index 100% rename from apps/signal/signal-input/.eslintrc.json rename to lessons/signal/tasks/signal-input/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/signal/43-signal-input.md b/lessons/signal/tasks/signal-input/README.md similarity index 93% rename from docs/src/content/docs/ru/challenges/signal/43-signal-input.md rename to lessons/signal/tasks/signal-input/README.md index b0d88eea2..98e4dc5ad 100644 --- a/docs/src/content/docs/ru/challenges/signal/43-signal-input.md +++ b/lessons/signal/tasks/signal-input/README.md @@ -1,3 +1,12 @@ +# Signal Input + +### Как запускать + +```bash +npm run serve:signal-signal-input +``` + +## Документация --- title: 🟢 Signal Input description: Испытание 43 про то как использовать signal inputs diff --git a/apps/signal/signal-input/src/app/app.component.ts b/lessons/signal/tasks/signal-input/src/app/app.component.ts similarity index 100% rename from apps/signal/signal-input/src/app/app.component.ts rename to lessons/signal/tasks/signal-input/src/app/app.component.ts diff --git a/apps/signal/signal-input/src/app/app.config.ts b/lessons/signal/tasks/signal-input/src/app/app.config.ts similarity index 100% rename from apps/signal/signal-input/src/app/app.config.ts rename to lessons/signal/tasks/signal-input/src/app/app.config.ts diff --git a/apps/signal/signal-input/src/app/user.component.ts b/lessons/signal/tasks/signal-input/src/app/user.component.ts similarity index 100% rename from apps/signal/signal-input/src/app/user.component.ts rename to lessons/signal/tasks/signal-input/src/app/user.component.ts diff --git a/apps/signal/pipe-observable-to-signal/src/assets/.gitkeep b/lessons/signal/tasks/signal-input/src/assets/.gitkeep similarity index 100% rename from apps/signal/pipe-observable-to-signal/src/assets/.gitkeep rename to lessons/signal/tasks/signal-input/src/assets/.gitkeep diff --git a/apps/signal/signal-input/src/favicon.ico b/lessons/signal/tasks/signal-input/src/favicon.ico similarity index 100% rename from apps/signal/signal-input/src/favicon.ico rename to lessons/signal/tasks/signal-input/src/favicon.ico diff --git a/apps/signal/signal-input/src/index.html b/lessons/signal/tasks/signal-input/src/index.html similarity index 100% rename from apps/signal/signal-input/src/index.html rename to lessons/signal/tasks/signal-input/src/index.html diff --git a/apps/signal/signal-input/src/main.ts b/lessons/signal/tasks/signal-input/src/main.ts similarity index 100% rename from apps/signal/signal-input/src/main.ts rename to lessons/signal/tasks/signal-input/src/main.ts diff --git a/apps/signal/signal-input/src/styles.scss b/lessons/signal/tasks/signal-input/src/styles.scss similarity index 100% rename from apps/signal/signal-input/src/styles.scss rename to lessons/signal/tasks/signal-input/src/styles.scss diff --git a/lessons/signal/tasks/signal-input/tailwind.config.js b/lessons/signal/tasks/signal-input/tailwind.config.js new file mode 100644 index 000000000..e04a557c1 --- /dev/null +++ b/lessons/signal/tasks/signal-input/tailwind.config.js @@ -0,0 +1,12 @@ +const { join } = require('path'); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/lessons/signal/tasks/signal-input/tsconfig.app.json b/lessons/signal/tasks/signal-input/tsconfig.app.json new file mode 100644 index 000000000..8b5631268 --- /dev/null +++ b/lessons/signal/tasks/signal-input/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/signal/signal-input/tsconfig.editor.json b/lessons/signal/tasks/signal-input/tsconfig.editor.json similarity index 100% rename from apps/signal/signal-input/tsconfig.editor.json rename to lessons/signal/tasks/signal-input/tsconfig.editor.json diff --git a/lessons/signal/tasks/signal-input/tsconfig.json b/lessons/signal/tasks/signal-input/tsconfig.json new file mode 100644 index 000000000..5ec1db61c --- /dev/null +++ b/lessons/signal/tasks/signal-input/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "es2022", + "useDefineForClassFields": false, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.editor.json" + } + ], + "extends": "../../../../tsconfig.base.json", + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/lessons/standalone/lecture/advanced.md b/lessons/standalone/lecture/advanced.md new file mode 100644 index 000000000..213a98258 --- /dev/null +++ b/lessons/standalone/lecture/advanced.md @@ -0,0 +1 @@ +# Расширенные знания diff --git a/lessons/standalone/lecture/basics.md b/lessons/standalone/lecture/basics.md new file mode 100644 index 000000000..460854104 --- /dev/null +++ b/lessons/standalone/lecture/basics.md @@ -0,0 +1 @@ +# Базовые знания diff --git a/apps/standalone/module-to-standalone/.eslintrc.json b/lessons/standalone/tasks/module-to-standalone/.eslintrc.json similarity index 100% rename from apps/standalone/module-to-standalone/.eslintrc.json rename to lessons/standalone/tasks/module-to-standalone/.eslintrc.json diff --git a/docs/src/content/docs/ru/challenges/angular/31-module-to-standalone.md b/lessons/standalone/tasks/module-to-standalone/README.md similarity index 94% rename from docs/src/content/docs/ru/challenges/angular/31-module-to-standalone.md rename to lessons/standalone/tasks/module-to-standalone/README.md index ae90ba492..34bb329e7 100644 --- a/docs/src/content/docs/ru/challenges/angular/31-module-to-standalone.md +++ b/lessons/standalone/tasks/module-to-standalone/README.md @@ -1,3 +1,12 @@ +# Module to Standalone + +### Как запускать + +```bash +npm run serve:angular-module-to-standalone +``` + +## Документация --- title: 🟢 Module к Standalone компоненту description: Задача 31 заключается в переносе приложения с компонентов основанных на модулях на автономные компоненты (standalone). diff --git a/apps/standalone/module-to-standalone/src/app/app.component.ts b/lessons/standalone/tasks/module-to-standalone/src/app/app.component.ts similarity index 100% rename from apps/standalone/module-to-standalone/src/app/app.component.ts rename to lessons/standalone/tasks/module-to-standalone/src/app/app.component.ts diff --git a/apps/standalone/module-to-standalone/src/app/app.module.ts b/lessons/standalone/tasks/module-to-standalone/src/app/app.module.ts similarity index 100% rename from apps/standalone/module-to-standalone/src/app/app.module.ts rename to lessons/standalone/tasks/module-to-standalone/src/app/app.module.ts diff --git a/apps/signal/signal-input/src/assets/.gitkeep b/lessons/standalone/tasks/module-to-standalone/src/assets/.gitkeep similarity index 100% rename from apps/signal/signal-input/src/assets/.gitkeep rename to lessons/standalone/tasks/module-to-standalone/src/assets/.gitkeep diff --git a/apps/standalone/module-to-standalone/src/favicon.ico b/lessons/standalone/tasks/module-to-standalone/src/favicon.ico similarity index 100% rename from apps/standalone/module-to-standalone/src/favicon.ico rename to lessons/standalone/tasks/module-to-standalone/src/favicon.ico diff --git a/apps/standalone/module-to-standalone/src/index.html b/lessons/standalone/tasks/module-to-standalone/src/index.html similarity index 100% rename from apps/standalone/module-to-standalone/src/index.html rename to lessons/standalone/tasks/module-to-standalone/src/index.html diff --git a/apps/standalone/module-to-standalone/src/main.ts b/lessons/standalone/tasks/module-to-standalone/src/main.ts similarity index 100% rename from apps/standalone/module-to-standalone/src/main.ts rename to lessons/standalone/tasks/module-to-standalone/src/main.ts diff --git a/apps/standalone/module-to-standalone/src/styles.scss b/lessons/standalone/tasks/module-to-standalone/src/styles.scss similarity index 100% rename from apps/standalone/module-to-standalone/src/styles.scss rename to lessons/standalone/tasks/module-to-standalone/src/styles.scss diff --git a/apps/standalone/module-to-standalone/tailwind.config.js b/lessons/standalone/tasks/module-to-standalone/tailwind.config.js similarity index 76% rename from apps/standalone/module-to-standalone/tailwind.config.js rename to lessons/standalone/tasks/module-to-standalone/tailwind.config.js index 99d683dd8..62845e528 100644 --- a/apps/standalone/module-to-standalone/tailwind.config.js +++ b/lessons/standalone/tasks/module-to-standalone/tailwind.config.js @@ -1,4 +1,3 @@ -const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); const { join } = require('path'); /** @type {import('tailwindcss').Config} */ diff --git a/lessons/standalone/tasks/module-to-standalone/tsconfig.app.json b/lessons/standalone/tasks/module-to-standalone/tsconfig.app.json new file mode 100644 index 000000000..8b5631268 --- /dev/null +++ b/lessons/standalone/tasks/module-to-standalone/tsconfig.app.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "types": [], + "moduleResolution": "bundler" + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"], + "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/standalone/module-to-standalone/tsconfig.editor.json b/lessons/standalone/tasks/module-to-standalone/tsconfig.editor.json similarity index 71% rename from apps/standalone/module-to-standalone/tsconfig.editor.json rename to lessons/standalone/tasks/module-to-standalone/tsconfig.editor.json index 91f5718dc..ccb35c609 100644 --- a/apps/standalone/module-to-standalone/tsconfig.editor.json +++ b/lessons/standalone/tasks/module-to-standalone/tsconfig.editor.json @@ -2,7 +2,7 @@ "extends": "./tsconfig.json", "include": [ "src/**/*.ts", - "../../../libs/module-to-standalone/shell/src/lib/main-shell.routes.ts", + "../../../libs/module-to-standalone/shell/src/lib/main-shell.routes.ts", "../../../libs/module-to-standalone/shell/src/lib/main-shell.component.ts" ], "compilerOptions": { diff --git a/lessons/standalone/tasks/module-to-standalone/tsconfig.json b/lessons/standalone/tasks/module-to-standalone/tsconfig.json new file mode 100644 index 000000000..5986b0db6 --- /dev/null +++ b/lessons/standalone/tasks/module-to-standalone/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "es2022", + "useDefineForClassFields": false, + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.editor.json" + } + ], + "extends": "../../../../tsconfig.base.json", + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/libs/cli/src/generators/challenge/files/readme/README.md__tmpl__ b/libs/cli/src/generators/challenge/files/readme/README.md__tmpl__ index d782650c4..7c33b27c5 100644 --- a/libs/cli/src/generators/challenge/files/readme/README.md__tmpl__ +++ b/libs/cli/src/generators/challenge/files/readme/README.md__tmpl__ @@ -2,7 +2,7 @@ > author: thomas-laforge -### Run Application +### Как запускать ```bash npx nx serve <%= appProjectName %> diff --git a/libs/cli/src/generators/readme/generator.ts b/libs/cli/src/generators/readme/generator.ts index dd2564543..a2fb5d338 100644 --- a/libs/cli/src/generators/readme/generator.ts +++ b/libs/cli/src/generators/readme/generator.ts @@ -91,7 +91,7 @@ async function rewriteFile(tree: Tree, file: string) { > author: thomas-laforge -### Run Application +### Как запускать \`\`\`bash npx nx serve ${command} diff --git a/libs/decoupling/brain/tsconfig.json b/libs/decoupling/brain/tsconfig.json index 5cf0a1656..b9e5be086 100644 --- a/libs/decoupling/brain/tsconfig.json +++ b/libs/decoupling/brain/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/decoupling/core/tsconfig.json b/libs/decoupling/core/tsconfig.json index 5cf0a1656..b9e5be086 100644 --- a/libs/decoupling/core/tsconfig.json +++ b/libs/decoupling/core/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/decoupling/helmet/tsconfig.json b/libs/decoupling/helmet/tsconfig.json index 5cf0a1656..b9e5be086 100644 --- a/libs/decoupling/helmet/tsconfig.json +++ b/libs/decoupling/helmet/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/module-to-standalone/admin/feature/tsconfig.json b/libs/module-to-standalone/admin/feature/tsconfig.json index b9e5be086..0ba12d472 100644 --- a/libs/module-to-standalone/admin/feature/tsconfig.json +++ b/libs/module-to-standalone/admin/feature/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/module-to-standalone/admin/shared/tsconfig.json b/libs/module-to-standalone/admin/shared/tsconfig.json index b9e5be086..0ba12d472 100644 --- a/libs/module-to-standalone/admin/shared/tsconfig.json +++ b/libs/module-to-standalone/admin/shared/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/module-to-standalone/core/providers/tsconfig.json b/libs/module-to-standalone/core/providers/tsconfig.json index b9e5be086..0ba12d472 100644 --- a/libs/module-to-standalone/core/providers/tsconfig.json +++ b/libs/module-to-standalone/core/providers/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/module-to-standalone/core/service/tsconfig.json b/libs/module-to-standalone/core/service/tsconfig.json index b9e5be086..0ba12d472 100644 --- a/libs/module-to-standalone/core/service/tsconfig.json +++ b/libs/module-to-standalone/core/service/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/module-to-standalone/forbidden/tsconfig.json b/libs/module-to-standalone/forbidden/tsconfig.json index 5cf0a1656..b9e5be086 100644 --- a/libs/module-to-standalone/forbidden/tsconfig.json +++ b/libs/module-to-standalone/forbidden/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/module-to-standalone/home/tsconfig.json b/libs/module-to-standalone/home/tsconfig.json index 5cf0a1656..b9e5be086 100644 --- a/libs/module-to-standalone/home/tsconfig.json +++ b/libs/module-to-standalone/home/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/module-to-standalone/shell/tsconfig.json b/libs/module-to-standalone/shell/tsconfig.json index 5cf0a1656..b9e5be086 100644 --- a/libs/module-to-standalone/shell/tsconfig.json +++ b/libs/module-to-standalone/shell/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/module-to-standalone/user/contact/tsconfig.json b/libs/module-to-standalone/user/contact/tsconfig.json index b9e5be086..0ba12d472 100644 --- a/libs/module-to-standalone/user/contact/tsconfig.json +++ b/libs/module-to-standalone/user/contact/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/module-to-standalone/user/home/tsconfig.json b/libs/module-to-standalone/user/home/tsconfig.json index b9e5be086..0ba12d472 100644 --- a/libs/module-to-standalone/user/home/tsconfig.json +++ b/libs/module-to-standalone/user/home/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/module-to-standalone/user/shell/tsconfig.json b/libs/module-to-standalone/user/shell/tsconfig.json index b9e5be086..0ba12d472 100644 --- a/libs/module-to-standalone/user/shell/tsconfig.json +++ b/libs/module-to-standalone/user/shell/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/shared/directives/tsconfig.json b/libs/shared/directives/tsconfig.json index 5cf0a1656..b9e5be086 100644 --- a/libs/shared/directives/tsconfig.json +++ b/libs/shared/directives/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/shared/ui/tsconfig.json b/libs/shared/ui/tsconfig.json index 8e62d6db5..d507d054f 100644 --- a/libs/shared/ui/tsconfig.json +++ b/libs/shared/ui/tsconfig.json @@ -16,7 +16,7 @@ "path": "./tsconfig.lib.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/shared/utils/tsconfig.json b/libs/shared/utils/tsconfig.json index 5cf0a1656..b9e5be086 100644 --- a/libs/shared/utils/tsconfig.json +++ b/libs/shared/utils/tsconfig.json @@ -19,7 +19,7 @@ "path": "./tsconfig.spec.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/static-dynamic-import/users/tsconfig.json b/libs/static-dynamic-import/users/tsconfig.json index 8e62d6db5..d507d054f 100644 --- a/libs/static-dynamic-import/users/tsconfig.json +++ b/libs/static-dynamic-import/users/tsconfig.json @@ -16,7 +16,7 @@ "path": "./tsconfig.lib.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/testing-table/backend/tsconfig.json b/libs/testing-table/backend/tsconfig.json index 8e62d6db5..d507d054f 100644 --- a/libs/testing-table/backend/tsconfig.json +++ b/libs/testing-table/backend/tsconfig.json @@ -16,7 +16,7 @@ "path": "./tsconfig.lib.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/libs/testing-table/model/tsconfig.json b/libs/testing-table/model/tsconfig.json index 8e62d6db5..d507d054f 100644 --- a/libs/testing-table/model/tsconfig.json +++ b/libs/testing-table/model/tsconfig.json @@ -16,7 +16,7 @@ "path": "./tsconfig.lib.json" } ], - "extends": "../../../tsconfig.base.json", + "extends": "../../../../tsconfig.base.json", "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false, "strictInjectionParameters": true, diff --git a/nx.json b/nx.json deleted file mode 100644 index 814dffa71..000000000 --- a/nx.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "$schema": "./node_modules/nx/schemas/nx-schema.json", - "targetDefaults": { - "build": { - "dependsOn": ["^build"], - "inputs": ["production", "^production"], - "cache": true - }, - "component-test": { - "inputs": ["default", "^production"], - "cache": true - }, - "@nx/jest:jest": { - "inputs": ["default", "^production", "{workspaceRoot}/jest.preset.js"], - "cache": true, - "options": { - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "codeCoverage": true - } - } - }, - "@nx/eslint:lint": { - "inputs": [ - "default", - "{workspaceRoot}/.eslintrc.json", - "{workspaceRoot}/tools/eslint-rules/**/*" - ], - "cache": true - }, - "@angular-devkit/build-angular:application": { - "cache": true, - "dependsOn": ["^build"], - "inputs": ["production", "^production"] - }, - "@angular/build:application": { - "cache": true, - "dependsOn": ["^build"], - "inputs": ["production", "^production"] - } - }, - "namedInputs": { - "default": ["{projectRoot}/**/*", "sharedGlobals"], - "production": [ - "default", - "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", - "!{projectRoot}/tsconfig.spec.json", - "!{projectRoot}/jest.config.[jt]s", - "!{projectRoot}/.eslintrc.json", - "!{projectRoot}/cypress/**/*", - "!{projectRoot}/**/*.cy.[jt]s?(x)", - "!{projectRoot}/cypress.config.[jt]s", - "!{projectRoot}/src/test-setup.[jt]s" - ], - "sharedGlobals": [] - }, - "cli": { - "packageManager": "npm" - }, - "generators": { - "@nx/angular:application": { - "e2eTestRunner": "none", - "linter": "eslint", - "style": "scss", - "unitTestRunner": "none", - "inlineStyle": "true", - "inlineTemplate": "true", - "prefix": "app", - "skipTests": "true", - "standalone": "true" - }, - "@nx/angular:library": { - "linter": "eslint", - "unitTestRunner": "jest", - "prefix": "lib", - "buildable": "true" - }, - "@nx/angular:component": { - "style": "scss", - "changeDetection": "OnPush", - "inlineStyle": "true", - "inlineTemplate": "true", - "skipTests": "true", - "standalone": "true", - "type": "component" - }, - "@schematics/angular:component": { - "type": "component" - }, - "@nx/angular:directive": { - "type": "directive" - }, - "@schematics/angular:directive": { - "type": "directive" - }, - "@nx/angular:service": { - "type": "service" - }, - "@schematics/angular:service": { - "type": "service" - }, - "@nx/angular:scam": { - "type": "component" - }, - "@nx/angular:scam-directive": { - "type": "directive" - }, - "@nx/angular:guard": { - "typeSeparator": "." - }, - "@schematics/angular:guard": { - "typeSeparator": "." - }, - "@nx/angular:interceptor": { - "typeSeparator": "." - }, - "@schematics/angular:interceptor": { - "typeSeparator": "." - }, - "@nx/angular:module": { - "typeSeparator": "." - }, - "@schematics/angular:module": { - "typeSeparator": "." - }, - "@nx/angular:pipe": { - "typeSeparator": "." - }, - "@schematics/angular:pipe": { - "typeSeparator": "." - }, - "@nx/angular:resolver": { - "typeSeparator": "." - }, - "@schematics/angular:resolver": { - "typeSeparator": "." - } - }, - "defaultProject": "angular-projection", - "useInferencePlugins": false, - "plugins": [ - { - "plugin": "@nx/eslint/plugin", - "options": { - "targetName": "lint", - "extensions": ["ts", "tsx", "js", "jsx", "html", "vue"] - } - }, - { - "plugin": "@nx/jest/plugin", - "options": { - "targetName": "test" - } - } - ] -} diff --git a/package-lock.json b/package-lock.json index 4eefb40e0..c85056e50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,6 @@ "@ngneat/falso": "7.2.0", "@ngrx/component-store": "19.0.1", "@ngrx/operators": "19.0.1", - "@nx/angular": "21.2.1", "@swc/helpers": "0.5.12", "@tanstack/angular-query-experimental": "5.81.5", "express": "^4.21.2", @@ -51,15 +50,6 @@ "@cypress/webpack-dev-server": "3.8.0", "@hirez_io/observer-spy": "^2.2.0", "@ngrx/schematics": "19.0.1", - "@nx/cypress": "21.2.1", - "@nx/devkit": "21.2.1", - "@nx/eslint": "21.2.1", - "@nx/eslint-plugin": "21.2.1", - "@nx/jest": "21.2.1", - "@nx/js": "21.2.1", - "@nx/plugin": "21.2.1", - "@nx/web": "21.2.1", - "@nx/workspace": "21.2.1", "@schematics/angular": "20.0.4", "@swc-node/register": "1.9.2", "@swc/cli": "0.6.0", @@ -89,7 +79,6 @@ "jsonc-eslint-parser": "^2.1.0", "lint-staged": "^13.0.3", "ng-packagr": "20.0.1", - "nx": "21.2.1", "postcss": "^8.4.5", "postcss-import": "~14.1.0", "postcss-preset-env": "~7.5.0", @@ -154,9 +143,9 @@ "license": "MIT" }, "node_modules/@adobe/css-tools": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.3.tgz", - "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", + "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", "dev": true, "license": "MIT" }, @@ -176,6 +165,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -189,7 +179,7 @@ "version": "0.2000.5", "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2000.5.tgz", "integrity": "sha512-9aPtMdRiOVP14PkbgxAKh3TivxXTBiOr66xYbxutP0cMBwzRX67ekyEpAxmTEiWnd+qmxV9tddWgGL5sWcEZgQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@angular-devkit/core": "20.0.5", @@ -205,7 +195,7 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -215,7 +205,7 @@ "version": "20.0.5", "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.0.5.tgz", "integrity": "sha512-WMpk27O6R0p4t8VKq+z/1R+J/Jc5zpHy7OVsAguwH6bUoLOpLWMW1nHDIXGS9IpfkCmMRILxwKhFYIuEcUAvNg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", @@ -344,11 +334,63 @@ } } }, + "node_modules/@angular-devkit/build-angular/node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/postcss": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", - "devOptional": true, + "dev": true, "funding": [ { "type": "opencollective", @@ -364,6 +406,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", @@ -377,7 +420,7 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -387,7 +430,7 @@ "version": "0.2000.5", "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2000.5.tgz", "integrity": "sha512-tdzw1ieaXWureLWz86fVh2OhHE0XuJGJGYEukjqsxExV/ZZ9Y0avYEIqDaC8RrPE1mHiM7W9in1DgYvPmsWxHw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@angular-devkit/architect": "0.2000.5", @@ -407,7 +450,7 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -417,6 +460,7 @@ "version": "20.0.5", "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.0.5.tgz", "integrity": "sha512-bFaFP984GxqfC1WYlUEFuwkDO657ynxI51cE3J6yfwP92ykyF/MXzV0S9tRBhx5rcLVgCAiohxmzKdxPhoLWSA==", + "dev": true, "license": "MIT", "dependencies": { "ajv": "8.17.1", @@ -444,6 +488,7 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -453,6 +498,7 @@ "version": "20.0.5", "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.0.5.tgz", "integrity": "sha512-3bcYIk6x5mgDIC6K9z9HWqOJ450pglawZbKr4auME/Rt39xt0YT4IaTDhQYYuXU+NQ7mjKOSmqmOBwD2qcwsyw==", + "dev": true, "license": "MIT", "dependencies": { "@angular-devkit/core": "20.0.5", @@ -471,6 +517,7 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -526,6 +573,7 @@ "integrity": "sha512-giIMYORf8P8MbBxh6EUfiR/7Y+omxJtK2C7a8lYTtLSOIGO0D8c8hXx9hTlPcdupVX+xZXDuZ85c9JDen+JSSA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@angular-eslint/bundled-angular-compiler": "20.1.1", "eslint-scope": "^8.0.2" @@ -555,6 +603,7 @@ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.0.6.tgz", "integrity": "sha512-OS37BTq9mhD6EuO7Pogl8e0eKGGuedWbcEDO23SdgCf0PL3rLgcubHWilOusfoLmGX+hTYHDq2AQhVgik9Z1Hg==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -570,7 +619,7 @@ "version": "20.0.5", "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.0.5.tgz", "integrity": "sha512-HQnKEuBhKURoaXkvTsgNbW8LyxVGYPMR/9e+KpJZv06NgJHXZumLtbkg1f1IF1d4d60SY1g+ienjFOu+Yj1FfQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", @@ -670,6 +719,7 @@ "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-20.0.5.tgz", "integrity": "sha512-WhJ1I/ib/Za0qjWkSzMYV0gM8NOWrtOcZ2TYZ4aYFsjd8E13rGhxOez0DWt2sN3vfjAc1iWMmGGbNZrkp98adg==", "license": "MIT", + "peer": true, "dependencies": { "parse5": "^7.1.2", "tslib": "^2.3.0" @@ -735,6 +785,7 @@ "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.0.6.tgz", "integrity": "sha512-NRsq2gI4CH8nEy8yEZFySEmZ4U+1Y1yGzdIFubrKmtE2NXxR4KFGvQCkBLCLh6hNQXQx+Soe126bqByA6oIaFw==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -762,8 +813,9 @@ "version": "20.0.6", "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.0.6.tgz", "integrity": "sha512-A1H/Haq3O7SlMuH14Clj6Z6YhA9FtYQXpKnW1FrFbWOaTp1MpYFIVunL4duDOyRhrr3M9+AtEabbJu3fS7/XyA==", - "devOptional": true, + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "7.27.7", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -795,7 +847,7 @@ "version": "7.27.7", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.7.tgz", "integrity": "sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -826,28 +878,28 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "devOptional": true, + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", - "devOptional": true, + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -857,10 +909,10 @@ } }, "node_modules/@angular/compiler-cli/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "devOptional": true, + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -870,10 +922,10 @@ } }, "node_modules/@angular/compiler-cli/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "devOptional": true, + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -886,7 +938,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "string-width": "^7.2.0", @@ -898,17 +950,17 @@ } }, "node_modules/@angular/compiler-cli/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "devOptional": true, + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, "license": "MIT" }, "node_modules/@angular/compiler-cli/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -923,13 +975,13 @@ } }, "node_modules/@angular/compiler-cli/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "devOptional": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -939,10 +991,10 @@ } }, "node_modules/@angular/compiler-cli/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "devOptional": true, + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -960,7 +1012,7 @@ "version": "18.0.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "cliui": "^9.0.1", @@ -978,7 +1030,7 @@ "version": "22.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", - "devOptional": true, + "dev": true, "license": "ISC", "engines": { "node": "^20.19.0 || ^22.12.0 || >=23" @@ -989,6 +1041,7 @@ "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.0.6.tgz", "integrity": "sha512-PLSRl8vM8I+HOlAJFiTcRMNbRj2Clb7lpQqUfkeBSk8bBWOy9fLlscoY3JOk0tXoUTnW6lbRB1LmAFuYAQZzAA==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1014,6 +1067,7 @@ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.0.6.tgz", "integrity": "sha512-/SZB2g0Nd4zRHTXEnhG9Xnr0BcSPIbKwpanvkiOyyQlh8ab/DxGVoX/y8ovVw7lhxIXS0+cvloKpIbGCVmQHdw==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1059,6 +1113,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.0.6.tgz", "integrity": "sha512-EZC6ILD0nXOddNuwqQqwTzvRgXs/1kZoRGzdG8zpHhRREBf6VFMZ+g7IN3EKnYN4hDL5EMxIKIsIcQjmCDsu2A==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1081,6 +1136,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.0.6.tgz", "integrity": "sha512-Bolskz1hGGxgmKMR0YRSJvrnrvvSr7WfgikwglkWsSYXRi8kG2vjl2PC/F+OFCjhstw+XlE4qqkoE32LjV1s8A==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1099,6 +1155,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.0.6.tgz", "integrity": "sha512-GAOoYkS2/kdzdfWhO7K7gophGwo8cNqX5WoMfce4GEphtNZsUTXUQkWK9czG/DbWYSmjmkW8t14uzIqcmMKuZg==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0", "xhr2": "^0.2.0" @@ -1119,6 +1176,7 @@ "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.0.6.tgz", "integrity": "sha512-qmG08dm/uUUe70tjcy0hTLFa7hc8hIDpXovKl2olB+ziGqTuGUTJBC0A6tPc344m9EHknCHHmaC+03U+i1BtLw==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1137,6 +1195,7 @@ "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.0.5.tgz", "integrity": "sha512-JwAFHkIgddVYwiQDTHalpCUAonEpi5qf4wLCm88KeB3vXoTfCCgwj3mMN8ykYCVS7RLupBHI/hYYh9Hqf30P5Q==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1153,12 +1212,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -1167,9 +1227,10 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", - "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz", + "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1179,7 +1240,9 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -1209,12 +1272,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, "license": "MIT" }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -1224,6 +1289,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.27.1", @@ -1240,6 +1306,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz", "integrity": "sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" @@ -1249,12 +1316,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -1268,23 +1336,25 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", - "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.3.tgz", + "integrity": "sha512-RpLYy2sb51oNLjuu1iD3bwBqCBWUzjO0ocp+iaCP/lJtb2CPLcnC2Fftw+4sAzaMELGeWTgExSKADbdo0GFVzA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.27.1", + "@babel/traverse": "^7.29.0", "semver": "^6.3.1" }, "engines": { @@ -1294,23 +1364,38 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { @@ -1320,75 +1405,116 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", - "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz", + "integrity": "sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/@babel/helper-globals": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1401,6 +1527,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" @@ -1410,9 +1537,10 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1422,6 +1550,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -1436,14 +1565,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1456,6 +1586,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -1469,7 +1600,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==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" @@ -1482,15 +1613,17 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1500,45 +1633,49 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", - "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", - "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.6" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", + "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.0" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1548,13 +1685,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", - "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -1567,6 +1705,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1582,6 +1721,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1597,6 +1737,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1611,13 +1752,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", - "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1626,27 +1768,11 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", - "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-decorators": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1710,28 +1836,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", - "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", - "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1741,12 +1853,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1782,12 +1895,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1907,12 +2021,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1925,6 +2040,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", @@ -1941,6 +2057,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -1956,6 +2073,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -1973,6 +2091,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -1990,6 +2109,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2002,12 +2122,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", - "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2017,13 +2138,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2033,13 +2155,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", - "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2049,17 +2172,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", - "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2072,6 +2196,7 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" @@ -2081,13 +2206,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2097,13 +2223,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", - "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -2113,13 +2240,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", - "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2132,6 +2260,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2144,13 +2273,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2163,6 +2293,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2175,12 +2306,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2193,6 +2325,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2208,6 +2341,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -2224,6 +2358,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", @@ -2238,12 +2373,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", - "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2256,6 +2392,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2268,12 +2405,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2286,6 +2424,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2301,6 +2440,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -2314,13 +2454,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2330,15 +2471,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.4.tgz", + "integrity": "sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -2351,6 +2493,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -2364,13 +2507,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2383,6 +2527,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2395,12 +2540,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2410,12 +2556,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", - "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2425,16 +2572,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", - "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2447,6 +2595,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -2460,12 +2609,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", - "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2475,12 +2625,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -2494,6 +2645,7 @@ "version": "7.27.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2506,13 +2658,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", - "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2522,14 +2675,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", - "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2538,10 +2692,24 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2554,12 +2722,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.0.tgz", - "integrity": "sha512-LOAozRVbqxEVjSKfhGnuLoE4Kz4Oc5UJzuvFUhSsQzdCdaAQu06mG8zDv2GFSerM62nImUZ7K92vxnQcLSDlCQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2569,13 +2738,14 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", - "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2588,6 +2758,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2603,6 +2774,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.1.tgz", "integrity": "sha512-TqGF3desVsTcp3WrJGj4HfKokfCXCLcHpt4PJF0D8/iT6LPd9RS82Upw3KPeyr6B22Lfd3DO8MVrmp0oRkUDdw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -2623,6 +2795,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2632,6 +2805,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2644,12 +2818,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -2663,6 +2838,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2678,6 +2854,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2693,6 +2870,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2704,41 +2882,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", - "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2751,13 +2899,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", - "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2770,6 +2919,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -2783,13 +2933,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", - "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2802,6 +2953,7 @@ "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.2", @@ -2885,6 +3037,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2894,6 +3047,7 @@ "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -2904,60 +3058,44 @@ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/preset-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", - "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-typescript": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/runtime": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -2965,13 +3103,14 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -2981,13 +3120,14 @@ } }, "node_modules/@babel/types": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz", - "integrity": "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -3000,11 +3140,16 @@ "dev": true, "license": "MIT" }, - "node_modules/@bufbuild/protobuf": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.6.0.tgz", - "integrity": "sha512-6cuonJVNOIL7lTj5zgo/Rc2bKAo4/GvN+rKCrUj7GdEHRzCk8zKOfFwUsL9nAVk5rSIsRmlgcpLzTRysopEeeg==", - "license": "(Apache-2.0 AND BSD-3-Clause)" + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", + "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } }, "node_modules/@colors/colors": { "version": "1.5.0", @@ -3450,6 +3595,38 @@ "postcss": "^8.2" } }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "dev": true, + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@csstools/postcss-normalize-display-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", @@ -3544,27 +3721,10 @@ "postcss": "^8.2" } }, - "node_modules/@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "dev": true, - "license": "CC0-1.0", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.10" - } - }, - "node_modules/@cypress/request": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.8.tgz", - "integrity": "sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ==", + "node_modules/@cypress/request": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.10.tgz", + "integrity": "sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3574,14 +3734,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~4.0.0", + "form-data": "~4.0.4", "http-signature": "~1.4.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "6.14.0", + "qs": "~6.14.1", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", @@ -3686,9 +3846,9 @@ } }, "node_modules/@cypress/webpack-dev-server/node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.4.0.tgz", + "integrity": "sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==", "dev": true, "license": "MIT", "engines": { @@ -3753,6 +3913,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@cypress/webpack-dev-server/node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/@cypress/webpack-dev-server/node_modules/open": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", @@ -3827,6 +4000,16 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/@cypress/webpack-dev-server/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/@cypress/webpack-dev-server/node_modules/webpack-dev-middleware": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", @@ -3927,9 +4110,9 @@ } }, "node_modules/@cypress/webpack-dev-server/node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", "dev": true, "license": "MIT", "engines": { @@ -3964,40 +4147,12 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=14.17.0" } }, - "node_modules/@emnapi/core": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.4.tgz", - "integrity": "sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g==", - "license": "MIT", - "dependencies": { - "@emnapi/wasi-threads": "1.0.3", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.4.tgz", - "integrity": "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.3.tgz", - "integrity": "sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", @@ -4424,9 +4579,10 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" @@ -4442,9 +4598,10 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -4454,6 +4611,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", @@ -4474,9 +4632,10 @@ } }, "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -4490,52 +4649,28 @@ } }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -4544,22 +4679,11 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@eslint/js": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4590,6 +4714,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "deprecated": "Use @eslint/config-array instead", + "dev": true, "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", @@ -4601,9 +4726,10 @@ } }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -4611,9 +4737,10 @@ } }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -4626,6 +4753,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=12.22" @@ -4640,20 +4768,31 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", + "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@inquirer/checkbox": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.9.tgz", - "integrity": "sha512-DBJBkzI5Wx4jFaYm221LHvAhpKYkhVS0k9plqHwaHhofGNxvYB7J3Bz8w+bFJ05zaMb0sZNHo4KdmENQFlNTuQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.14", - "@inquirer/figures": "^1.0.12", - "@inquirer/type": "^3.0.7", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" @@ -4671,7 +4810,7 @@ "version": "5.1.10", "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.10.tgz", "integrity": "sha512-FxbQ9giWxUWKUk2O5XZ6PduVnH2CZ/fmMKMBkH71MHJvWr7WL5AHKevhzF1L5uYWB2P548o1RzVxrNd3dpmk6g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.11", @@ -4690,20 +4829,20 @@ } }, "node_modules/@inquirer/core": { - "version": "10.1.14", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.14.tgz", - "integrity": "sha512-Ma+ZpOJPewtIYl6HZHZckeX1STvDnHTCB2GVINNUlSEn2Am6LddWwfPkIGY0IUFVjUUrr/93XlBwTK6mfLjf0A==", - "devOptional": true, + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "dev": true, "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.12", - "@inquirer/type": "^3.0.7", - "ansi-escapes": "^4.3.2", + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" @@ -4718,15 +4857,15 @@ } }, "node_modules/@inquirer/editor": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.14.tgz", - "integrity": "sha512-yd2qtLl4QIIax9DTMZ1ZN2pFrrj+yL3kgIWxm34SS6uwCr0sIhsNyudUjAo5q3TqI03xx4SEBkUJqZuAInp9uA==", + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.14", - "@inquirer/type": "^3.0.7", - "external-editor": "^3.1.0" + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" @@ -4741,15 +4880,37 @@ } }, "node_modules/@inquirer/expand": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.16.tgz", - "integrity": "sha512-oiDqafWzMtofeJyyGkb1CTPaxUkjIcSxePHHQCfif8t3HV9pHcw1Kgdw3/uGpDvaFfeTluwQtWiqzPVjAqS3zA==", + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.14", - "@inquirer/type": "^3.0.7", - "yoctocolors-cjs": "^2.1.2" + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" }, "engines": { "node": ">=18" @@ -4764,24 +4925,24 @@ } }, "node_modules/@inquirer/figures": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.12.tgz", - "integrity": "sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==", - "devOptional": true, + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@inquirer/input": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.0.tgz", - "integrity": "sha512-opqpHPB1NjAmDISi3uvZOTrjEEU5CWVu/HBkDby8t93+6UxYX0Z7Ps0Ltjm5sZiEbWenjubwUkivAEYQmy9xHw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.14", - "@inquirer/type": "^3.0.7" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" @@ -4796,14 +4957,14 @@ } }, "node_modules/@inquirer/number": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.16.tgz", - "integrity": "sha512-kMrXAaKGavBEoBYUCgualbwA9jWUx2TjMA46ek+pEKy38+LFpL9QHlTd8PO2kWPUgI/KB+qi02o4y2rwXbzr3Q==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.14", - "@inquirer/type": "^3.0.7" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" @@ -4818,15 +4979,15 @@ } }, "node_modules/@inquirer/password": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.16.tgz", - "integrity": "sha512-g8BVNBj5Zeb5/Y3cSN+hDUL7CsIFDIuVxb9EPty3lkxBaYpjL5BNRKSYOF9yOLe+JOcKFd+TSVeADQ4iSY7rbg==", + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.14", - "@inquirer/type": "^3.0.7", - "ansi-escapes": "^4.3.2" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" @@ -4846,6 +5007,7 @@ "integrity": "sha512-5AOrZPf2/GxZ+SDRZ5WFplCA2TAQgK3OYrXCYmJL5NaTu4ECcoWFlfUZuw7Es++6Njv7iu/8vpYJhuzxUH76Vg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@inquirer/checkbox": "^4.1.6", "@inquirer/confirm": "^5.1.10", @@ -4871,15 +5033,15 @@ } }, "node_modules/@inquirer/rawlist": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.4.tgz", - "integrity": "sha512-5GGvxVpXXMmfZNtvWw4IsHpR7RzqAR624xtkPd1NxxlV5M+pShMqzL4oRddRkg8rVEOK9fKdJp1jjVML2Lr7TQ==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.14", - "@inquirer/type": "^3.0.7", - "yoctocolors-cjs": "^2.1.2" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" @@ -4894,16 +5056,16 @@ } }, "node_modules/@inquirer/search": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.16.tgz", - "integrity": "sha512-POCmXo+j97kTGU6aeRjsPyuCpQQfKcMXdeTMw708ZMtWrj5aykZvlUxH4Qgz3+Y1L/cAVZsSpA+UgZCu2GMOMg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.14", - "@inquirer/figures": "^1.0.12", - "@inquirer/type": "^3.0.7", - "yoctocolors-cjs": "^2.1.2" + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" @@ -4918,17 +5080,17 @@ } }, "node_modules/@inquirer/select": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.2.4.tgz", - "integrity": "sha512-unTppUcTjmnbl/q+h8XeQDhAqIOmwWYWNyiiP2e3orXrg6tOaa5DHXja9PChCSbChOsktyKgOieRZFnajzxoBg==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.14", - "@inquirer/figures": "^1.0.12", - "@inquirer/type": "^3.0.7", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { "node": ">=18" @@ -4943,10 +5105,10 @@ } }, "node_modules/@inquirer/type": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.7.tgz", - "integrity": "sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==", - "devOptional": true, + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -4964,6 +5126,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -4978,9 +5141,10 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -4990,9 +5154,10 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -5005,12 +5170,14 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -5025,12 +5192,13 @@ } }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -5043,6 +5211,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -5086,6 +5255,16 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -5100,6 +5279,20 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -5143,10 +5336,10 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "devOptional": true, + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5394,6 +5587,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" @@ -5455,6 +5649,7 @@ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -5487,7 +5682,9 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -5501,15 +5698,26 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -5520,9 +5728,10 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", - "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -5530,15 +5739,15 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -5549,6 +5758,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10.0" @@ -5561,17 +5771,12 @@ "tslib": "2" } }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz", - "integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==", + "node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "dev": true, "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/util": "^1.1.2", - "hyperdyperid": "^1.2.0", - "thingies": "^1.20.0" - }, "engines": { "node": ">=10.0" }, @@ -5583,10 +5788,11 @@ "tslib": "2" } }, - "node_modules/@jsonjoy.com/util": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.6.0.tgz", - "integrity": "sha512-sw/RMbehRhN68WRtcKCpQOPfnH6lLP4GJfqzi3iYej8tnzpZUDr6UkZYJjcjjC0FWEJOJbyM3PTIwxucUmDG2A==", + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=10.0" @@ -5599,3415 +5805,1313 @@ "tslib": "2" } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "license": "MIT" - }, - "node_modules/@listr2/prompt-adapter-inquirer": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.22.tgz", - "integrity": "sha512-hV36ZoY+xKL6pYOt1nPNnkciFkn89KZwqLhAFzJvYysAvL5uBQdiADZx/8bIDXIukzzwG0QlPYolgMzQUtKgpQ==", + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.2.tgz", + "integrity": "sha512-SVjwklkpIV5wrynpYtuYnfYH1QF4/nDuLBX7VXdb+3miglcAgBVZb/5y0cOsehRV/9Vb+3UqhkMq3/NR3ztdkQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@inquirer/type": "^1.5.5" + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "thingies": "^2.5.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, "peerDependencies": { - "@inquirer/prompts": ">= 3 < 8" + "tslib": "2" } }, - "node_modules/@listr2/prompt-adapter-inquirer/node_modules/@inquirer/type": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", - "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.2.tgz", + "integrity": "sha512-fhO8+iR2I+OCw668ISDJdn1aArc9zx033sWejIyzQ8RBeXa9bDSaUeA3ix0poYOfrj1KdOzytmYNv2/uLDfV6g==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "mute-stream": "^1.0.0" + "@jsonjoy.com/fs-core": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "thingies": "^2.5.0" }, "engines": { - "node": ">=18" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@listr2/prompt-adapter-inquirer/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.2.tgz", + "integrity": "sha512-nX2AdL6cOFwLdju9G4/nbRnYevmCJbh7N7hvR3gGm97Cs60uEjyd0rpR+YBS7cTg175zzl22pGKXR5USaQMvKg==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "@jsonjoy.com/fs-print": "4.57.2", + "@jsonjoy.com/fs-snapshot": "4.57.2", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.3.0.tgz", - "integrity": "sha512-LipbQobyEfQtu8WixasaFUZZ+JCGlho4OWwWIQ5ol0rB1RKkcZvypu7sS1CBvofBGVAa3vbOh8IOGQMrbmL5dg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@lmdb/lmdb-darwin-x64": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.3.0.tgz", - "integrity": "sha512-yA+9P+ZeA3vg76BLXWeUomIAjxfmSmR2eg8fueHXDg5Xe1Xmkl9JCKuHXUhtJ+mMVcH12d5k4kJBLbyXTadfGQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@lmdb/lmdb-linux-arm": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.3.0.tgz", - "integrity": "sha512-EDYrW9kle+8wI19JCj/PhRnGoCN9bked5cdOPdo1wdgH/HzjgoLPFTn9DHlZccgTEVhp3O+bpWXdN/rWySVvjw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.3.0.tgz", - "integrity": "sha512-OeWvSgjXXZ/zmtLqqL78I3910F6UYpUubmsUU+iBHo6nTtjkpXms95rJtGrjkWQqwswKBD7xSMplbYC4LEsiPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-linux-x64": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.3.0.tgz", - "integrity": "sha512-wDd02mt5ScX4+xd6g78zKBr6ojpgCJCTrllCAabjgap5FzuETqOqaQfKhO+tJuGWv/J5q+GIds6uY7rNFueOxg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@lmdb/lmdb-win32-arm64": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.3.0.tgz", - "integrity": "sha512-COotWhHJgzXULLiEjOgWQwqig6PoA+6ji6W+sDl6M1HhMXWIymEVHGs0edsVSNtsNSCAWMxJgR3asv6FNX/2EA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@lmdb/lmdb-win32-x64": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.3.0.tgz", - "integrity": "sha512-kqUgQH+l8HDbkAapx+aoko7Ez4X4DqkIraOqY/k0QY5EN/iialVlFpBUXh4wFXzirdmEVjbIUMrceUh0Kh8LeA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@modern-js/node-bundle-require": { - "version": "2.67.6", - "resolved": "https://registry.npmjs.org/@modern-js/node-bundle-require/-/node-bundle-require-2.67.6.tgz", - "integrity": "sha512-rRiDQkrm3kgn0E/GNrcvqo4c71PaUs2R8Xmpv6GUKbEr6lz7VNgfZmAhdAQPtNfRfiBe+1sFLzEcwfEdDo/dTA==", - "license": "MIT", - "dependencies": { - "@modern-js/utils": "2.67.6", - "@swc/helpers": "^0.5.17", - "esbuild": "0.17.19" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@modern-js/node-bundle-require/node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" - } - }, - "node_modules/@modern-js/utils": { - "version": "2.67.6", - "resolved": "https://registry.npmjs.org/@modern-js/utils/-/utils-2.67.6.tgz", - "integrity": "sha512-cxY7HsSH0jIN3rlL6RZ0tgzC1tH0gHW++8X6h7sXCNCylhUdbGZI9yTGbpAS8bU7c97NmPaTKg+/ILt00Kju1Q==", - "license": "MIT", - "dependencies": { - "@swc/helpers": "^0.5.17", - "caniuse-lite": "^1.0.30001520", - "lodash": "^4.17.21", - "rslog": "^1.1.0" - } - }, - "node_modules/@modern-js/utils/node_modules/@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@module-federation/bridge-react-webpack-plugin": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.9.1.tgz", - "integrity": "sha512-znN/Qm6M0U1t3iF10gu1hSxDkk18yz78yvk+AMB34UDzpXHiC1zbpIeV2CQNV5GCeafmCICmcn9y1qh7F54KTg==", - "license": "MIT", - "dependencies": { - "@module-federation/sdk": "0.9.1", - "@types/semver": "7.5.8", - "semver": "7.6.3" - } - }, - "node_modules/@module-federation/bridge-react-webpack-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@module-federation/cli": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/cli/-/cli-0.16.0.tgz", - "integrity": "sha512-4H9i7vgkRqvVk8VcbGl8LoFZOwLXnXOyefIwQdpxAyG3i99AzuUScTaD2/uGNq/fM+iybo8DGyWy/P6leNHqBQ==", - "license": "MIT", - "dependencies": { - "@modern-js/node-bundle-require": "2.67.6", - "@module-federation/dts-plugin": "0.16.0", - "@module-federation/sdk": "0.16.0", - "chalk": "3.0.0", - "commander": "11.1.0" - }, - "bin": { - "mf": "bin/mf.js" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@module-federation/cli/node_modules/@module-federation/dts-plugin": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.16.0.tgz", - "integrity": "sha512-A5ToViydF/JSdnrpxSKx4y38bGAs9CMXdWetrf9mD0Ha15aB3LQDn+1dFzUaiUk4bHblbzRB6BZnKFy7rPzB8g==", - "license": "MIT", - "dependencies": { - "@module-federation/error-codes": "0.16.0", - "@module-federation/managers": "0.16.0", - "@module-federation/sdk": "0.16.0", - "@module-federation/third-party-dts-extractor": "0.16.0", - "adm-zip": "^0.5.10", - "ansi-colors": "^4.1.3", - "axios": "^1.8.2", - "chalk": "3.0.0", - "fs-extra": "9.1.0", - "isomorphic-ws": "5.0.0", - "koa": "2.16.1", - "lodash.clonedeepwith": "4.5.0", - "log4js": "6.9.1", - "node-schedule": "2.1.1", - "rambda": "^9.1.0", - "ws": "8.18.0" - }, - "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24" - }, - "peerDependenciesMeta": { - "vue-tsc": { - "optional": true - } - } - }, - "node_modules/@module-federation/cli/node_modules/@module-federation/error-codes": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.16.0.tgz", - "integrity": "sha512-TfmA45b8vvISniGudMg8jjIy1q3tLPon0QN/JdFp5f8AJ8/peICN5b+dkEQnWsAVg2fEusYhk9dO7z3nUeJM8A==", - "license": "MIT" - }, - "node_modules/@module-federation/cli/node_modules/@module-federation/managers": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.16.0.tgz", - "integrity": "sha512-ySWz7j+D9CjKDWgSKkAOTIn7m1Jd8BTNglcsMK66jL3Z76kYFX+oUtogJXu5mV/MiHUkTyp6Pv8AEeaTArdgBw==", - "license": "MIT", - "dependencies": { - "@module-federation/sdk": "0.16.0", - "find-pkg": "2.0.0", - "fs-extra": "9.1.0" - } - }, - "node_modules/@module-federation/cli/node_modules/@module-federation/sdk": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.16.0.tgz", - "integrity": "sha512-UXJW1WWuDoDmScX0tpISjl4xIRPzAiN62vg9etuBdAEUM+ja9rz/zwNZaByiUPFS2aqlj2RHenCRvIapE8mYEg==", - "license": "MIT" - }, - "node_modules/@module-federation/cli/node_modules/@module-federation/third-party-dts-extractor": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.16.0.tgz", - "integrity": "sha512-Q/stS4DshYCHWmsHnd7sbtbBieB4XjQ7cf5EZzWDd9DVpRaghXbt4rDhP+Vwcg2MM6RvmxQFcapiILMBzxMvJQ==", - "license": "MIT", - "dependencies": { - "find-pkg": "2.0.0", - "fs-extra": "9.1.0", - "resolve": "1.22.8" - } - }, - "node_modules/@module-federation/cli/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@module-federation/cli/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/@module-federation/cli/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@module-federation/cli/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@module-federation/cli/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@module-federation/cli/node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@module-federation/cli/node_modules/koa": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.1.tgz", - "integrity": "sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==", - "license": "MIT", - "dependencies": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.9.0", - "debug": "^4.3.2", - "delegates": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^2.0.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - }, - "engines": { - "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" - } - }, - "node_modules/@module-federation/cli/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@module-federation/cli/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@module-federation/data-prefetch": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.9.1.tgz", - "integrity": "sha512-rS1AsgRvIMAWK8oMprEBF0YQ3WvsqnumjinvAZU1Dqut5DICmpQMTPEO1OrAKyjO+PQgEhmq13HggzN6ebGLrQ==", - "license": "MIT", - "dependencies": { - "@module-federation/runtime": "0.9.1", - "@module-federation/sdk": "0.9.1", - "fs-extra": "9.1.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/@module-federation/data-prefetch/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@module-federation/dts-plugin": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.9.1.tgz", - "integrity": "sha512-DezBrFaIKfDcEY7UhqyO1WbYocERYsR/CDN8AV6OvMnRlQ8u0rgM8qBUJwx0s+K59f+CFQFKEN4C8p7naCiHrw==", - "license": "MIT", - "dependencies": { - "@module-federation/error-codes": "0.9.1", - "@module-federation/managers": "0.9.1", - "@module-federation/sdk": "0.9.1", - "@module-federation/third-party-dts-extractor": "0.9.1", - "adm-zip": "^0.5.10", - "ansi-colors": "^4.1.3", - "axios": "^1.7.4", - "chalk": "3.0.0", - "fs-extra": "9.1.0", - "isomorphic-ws": "5.0.0", - "koa": "2.15.4", - "lodash.clonedeepwith": "4.5.0", - "log4js": "6.9.1", - "node-schedule": "2.1.1", - "rambda": "^9.1.0", - "ws": "8.18.0" - }, - "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24" - }, - "peerDependenciesMeta": { - "vue-tsc": { - "optional": true - } - } - }, - "node_modules/@module-federation/dts-plugin/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@module-federation/dts-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@module-federation/enhanced": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.9.1.tgz", - "integrity": "sha512-c9siKVjcgT2gtDdOTqEr+GaP2X/PWAS0OV424ljKLstFL1lcS/BIsxWFDmxPPl5hDByAH+1q4YhC1LWY4LNDQw==", - "license": "MIT", - "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.9.1", - "@module-federation/data-prefetch": "0.9.1", - "@module-federation/dts-plugin": "0.9.1", - "@module-federation/error-codes": "0.9.1", - "@module-federation/inject-external-runtime-core-plugin": "0.9.1", - "@module-federation/managers": "0.9.1", - "@module-federation/manifest": "0.9.1", - "@module-federation/rspack": "0.9.1", - "@module-federation/runtime-tools": "0.9.1", - "@module-federation/sdk": "0.9.1", - "btoa": "^1.2.1", - "upath": "2.0.1" - }, - "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vue-tsc": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/@module-federation/error-codes": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.9.1.tgz", - "integrity": "sha512-q8spCvlwUzW42iX1irnlBTcwcZftRNHyGdlaoFO1z/fW4iphnBIfijzkigWQzOMhdPgzqN/up7XN+g5hjBGBtw==", - "license": "MIT" - }, - "node_modules/@module-federation/inject-external-runtime-core-plugin": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.9.1.tgz", - "integrity": "sha512-BPfzu1cqDU5BhM493enVF1VfxJWmruen0ktlHrWdJJlcddhZzyFBGaLAGoGc+83fS75aEllvJTEthw4kMViMQQ==", - "license": "MIT", - "peerDependencies": { - "@module-federation/runtime-tools": "0.9.1" - } - }, - "node_modules/@module-federation/managers": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.9.1.tgz", - "integrity": "sha512-8hpIrvGfiODxS1qelTd7eaLRVF7jrp17RWgeH1DWoprxELANxm5IVvqUryB+7j+BhoQzamog9DL5q4MuNfGgIA==", - "license": "MIT", - "dependencies": { - "@module-federation/sdk": "0.9.1", - "find-pkg": "2.0.0", - "fs-extra": "9.1.0" - } - }, - "node_modules/@module-federation/managers/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@module-federation/manifest": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.9.1.tgz", - "integrity": "sha512-+GteKBXrAUkq49i2CSyWZXM4vYa+mEVXxR9Du71R55nXXxgbzAIoZj9gxjRunj9pcE8+YpAOyfHxLEdWngxWdg==", - "license": "MIT", - "dependencies": { - "@module-federation/dts-plugin": "0.9.1", - "@module-federation/managers": "0.9.1", - "@module-federation/sdk": "0.9.1", - "chalk": "3.0.0", - "find-pkg": "2.0.0" - } - }, - "node_modules/@module-federation/manifest/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@module-federation/node": { - "version": "2.7.8", - "resolved": "https://registry.npmjs.org/@module-federation/node/-/node-2.7.8.tgz", - "integrity": "sha512-z1b8vvzswPmHqwegQCJ7M/doJ1uTJilyEXAzS0STmWzYTV16I4I6IalIgOjHr8JknMzs7GfF2ja1S+2AjiEfrg==", - "license": "MIT", - "dependencies": { - "@module-federation/enhanced": "0.16.0", - "@module-federation/runtime": "0.16.0", - "@module-federation/sdk": "0.16.0", - "btoa": "1.2.1", - "encoding": "^0.1.13", - "node-fetch": "2.7.0" - }, - "peerDependencies": { - "react": "^16||^17||^18||^19", - "react-dom": "^16||^17||^18||^19", - "webpack": "^5.40.0" - }, - "peerDependenciesMeta": { - "next": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/bridge-react-webpack-plugin": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.16.0.tgz", - "integrity": "sha512-4HP5keHby66ql5NTe3sXgRaSbWuYCxwIrhO+TI5FsJyBVmVlHuc6ZxhdbV7ssU/u4u2ri0qPL9x1ALwnNie/pw==", - "license": "MIT", - "dependencies": { - "@module-federation/sdk": "0.16.0", - "@types/semver": "7.5.8", - "semver": "7.6.3" - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/data-prefetch": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.16.0.tgz", - "integrity": "sha512-+6dxkU5MEORhx5/wrQVMxY/7vW7P23dxn+VCMCtH0FLhocYbyhVtJD+ecEVKI2ZV6WvLRS472u24Fz6C4QJq5A==", - "license": "MIT", - "dependencies": { - "@module-federation/runtime": "0.16.0", - "@module-federation/sdk": "0.16.0", - "fs-extra": "9.1.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/dts-plugin": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.16.0.tgz", - "integrity": "sha512-A5ToViydF/JSdnrpxSKx4y38bGAs9CMXdWetrf9mD0Ha15aB3LQDn+1dFzUaiUk4bHblbzRB6BZnKFy7rPzB8g==", - "license": "MIT", - "dependencies": { - "@module-federation/error-codes": "0.16.0", - "@module-federation/managers": "0.16.0", - "@module-federation/sdk": "0.16.0", - "@module-federation/third-party-dts-extractor": "0.16.0", - "adm-zip": "^0.5.10", - "ansi-colors": "^4.1.3", - "axios": "^1.8.2", - "chalk": "3.0.0", - "fs-extra": "9.1.0", - "isomorphic-ws": "5.0.0", - "koa": "2.16.1", - "lodash.clonedeepwith": "4.5.0", - "log4js": "6.9.1", - "node-schedule": "2.1.1", - "rambda": "^9.1.0", - "ws": "8.18.0" - }, - "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24" - }, - "peerDependenciesMeta": { - "vue-tsc": { - "optional": true - } - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/enhanced": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.16.0.tgz", - "integrity": "sha512-ShkQeNXDBLmKMpOF3B+omXU59lVvogsEzRNmNxnnTNz+/zd/MgHxLwOLcNr2bNxdDPk0Ejz/n9GXG4YQKDaJpA==", - "license": "MIT", - "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.16.0", - "@module-federation/cli": "0.16.0", - "@module-federation/data-prefetch": "0.16.0", - "@module-federation/dts-plugin": "0.16.0", - "@module-federation/error-codes": "0.16.0", - "@module-federation/inject-external-runtime-core-plugin": "0.16.0", - "@module-federation/managers": "0.16.0", - "@module-federation/manifest": "0.16.0", - "@module-federation/rspack": "0.16.0", - "@module-federation/runtime-tools": "0.16.0", - "@module-federation/sdk": "0.16.0", - "btoa": "^1.2.1", - "schema-utils": "^4.3.0", - "upath": "2.0.1" - }, - "bin": { - "mf": "bin/mf.js" - }, - "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vue-tsc": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/error-codes": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.16.0.tgz", - "integrity": "sha512-TfmA45b8vvISniGudMg8jjIy1q3tLPon0QN/JdFp5f8AJ8/peICN5b+dkEQnWsAVg2fEusYhk9dO7z3nUeJM8A==", - "license": "MIT" - }, - "node_modules/@module-federation/node/node_modules/@module-federation/inject-external-runtime-core-plugin": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.16.0.tgz", - "integrity": "sha512-kVW5DTxg1K/sqadVvg/r2s5ArZVH4VaVsw+/24dllfUQwn7opVorVMrI491zqz8NpSBjN2MHykWMLPQnSW659g==", - "license": "MIT", - "peerDependencies": { - "@module-federation/runtime-tools": "0.16.0" - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/managers": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.16.0.tgz", - "integrity": "sha512-ySWz7j+D9CjKDWgSKkAOTIn7m1Jd8BTNglcsMK66jL3Z76kYFX+oUtogJXu5mV/MiHUkTyp6Pv8AEeaTArdgBw==", - "license": "MIT", - "dependencies": { - "@module-federation/sdk": "0.16.0", - "find-pkg": "2.0.0", - "fs-extra": "9.1.0" - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/manifest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.16.0.tgz", - "integrity": "sha512-O9UY4JDlzXmZWzxuvG9dqGForZWcz0Lh5IU9GyPOCDNysVLAejwuwO/Vptohs0D2T3C8U0x/Bd29XqOVu3J/kw==", - "license": "MIT", - "dependencies": { - "@module-federation/dts-plugin": "0.16.0", - "@module-federation/managers": "0.16.0", - "@module-federation/sdk": "0.16.0", - "chalk": "3.0.0", - "find-pkg": "2.0.0" - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/rspack": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.16.0.tgz", - "integrity": "sha512-42JiUVqVevosbwxNKV2KxOyrE6BGQXneUjg8AE7+K9pm4p0j180se5xpFerDMQf2blU4gJs4Wjgpj5q1EFQLUw==", - "license": "MIT", - "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.16.0", - "@module-federation/dts-plugin": "0.16.0", - "@module-federation/inject-external-runtime-core-plugin": "0.16.0", - "@module-federation/managers": "0.16.0", - "@module-federation/manifest": "0.16.0", - "@module-federation/runtime-tools": "0.16.0", - "@module-federation/sdk": "0.16.0", - "btoa": "1.2.1" - }, - "peerDependencies": { - "@rspack/core": ">=0.7", - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vue-tsc": { - "optional": true - } - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/runtime": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.16.0.tgz", - "integrity": "sha512-6o84WI8Qhc9O3HwPLx89kTvOSkyUOHQr73R/zr0I04sYhlMJgw5xTwXeGE7bQAmNgbJclzW9Kh7JTP7+3o3CHg==", - "license": "MIT", - "dependencies": { - "@module-federation/error-codes": "0.16.0", - "@module-federation/runtime-core": "0.16.0", - "@module-federation/sdk": "0.16.0" - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/runtime-core": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.16.0.tgz", - "integrity": "sha512-5SECQowG4hlUVBRk/y6bnYLfxbsl5NcMmqn043WPe7NDOhGQWbTuYibJ3Bk+ZBv5U4uYLEmXipBGDc1FKsHklQ==", - "license": "MIT", - "dependencies": { - "@module-federation/error-codes": "0.16.0", - "@module-federation/sdk": "0.16.0" - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/runtime-tools": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.16.0.tgz", - "integrity": "sha512-OzmXNluXBQ2E6znzX4m9CJt1MFHVGmbN8c8MSKcYIDcLzLSKBQAiaz9ZUMhkyWx2YrPgD134glyPEqJrc+fY8A==", - "license": "MIT", - "dependencies": { - "@module-federation/runtime": "0.16.0", - "@module-federation/webpack-bundler-runtime": "0.16.0" - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/sdk": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.16.0.tgz", - "integrity": "sha512-UXJW1WWuDoDmScX0tpISjl4xIRPzAiN62vg9etuBdAEUM+ja9rz/zwNZaByiUPFS2aqlj2RHenCRvIapE8mYEg==", - "license": "MIT" - }, - "node_modules/@module-federation/node/node_modules/@module-federation/third-party-dts-extractor": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.16.0.tgz", - "integrity": "sha512-Q/stS4DshYCHWmsHnd7sbtbBieB4XjQ7cf5EZzWDd9DVpRaghXbt4rDhP+Vwcg2MM6RvmxQFcapiILMBzxMvJQ==", - "license": "MIT", - "dependencies": { - "find-pkg": "2.0.0", - "fs-extra": "9.1.0", - "resolve": "1.22.8" - } - }, - "node_modules/@module-federation/node/node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.16.0.tgz", - "integrity": "sha512-yqIDQTelJZP0Rxml0OXv4Er8Kbdxy7NFh6PCzPwDFWI1SkiokJ3uXQJBvtlxZ3lOnCDYOzdHstqa8sJG4JP02Q==", - "license": "MIT", - "dependencies": { - "@module-federation/runtime": "0.16.0", - "@module-federation/sdk": "0.16.0" - } - }, - "node_modules/@module-federation/node/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@module-federation/node/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@module-federation/node/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@module-federation/node/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@module-federation/node/node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@module-federation/node/node_modules/koa": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.1.tgz", - "integrity": "sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==", - "license": "MIT", - "dependencies": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.9.0", - "debug": "^4.3.2", - "delegates": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^2.0.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - }, - "engines": { - "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" - } - }, - "node_modules/@module-federation/node/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@module-federation/node/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@module-federation/node/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@module-federation/rspack": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.9.1.tgz", - "integrity": "sha512-ZJqG75dWHhyTMa9I0YPJEV2XRt0MFxnDiuMOpI92esdmwWY633CBKyNh1XxcLd629YVeTv03+whr+Fz/f91JEw==", - "license": "MIT", - "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.9.1", - "@module-federation/dts-plugin": "0.9.1", - "@module-federation/inject-external-runtime-core-plugin": "0.9.1", - "@module-federation/managers": "0.9.1", - "@module-federation/manifest": "0.9.1", - "@module-federation/runtime-tools": "0.9.1", - "@module-federation/sdk": "0.9.1" - }, - "peerDependencies": { - "@rspack/core": ">=0.7", - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vue-tsc": { - "optional": true - } - } - }, - "node_modules/@module-federation/runtime": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.9.1.tgz", - "integrity": "sha512-jp7K06weabM5BF5sruHr/VLyalO+cilvRDy7vdEBqq88O9mjc0RserD8J+AP4WTl3ZzU7/GRqwRsiwjjN913dA==", - "license": "MIT", - "dependencies": { - "@module-federation/error-codes": "0.9.1", - "@module-federation/runtime-core": "0.9.1", - "@module-federation/sdk": "0.9.1" - } - }, - "node_modules/@module-federation/runtime-core": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.9.1.tgz", - "integrity": "sha512-r61ufhKt5pjl81v7TkmhzeIoSPOaNtLynW6+aCy3KZMa3RfRevFxmygJqv4Nug1L0NhqUeWtdLejh4VIglNy5Q==", - "license": "MIT", - "dependencies": { - "@module-federation/error-codes": "0.9.1", - "@module-federation/sdk": "0.9.1" - } - }, - "node_modules/@module-federation/runtime-tools": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.9.1.tgz", - "integrity": "sha512-JQZ//ab+lEXoU2DHAH+JtYASGzxEjXB0s4rU+6VJXc8c+oUPxH3kWIwzjdncg2mcWBmC1140DCk+K+kDfOZ5CQ==", - "license": "MIT", - "dependencies": { - "@module-federation/runtime": "0.9.1", - "@module-federation/webpack-bundler-runtime": "0.9.1" - } - }, - "node_modules/@module-federation/sdk": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.9.1.tgz", - "integrity": "sha512-YQonPTImgnCqZjE/A+3N2g3J5ypR6kx1tbBzc9toUANKr/dw/S63qlh/zHKzWQzxjjNNVMdXRtTMp07g3kgEWg==", - "license": "MIT" - }, - "node_modules/@module-federation/third-party-dts-extractor": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.9.1.tgz", - "integrity": "sha512-KeIByP718hHyq+Mc53enZ419pZZ1fh9Ns6+/bYLkc3iCoJr/EDBeiLzkbMwh2AS4Qk57WW0yNC82xzf7r0Zrrw==", - "license": "MIT", - "dependencies": { - "find-pkg": "2.0.0", - "fs-extra": "9.1.0", - "resolve": "1.22.8" - } - }, - "node_modules/@module-federation/third-party-dts-extractor/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@module-federation/third-party-dts-extractor/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.9.1.tgz", - "integrity": "sha512-CxySX01gT8cBowKl9xZh+voiHvThMZ471icasWnlDIZb14KasZoX1eCh9wpGvwoOdIk9rIRT7h70UvW9nmop6w==", - "license": "MIT", - "dependencies": { - "@module-federation/runtime": "0.9.1", - "@module-federation/sdk": "0.9.1" - } - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "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==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", - "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", - "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", - "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", - "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", - "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@napi-rs/nice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.4.tgz", - "integrity": "sha512-Sqih1YARrmMoHlXGgI9JrrgkzxcaaEso0AH+Y7j8NHonUs+xe4iDsgC3IBIDNdzEewbNpccNN6hip+b5vmyRLw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "optionalDependencies": { - "@napi-rs/nice-android-arm-eabi": "1.0.4", - "@napi-rs/nice-android-arm64": "1.0.4", - "@napi-rs/nice-darwin-arm64": "1.0.4", - "@napi-rs/nice-darwin-x64": "1.0.4", - "@napi-rs/nice-freebsd-x64": "1.0.4", - "@napi-rs/nice-linux-arm-gnueabihf": "1.0.4", - "@napi-rs/nice-linux-arm64-gnu": "1.0.4", - "@napi-rs/nice-linux-arm64-musl": "1.0.4", - "@napi-rs/nice-linux-ppc64-gnu": "1.0.4", - "@napi-rs/nice-linux-riscv64-gnu": "1.0.4", - "@napi-rs/nice-linux-s390x-gnu": "1.0.4", - "@napi-rs/nice-linux-x64-gnu": "1.0.4", - "@napi-rs/nice-linux-x64-musl": "1.0.4", - "@napi-rs/nice-win32-arm64-msvc": "1.0.4", - "@napi-rs/nice-win32-ia32-msvc": "1.0.4", - "@napi-rs/nice-win32-x64-msvc": "1.0.4" - } - }, - "node_modules/@napi-rs/nice-android-arm-eabi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.4.tgz", - "integrity": "sha512-OZFMYUkih4g6HCKTjqJHhMUlgvPiDuSLZPbPBWHLjKmFTv74COzRlq/gwHtmEVaR39mJQ6ZyttDl2HNMUbLVoA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-android-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.4.tgz", - "integrity": "sha512-k8u7cjeA64vQWXZcRrPbmwjH8K09CBnNaPnI9L1D5N6iMPL3XYQzLcN6WwQonfcqCDv5OCY3IqX89goPTV4KMw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-GsLdQvUcuVzoyzmtjsThnpaVEizAqH5yPHgnsBmq3JdVoVZHELFo7PuJEdfOH1DOHi2mPwB9sCJEstAYf3XCJA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.4.tgz", - "integrity": "sha512-1y3gyT3e5zUY5SxRl3QDtJiWVsbkmhtUHIYwdWWIQ3Ia+byd/IHIEpqAxOGW1nhhnIKfTCuxBadHQb+yZASVoA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-freebsd-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.4.tgz", - "integrity": "sha512-06oXzESPRdXUuzS8n2hGwhM2HACnDfl3bfUaSqLGImM8TA33pzDXgGL0e3If8CcFWT98aHows5Lk7xnqYNGFeA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.4.tgz", - "integrity": "sha512-CgklZ6g8WL4+EgVVkxkEvvsi2DSLf9QIloxWO0fvQyQBp6VguUSX3eHLeRpqwW8cRm2Hv/Q1+PduNk7VK37VZw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-arm64-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.4.tgz", - "integrity": "sha512-wdAJ7lgjhAlsANUCv0zi6msRwq+D4KDgU+GCCHssSxWmAERZa2KZXO0H2xdmoJ/0i03i6YfK/sWaZgUAyuW2oQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-arm64-musl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.4.tgz", - "integrity": "sha512-4b1KYG+sriufhFrpUS9uNOEYYJqSfcbnwGx6uGX7JjrH8tELG90cOpCawz5THNIwlS3DhLgnCOcn0+4p6z26QA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-ppc64-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.4.tgz", - "integrity": "sha512-iaf3vMRgr23oe1PUaKpxaH3DS0IMN0+N9iEiWVwYPm/U15vZFYdqVegGfN2PzrZLUl5lc8ZxbmEKDfuqslhAMA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-riscv64-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.4.tgz", - "integrity": "sha512-UXoREY6Yw6rHrGuTwQgBxpfjK34t6mTjibE9/cXbefL9AuUCJ9gEgwNKZiONuR5QGswChqo9cnthjdKkYyAdDg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-s390x-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.4.tgz", - "integrity": "sha512-eFbgYCRPmsqbYPAlLYU5hYTNbogmIDUvknilehHsFhCH1+0/kN87lP+XaLT0Yeq4V/rpwChSd9vlz4muzFArtw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-x64-gnu": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.4.tgz", - "integrity": "sha512-4T3E6uTCwWT6IPnwuPcWVz3oHxvEp/qbrCxZhsgzwTUBEwu78EGNXGdHfKJQt3soth89MLqZJw+Zzvnhrsg1mQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-x64-musl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.4.tgz", - "integrity": "sha512-NtbBkAeyBPLvCBkWtwkKXkNSn677eaT0cX3tygq+2qVv71TmHgX4gkX6o9BXjlPzdgPGwrUudavCYPT9tzkEqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-win32-arm64-msvc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.4.tgz", - "integrity": "sha512-vubOe3i+YtSJGEk/++73y+TIxbuVHi+W8ZzrRm2eETCjCRwNlgbfToQZ85dSA+4iBB/NJRGNp+O4hfdbbttZWA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-win32-ia32-msvc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.4.tgz", - "integrity": "sha512-BMOVrUDZeg1RNRKVlh4eyLv5djAAVLiSddfpuuQ47EFjBcklg0NUeKMFKNrKQR4UnSn4HAiACLD7YK7koskwmg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-win32-x64-msvc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.4.tgz", - "integrity": "sha512-kCNk6HcRZquhw/whwh4rHsdPyOSCQCgnVDVik+Y9cuSVTDy3frpiCJTScJqPPS872h4JgZKkr/+CwcwttNEo9Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz", - "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==", - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.9.0" - } - }, - "node_modules/@ngneat/falso": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@ngneat/falso/-/falso-7.2.0.tgz", - "integrity": "sha512-283EXBFd05kCbGuGSXgmvhCsQYEYzvD/eJaE7lxd05qRB0tgREvZX7TRlJ1KSp8nHxoK6Ws029G1Y30mt4IVAA==", - "license": "MIT", - "dependencies": { - "seedrandom": "3.0.5", - "uuid": "8.3.2" - } - }, - "node_modules/@ngrx/component-store": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/component-store/-/component-store-19.0.1.tgz", - "integrity": "sha512-H/UNz7TMVWF8RUNWwEhfGy6zR5vfMEnGlxcAr+CwxRTryx9H0dsBE6esM/Kj/Po9EOjMFnjiY32ccyOrPUfFWA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" + "node": ">=10.0" }, - "peerDependencies": { - "@angular/core": "^19.0.0", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/operators": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/operators/-/operators-19.0.1.tgz", - "integrity": "sha512-4CA+VexfK6nkRb6glmyCSoQgU7zQpEgMF0wVDamxyCO8hJo6E4TwUAN2W5tE5cxWFAsS0+wpFXFncpigvPL9Vw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0" + "tslib": "2" } }, - "node_modules/@ngrx/schematics": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/schematics/-/schematics-19.0.1.tgz", - "integrity": "sha512-kH91X7zewB8niOeemk8NgbjnnW0crwqTl8gG2zZAySW3Q0yGnoPpVAc4Yxezm1/bKsLGLILvEAzzlQGKBrigVg==", + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.2.tgz", + "integrity": "sha512-xhiegylRmhw43Ki2HO1ZBL7DQ5ja/qpRsL29VtQ2xuUHiuDGbgf2uD4p9Qd8hJI5P6RCtGYD50IXHXVq/Ocjcg==", "dev": true, - "license": "MIT" - }, - "node_modules/@ngtools/webpack": { - "version": "20.0.5", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.0.5.tgz", - "integrity": "sha512-XH+NTCaOT0gBN7XXmNgMSOsQ0VXwv6E/dKcg1iu4DqYpxklYZ7EdhgVZn5vhwpqff3VRwJ8VFzp4U38AuppXrg==", - "devOptional": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^20.0.0", - "typescript": ">=5.8 <5.9", - "webpack": "^5.54.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "node": ">=10.0" }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@npmcli/agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", - "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.2.tgz", + "integrity": "sha512-18LmWTSONhoAPW+IWRuf8w/+zRolPFGPeGwMxlAhhfY11EKzX+5XHDBPAw67dBF5dxDErHJbl40U+3IXSDRXSQ==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" + "@jsonjoy.com/fs-fsa": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "node": ">=10.0" }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", - "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.2.tgz", + "integrity": "sha512-rsPSJgekz43IlNbLyAM/Ab+ouYLWGp5DDBfYBNNEqDaSpsbXfthBn29Q4muFA9L0F+Z3mKo+CWlgSCXrf+mOyQ==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "semver": "^7.3.5" + "@jsonjoy.com/fs-node-builtins": "4.57.2" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@npmcli/git": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", - "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.2.tgz", + "integrity": "sha512-wK9NSow48i4DbDl9F1CQE5TqnyZOJ04elU3WFG5aJ76p+YxO/ulyBBQvKsessPxdo381Bc2pcEoyPujMOhcRqQ==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^10.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^5.0.0" + "@jsonjoy.com/fs-node-utils": "4.57.2", + "tree-dump": "^1.1.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.2.tgz", + "integrity": "sha512-GdduDZuoP5V/QCgJkx9+BZ6SC0EZ/smXAdTS7PfMqgMTGXLlt/bH/FqMYaqB9JmLf05sJPtO0XRbAwwkEEPbVw==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, "engines": { - "node": ">=16" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" }, - "bin": { - "node-which": "bin/which.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", - "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" }, - "bin": { - "installed-package-contents": "bin/index.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "engines": { - "node": "^18.17.0 || >=20.5.0" + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@npmcli/node-gyp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", - "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@npmcli/package-json": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", - "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "@npmcli/git": "^6.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^8.0.0", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" + "@jsonjoy.com/util": "17.67.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">=10.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@npmcli/package-json/node_modules/hosted-git-info": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", - "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "lru-cache": "^10.0.1" + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@npmcli/package-json/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", "dev": true, - "license": "ISC" + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@npmcli/promise-spawn": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz", - "integrity": "sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==", + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "which": "^5.0.0" + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "engines": { - "node": ">=16" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.22.tgz", + "integrity": "sha512-hV36ZoY+xKL6pYOt1nPNnkciFkn89KZwqLhAFzJvYysAvL5uBQdiADZx/8bIDXIukzzwG0QlPYolgMzQUtKgpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^1.5.5" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 8" } }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "node_modules/@listr2/prompt-adapter-inquirer/node_modules/@inquirer/type": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", + "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "mute-stream": "^1.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=18" } }, - "node_modules/@npmcli/redact": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", - "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", + "node_modules/@listr2/prompt-adapter-inquirer/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/run-script": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", - "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.3.0.tgz", + "integrity": "sha512-LipbQobyEfQtu8WixasaFUZZ+JCGlho4OWwWIQ5ol0rB1RKkcZvypu7sS1CBvofBGVAa3vbOh8IOGQMrbmL5dg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.3.0.tgz", + "integrity": "sha512-yA+9P+ZeA3vg76BLXWeUomIAjxfmSmR2eg8fueHXDg5Xe1Xmkl9JCKuHXUhtJ+mMVcH12d5k4kJBLbyXTadfGQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", - "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.3.0.tgz", + "integrity": "sha512-EDYrW9kle+8wI19JCj/PhRnGoCN9bked5cdOPdo1wdgH/HzjgoLPFTn9DHlZccgTEVhp3O+bpWXdN/rWySVvjw==", + "cpu": [ + "arm" + ], "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/angular": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-21.2.1.tgz", - "integrity": "sha512-9Z3sBU3MHZCHPHTtUNkLwMReD7iAWwfjWE0Q4Z0BavQaWJ2lr6oQI2CLKc+FHBpjMpmb3cN/YG60QadKg7jYVA==", - "license": "MIT", - "dependencies": { - "@nx/devkit": "21.2.1", - "@nx/eslint": "21.2.1", - "@nx/js": "21.2.1", - "@nx/module-federation": "21.2.1", - "@nx/rspack": "21.2.1", - "@nx/web": "21.2.1", - "@nx/webpack": "21.2.1", - "@nx/workspace": "21.2.1", - "@phenomnomnominal/tsquery": "~5.0.1", - "@typescript-eslint/type-utils": "^8.0.0", - "enquirer": "~2.3.6", - "magic-string": "~0.30.2", - "picocolors": "^1.1.0", - "picomatch": "4.0.2", - "semver": "^7.5.3", - "tslib": "^2.3.0", - "webpack-merge": "^5.8.0" - }, - "peerDependencies": { - "@angular-devkit/build-angular": ">= 18.0.0 < 21.0.0", - "@angular-devkit/core": ">= 18.0.0 < 21.0.0", - "@angular-devkit/schematics": ">= 18.0.0 < 21.0.0", - "@angular/build": ">= 18.0.0 < 21.0.0", - "@schematics/angular": ">= 18.0.0 < 21.0.0", - "ng-packagr": ">= 18.0.0 < 21.0.0", - "rxjs": "^6.5.3 || ^7.5.0" - }, - "peerDependenciesMeta": { - "@angular-devkit/build-angular": { - "optional": true - }, - "@angular/build": { - "optional": true - }, - "ng-packagr": { - "optional": true - } - } + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.3.0.tgz", + "integrity": "sha512-OeWvSgjXXZ/zmtLqqL78I3910F6UYpUubmsUU+iBHo6nTtjkpXms95rJtGrjkWQqwswKBD7xSMplbYC4LEsiPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/angular/node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.3.0.tgz", + "integrity": "sha512-wDd02mt5ScX4+xd6g78zKBr6ojpgCJCTrllCAabjgap5FzuETqOqaQfKhO+tJuGWv/J5q+GIds6uY7rNFueOxg==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/cypress": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-21.2.1.tgz", - "integrity": "sha512-dwhRyx4AbgpJJW2X6TBSlIEsqnBILvDWbmN/sgrGj8ykupwRf3X0zaGhmEpYnAkL3F/JS1HG40gaLZnZtBUdIg==", + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.3.0.tgz", + "integrity": "sha512-COotWhHJgzXULLiEjOgWQwqig6PoA+6ji6W+sDl6M1HhMXWIymEVHGs0edsVSNtsNSCAWMxJgR3asv6FNX/2EA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@nx/devkit": "21.2.1", - "@nx/eslint": "21.2.1", - "@nx/js": "21.2.1", - "@phenomnomnominal/tsquery": "~5.0.1", - "detect-port": "^1.5.1", - "semver": "^7.6.3", - "tree-kill": "1.2.2", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "cypress": ">= 3 < 15" - }, - "peerDependenciesMeta": { - "cypress": { - "optional": true - } - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@nx/devkit": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-21.2.1.tgz", - "integrity": "sha512-sbc8l6qdc9GER5gUeh+IKecyKA+uUv0V/bf45nibUziUuQN2C1nh9bFJHzBeFeySonmEbF+I0aZ3aoafM5FVuQ==", + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.3.0.tgz", + "integrity": "sha512-kqUgQH+l8HDbkAapx+aoko7Ez4X4DqkIraOqY/k0QY5EN/iialVlFpBUXh4wFXzirdmEVjbIUMrceUh0Kh8LeA==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "minimatch": "9.0.3", - "semver": "^7.5.3", - "tmp": "~0.2.1", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" - }, - "peerDependencies": { - "nx": "21.2.1" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@nx/eslint": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-21.2.1.tgz", - "integrity": "sha512-70natRH26IAsMrHDM3/LIJn5IE/+Z4EZ6qlkzCBHvWNG88QE/F/94Xw+bTtLxXqEsADhRcBSfpzM6FNcRRwOvg==", + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "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==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@nx/devkit": "21.2.1", - "@nx/js": "21.2.1", - "semver": "^7.5.3", - "tslib": "^2.3.0", - "typescript": "~5.8.2" - }, - "peerDependencies": { - "@zkochan/js-yaml": "0.0.7", - "eslint": "^8.0.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "@zkochan/js-yaml": { - "optional": true - } - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@nx/eslint-plugin": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-21.2.1.tgz", - "integrity": "sha512-8/PaYdK8ozEPSQ4SWNbvfiaEAZB82oP33SLj0hCoR3pVe1vEp5mBuLtYZzlMSqo1YLKc0SBDPqKpe22vsGHvHg==", + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@nx/devkit": "21.2.1", - "@nx/js": "21.2.1", - "@typescript-eslint/type-utils": "^8.0.0", - "@typescript-eslint/utils": "^8.0.0", - "chalk": "^4.1.0", - "confusing-browser-globals": "^1.0.9", - "globals": "^15.9.0", - "jsonc-eslint-parser": "^2.1.0", - "semver": "^7.5.3", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.13.2 || ^7.0.0 || ^8.0.0", - "eslint-config-prettier": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.36.0.tgz", - "integrity": "sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==", + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.36.0", - "@typescript-eslint/visitor-keys": "8.36.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.36.0.tgz", - "integrity": "sha512-JaS8bDVrfVJX4av0jLpe4ye0BpAaUW7+tnS4Y4ETa3q7NoZgzYbN9zDQTJ8kPb5fQ4n0hliAt9tA4Pfs2zA2Hg==", + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.36.0", - "@typescript-eslint/tsconfig-utils": "8.36.0", - "@typescript-eslint/types": "8.36.0", - "@typescript-eslint/visitor-keys": "8.36.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.36.0.tgz", - "integrity": "sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==", + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.36.0", - "@typescript-eslint/types": "8.36.0", - "@typescript-eslint/typescript-estree": "8.36.0" - }, + "optional": true, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">= 10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" } }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.36.0.tgz", - "integrity": "sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==", + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.36.0", - "eslint-visitor-keys": "^4.2.1" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">= 10" } }, - "node_modules/@nx/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">= 10" } }, - "node_modules/@nx/eslint-plugin/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 10" } }, - "node_modules/@nx/jest": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-21.2.1.tgz", - "integrity": "sha512-REwI01V+oSpX9d3GDgf5M1Nqcy1Ug8aglwMQxmPouBL23olktDX6oV1sE4P4mU5UnPq9p/AIcChBYbUlxLo75A==", + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@jest/reporters": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@nx/devkit": "21.2.1", - "@nx/js": "21.2.1", - "@phenomnomnominal/tsquery": "~5.0.1", - "identity-obj-proxy": "3.0.0", - "jest-config": "^29.4.1", - "jest-resolve": "^29.4.1", - "jest-util": "^29.4.1", - "minimatch": "9.0.3", - "picocolors": "^1.1.0", - "resolve.exports": "2.0.3", - "semver": "^7.5.3", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" - } - }, - "node_modules/@nx/js": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/js/-/js-21.2.1.tgz", - "integrity": "sha512-m0Dd9r0AgxCc/Gs0kxjjAqOriKelvCOOSTRUvldx2JRjifU2DCIw9kIrgkAlkRmRDehqk7CUan4Qkb0tJSrlvg==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.23.2", - "@babel/plugin-proposal-decorators": "^7.22.7", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-runtime": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/preset-typescript": "^7.22.5", - "@babel/runtime": "^7.22.6", - "@nx/devkit": "21.2.1", - "@nx/workspace": "21.2.1", - "@zkochan/js-yaml": "0.0.7", - "babel-plugin-const-enum": "^1.0.1", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-typescript-metadata": "^0.3.1", - "chalk": "^4.1.0", - "columnify": "^1.6.0", - "detect-port": "^1.5.1", - "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "js-tokens": "^4.0.0", - "jsonc-parser": "3.2.0", - "npm-package-arg": "11.0.1", - "npm-run-path": "^4.0.1", - "ora": "5.3.0", - "picocolors": "^1.1.0", - "picomatch": "4.0.2", - "semver": "^7.5.3", - "source-map-support": "0.5.19", - "tinyglobby": "^0.2.12", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "verdaccio": "^6.0.5" - }, - "peerDependenciesMeta": { - "verdaccio": { - "optional": true - } - } - }, - "node_modules/@nx/js/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/@nx/js/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" - } - }, - "node_modules/@nx/js/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "license": "MIT" - }, - "node_modules/@nx/js/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/@nx/js/node_modules/npm-package-arg": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", - "license": "ISC", - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/@nx/js/node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nx/js/node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@nx/js/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "node_modules/@nx/js/node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@nx/js/node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "license": "ISC", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@nx/module-federation": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/module-federation/-/module-federation-21.2.1.tgz", - "integrity": "sha512-nleLtyDl57trWc0aHznGNFa2a/qnrL9hShMBlYvQWO86/COmDiJJ8FdsnEcWgzGW1pDWwLLPh6WgQOu52TJG4A==", - "license": "MIT", - "dependencies": { - "@module-federation/enhanced": "^0.9.0", - "@module-federation/node": "^2.6.26", - "@module-federation/sdk": "^0.9.0", - "@nx/devkit": "21.2.1", - "@nx/js": "21.2.1", - "@nx/web": "21.2.1", - "@rspack/core": "^1.3.8", - "express": "^4.21.2", - "http-proxy-middleware": "^3.0.3", - "picocolors": "^1.1.0", - "tslib": "^2.3.0", - "webpack": "^5.88.0" + "node": ">= 10" } }, - "node_modules/@nx/nx-darwin-arm64": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-21.2.1.tgz", - "integrity": "sha512-iP5N5TAe4k9j2p4xhEXU/a/6qEW6PWbRQeSSbCsFLuvf4UslP7wW6vuzteSW1r48Aras+5lGUOERtrlnKnuTew==", + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" - ] + "linux" + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@nx/nx-darwin-x64": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-21.2.1.tgz", - "integrity": "sha512-CFRBYwUvQIYG+DPoNF2wzjCFSNn0tfN9WlHDJWI41qZNZfc4kSY8zQYDLXNj4/Lp7XMBL+Sv70Dd9mDzfnP2Cg==", + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", "cpu": [ - "x64" + "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" - ] + "linux" + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@nx/nx-freebsd-x64": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-21.2.1.tgz", - "integrity": "sha512-r2J6CrPwibsvCjMYQ7OqdpSF6HW1lI/+HghMh/cAeTQiCC2ksVeXR/WX2QkFkBhyo1pAbQilbxLUQOYEl8qL3A==", + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", "cpu": [ - "x64" + "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" - ] + "linux" + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-21.2.1.tgz", - "integrity": "sha512-h7G/OQ0iEiKmcvBKiWycwx3RS+C3X997iDMhQLlJEKno2boUKpEXuz4T1uMBLdGdc6r+XElsaEMJYKxpIy8Fvw==", + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", "cpu": [ - "arm" + "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-21.2.1.tgz", - "integrity": "sha512-Cc1MIZHZEkY60xWuCxoTRDCbdezSyDNnziH9OUnJrCTB09EvDjUv+x9wyOYyBCfcGeU1b1L1icGKw7cS/CZwVw==", + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", "cpu": [ - "arm64" + "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@nx/nx-linux-arm64-musl": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-21.2.1.tgz", - "integrity": "sha512-L0c59PWMmU66tYQG4Ume8dCvUChVvxW1B0iAyb1vSEB4sLQgdCIn44uxwmb3+0qIeex2RJlFt7FyI+ey5AfUvQ==", + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", "cpu": [ - "arm64" + "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-21.2.1.tgz", - "integrity": "sha512-E72abpUPT41DmgOmteTbcuiyRW0lY+3i9lq0drOjr1LApUJs+/HTa3W6K1qAGwZ6vn0XDOdYyG5jhFGzNl1pOg==", + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", "cpu": [ - "x64" + "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ] + "openharmony" + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@nx/nx-linux-x64-musl": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-21.2.1.tgz", - "integrity": "sha512-aBt7BP0tMRx/iRUkuJnLQykQA/YO2phC6moPNxx+DHfricjI77gWWal/FlKQsM7g/bAoXPQw0QSG/ifvrJnUUA==", + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", "cpu": [ - "x64" + "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ] + "win32" + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-21.2.1.tgz", - "integrity": "sha512-NTGSDk6i9L3OEreBmlCaCAYHLRjHuyk3rCbX+MzDWCbO9HCLTO/NtKdwsKUNhBWDpEz5pN4ryU05vRBmGXhySA==", + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", "cpu": [ - "arm64" + "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@nx/nx-win32-x64-msvc": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-21.2.1.tgz", - "integrity": "sha512-XO0KFzyM2IkBhsvevLJMw8JDSOeWjCEkdxm5q9PJoNAmAuq2fJmwXs/d/KyEr8lohxQzNxt4ZDfUiW9AcSiFOw==", + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@nx/plugin": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/plugin/-/plugin-21.2.1.tgz", - "integrity": "sha512-H5zJ77DRCPn/T+XmkvJxUckWwZvtoKwbbJL794+0XvNsc+vNyCneq0RVTDDFjX38m0aEFPZeyC0AHWgigZgG0w==", - "dev": true, + "node_modules/@ngneat/falso": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@ngneat/falso/-/falso-7.2.0.tgz", + "integrity": "sha512-283EXBFd05kCbGuGSXgmvhCsQYEYzvD/eJaE7lxd05qRB0tgREvZX7TRlJ1KSp8nHxoK6Ws029G1Y30mt4IVAA==", "license": "MIT", "dependencies": { - "@nx/devkit": "21.2.1", - "@nx/eslint": "21.2.1", - "@nx/jest": "21.2.1", - "@nx/js": "21.2.1", - "tslib": "^2.3.0" + "seedrandom": "3.0.5", + "uuid": "8.3.2" } }, - "node_modules/@nx/rspack": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/rspack/-/rspack-21.2.1.tgz", - "integrity": "sha512-9vTdml0iS9WbUTgI7jxi02Pdystp+Nf10rL6RIvk3r3UtH8SK6AulzC41A2qqvgLPbj2KmUGYBDdvl0uicGqvw==", - "license": "MIT", - "dependencies": { - "@nx/devkit": "21.2.1", - "@nx/js": "21.2.1", - "@nx/module-federation": "21.2.1", - "@nx/web": "21.2.1", - "@phenomnomnominal/tsquery": "~5.0.1", - "@rspack/core": "^1.3.8", - "@rspack/dev-server": "^1.1.1", - "@rspack/plugin-react-refresh": "^1.0.0", - "autoprefixer": "^10.4.9", - "browserslist": "^4.21.4", - "css-loader": "^6.4.0", - "enquirer": "~2.3.6", - "express": "^4.21.2", - "http-proxy-middleware": "^3.0.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "^4.0.2", - "loader-utils": "^2.0.3", - "parse5": "4.0.0", - "picocolors": "^1.1.0", - "postcss": "^8.4.38", - "postcss-import": "~14.1.0", - "postcss-loader": "^8.1.1", - "sass": "^1.85.0", - "sass-embedded": "^1.83.4", - "sass-loader": "^16.0.4", - "source-map-loader": "^5.0.0", - "style-loader": "^3.3.0", - "ts-checker-rspack-plugin": "^1.1.1", - "tslib": "^2.3.0", - "webpack": "^5.80.0", - "webpack-node-externals": "^3.0.0" + "node_modules/@ngrx/component-store": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/@ngrx/component-store/-/component-store-19.0.1.tgz", + "integrity": "sha512-H/UNz7TMVWF8RUNWwEhfGy6zR5vfMEnGlxcAr+CwxRTryx9H0dsBE6esM/Kj/Po9EOjMFnjiY32ccyOrPUfFWA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" }, "peerDependencies": { - "@module-federation/enhanced": "^0.9.0", - "@module-federation/node": "^2.6.26" + "@angular/core": "^19.0.0", + "rxjs": "^6.5.3 || ^7.5.0" } }, - "node_modules/@nx/rspack/node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "node_modules/@ngrx/operators": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/@ngrx/operators/-/operators-19.0.1.tgz", + "integrity": "sha512-4CA+VexfK6nkRb6glmyCSoQgU7zQpEgMF0wVDamxyCO8hJo6E4TwUAN2W5tE5cxWFAsS0+wpFXFncpigvPL9Vw==", "license": "MIT", "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "tslib": "^2.3.0" }, "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@nx/rspack/node_modules/less-loader": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", - "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "node_modules/@ngrx/schematics": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/@ngrx/schematics/-/schematics-19.0.1.tgz", + "integrity": "sha512-kH91X7zewB8niOeemk8NgbjnnW0crwqTl8gG2zZAySW3Q0yGnoPpVAc4Yxezm1/bKsLGLILvEAzzlQGKBrigVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ngtools/webpack": { + "version": "20.0.5", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.0.5.tgz", + "integrity": "sha512-XH+NTCaOT0gBN7XXmNgMSOsQ0VXwv6E/dKcg1iu4DqYpxklYZ7EdhgVZn5vhwpqff3VRwJ8VFzp4U38AuppXrg==", + "dev": true, "license": "MIT", - "dependencies": { - "klona": "^2.0.4" - }, "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" }, "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" + "@angular/compiler-cli": "^20.0.0", + "typescript": ">=5.8 <5.9", + "webpack": "^5.54.0" } }, - "node_modules/@nx/rspack/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "license": "MIT", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=8.9.0" + "node": ">= 8" } }, - "node_modules/@nx/rspack/node_modules/parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "license": "MIT" - }, - "node_modules/@nx/web": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/web/-/web-21.2.1.tgz", - "integrity": "sha512-Ws5pDKZ2aAayr3GSJysHKJUTdG38Th6fhNQE+D7iLc2eqo3bQ9Q90OviT9hJcDBwUcDNi82My6lNQMEob/If5w==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "license": "MIT", - "dependencies": { - "@nx/devkit": "21.2.1", - "@nx/js": "21.2.1", - "detect-port": "^1.5.1", - "http-server": "^14.1.0", - "picocolors": "^1.1.0", - "tslib": "^2.3.0" - } - }, - "node_modules/@nx/webpack": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-21.2.1.tgz", - "integrity": "sha512-mvcJhAwZuAnZR+fR6XOar6f7/zXoWhYjY4oo5hBn5re3HvPG96wCIrHhKfIkxucMSdqzU+7rh8arc1/alMu6+w==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.23.2", - "@nx/devkit": "21.2.1", - "@nx/js": "21.2.1", - "@phenomnomnominal/tsquery": "~5.0.1", - "ajv": "^8.12.0", - "autoprefixer": "^10.4.9", - "babel-loader": "^9.1.2", - "browserslist": "^4.21.4", - "copy-webpack-plugin": "^10.2.4", - "css-loader": "^6.4.0", - "css-minimizer-webpack-plugin": "^5.0.0", - "fork-ts-checker-webpack-plugin": "7.2.13", - "less": "4.1.3", - "less-loader": "11.1.0", - "license-webpack-plugin": "^4.0.2", - "loader-utils": "^2.0.3", - "mini-css-extract-plugin": "~2.4.7", - "parse5": "4.0.0", - "picocolors": "^1.1.0", - "postcss": "^8.4.38", - "postcss-import": "~14.1.0", - "postcss-loader": "^6.1.1", - "rxjs": "^7.8.0", - "sass": "^1.85.0", - "sass-embedded": "^1.83.4", - "sass-loader": "^16.0.4", - "source-map-loader": "^5.0.0", - "style-loader": "^3.3.0", - "stylus": "^0.64.0", - "stylus-loader": "^7.1.0", - "terser-webpack-plugin": "^5.3.3", - "ts-loader": "^9.3.1", - "tsconfig-paths-webpack-plugin": "4.0.0", - "tslib": "^2.3.0", - "webpack": "~5.99.0", - "webpack-dev-server": "^5.2.1", - "webpack-node-externals": "^3.0.0", - "webpack-subresource-integrity": "^5.1.0" + "engines": { + "node": ">= 8" } }, - "node_modules/@nx/webpack/node_modules/array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 8" } }, - "node_modules/@nx/webpack/node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "license": "MIT", + "node_modules/@npmcli/agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "dev": true, + "license": "ISC", "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nx/webpack/node_modules/copy-webpack-plugin": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", - "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==", + "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, "license": "MIT", "dependencies": { - "fast-glob": "^3.2.7", - "glob-parent": "^6.0.1", - "globby": "^12.0.2", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 12.20.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" + "node": ">= 14" } }, - "node_modules/@nx/webpack/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "license": "MIT", + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "dev": true, + "license": "ISC", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "semver": "^7.3.5" }, "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nx/webpack/node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "license": "MIT", + "node_modules/@npmcli/git": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", + "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", + "dev": true, + "license": "ISC", "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nx/webpack/node_modules/globby": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", - "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", - "license": "MIT", - "dependencies": { - "array-union": "^3.0.1", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.7", - "ignore": "^5.1.9", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "dev": true, + "license": "BlueOak-1.0.0", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/@nx/webpack/node_modules/less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "license": "Apache-2.0", + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" + "isexe": "^3.1.1" }, "bin": { - "lessc": "bin/lessc" + "node-which": "bin/which.js" }, "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nx/webpack/node_modules/less-loader": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", - "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", - "license": "MIT", + "node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "dev": true, + "license": "ISC", "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 14.15.0" + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "bin": { + "installed-package-contents": "bin/index.js" }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nx/webpack/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, + "node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", + "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=8.9.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nx/webpack/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "license": "MIT", - "optional": true, + "node_modules/@npmcli/package-json": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", + "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", + "dev": true, + "license": "ISC", "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nx/webpack/node_modules/make-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@nx/webpack/node_modules/mini-css-extract-plugin": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.7.tgz", - "integrity": "sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==", - "license": "MIT", "dependencies": { - "schema-utils": "^4.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">= 12.13.0" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nx/webpack/node_modules/parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "license": "MIT" - }, - "node_modules/@nx/webpack/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "license": "MIT", - "optional": true, + "node_modules/@npmcli/package-json/node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, "engines": { - "node": ">=6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nx/webpack/node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "license": "MIT", + "node_modules/@npmcli/package-json/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/promise-spawn": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", + "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", + "dev": true, + "license": "ISC", "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" + "which": "^5.0.0" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nx/webpack/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "dev": true, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nx/webpack/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "optional": true, + "node_modules/@npmcli/redact": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", + "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nx/webpack/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "node_modules/@npmcli/run-script": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", + "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", + "dev": true, "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, "engines": { - "node": ">= 6" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nx/workspace": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-21.2.1.tgz", - "integrity": "sha512-tJMD4ELFZI1bbfcDz+k89MB1GumTVkwDVMicPBZwIlXTVqKQDgJmGUYIMF7VgU499WcX08LQAwVlIjvGX07GMw==", - "license": "MIT", + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", "dependencies": { - "@nx/devkit": "21.2.1", - "@zkochan/js-yaml": "0.0.7", - "chalk": "^4.1.0", - "enquirer": "~2.3.6", - "nx": "21.2.1", - "picomatch": "4.0.2", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@octokit/auth-token": { @@ -9020,10 +7124,11 @@ } }, "node_modules/@octokit/core": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.1.tgz", - "integrity": "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", + "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "license": "MIT", + "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -9169,17 +7274,18 @@ } }, "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, "dependencies": { - "detect-libc": "^1.0.3", + "detect-libc": "^2.0.3", "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">= 10.0.0" @@ -9189,28 +7295,29 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" } }, "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9225,12 +7332,13 @@ } }, "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9245,12 +7353,13 @@ } }, "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9265,12 +7374,13 @@ } }, "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9285,12 +7395,13 @@ } }, "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9305,12 +7416,13 @@ } }, "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9325,12 +7437,13 @@ } }, "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9345,12 +7458,13 @@ } }, "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9365,12 +7479,13 @@ } }, "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9385,12 +7500,13 @@ } }, "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9405,12 +7521,13 @@ } }, "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9425,12 +7542,13 @@ } }, "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9445,12 +7563,13 @@ } }, "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -9464,42 +7583,33 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/@parcel/watcher/node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, "license": "MIT", "optional": true }, - "node_modules/@phenomnomnominal/tsquery": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", - "integrity": "sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==", + "node_modules/@parcel/watcher/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, "license": "MIT", - "dependencies": { - "esquery": "^1.4.0" + "optional": true, + "engines": { + "node": ">=12" }, - "peerDependencies": { - "typescript": "^3 || ^4 || ^5" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "license": "MIT", "optional": true, "engines": { @@ -9510,7 +7620,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.1.0" @@ -9528,10 +7638,10 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", - "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", - "devOptional": true, + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -9709,523 +7819,159 @@ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz", "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==", "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", - "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", - "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", - "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", - "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", - "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", - "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", - "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", - "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/wasm-node": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.44.2.tgz", - "integrity": "sha512-bKl9rKDle9BbO/Tb5RFU4PDYtRcxNdllUL2cC6vixXkxV0U5XOIoi11KUNVoKyB2RLRSk3BHouMfw9fJdMsJkg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/@rspack/binding": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.4.5.tgz", - "integrity": "sha512-hO7DrZMMOyzwK7EEYfHMJmWhsNjeYLr39pEnXOWeuCCcwus6e/QNSSf2m/2mSFf0JeINwQqHkA1JvJEZ5JSj6g==", - "license": "MIT", - "optionalDependencies": { - "@rspack/binding-darwin-arm64": "1.4.5", - "@rspack/binding-darwin-x64": "1.4.5", - "@rspack/binding-linux-arm64-gnu": "1.4.5", - "@rspack/binding-linux-arm64-musl": "1.4.5", - "@rspack/binding-linux-x64-gnu": "1.4.5", - "@rspack/binding-linux-x64-musl": "1.4.5", - "@rspack/binding-wasm32-wasi": "1.4.5", - "@rspack/binding-win32-arm64-msvc": "1.4.5", - "@rspack/binding-win32-ia32-msvc": "1.4.5", - "@rspack/binding-win32-x64-msvc": "1.4.5" - } - }, - "node_modules/@rspack/binding-darwin-arm64": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.4.5.tgz", - "integrity": "sha512-rK8mJ+85cXrGSTZvr5vqI17TDimAUWYjl0T+JEg5MTqRNbpyovbGHbrrsQyIicwaFOS1wWkaLrBolC/+/FLUeg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rspack/binding-darwin-x64": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.4.5.tgz", - "integrity": "sha512-6eOhh18VD8x5+SJrs/K6XiDw+FYffzDMsI3Sz78mQW5xvHYzN3HJxIw7oG7UYXqF5I2yORmqvdxV1aAnv8Fc4g==", - "cpu": [ - "x64" + "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ] }, - "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.4.5.tgz", - "integrity": "sha512-vnz5OItcPREgz+hVqx14HRf0aJQ7yI/2ZEbeTC+Y1JSCbeYAcu6NXYVXDwTOgCNOp1AdMR+rmItHWiJ7goI//Q==", + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", + "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", "cpu": [ - "arm64" + "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.4.5.tgz", - "integrity": "sha512-E4dUEDpAsQ5jTvt8AXs0VY3vxTzSf07CM5zi797VaFzZzbcZqAoBmlAxYTSyl7/BgAxHSg8AYJS5c8l03vXM4w==", + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", + "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", "cpu": [ - "arm64" + "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.4.5.tgz", - "integrity": "sha512-XQxibZY+joqRfoJQwT1sfN68pRExOvJniWBUJfov6ShG/DFSVbMJ2UTwv5pbruIXA/lLnk7KblPdF8pO0WWQvw==", + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", + "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", "cpu": [ - "x64" + "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@rspack/binding-linux-x64-musl": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.4.5.tgz", - "integrity": "sha512-bOZmkCZamOz/+D3AA3uHII3rLIx4WtPk+KbDe3nfIVHhgxUK1nmv0vHtKzDA5iplucJ4ha/Rx9TEFyRwnBJH0A==", + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", + "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@rspack/binding-wasm32-wasi": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.4.5.tgz", - "integrity": "sha512-LRyln0jg2FblwFQg+0lPVc/bvDeo3A3EVWQtsTtOwjb4cjAG/Zqo5Q0VobaJTKgBOF9eAHTo9IL92SSj433+Eg==", + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", + "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", "cpu": [ - "wasm32" + "x64" ], + "dev": true, "license": "MIT", "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" - } + "os": [ + "linux" + ] }, - "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.4.5.tgz", - "integrity": "sha512-JWc15Mof/aC41UQSZLwa6oEsPYaYCApW0152Abhnt27qir2pfqYcT5qWt26OJvFDJoe+KzpIG1H91yJviChYYw==", + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", + "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ] }, - "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.4.5.tgz", - "integrity": "sha512-PpyNunP8zC5AQtF3Pww7F41bwoJwmGzdJuv2lk/3l74UhjhT4Ac4/dmEaKiYeOr69PPlCtn7Des9VEFufYAZAQ==", + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", + "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ] }, - "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.4.5.tgz", - "integrity": "sha512-elzpVGJW0W9DTkfJ7JyvMyi2Rbot5Q6rVBBKSh0lRWhZE/LnDJ/1WkS/9yER8XPGjO7umP1hD72ML1SoBddXmA==", + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", + "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ] }, - "node_modules/@rspack/core": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.4.5.tgz", - "integrity": "sha512-4OlxGQ4yPbAOYbVStMotaYrydm8r5VbLByrmQ34LNBYIDSmwaBmHQVMYGIesuGW681pr139XwInKvsoAoW6VTA==", - "license": "MIT", - "dependencies": { - "@module-federation/runtime-tools": "0.15.0", - "@rspack/binding": "1.4.5", - "@rspack/lite-tapable": "1.0.1" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@swc/helpers": ">=0.5.1" - }, - "peerDependenciesMeta": { - "@swc/helpers": { - "optional": true - } - } - }, - "node_modules/@rspack/core/node_modules/@module-federation/error-codes": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.15.0.tgz", - "integrity": "sha512-CFJSF+XKwTcy0PFZ2l/fSUpR4z247+Uwzp1sXVkdIfJ/ATsnqf0Q01f51qqSEA6MYdQi6FKos9FIcu3dCpQNdg==", - "license": "MIT" - }, - "node_modules/@rspack/core/node_modules/@module-federation/runtime": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.15.0.tgz", - "integrity": "sha512-dTPsCNum9Bhu3yPOcrPYq0YnM9eCMMMNB1wuiqf1+sFbQlNApF0vfZxooqz3ln0/MpgE0jerVvFsLVGfqvC9Ug==", - "license": "MIT", - "dependencies": { - "@module-federation/error-codes": "0.15.0", - "@module-federation/runtime-core": "0.15.0", - "@module-federation/sdk": "0.15.0" - } - }, - "node_modules/@rspack/core/node_modules/@module-federation/runtime-core": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.15.0.tgz", - "integrity": "sha512-RYzI61fRDrhyhaEOXH3AgIGlHiot0wPFXu7F43cr+ZnTi+VlSYWLdlZ4NBuT9uV6JSmH54/c+tEZm5SXgKR2sQ==", - "license": "MIT", - "dependencies": { - "@module-federation/error-codes": "0.15.0", - "@module-federation/sdk": "0.15.0" - } - }, - "node_modules/@rspack/core/node_modules/@module-federation/runtime-tools": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.15.0.tgz", - "integrity": "sha512-kzFn3ObUeBp5vaEtN1WMxhTYBuYEErxugu1RzFUERD21X3BZ+b4cWwdFJuBDlsmVjctIg/QSOoZoPXRKAO0foA==", - "license": "MIT", - "dependencies": { - "@module-federation/runtime": "0.15.0", - "@module-federation/webpack-bundler-runtime": "0.15.0" - } - }, - "node_modules/@rspack/core/node_modules/@module-federation/sdk": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.15.0.tgz", - "integrity": "sha512-PWiYbGcJrKUD6JZiEPihrXhV3bgXdll4bV7rU+opV7tHaun+Z0CdcawjZ82Xnpb8MCPGmqHwa1MPFeUs66zksw==", - "license": "MIT" - }, - "node_modules/@rspack/core/node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.15.0.tgz", - "integrity": "sha512-i+3wu2Ljh2TmuUpsnjwZVupOVqV50jP0ndA8PSP4gwMKlgdGeaZ4VH5KkHAXGr2eiYUxYLMrJXz1+eILJqeGDg==", - "license": "MIT", - "dependencies": { - "@module-federation/runtime": "0.15.0", - "@module-federation/sdk": "0.15.0" - } - }, - "node_modules/@rspack/dev-server": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@rspack/dev-server/-/dev-server-1.1.3.tgz", - "integrity": "sha512-jWPeyiZiGpbLYGhwHvwxhaa4rsr8CQvsWkWslqeMLb2uXwmyy3UWjUR1q+AhAPnf0gs3lZoFZ1hjBQVecHKUvg==", - "license": "MIT", - "dependencies": { - "chokidar": "^3.6.0", - "http-proxy-middleware": "^2.0.9", - "p-retry": "^6.2.0", - "webpack-dev-server": "5.2.2", - "ws": "^8.18.0" - }, - "engines": { - "node": ">= 18.12.0" - }, - "peerDependencies": { - "@rspack/core": "*" - } - }, - "node_modules/@rspack/dev-server/node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/@rspack/dev-server/node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@rspack/dev-server/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@rspack/dev-server/node_modules/webpack-dev-server": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", - "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "node_modules/@rollup/wasm-node": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.60.4.tgz", + "integrity": "sha512-j6qaRjdDujJ5utX5l6+8eiWlvMLmBfPMBht8mHP2au3xuzf+4deu6PuCquH5GvDIvIOsWHZhA1UVz/s0FvvgAA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/bonjour": "^3.5.13", - "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.21", - "@types/express-serve-static-core": "^4.17.21", - "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.5", - "@types/sockjs": "^0.3.36", - "@types/ws": "^8.5.10", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.2.1", - "chokidar": "^3.6.0", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "express": "^4.21.2", - "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.9", - "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "schema-utils": "^4.2.0", - "selfsigned": "^2.4.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.4.2", - "ws": "^8.18.0" + "@types/estree": "1.0.8" }, "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/@rspack/lite-tapable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.0.1.tgz", - "integrity": "sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==", - "license": "MIT", - "engines": { - "node": ">=16.0.0" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@rspack/plugin-react-refresh": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.4.3.tgz", - "integrity": "sha512-wZx4vWgy5oMEvgyNGd/oUKcdnKaccYWHCRkOqTdAPJC3WcytxhTX+Kady8ERurSBiLyQpoMiU3Iyd+F1Y2Arbw==", - "license": "MIT", - "dependencies": { - "error-stack-parser": "^2.1.4", - "html-entities": "^2.6.0" - }, - "peerDependencies": { - "react-refresh": ">=0.10.0 <1.0.0", - "webpack-hot-middleware": "2.x" - }, - "peerDependenciesMeta": { - "webpack-hot-middleware": { - "optional": true - } - } + "node_modules/@rollup/wasm-node/node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" }, "node_modules/@schematics/angular": { "version": "20.0.4", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.0.4.tgz", "integrity": "sha512-cQw0ATQW/GTcYo5wmzMJrKlQsafNKeL3vduV6q0rILfp8P3OnJk7CtlWf9sfZnpEo0PNu28viMts3/p7ZUS8nQ==", + "dev": true, "license": "MIT", "dependencies": { "@angular-devkit/core": "20.0.4", @@ -10242,6 +7988,7 @@ "version": "20.0.4", "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.0.4.tgz", "integrity": "sha512-GmHBOEhdZn0Xh8JAdmnbSXtEMoAEqakEFy1JZmwuUo5e6uuuEp5xQY4O3MO0UQBVjYT+Wz8KNfonTvY91t/lNQ==", + "dev": true, "license": "MIT", "dependencies": { "ajv": "8.17.1", @@ -10269,6 +8016,7 @@ "version": "20.0.4", "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.0.4.tgz", "integrity": "sha512-NADJed7h4KYSqbbw91AKFvFp+CsDuPUBzuMrck38R0ql0ZeaLKJtwT+IQFs7Hb6bmE4xn1i0+Z/p7v8q6ZRrKw==", + "dev": true, "license": "MIT", "dependencies": { "@angular-devkit/core": "20.0.4", @@ -10287,18 +8035,12 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, - "node_modules/@sec-ant/readable-stream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", - "dev": true, - "license": "MIT" - }, "node_modules/@sigstore/bundle": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", @@ -10380,9 +8122,10 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { @@ -10414,33 +8157,15 @@ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@swc-node/core": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/@swc-node/core/-/core-1.13.3.tgz", - "integrity": "sha512-OGsvXIid2Go21kiNqeTIn79jcaX4l0G93X2rAnas4LFoDyA9wAwVK7xZdm+QsKoMn5Mus2yFLCc4OtX2dD/PWA==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@swc/core": ">= 1.4.13", - "@swc/types": ">= 0.1" + "dependencies": { + "@sinonjs/commons": "^3.0.0" } }, "node_modules/@swc-node/register": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/@swc-node/register/-/register-1.9.2.tgz", "integrity": "sha512-BBjg0QNuEEmJSoU/++JOXhrjWdu3PTyYeJWsvchsI0Aqtj8ICkz/DqlwtXbmZVZ5vuDPpTfFlwDBZe81zgShMA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@swc-node/core": "^1.13.1", @@ -10459,11 +8184,29 @@ "typescript": ">= 4.3" } }, + "node_modules/@swc-node/register/node_modules/@swc-node/core": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@swc-node/core/-/core-1.14.1.tgz", + "integrity": "sha512-jrt5GUaZUU6cmMS+WTJEvGvaB6j1YNKPHPzC2PUi2BjaFbtxURHj6641Az6xN7b665hNniAIdvjxWcRml5yCnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@swc/core": ">= 1.13.3", + "@swc/types": ">= 0.1" + } + }, "node_modules/@swc-node/sourcemap-support": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/@swc-node/sourcemap-support/-/sourcemap-support-0.5.1.tgz", "integrity": "sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "source-map-support": "^0.5.21", @@ -10519,9 +8262,10 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.0.tgz", "integrity": "sha512-+CuuTCmQFfzaNGg1JmcZvdUVITQXJk9sMnl1C2TiDLzOSVOJRwVD4dNo5dljX/qxpMAN+2BIYlwjlSkoGi6grg==", - "devOptional": true, + "dev": true, "hasInstallScript": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.17" @@ -10728,7 +8472,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "devOptional": true, + "dev": true, "license": "Apache-2.0" }, "node_modules/@swc/helpers": { @@ -10736,16 +8480,18 @@ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz", "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==", "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@swc/types": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz", - "integrity": "sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==", - "devOptional": true, + "version": "0.1.26", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.26.tgz", + "integrity": "sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==", + "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "@swc/counter": "^0.1.3" } @@ -10851,19 +8597,20 @@ } }, "node_modules/@testing-library/dom": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", - "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", "aria-query": "5.3.0", - "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", + "picocolors": "1.1.1", "pretty-format": "^27.0.2" }, "engines": { @@ -10936,6 +8683,25 @@ "@testing-library/dom": ">=7.21.4" } }, + "node_modules/@tokenizer/inflate": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", + "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "fflate": "^0.8.2", + "token-types": "^6.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", @@ -10944,28 +8710,19 @@ "license": "MIT" }, "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.1.tgz", + "integrity": "sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==", "dev": true, "license": "MIT", "engines": { "node": ">= 10" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", "devOptional": true, "license": "MIT" }, @@ -11014,31 +8771,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", @@ -11082,19 +8814,20 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/body-parser": { "version": "1.19.6", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, "license": "MIT", "dependencies": { "@types/connect": "*", @@ -11105,6 +8838,7 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -11114,6 +8848,7 @@ "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -11123,6 +8858,7 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", @@ -11133,6 +8869,7 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "*", @@ -11143,6 +8880,7 @@ "version": "3.7.7", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, "license": "MIT", "dependencies": { "@types/eslint": "*", @@ -11150,27 +8888,31 @@ } }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", - "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -11193,13 +8935,13 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", "dev": true, "license": "MIT" }, @@ -11207,12 +8949,14 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, "license": "MIT" }, "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -11222,12 +8966,14 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" @@ -11237,6 +8983,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" @@ -11304,12 +9051,14 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, "license": "MIT" }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, "license": "MIT" }, "node_modules/@types/minimist": { @@ -11323,12 +9072,15 @@ "version": "18.16.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.9.tgz", "integrity": "sha512-IeB32oIV4oGArLrd7znD2rkHQ6EDCM+2Sr76dJnrHwv9OHBTTM6nuDLK9bmikXzPa0ZlWMWtRGo/Uw4mrzQedA==", - "license": "MIT" + "devOptional": true, + "license": "MIT", + "peer": true }, "node_modules/@types/node-forge": { - "version": "1.3.12", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.12.tgz", - "integrity": "sha512-a0ToKlRVnUw3aXKQq2F+krxZKq7B8LEQijzPn5RdFAMatARD2JX9o8FBpMXOOrjob0uc13aN+V/AXniOXW4d9A==", + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -11341,43 +9093,34 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT" - }, "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", + "dev": true, "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, "license": "MIT" }, "node_modules/@types/retry": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true, "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -11385,20 +9128,33 @@ "version": "1.9.4", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, "license": "MIT", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", - "@types/send": "*" + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, "node_modules/@types/sinonjs__fake-timers": { @@ -11409,9 +9165,9 @@ "license": "MIT" }, "node_modules/@types/sizzle": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz", - "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==", + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.10.tgz", + "integrity": "sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==", "dev": true, "license": "MIT" }, @@ -11419,6 +9175,7 @@ "version": "0.3.36", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -11513,15 +9270,17 @@ "version": "8.18.1", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dev": true, "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -11531,6 +9290,7 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, "license": "MIT" }, "node_modules/@types/yauzl": { @@ -11578,34 +9338,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", - "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "7.16.1", - "@typescript-eslint/utils": "7.16.1", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { "version": "7.16.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", @@ -11662,6 +9394,7 @@ "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "7.16.1", "@typescript-eslint/types": "7.16.1", @@ -11699,27 +9432,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.36.0.tgz", - "integrity": "sha512-JAhQFIABkWccQYeLMrHadu/fhpzmSQ1F1KXkpzqiVxA/iYI6UnRt2trqXHt1sYEcw1mxLnB9rKMsOxXPxowN/g==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.36.0", - "@typescript-eslint/types": "^8.36.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, "node_modules/@typescript-eslint/scope-manager": { "version": "7.16.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", @@ -11752,162 +9464,91 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.36.0.tgz", - "integrity": "sha512-Nhh3TIEgN18mNbdXpd5Q8mSCBnrZQeY9V7Ca3dqYvNDStNIGRmJA6dmrIPMJ0kow3C7gcQbpsG2rPzy1Ks/AnA==", - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.36.0.tgz", - "integrity": "sha512-5aaGYG8cVDd6cxfk/ynpYzxBRZJk7w/ymto6uiyUFtdCozQIsQWh7M28/6r57Fwkbweng8qAzoMCPwSJfWlmsg==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", + "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.36.0", - "@typescript-eslint/utils": "8.36.0", + "@typescript-eslint/typescript-estree": "7.16.1", + "@typescript-eslint/utils": "7.16.1", "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.36.0.tgz", - "integrity": "sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.36.0", - "@typescript-eslint/visitor-keys": "8.36.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "eslint": "^8.56.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.36.0.tgz", - "integrity": "sha512-JaS8bDVrfVJX4av0jLpe4ye0BpAaUW7+tnS4Y4ETa3q7NoZgzYbN9zDQTJ8kPb5fQ4n0hliAt9tA4Pfs2zA2Hg==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", + "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", + "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.36.0", - "@typescript-eslint/tsconfig-utils": "8.36.0", - "@typescript-eslint/types": "8.36.0", - "@typescript-eslint/visitor-keys": "8.36.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.36.0.tgz", - "integrity": "sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==", - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.36.0", - "@typescript-eslint/types": "8.36.0", - "@typescript-eslint/typescript-estree": "8.36.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.36.0.tgz", - "integrity": "sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==", + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", + "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.36.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.16.1", + "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/typescript-estree": "7.16.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/@typescript-eslint/type-utils/node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "typescript": ">=4.2.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.36.0.tgz", - "integrity": "sha512-xGms6l5cTJKQPZOKM75Dl9yBfNdGeLRsIyufewnxT4vZTrjC0ImQT4fj8QmtJK84F58uSh5HVBSANwcfiXxABQ==", + "version": "8.59.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.3.tgz", + "integrity": "sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==", + "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -11959,22 +9600,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/ts-api-utils": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", @@ -11994,6 +9619,7 @@ "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.18.0", @@ -12090,22 +9716,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/utils/node_modules/ts-api-utils": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", @@ -12152,16 +9762,17 @@ } }, "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz", + "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==", + "dev": true, "license": "ISC" }, "node_modules/@vitejs/plugin-basic-ssl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.0.0.tgz", "integrity": "sha512-gc9Tjg8bUxBVSTzeWT3Njc0Cl3PakHFKdNfABnZWiUgbxqmHDEn7uECv3fHVylxoYgNzAcmU7ZrILz+BwSo3sA==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": "^18.0.0 || ^20.0.0 || >=22.0.0" @@ -12174,6 +9785,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", @@ -12184,24 +9796,28 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", @@ -12213,12 +9829,14 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -12231,6 +9849,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" @@ -12240,6 +9859,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" @@ -12249,12 +9869,14 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -12271,6 +9893,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -12284,6 +9907,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -12296,6 +9920,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -12310,6 +9935,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -12317,22 +9943,22 @@ } }, "node_modules/@xhmikosr/archive-type": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@xhmikosr/archive-type/-/archive-type-7.0.0.tgz", - "integrity": "sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/archive-type/-/archive-type-7.1.0.tgz", + "integrity": "sha512-xZEpnGplg1sNPyEgFh0zbHxqlw5dtYg6viplmWSxUj12+QjU9SKu3U/2G73a15pEjLaOqTefNSZ1fOPUOT4Xgg==", "dev": true, "license": "MIT", "dependencies": { - "file-type": "^19.0.0" + "file-type": "^20.5.0" }, "engines": { - "node": "^14.14.0 || >=16.0.0" + "node": ">=18" } }, "node_modules/@xhmikosr/bin-check": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@xhmikosr/bin-check/-/bin-check-7.0.3.tgz", - "integrity": "sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/bin-check/-/bin-check-7.1.0.tgz", + "integrity": "sha512-y1O95J4mnl+6MpVmKfMYXec17hMEwE/yeCglFNdx+QvLLtP0yN4rSYcbkXnth+lElBuKKek2NbvOfOGPpUXCvw==", "dev": true, "license": "MIT", "dependencies": { @@ -12344,14 +9970,14 @@ } }, "node_modules/@xhmikosr/bin-wrapper": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@xhmikosr/bin-wrapper/-/bin-wrapper-13.0.5.tgz", - "integrity": "sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/bin-wrapper/-/bin-wrapper-13.2.0.tgz", + "integrity": "sha512-t9U9X0sDPRGDk5TGx4dv5xiOvniVJpXnfTuynVKwHgtib95NYEw4MkZdJqhoSiz820D9m0o6PCqOPMXz0N9fIw==", "dev": true, "license": "MIT", "dependencies": { - "@xhmikosr/bin-check": "^7.0.3", - "@xhmikosr/downloader": "^15.0.1", + "@xhmikosr/bin-check": "^7.1.0", + "@xhmikosr/downloader": "^15.2.0", "@xhmikosr/os-filter-obj": "^3.0.0", "bin-version-check": "^5.1.0" }, @@ -12360,18 +9986,17 @@ } }, "node_modules/@xhmikosr/decompress": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress/-/decompress-10.0.1.tgz", - "integrity": "sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress/-/decompress-10.2.0.tgz", + "integrity": "sha512-MmDBvu0+GmADyQWHolcZuIWffgfnuTo4xpr2I/Qw5Ox0gt+e1Be7oYqJM4te5ylL6mzlcoicnHVDvP27zft8tg==", "dev": true, "license": "MIT", "dependencies": { - "@xhmikosr/decompress-tar": "^8.0.1", - "@xhmikosr/decompress-tarbz2": "^8.0.1", - "@xhmikosr/decompress-targz": "^8.0.1", - "@xhmikosr/decompress-unzip": "^7.0.0", + "@xhmikosr/decompress-tar": "^8.1.0", + "@xhmikosr/decompress-tarbz2": "^8.1.0", + "@xhmikosr/decompress-targz": "^8.1.0", + "@xhmikosr/decompress-unzip": "^7.1.0", "graceful-fs": "^4.2.11", - "make-dir": "^4.0.0", "strip-dirs": "^3.0.0" }, "engines": { @@ -12379,13 +10004,13 @@ } }, "node_modules/@xhmikosr/decompress-tar": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tar/-/decompress-tar-8.0.1.tgz", - "integrity": "sha512-dpEgs0cQKJ2xpIaGSO0hrzz3Kt8TQHYdizHsgDtLorWajuHJqxzot9Hbi0huRxJuAGG2qiHSQkwyvHHQtlE+fg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tar/-/decompress-tar-8.1.0.tgz", + "integrity": "sha512-m0q8x6lwxenh1CrsTby0Jrjq4vzW/QU1OLhTHMQLEdHpmjR1lgahGz++seZI0bXF3XcZw3U3xHfqZSz+JPP2Gg==", "dev": true, "license": "MIT", "dependencies": { - "file-type": "^19.0.0", + "file-type": "^20.5.0", "is-stream": "^2.0.1", "tar-stream": "^3.1.7" }, @@ -12394,14 +10019,14 @@ } }, "node_modules/@xhmikosr/decompress-tarbz2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tarbz2/-/decompress-tarbz2-8.0.2.tgz", - "integrity": "sha512-p5A2r/AVynTQSsF34Pig6olt9CvRj6J5ikIhzUd3b57pUXyFDGtmBstcw+xXza0QFUh93zJsmY3zGeNDlR2AQQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tarbz2/-/decompress-tarbz2-8.1.0.tgz", + "integrity": "sha512-aCLfr3A/FWZnOu5eqnJfme1Z1aumai/WRw55pCvBP+hCGnTFrcpsuiaVN5zmWTR53a8umxncY2JuYsD42QQEbw==", "dev": true, "license": "MIT", "dependencies": { "@xhmikosr/decompress-tar": "^8.0.1", - "file-type": "^19.6.0", + "file-type": "^20.5.0", "is-stream": "^2.0.1", "seek-bzip": "^2.0.0", "unbzip2-stream": "^1.4.3" @@ -12411,14 +10036,14 @@ } }, "node_modules/@xhmikosr/decompress-targz": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-targz/-/decompress-targz-8.0.1.tgz", - "integrity": "sha512-mvy5AIDIZjQ2IagMI/wvauEiSNHhu/g65qpdM4EVoYHUJBAmkQWqcPJa8Xzi1aKVTmOA5xLJeDk7dqSjlHq8Mg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-targz/-/decompress-targz-8.1.0.tgz", + "integrity": "sha512-fhClQ2wTmzxzdz2OhSQNo9ExefrAagw93qaG1YggoIz/QpI7atSRa7eOHv4JZkpHWs91XNn8Hry3CwUlBQhfPA==", "dev": true, "license": "MIT", "dependencies": { "@xhmikosr/decompress-tar": "^8.0.1", - "file-type": "^19.0.0", + "file-type": "^20.5.0", "is-stream": "^2.0.1" }, "engines": { @@ -12426,13 +10051,13 @@ } }, "node_modules/@xhmikosr/decompress-unzip": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-unzip/-/decompress-unzip-7.0.0.tgz", - "integrity": "sha512-GQMpzIpWTsNr6UZbISawsGI0hJ4KA/mz5nFq+cEoPs12UybAqZWKbyIaZZyLbJebKl5FkLpsGBkrplJdjvUoSQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-unzip/-/decompress-unzip-7.1.0.tgz", + "integrity": "sha512-oqTYAcObqTlg8owulxFTqiaJkfv2SHsxxxz9Wg4krJAHVzGWlZsU8tAB30R6ow+aHrfv4Kub6WQ8u04NWVPUpA==", "dev": true, "license": "MIT", "dependencies": { - "file-type": "^19.0.0", + "file-type": "^20.5.0", "get-stream": "^6.0.1", "yauzl": "^3.1.2" }, @@ -12441,18 +10066,18 @@ } }, "node_modules/@xhmikosr/downloader": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@xhmikosr/downloader/-/downloader-15.0.1.tgz", - "integrity": "sha512-fiuFHf3Dt6pkX8HQrVBsK0uXtkgkVlhrZEh8b7VgoDqFf+zrgFBPyrwCqE/3nDwn3hLeNz+BsrS7q3mu13Lp1g==", + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/downloader/-/downloader-15.2.0.tgz", + "integrity": "sha512-lAqbig3uRGTt0sHNIM4vUG9HoM+mRl8K28WuYxyXLCUT6pyzl4Y4i0LZ3jMEsCYZ6zjPZbO9XkG91OSTd4si7g==", "dev": true, "license": "MIT", "dependencies": { - "@xhmikosr/archive-type": "^7.0.0", - "@xhmikosr/decompress": "^10.0.1", + "@xhmikosr/archive-type": "^7.1.0", + "@xhmikosr/decompress": "^10.2.0", "content-disposition": "^0.5.4", - "defaults": "^3.0.0", + "defaults": "^2.0.2", "ext-name": "^5.0.0", - "file-type": "^19.0.0", + "file-type": "^20.5.0", "filenamify": "^6.0.0", "get-stream": "^6.0.1", "got": "^13.0.0" @@ -12478,45 +10103,23 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, "license": "Apache-2.0" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, "license": "BSD-2-Clause" }, - "node_modules/@yarnpkg/parsers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", - "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", - "license": "BSD-2-Clause", - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/@zkochan/js-yaml": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", - "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -12549,10 +10152,12 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "devOptional": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -12575,15 +10180,16 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -12593,20 +10199,11 @@ "node": ">=0.4.0" } }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/adjust-sourcemap-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", @@ -12620,7 +10217,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "big.js": "^5.2.2", @@ -12631,20 +10228,11 @@ "node": ">=8.9.0" } }, - "node_modules/adm-zip": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", - "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", - "license": "MIT", - "engines": { - "node": ">=12.0" - } - }, "node_modules/agent-base": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 14" @@ -12668,7 +10256,9 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -12684,6 +10274,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -12701,6 +10292,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" @@ -12870,6 +10462,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -12879,7 +10472,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -12891,10 +10484,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, "engines": [ "node >= 0.8.0" ], @@ -12907,6 +10514,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -12916,6 +10524,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -12948,9 +10557,9 @@ } }, "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -12991,6 +10600,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, "license": "Python-2.0" }, "node_modules/aria-query": { @@ -13132,6 +10742,7 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, "license": "MIT" }, "node_modules/async-function": { @@ -13148,21 +10759,24 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, "license": "ISC", "engines": { "node": ">= 4.0.0" } }, "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", + "dev": true, "funding": [ { "type": "opencollective", @@ -13179,10 +10793,9 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", + "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, @@ -13229,17 +10842,6 @@ "dev": true, "license": "MIT" }, - "node_modules/axios": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", - "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/axobject-query": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", @@ -13251,11 +10853,19 @@ } }, "node_modules/b4a": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", - "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } }, "node_modules/babel-jest": { "version": "29.7.0", @@ -13263,6 +10873,7 @@ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -13283,7 +10894,7 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "find-up": "^5.0.0" @@ -13296,20 +10907,6 @@ "webpack": ">=5.61.0" } }, - "node_modules/babel-plugin-const-enum": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-const-enum/-/babel-plugin-const-enum-1.2.0.tgz", - "integrity": "sha512-o1m/6iyyFnp9MRsK1dHF3bneqyf3AlM2q3A/YbgQr2pCat6B6XJVDv2TXqzfY2RYUi4mak6WAksSBPlyYGx9dg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-typescript": "^7.3.3", - "@babel/traverse": "^7.16.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -13370,54 +10967,15 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/babel-plugin-macros/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", + "integrity": "sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.8", "semver": "^6.3.1" }, "peerDependencies": { @@ -13428,6 +10986,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -13437,6 +10996,7 @@ "version": "0.11.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.3", @@ -13447,30 +11007,22 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz", + "integrity": "sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" + "@babel/helper-define-polyfill-provider": "^0.6.8" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/babel-plugin-transform-typescript-metadata": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-typescript-metadata/-/babel-plugin-transform-typescript-metadata-0.3.2.tgz", - "integrity": "sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, "license": "MIT", "dependencies": { @@ -13490,45 +11042,137 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5" }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, "peerDependencies": { "@babel/core": "^7.0.0" } }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.3.tgz", + "integrity": "sha512-HdUm8EMQBLaJvGUdidNNbqpA1kYkwNcb+MYxkxCLAPJGQzlv9J0C24h8V65Z4c5GLd/JEALDvpFCQgpLJqc0zw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.1.tgz", + "integrity": "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bare": ">=1.16.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" + "node_modules/bare-os": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.1.tgz", + "integrity": "sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "bare": ">=1.14.0" + } }, - "node_modules/bare-events": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", - "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", "dev": true, "license": "Apache-2.0", - "optional": true + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.1.tgz", + "integrity": "sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "streamx": "^2.25.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-abort-controller": "*", + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.3.tgz", + "integrity": "sha512-Kccpc7ACfXaxfeInfqKcZtW4pT5YBn1mesc4sCsun6sRwtbJ4h+sNOaksUpYEJUKfN65YWC6Bw2OJEFiKxq8nQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-path": "^3.0.0" + } }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -13545,28 +11189,24 @@ ], "license": "MIT" }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.1.2" + "node_modules/baseline-browser-mapping": { + "version": "2.10.30", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.30.tgz", + "integrity": "sha512-xjOFN16Ha1+Rz4nFYKqHU/LSB+gx/Vi3yQLX7r7sAW+Wa+8hhF2h4pvqTrTMc8+WcDBEunnUurr46Jvv0jk3Vg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" }, "engines": { - "node": ">= 0.8" + "node": ">=6.0.0" } }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, "license": "MIT" }, "node_modules/bcrypt-pbkdf": { @@ -13583,7 +11223,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.4.tgz", "integrity": "sha512-NmzN1zN1cvGccXFyZ73335+ASXwBlVWcUPssiUDIlFdfyatHPRRufjCd5w8oPaQPvVnf9ELklaCGb1gi9FBwIw==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "dependencies": { "css-select": "^5.1.0", @@ -13609,6 +11249,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, "license": "MIT", "engines": { "node": "*" @@ -13649,17 +11290,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", @@ -13675,23 +11305,23 @@ "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz", + "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.15.1", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -13726,12 +11356,12 @@ "license": "MIT" }, "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -13744,6 +11374,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -13754,12 +11385,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, "license": "ISC" }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -13778,9 +11411,10 @@ } }, "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -13796,11 +11430,13 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -13836,6 +11472,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "dev": true, "license": "(MIT OR Apache-2.0)", "bin": { "btoa": "bin/btoa.js" @@ -13848,6 +11485,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -13868,12 +11506,6 @@ "ieee754": "^1.1.13" } }, - "node_modules/buffer-builder": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", - "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", - "license": "MIT/X11" - }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -13888,12 +11520,14 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, "license": "MIT" }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, "license": "MIT", "dependencies": { "run-applescript": "^7.0.0" @@ -13949,9 +11583,10 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -13976,50 +11611,17 @@ "dev": true, "license": "ISC" }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/cacache/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "version": "7.5.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.15.tgz", + "integrity": "sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", + "minizlib": "^3.1.0", "yallist": "^5.0.0" }, "engines": { @@ -14036,19 +11638,6 @@ "node": ">=18" } }, - "node_modules/cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", - "license": "MIT", - "dependencies": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -14089,15 +11678,15 @@ } }, "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" }, "engines": { @@ -14140,6 +11729,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -14149,7 +11739,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", @@ -14203,22 +11793,11 @@ "node": ">=8" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001727", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", - "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "version": "1.0.30001793", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", + "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -14246,6 +11825,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -14269,9 +11849,9 @@ } }, "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", "dev": true, "license": "MIT" }, @@ -14314,15 +11894,16 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, "funding": [ { @@ -14346,7 +11927,7 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "source-map": "~0.6.0" @@ -14359,7 +11940,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -14379,6 +11960,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" @@ -14388,9 +11970,10 @@ } }, "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -14419,7 +12002,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", @@ -14433,10 +12016,10 @@ } }, "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "devOptional": true, + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -14446,17 +12029,17 @@ } }, "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "devOptional": true, + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, "license": "MIT" }, "node_modules/cli-truncate/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -14471,13 +12054,13 @@ } }, "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "devOptional": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -14490,7 +12073,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "devOptional": true, + "dev": true, "license": "ISC", "engines": { "node": ">= 12" @@ -14500,6 +12083,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -14514,6 +12098,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -14527,19 +12112,11 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", @@ -14554,6 +12131,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, "license": "MIT", "dependencies": { "isobject": "^3.0.1" @@ -14566,6 +12144,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, "license": "MIT", "engines": { "iojs": ">= 1.0.0", @@ -14573,9 +12152,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", "dev": true, "license": "MIT" }, @@ -14583,6 +12162,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -14595,43 +12175,21 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, "license": "MIT" }, - "node_modules/colorjs.io": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", - "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", - "license": "MIT" - }, - "node_modules/columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -14644,7 +12202,7 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 12" @@ -14654,6 +12212,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, "license": "ISC" }, "node_modules/common-tags": { @@ -14681,6 +12240,7 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" @@ -14690,16 +12250,17 @@ } }, "node_modules/compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", - "on-headers": "~1.0.2", + "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" }, @@ -14711,6 +12272,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -14720,12 +12282,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, "license": "MIT" }, "node_modules/compression/node_modules/negotiator": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -14735,12 +12299,6 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true, "license": "MIT" }, @@ -14748,6 +12306,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8" @@ -14823,41 +12382,29 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "license": "MIT" }, - "node_modules/cookies": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", - "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/copy-anything": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, "license": "MIT", "dependencies": { "is-what": "^3.14.1" @@ -14870,7 +12417,7 @@ "version": "13.0.0", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.0.tgz", "integrity": "sha512-FgR/h5a6hzJqATDGd9YG41SeDViH+0bkHn6WNXCi5zKAZkeESeSxLySSsFLHqLEVCh0E+rITmCf0dusXWYukeQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "glob-parent": "^6.0.1", @@ -14891,12 +12438,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz", - "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==", + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", + "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.25.1" + "browserslist": "^4.28.1" }, "funding": { "type": "opencollective", @@ -14907,23 +12455,16 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, "license": "MIT" }, - "node_modules/corser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", @@ -14956,22 +12497,9 @@ }, "peerDependencies": { "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", - "typescript": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=4" } }, "node_modules/create-jest": { @@ -15003,22 +12531,11 @@ "devOptional": true, "license": "MIT" }, - "node_modules/cron-parser": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", - "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", - "license": "MIT", - "dependencies": { - "luxon": "^3.2.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -15048,16 +12565,18 @@ "postcss": "^8.4" } }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "license": "ISC", - "engines": { - "node": "^14 || ^16 || >=18" + "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, - "peerDependencies": { - "postcss": "^8.0.9" + "engines": { + "node": ">=4" } }, "node_modules/css-has-pseudo": { @@ -15079,11 +12598,25 @@ "postcss": "^8.4" } }, + "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/css-loader": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", @@ -15115,50 +12648,6 @@ } } }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "cssnano": "^6.0.1", - "jest-worker": "^29.4.3", - "postcss": "^8.4.24", - "schema-utils": "^4.0.1", - "serialize-javascript": "^6.0.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, "node_modules/css-prefers-color-scheme": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", @@ -15179,6 +12668,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", @@ -15191,23 +12681,11 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, "node_modules/css-what": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">= 6" @@ -15246,115 +12724,6 @@ "node": ">=4" } }, - "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "license": "MIT", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "license": "CC0-1.0" - }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", @@ -15396,6 +12765,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "@cypress/request": "^3.0.6", "@cypress/xvfb": "^1.2.4", @@ -15671,13 +13041,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cypress/node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true, - "license": "MIT" - }, "node_modules/cypress/node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -15819,26 +13182,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", "dev": true, "license": "MIT" }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -15926,9 +13281,9 @@ } }, "node_modules/dedent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -15940,31 +13295,28 @@ } } }, - "node_modules/deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", - "license": "MIT" - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -15978,9 +13330,10 @@ } }, "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -16003,13 +13356,13 @@ } }, "node_modules/defaults": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-3.0.0.tgz", - "integrity": "sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-2.0.2.tgz", + "integrity": "sha512-cuIw0PImdp76AOfgkjbW4VhQODRmNNcKR73vdCH5cLd/ifj7aamfoXvYgfGkEAjNJZ3ozMIy9Gu2LutUkGEPbA==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -16047,6 +13400,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -16077,17 +13431,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "license": "MIT" - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -16101,7 +13450,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -16134,9 +13483,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -16158,25 +13507,9 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, "license": "MIT" }, - "node_modules/detect-port": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - }, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -16184,9 +13517,9 @@ "license": "Apache-2.0" }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "devOptional": true, "license": "BSD-3-Clause", "engines": { @@ -16197,6 +13530,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -16206,6 +13540,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "license": "MIT", "dependencies": { "path-type": "^4.0.0" @@ -16224,6 +13559,7 @@ "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -16236,6 +13572,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" @@ -16255,7 +13592,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "utila": "~0.4" @@ -16265,6 +13602,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", @@ -16279,6 +13617,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, "funding": [ { "type": "github", @@ -16305,6 +13644,7 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" @@ -16320,6 +13660,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", @@ -16334,7 +13675,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "no-case": "^3.0.4", @@ -16354,33 +13695,6 @@ "node": ">=8" } }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -16406,6 +13720,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, "license": "MIT" }, "node_modules/ecc-jsbn": { @@ -16419,13 +13734,6 @@ "safer-buffer": "^2.1.0" } }, - "node_modules/ecc-jsbn/node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true, - "license": "MIT" - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -16436,6 +13744,7 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" @@ -16448,9 +13757,10 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.180", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.180.tgz", - "integrity": "sha512-ED+GEyEh3kYMwt2faNmgMB0b8O5qtATGgR4RmRsIp4T6p7B8vdMbIedYndnvZfsaXvSzegtpfqRMDNCjjiSduA==", + "version": "1.5.357", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.357.tgz", + "integrity": "sha512-NHlTIQDK8fmVwHwuIzmXYEJ1Ewq3D9wDNc0cWXxDGysP6Pb21giwGNkxiTifyKy/4SoPuN5l6GLP1W9Sv7zB2g==", + "dev": true, "license": "ISC" }, "node_modules/emittery": { @@ -16470,12 +13780,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -16494,40 +13806,61 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", - "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "version": "5.21.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.3.tgz", + "integrity": "sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==", + "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "tapable": "^2.3.3" }, "engines": { "node": ">=10.13.0" } }, "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "ansi-colors": "^4.1.1" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8.6" @@ -16537,6 +13870,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -16549,6 +13883,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -16558,7 +13893,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -16578,6 +13913,7 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -16588,27 +13924,19 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "license": "MIT", - "dependencies": { - "stackframe": "^1.3.4" - } - }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", "dev": true, "license": "MIT", "dependencies": { @@ -16703,6 +14031,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { @@ -16721,6 +14050,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -16754,7 +14084,7 @@ "version": "0.25.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", - "devOptional": true, + "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -16795,7 +14125,7 @@ "version": "0.25.5", "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.5.tgz", "integrity": "sha512-V/rbdOws2gDcnCAECfPrajhuafI0WY4WumUgc8ZHwOLnvmM0doLQ+dqvVFI2qkVxQsvo6880aC9IjpyDqcwwTw==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "esbuild": "bin/esbuild" @@ -16808,6 +14138,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -16823,6 +14154,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -16869,7 +14201,9 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -16949,35 +14283,6 @@ "eslint": ">= 3.2.1" } }, - "node_modules/eslint-plugin-cypress/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-cypress/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint-scope": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", @@ -16999,6 +14304,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -17008,9 +14314,10 @@ } }, "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -17024,9 +14331,10 @@ } }, "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -17037,6 +14345,7 @@ "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -17049,43 +14358,18 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, "license": "MIT" }, "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -17094,22 +14378,11 @@ "node": "*" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", @@ -17127,6 +14400,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -17137,9 +14411,10 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -17152,6 +14427,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -17164,6 +14440,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -17173,13 +14450,14 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -17205,17 +14483,29 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, "license": "MIT" }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -17279,18 +14569,6 @@ "node": ">= 0.8.0" } }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "license": "MIT", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/expect": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", @@ -17309,46 +14587,46 @@ } }, "node_modules/exponential-backoff": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", - "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", "dev": true, "license": "Apache-2.0" }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", + "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", + "body-parser": "~1.20.5", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "~6.15.1", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -17377,12 +14655,12 @@ "license": "MIT" }, "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -17440,6 +14718,13 @@ "node": ">=4" } }, + "node_modules/external-editor/node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, "node_modules/external-editor/node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -17528,6 +14813,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, "license": "MIT" }, "node_modules/fast-fifo": { @@ -17569,18 +14855,21 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "dev": true, "funding": [ { "type": "github", @@ -17594,9 +14883,9 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -17606,6 +14895,7 @@ "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" @@ -17635,10 +14925,13 @@ } }, "node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -17648,10 +14941,18 @@ } } }, + "node_modules/fflate": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", + "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", + "dev": true, + "license": "MIT" + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" @@ -17667,6 +14968,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -17676,6 +14978,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" @@ -17685,16 +14988,16 @@ } }, "node_modules/file-type": { - "version": "19.6.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-19.6.0.tgz", - "integrity": "sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-20.5.0.tgz", + "integrity": "sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg==", "dev": true, "license": "MIT", "dependencies": { - "get-stream": "^9.0.1", - "strtok3": "^9.0.1", + "@tokenizer/inflate": "^0.2.6", + "strtok3": "^10.2.0", "token-types": "^6.0.0", - "uint8array-extras": "^1.3.0" + "uint8array-extras": "^1.4.0" }, "engines": { "node": ">=18" @@ -17703,49 +15006,21 @@ "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "node_modules/file-type/node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-type/node_modules/is-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } }, "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -17796,17 +15071,17 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, "engines": { @@ -17817,135 +15092,22 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/find-cache-directory": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/find-cache-directory/-/find-cache-directory-6.0.0.tgz", "integrity": "sha512-CvFd5ivA6HcSHbD+59P7CyzINHXzwhuQK8RY7CxJZtgDSAtRlHiCaQpZQ2lMR/WRyUIEmzUvL6G2AGurMfegZA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "common-path-prefix": "^3.0.0", @@ -17962,7 +15124,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-8.0.0.tgz", "integrity": "sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "find-up-simple": "^1.0.0" @@ -17974,34 +15136,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-file-up": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-2.0.1.tgz", - "integrity": "sha512-qVdaUhYO39zmh28/JLQM5CoYN9byEOKEH4qfa8K1eNV17W0UUMJ9WgbR/hHFH+t5rcl+6RTb5UC7ck/I+uRkpQ==", - "license": "MIT", - "dependencies": { - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-2.0.0.tgz", - "integrity": "sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ==", - "license": "MIT", - "dependencies": { - "find-file-up": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -18018,7 +15157,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -18047,6 +15186,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, "license": "BSD-3-Clause", "bin": { "flat": "cli.js" @@ -18056,6 +15196,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", @@ -18067,15 +15208,17 @@ } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "dev": true, "funding": [ { "type": "individual", @@ -18112,6 +15255,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -18134,154 +15278,11 @@ "node": "*" } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.13.tgz", - "integrity": "sha512-fR3WRkOb4bQdWB/y7ssDUlVdrclvwtyCUIHCfivAoYxq9dF7XfrDKbMdZIfwJ7hxIAqkYSGeU7lLJE6xrxIBdg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">=12.13.0", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "typescript": ">3.6.0", - "vue-template-compiler": "*", - "webpack": "^5.11.0" - }, - "peerDependenciesMeta": { - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "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==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, "node_modules/form-data": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", - "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -18314,15 +15315,16 @@ } }, "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, "license": "MIT", "engines": { "node": "*" }, "funding": { - "type": "patreon", + "type": "github", "url": "https://github.com/sponsors/rawify" } }, @@ -18335,25 +15337,10 @@ "node": ">= 0.6" } }, - "node_modules/front-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", - "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT" - }, "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", + "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", "dev": true, "license": "MIT", "dependencies": { @@ -18379,15 +15366,17 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", + "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", + "dev": true, "license": "Unlicense" }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, "license": "ISC" }, "node_modules/fsevents": { @@ -18445,10 +15434,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -18458,15 +15458,17 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -18577,6 +15579,7 @@ "version": "2.0.11", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.", "dev": true, "license": "MIT", "dependencies": { @@ -18597,7 +15600,8 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -18626,16 +15630,35 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -18643,9 +15666,10 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -18680,62 +15704,17 @@ "node": ">=10" } }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "license": "MIT", - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "license": "MIT", - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -18821,12 +15800,14 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, "license": "MIT" }, "node_modules/gzip-size": { @@ -18849,8 +15830,41 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, "license": "MIT" }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -18861,13 +15875,6 @@ "node": ">=6" } }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "dev": true, - "license": "(Apache-2.0 OR MPL-1.1)" - }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -18885,6 +15892,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -18935,6 +15943,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -18947,9 +15956,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -18962,21 +15971,10 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "license": "MIT", - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "bin": { + "he": "bin/he" } }, "node_modules/hosted-git-info": { @@ -19016,6 +16014,7 @@ "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.1", @@ -19028,12 +16027,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, "license": "MIT" }, "node_modules/hpack.js/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -19049,12 +16050,14 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, "license": "MIT" }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -19064,6 +16067,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, "license": "MIT", "dependencies": { "whatwg-encoding": "^2.0.0" @@ -19076,6 +16080,7 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "dev": true, "funding": [ { "type": "github", @@ -19099,7 +16104,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "camel-case": "^4.1.2", @@ -19118,11 +16123,12 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", - "devOptional": true, + "version": "5.6.7", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.7.tgz", + "integrity": "sha512-md+vXtdCAe60s1k6AU3dUyMJnDxUyQAwfwPKoLisvgUF1IXjtlLsk2se54+qfL9Mdm26bbwvjJybpNx48NKRLw==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -19443,9 +16449,9 @@ }, "node_modules/html-webpack-plugin-5": { "name": "html-webpack-plugin", - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", + "version": "5.6.7", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.7.tgz", + "integrity": "sha512-md+vXtdCAe60s1k6AU3dUyMJnDxUyQAwfwPKoLisvgUF1IXjtlLsk2se54+qfL9Mdm26bbwvjJybpNx48NKRLw==", "dev": true, "license": "MIT", "dependencies": { @@ -19476,10 +16482,10 @@ } }, "node_modules/htmlparser2": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", - "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", - "devOptional": true, + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -19491,15 +16497,15 @@ "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.2.1", - "entities": "^6.0.0" + "domutils": "^3.2.2", + "entities": "^7.0.1" } }, "node_modules/htmlparser2/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "devOptional": true, + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -19508,53 +16514,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/http-assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", - "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", - "license": "MIT", - "dependencies": { - "deep-equal": "~1.0.1", - "http-errors": "~1.8.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-assert/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-assert/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-assert/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -19566,34 +16525,41 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, "license": "MIT" }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-parser-js": { "version": "0.5.10", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, "license": "MIT" }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", @@ -19636,6 +16602,7 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", + "dev": true, "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.15", @@ -19649,33 +16616,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/http-server": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", - "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", - "license": "MIT", - "dependencies": { - "basic-auth": "^2.0.1", - "chalk": "^4.1.2", - "corser": "^2.0.1", - "he": "^1.2.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy": "^1.18.1", - "mime": "^1.6.0", - "minimist": "^1.2.6", - "opener": "^1.5.1", - "portfinder": "^1.0.28", - "secure-compare": "3.0.1", - "union": "~0.5.0", - "url-join": "^4.0.1" - }, - "bin": { - "http-server": "bin/http-server" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/http-signature": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", @@ -19709,7 +16649,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "agent-base": "^7.1.2", @@ -19749,27 +16689,34 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, "license": "MIT", "engines": { "node": ">=10.18" } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" @@ -19778,23 +16725,11 @@ "postcss": "^8.1.0" } }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dev": true, - "license": "MIT", - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -19815,28 +16750,69 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/ignore-walk": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", - "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", "dev": true, "license": "ISC", "dependencies": { - "minimatch": "^9.0.0" + "minimatch": "^10.0.3" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/ignore-walk/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/image-size": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, "license": "MIT", "optional": true, "bin": { @@ -19847,15 +16823,17 @@ } }, "node_modules/immutable": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", - "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "dev": true, "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -19872,6 +16850,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -19901,6 +16880,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -19921,6 +16901,7 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -19944,10 +16925,10 @@ } }, "node_modules/injection-js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.5.0.tgz", - "integrity": "sha512-UpY2ONt4xbht4GhSqQ2zMJ1rBIQq4uOY+DlR6aOeYyqK7xadXt7UQbJIyxmgk288bPMkIZKjViieHm0O0i72Jw==", - "devOptional": true, + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.6.1.tgz", + "integrity": "sha512-dbR5bdhi7TWDoCye9cByZqeg/gAfamm8Vu3G1KZOTYkOif8WkuM8CD0oeDPtZYMzT5YH76JAFB7bkmyY9OJi2A==", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.0" @@ -20041,15 +17022,11 @@ } }, "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", "dev": true, "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, "engines": { "node": ">= 12" } @@ -20085,6 +17062,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, "license": "MIT" }, "node_modules/is-async-function": { @@ -20154,12 +17132,12 @@ } }, "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" @@ -20207,6 +17185,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, "license": "MIT", "bin": { "is-docker": "cli.js" @@ -20247,7 +17226,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -20267,13 +17246,15 @@ } }, "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, @@ -20300,6 +17281,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, "license": "MIT", "dependencies": { "is-docker": "^3.0.0" @@ -20335,6 +17317,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -20370,9 +17353,10 @@ } }, "node_modules/is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.2.tgz", + "integrity": "sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=16" @@ -20421,6 +17405,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -20440,6 +17425,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -20456,6 +17442,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -20587,6 +17574,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -20645,21 +17633,14 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, "license": "MIT" }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -20682,26 +17663,19 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/isomorphic-ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", - "license": "MIT", - "peerDependencies": { - "ws": "*" - } - }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -20713,7 +17687,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=8" @@ -20723,7 +17697,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.23.9", @@ -20777,9 +17751,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -20794,6 +17768,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -20806,15 +17781,15 @@ } }, "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", + "async": "^3.2.6", "filelist": "^1.0.4", - "minimatch": "^3.1.2" + "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" @@ -20823,34 +17798,13 @@ "node": ">=10" } }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -21089,6 +18043,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -21104,6 +18059,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -21116,6 +18072,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", @@ -21130,6 +18087,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, "license": "MIT" }, "node_modules/jest-docblock": { @@ -21203,6 +18161,7 @@ "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -21247,6 +18206,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -21536,20 +18496,33 @@ "dev": true, "license": "MIT" }, + "node_modules/jest-preset-angular/node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest-preset-angular/node_modules/ts-jest": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz", - "integrity": "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==", + "version": "29.4.9", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.9.tgz", + "integrity": "sha512-LTb9496gYPMCqjeDLdPrKuXtncudeV1yRZnF4Wo5l3SFi0RYEnYRNgMrFIdg+FHvfzjCyQk1cLncWVqiSX+EvQ==", "dev": true, "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", - "ejs": "^3.1.10", "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.7.2", + "semver": "^7.7.4", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, @@ -21566,7 +18539,7 @@ "babel-jest": "^29.0.0 || ^30.0.0", "jest": "^29.0.0 || ^30.0.0", "jest-util": "^29.0.0 || ^30.0.0", - "typescript": ">=4.3 <6" + "typescript": ">=4.3 <7" }, "peerDependenciesMeta": { "@babel/core": { @@ -21602,6 +18575,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/jest-preset-angular/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/jest-regex-util": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", @@ -21806,7 +18789,9 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -21823,6 +18808,7 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, "funding": [ { "type": "github", @@ -21835,9 +18821,10 @@ } }, "node_modules/jest-util/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -21936,6 +18923,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -21951,6 +18939,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -21975,40 +18964,26 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, - "node_modules/js-yaml/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/js-yaml/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true, "license": "MIT" }, @@ -22115,6 +19090,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -22127,6 +19103,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, "license": "MIT" }, "node_modules/json-fixer": { @@ -22165,12 +19142,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, "license": "MIT" }, "node_modules/json-stringify-safe": { @@ -22184,6 +19163,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -22193,9 +19173,9 @@ } }, "node_modules/jsonc-eslint-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", - "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz", + "integrity": "sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==", "dev": true, "license": "MIT", "dependencies": { @@ -22215,12 +19195,14 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, "license": "MIT" }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -22276,28 +19258,17 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "source-map-support": "^0.5.5" } }, - "node_modules/keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "license": "MIT", - "dependencies": { - "tsscmp": "1.0.6" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, "license": "MIT", "dependencies": { "json-buffer": "3.0.1" @@ -22307,6 +19278,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -22322,119 +19294,15 @@ "node": ">=6" } }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/koa": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.15.4.tgz", - "integrity": "sha512-7fNBIdrU2PEgLljXoPWoyY4r1e+ToWCmzS/wwMPbUNs7X+5MMET1ObhJBlUkF5uZG9B6QhM2zS1TsH6adegkiQ==", - "license": "MIT", - "dependencies": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.9.0", - "debug": "^4.3.2", - "delegates": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^2.0.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - }, - "engines": { - "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" - } - }, - "node_modules/koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "license": "MIT" - }, - "node_modules/koa-convert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", - "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", - "license": "MIT", - "dependencies": { - "co": "^4.6.0", - "koa-compose": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/koa/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/koa/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/koa/node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/koa/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/launch-editor": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", - "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.2.tgz", + "integrity": "sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==", + "dev": true, "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" } }, "node_modules/lazy-ass": { @@ -22451,7 +19319,9 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/less/-/less-4.3.0.tgz", "integrity": "sha512-X9RyH9fvemArzfdP8Pi3irr7lor2Ok4rOttDXBhlwDg+wKQsXOXgHWduAJE1EsF7JJx0w0bcO6BC6tCKKYnXKA==", + "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -22477,7 +19347,7 @@ "version": "12.3.0", "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.3.0.tgz", "integrity": "sha512-0M6+uYulvYIWs52y0LqN4+QM9TqWAohYSNTo4htE8Z7Cn3G/qQMEmktfHmyJT23k+20kU9zHH2wrfFXkxNLtVw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 18.12.0" @@ -22504,6 +19374,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -22518,6 +19389,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, "license": "MIT", "optional": true, "engines": { @@ -22528,6 +19400,7 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, "license": "ISC", "optional": true, "bin": { @@ -22538,6 +19411,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "license": "BSD-3-Clause", "optional": true, "engines": { @@ -22558,6 +19432,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", @@ -22571,6 +19446,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, "license": "ISC", "dependencies": { "webpack-sources": "^3.0.0" @@ -22585,25 +19461,19 @@ } }, "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" + "node": ">=10" } }, "node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" }, "node_modules/lint-staged": { "version": "13.3.0", @@ -22650,9 +19520,9 @@ } }, "node_modules/lint-staged/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -22663,9 +19533,9 @@ } }, "node_modules/lint-staged/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -22757,9 +19627,9 @@ "license": "MIT" }, "node_modules/lint-staged/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", "dev": true, "license": "MIT" }, @@ -22810,16 +19680,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/lint-staged/node_modules/listr2": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", @@ -22946,9 +19806,9 @@ } }, "node_modules/lint-staged/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -23027,13 +19887,13 @@ } }, "node_modules/lint-staged/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -23100,7 +19960,7 @@ "version": "8.3.3", "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "cli-truncate": "^4.0.0", @@ -23115,10 +19975,10 @@ } }, "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "devOptional": true, + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -23128,10 +19988,10 @@ } }, "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "devOptional": true, + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -23141,24 +20001,24 @@ } }, "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "devOptional": true, + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, "license": "MIT" }, "node_modules/listr2/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "devOptional": true, + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, "license": "MIT" }, "node_modules/listr2/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -23173,13 +20033,13 @@ } }, "node_modules/listr2/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "devOptional": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -23189,10 +20049,10 @@ } }, "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "devOptional": true, + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -23235,19 +20095,24 @@ } }, "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz", + "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/loader-utils": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 12.13.0" @@ -23270,6 +20135,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -23282,9 +20148,10 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, "license": "MIT" }, "node_modules/lodash.camelcase": { @@ -23294,16 +20161,11 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.clonedeepwith": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeepwith/-/lodash.clonedeepwith-4.5.0.tgz", - "integrity": "sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA==", - "license": "MIT" - }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, "license": "MIT" }, "node_modules/lodash.isfunction": { @@ -23331,12 +20193,14 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, "license": "MIT" }, "node_modules/lodash.mergewith": { @@ -23371,6 +20235,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, "license": "MIT" }, "node_modules/lodash.upperfirst": { @@ -23384,6 +20249,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -23400,7 +20266,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-escapes": "^7.0.0", @@ -23417,10 +20283,10 @@ } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", - "devOptional": true, + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, "license": "MIT", "dependencies": { "environment": "^1.0.0" @@ -23433,10 +20299,10 @@ } }, "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "devOptional": true, + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -23446,10 +20312,10 @@ } }, "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "devOptional": true, + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -23462,7 +20328,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "restore-cursor": "^5.0.0" @@ -23475,20 +20341,20 @@ } }, "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "devOptional": true, + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, "license": "MIT" }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", - "devOptional": true, + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.0.0" + "get-east-asian-width": "^1.3.1" }, "engines": { "node": ">=18" @@ -23501,7 +20367,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "mimic-function": "^5.0.0" @@ -23517,7 +20383,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "onetime": "^7.0.0", @@ -23531,10 +20397,10 @@ } }, "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", - "devOptional": true, + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -23551,7 +20417,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -23566,13 +20432,13 @@ } }, "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "devOptional": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -23582,10 +20448,10 @@ } }, "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "devOptional": true, + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -23599,33 +20465,11 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", - "license": "Apache-2.0", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/long-timeout": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", - "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", - "license": "MIT" - }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.3" @@ -23648,20 +20492,12 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, - "node_modules/luxon": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", - "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, "node_modules/lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", @@ -23676,6 +20512,7 @@ "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" @@ -23769,12 +20606,6 @@ "node": ">= 0.4" } }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "license": "CC0-1.0" - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -23785,15 +20616,33 @@ } }, "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "license": "Unlicense", + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.2.tgz", + "integrity": "sha512-2nWzSsJzrukurSDna4Z0WywuScK4Id3tSKejgu74u8KCdW4uNrseKRSIDg75C6Yw5ZRqBe0F0EtMNlTbUq8bAQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "fs-monkey": "^1.0.4" + "@jsonjoy.com/fs-core": "4.57.2", + "@jsonjoy.com/fs-fsa": "4.57.2", + "@jsonjoy.com/fs-node": "4.57.2", + "@jsonjoy.com/fs-node-builtins": "4.57.2", + "@jsonjoy.com/fs-node-to-fsa": "4.57.2", + "@jsonjoy.com/fs-node-utils": "4.57.2", + "@jsonjoy.com/fs-print": "4.57.2", + "@jsonjoy.com/fs-snapshot": "4.57.2", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" }, - "engines": { - "node": ">= 4.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/meow": { @@ -23835,16 +20684,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", @@ -23858,6 +20697,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, "license": "MIT" }, "node_modules/merge2": { @@ -23892,9 +20732,9 @@ } }, "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -23919,6 +20759,7 @@ "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -23949,6 +20790,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -23958,6 +20800,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -23993,7 +20836,7 @@ "version": "2.9.2", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", @@ -24024,15 +20867,17 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, "license": "ISC" }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -24045,6 +20890,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -24066,10 +20912,11 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -24106,11 +20953,11 @@ } }, "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.7.tgz", + "integrity": "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "minipass": "^3.0.0" }, @@ -24205,9 +21052,9 @@ "license": "ISC" }, "node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", "dependencies": { @@ -24234,7 +21081,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -24247,9 +21094,9 @@ "license": "MIT" }, "node_modules/msgpackr": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.4.tgz", - "integrity": "sha512-uaff7RG9VIC4jacFW9xzL3jc0iM32DNHe4jYVycBcjUePT/Klnfj7pqtWJt9khvDFizmjN2TlYniYmSS2LIaZg==", + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.12.tgz", + "integrity": "sha512-RBdJ1Un7yGlXWajrkxcSa93nvQ0w4zBf60c0yYv7YtBelP8H2FA7XsfBbMHtXKXUMUxH7zV3Zuozh+kUQWhHvg==", "dev": true, "license": "MIT", "optional": true, @@ -24284,6 +21131,7 @@ "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", @@ -24297,7 +21145,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "devOptional": true, + "dev": true, "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" @@ -24315,9 +21163,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", "funding": [ { "type": "github", @@ -24336,12 +21184,14 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, "license": "MIT" }, "node_modules/needle": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", - "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.5.0.tgz", + "integrity": "sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -24355,6 +21205,20 @@ "node": ">= 4.4.x" } }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -24368,14 +21232,16 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, "license": "MIT" }, "node_modules/ng-packagr": { "version": "20.0.1", "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-20.0.1.tgz", "integrity": "sha512-MDqUwAg5tXpbOmt7DJH+qvycgNgxEPchwWUy7//1p6lOl2VvbF/XxrC4kAt948YQIkn1UhPxLXHIIcpZt5rt9g==", - "devOptional": true, + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.3.0", "@rollup/plugin-json": "^6.1.0", @@ -24421,10 +21287,10 @@ } }, "node_modules/ng-packagr/node_modules/commander": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", - "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", - "devOptional": true, + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "dev": true, "license": "MIT", "engines": { "node": ">=20" @@ -24434,19 +21300,13 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "license": "MIT" - }, "node_modules/node-addon-api": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", @@ -24459,6 +21319,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -24479,18 +21340,21 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, "license": "MIT" }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, "license": "BSD-2-Clause" }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -24498,18 +21362,19 @@ } }, "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", + "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", + "dev": true, "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-gyp": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz", - "integrity": "sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.5.0.tgz", + "integrity": "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==", "dev": true, "license": "MIT", "dependencies": { @@ -24558,43 +21423,26 @@ } }, "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, "node_modules/node-gyp/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "version": "7.5.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.15.tgz", + "integrity": "sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", + "minizlib": "^3.1.0", "yallist": "^5.0.0" }, "engines": { @@ -24634,32 +21482,13 @@ "dev": true, "license": "MIT" }, - "node_modules/node-machine-id": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", - "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", - "license": "MIT" - }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.44", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.44.tgz", + "integrity": "sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==", + "dev": true, "license": "MIT" }, - "node_modules/node-schedule": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz", - "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", - "license": "MIT", - "dependencies": { - "cron-parser": "^4.2.0", - "long-timeout": "0.1.1", - "sorted-array-functions": "^1.3.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/nopt": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", @@ -24705,15 +21534,16 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.2.tgz", - "integrity": "sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", + "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", "dev": true, "license": "MIT", "engines": { @@ -24737,9 +21567,9 @@ } }, "node_modules/npm-install-checks": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.1.tgz", - "integrity": "sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", + "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -24796,18 +21626,29 @@ "license": "ISC" }, "node_modules/npm-packlist": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.0.tgz", - "integrity": "sha512-rht9U6nS8WOBDc53eipZNPo5qkAV4X2rhKE2Oj1DYUQ3DieXfj0mKkVmjnf3iuNdtMd8WfLdi2L6ASkD/8a+Kg==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.4.tgz", + "integrity": "sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng==", "dev": true, "license": "ISC", "dependencies": { - "ignore-walk": "^7.0.0" + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/npm-packlist/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/npm-pick-manifest": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", @@ -24821,249 +21662,62 @@ "semver": "^7.3.5" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", - "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^14.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^12.0.0", - "proc-log": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", - "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nx": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/nx/-/nx-21.2.1.tgz", - "integrity": "sha512-wwLa9BSb/wH2KI6CrM356DerDxf8hnzqXx/OvXuKgWsPtOciUdULisJEzdCvehZYg/l2RH84jOLmMVq7OWNuaw==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@napi-rs/wasm-runtime": "0.2.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.2", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.8.3", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "front-matter": "^4.0.2", - "ignore": "^5.0.4", - "jest-diff": "^29.4.1", - "jsonc-parser": "3.2.0", - "lines-and-columns": "2.0.3", - "minimatch": "9.0.3", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "ora": "5.3.0", - "resolve.exports": "2.0.3", - "semver": "^7.5.3", - "string-width": "^4.2.3", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tree-kill": "^1.2.2", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "yaml": "^2.6.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "21.2.1", - "@nx/nx-darwin-x64": "21.2.1", - "@nx/nx-freebsd-x64": "21.2.1", - "@nx/nx-linux-arm-gnueabihf": "21.2.1", - "@nx/nx-linux-arm64-gnu": "21.2.1", - "@nx/nx-linux-arm64-musl": "21.2.1", - "@nx/nx-linux-x64-gnu": "21.2.1", - "@nx/nx-linux-x64-musl": "21.2.1", - "@nx/nx-win32-arm64-msvc": "21.2.1", - "@nx/nx-win32-x64-msvc": "21.2.1" - }, - "peerDependencies": { - "@swc-node/register": "^1.8.0", - "@swc/core": "^1.3.85" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/nx/node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", - "license": "MIT", - "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" - } - }, - "node_modules/nx/node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/nx/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nx/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/nx/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/nx/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "license": "MIT" - }, - "node_modules/nx/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", + "node_modules/npm-registry-fetch": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", + "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", + "dev": true, + "license": "ISC", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/nx/node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "license": "MIT", "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "path-key": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/nx/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "license": "MIT", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "boolbase": "^1.0.0" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/nwsapi": { + "version": "2.2.23", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz", + "integrity": "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -25126,22 +21780,22 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", - "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.9.tgz", + "integrity": "sha512-mt8YM6XwsTTovI+kdZdHSxoyF2DI59up034orlC9NfweclcWOt7CVascNNLp6U+bjFVCVCIh9PwS76tDM/rH8g==", "dev": true, "license": "MIT", "dependencies": { - "array.prototype.reduce": "^1.0.6", - "call-bind": "^1.0.7", + "array.prototype.reduce": "^1.0.8", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "gopd": "^1.0.1", - "safe-array-concat": "^1.1.2" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "gopd": "^1.2.0", + "safe-array-concat": "^1.1.3" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -25151,6 +21805,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, "license": "MIT" }, "node_modules/on-finished": { @@ -25166,9 +21821,10 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -25187,6 +21843,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -25198,15 +21855,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" - }, "node_modules/open": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", + "dev": true, "license": "MIT", "dependencies": { "default-browser": "^5.2.1", @@ -25221,19 +21874,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, "license": "MIT", "dependencies": { "deep-is": "^0.1.3", @@ -25251,6 +21896,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "dev": true, "license": "MIT", "dependencies": { "chalk": "^5.3.0", @@ -25271,9 +21917,10 @@ } }, "node_modules/ora/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -25283,9 +21930,10 @@ } }, "node_modules/ora/node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -25298,6 +21946,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, "license": "MIT", "dependencies": { "restore-cursor": "^5.0.0" @@ -25309,28 +21958,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ora/node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, "license": "MIT" }, "node_modules/ora/node_modules/is-unicode-supported": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -25343,6 +21982,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "dev": true, "license": "MIT", "dependencies": { "chalk": "^5.3.0", @@ -25359,6 +21999,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -25371,6 +22012,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, "license": "MIT", "dependencies": { "mimic-function": "^5.0.0" @@ -25386,6 +22028,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, "license": "MIT", "dependencies": { "onetime": "^7.0.0", @@ -25402,6 +22045,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -25416,12 +22060,13 @@ } }, "node_modules/ora/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -25431,9 +22076,9 @@ } }, "node_modules/ordered-binary": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.0.tgz", - "integrity": "sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz", + "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==", "dev": true, "license": "MIT", "optional": true @@ -25487,6 +22132,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -25502,6 +22148,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -25514,9 +22161,9 @@ } }, "node_modules/p-map": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", - "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, "license": "MIT", "engines": { @@ -25530,6 +22177,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/retry": "0.12.2", @@ -25543,6 +22191,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -25557,6 +22215,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/pacote": { @@ -25595,7 +22254,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "dot-case": "^3.0.4", @@ -25606,6 +22265,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -25618,6 +22278,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -25636,32 +22297,19 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/parse-json/node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, "license": "MIT" }, "node_modules/parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" } }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -25678,7 +22326,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.1.0.tgz", "integrity": "sha512-2ifK6Jb+ONoqOy5f+cYHsqvx1obHQdvIk13Jmt/5ezxP0U9p+fqd+R6O73KblGswyuzBYfetmsfK9ThMgnuPPg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "entities": "^6.0.0", @@ -25693,7 +22341,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -25706,7 +22354,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "parse5": "^7.0.0" @@ -25740,7 +22388,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "no-case": "^3.0.4", @@ -25751,6 +22399,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -25760,6 +22409,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -25769,6 +22419,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -25784,6 +22435,7 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -25800,35 +22452,23 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, "license": "ISC" }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/peek-readable": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.4.2.tgz", - "integrity": "sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "node": ">=8" } }, "node_modules/pegjs": { @@ -25915,7 +22555,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.1.tgz", "integrity": "sha512-9rPDIPsCwOivatEZGM8+apgM7AiTDLSnpwMmLaSmdm2PeND8bFJzZLZZxyrJjLH8Xx/MpKoVaKf+vZOWALNHbw==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=20.x" @@ -25993,19 +22633,6 @@ "node": ">=8" } }, - "node_modules/portfinder": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.37.tgz", - "integrity": "sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==", - "license": "MIT", - "dependencies": { - "async": "^3.2.6", - "debug": "^4.3.6" - }, - "engines": { - "node": ">= 10.12" - } - }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -26017,9 +22644,9 @@ } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", "funding": [ { "type": "opencollective", @@ -26035,6 +22662,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -26064,20 +22692,18 @@ "postcss": "^8.2" } }, - "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" + "node": ">=4" } }, "node_modules/postcss-clamp": { @@ -26156,40 +22782,6 @@ "postcss": "^8.2" } }, - "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, "node_modules/postcss-custom-media": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", @@ -26250,6 +22842,20 @@ "postcss": "^8.3" } }, + "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-dir-pseudo-class": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", @@ -26257,65 +22863,31 @@ "dev": true, "license": "CC0-1.0", "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", - "license": "MIT", + "postcss-selector-parser": "^6.0.10" + }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.2" } }, - "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, - "peerDependencies": { - "postcss": "^8.4.31" + "engines": { + "node": ">=4" } }, "node_modules/postcss-double-position-gradients": { @@ -26371,6 +22943,20 @@ "postcss": "^8.4" } }, + "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-focus-within": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", @@ -26387,6 +22973,20 @@ "postcss": "^8.4" } }, + "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-font-variant": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", @@ -26438,6 +23038,7 @@ "version": "14.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, "license": "MIT", "dependencies": { "postcss-value-parser": "^4.0.0", @@ -26462,9 +23063,19 @@ } }, "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" @@ -26472,10 +23083,6 @@ "engines": { "node": "^12 || ^14 || >= 16" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, "peerDependencies": { "postcss": "^8.4.21" } @@ -26536,10 +23143,23 @@ } } }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, "node_modules/postcss-loader": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, "license": "MIT", "dependencies": { "cosmiconfig": "^9.0.0", @@ -26568,9 +23188,10 @@ } }, "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "dev": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.1", @@ -26593,18 +23214,6 @@ } } }, - "node_modules/postcss-loader/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/postcss-logical": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", @@ -26635,111 +23244,14 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "devOptional": true, + "dev": true, "license": "MIT" }, - "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", - "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, "node_modules/postcss-modules-extract-imports": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" @@ -26752,6 +23264,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", @@ -26765,23 +23278,11 @@ "postcss": "^8.1.0" } }, - "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/postcss-modules-scope": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, "license": "ISC", "dependencies": { "postcss-selector-parser": "^7.0.0" @@ -26793,211 +23294,111 @@ "postcss": "^8.1.0" } }, - "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/postcss-modules-values": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", - "license": "MIT", + "dev": true, + "license": "ISC", "dependencies": { - "postcss-value-parser": "^4.2.0" + "icss-utils": "^5.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.1.0" } }, - "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=12.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.2.14" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=4" } }, - "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "license": "MIT", + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "dev": true, + "license": "CC0-1.0", "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.2" } }, - "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "dev": true, + "license": "CC0-1.0", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss-selector-parser": "^6.0.10" } }, - "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=4" } }, "node_modules/postcss-opacity-percentage": { @@ -27023,22 +23424,6 @@ "postcss": "^8.2" } }, - "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, "node_modules/postcss-overflow-shorthand": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", @@ -27173,35 +23558,18 @@ "postcss": "^8.2" } }, - "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=4" } }, "node_modules/postcss-replace-overflow-wrap": { @@ -27228,9 +23596,10 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -27240,37 +23609,6 @@ "node": ">=4" } }, - "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" - }, - "engines": { - "node": "^14 || ^16 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, "node_modules/postcss-url": { "version": "10.1.3", "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", @@ -27291,9 +23629,9 @@ } }, "node_modules/postcss-url/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -27363,6 +23701,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -27374,6 +23713,7 @@ "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -27390,6 +23730,7 @@ "integrity": "sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "@volar/vue-language-plugin-pug": "^1.0.4", "@volar/vue-typescript": "^1.0.4", @@ -27497,7 +23838,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "lodash": "^4.17.20", @@ -27556,6 +23897,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, "license": "MIT" }, "node_modules/promise-retry": { @@ -27572,16 +23914,6 @@ "node": ">=10" } }, - "node_modules/promise-retry/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -27610,15 +23942,17 @@ } }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true, "license": "MIT" }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, "license": "MIT", "optional": true }, @@ -27636,9 +23970,9 @@ } }, "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dev": true, "license": "MIT", "dependencies": { @@ -27650,6 +23984,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -27673,9 +24008,10 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -27727,16 +24063,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rambda": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/rambda/-/rambda-9.4.2.tgz", - "integrity": "sha512-++euMfxnl7OgaEKwXh9QqThOjMeta2HH001N1v4mYQzBjJBnmXBh2BCK6dZAbICFVXOFUVD3xFG0R3ZPU0mxXw==", - "license": "MIT" - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" @@ -27752,15 +24083,15 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" @@ -27778,29 +24109,6 @@ "node": ">=0.10.0" } }, - "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "license": "MIT", - "peer": true, - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.0" - } - }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -27808,16 +24116,6 @@ "dev": true, "license": "MIT" }, - "node_modules/react-refresh": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -27980,6 +24278,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -28021,7 +24320,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "devOptional": true, + "dev": true, "license": "Apache-2.0" }, "node_modules/reflect.getprototypeof": { @@ -28051,12 +24350,14 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2" @@ -28069,7 +24370,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/regexp.prototype.flags": { @@ -28094,17 +24395,18 @@ } }, "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", + "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { "node": ">=4" @@ -28114,37 +24416,27 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz", + "integrity": "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" @@ -28154,7 +24446,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "css-select": "^4.1.3", @@ -28168,7 +24460,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", @@ -28185,7 +24477,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", @@ -28200,7 +24492,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" @@ -28216,7 +24508,7 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", @@ -28231,7 +24523,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "devOptional": true, + "dev": true, "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" @@ -28241,7 +24533,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "devOptional": true, + "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -28271,6 +24563,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -28280,6 +24573,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -28296,6 +24590,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, "license": "MIT" }, "node_modules/resolve": { @@ -28338,19 +24633,6 @@ "node": ">=8" } }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "license": "MIT", - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -28398,7 +24680,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "adjust-sourcemap-loader": "^4.0.0", @@ -28415,7 +24697,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "big.js": "^5.2.2", @@ -28430,7 +24712,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -28440,6 +24722,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -28465,6 +24748,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "license": "MIT", "dependencies": { "onetime": "^5.1.0", @@ -28478,12 +24762,14 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, "license": "ISC" }, "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -28503,6 +24789,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, "license": "MIT" }, "node_modules/rimraf": { @@ -28510,6 +24797,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -28525,8 +24813,9 @@ "version": "4.40.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz", "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", - "devOptional": true, + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.7" }, @@ -28562,45 +24851,60 @@ } }, "node_modules/rollup-plugin-dts": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.2.1.tgz", - "integrity": "sha512-sR3CxYUl7i2CHa0O7bA45mCrgADyAQ0tVtGSqi3yvH28M+eg1+g5d7kQ9hLvEz5dorK3XVsH5L2jwHLQf72DzA==", - "devOptional": true, + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.4.1.tgz", + "integrity": "sha512-l//F3Zf7ID5GoOfLfD8kroBjQKEKpy1qfhtAdnpibFZMffPaylrg1CoDC2vGkPeTeyxUe4bVFCln2EFuL7IGGg==", + "dev": true, "license": "LGPL-3.0-only", "dependencies": { - "magic-string": "^0.30.17" + "@jridgewell/remapping": "^2.3.5", + "@jridgewell/sourcemap-codec": "^1.5.5", + "convert-source-map": "^2.0.0", + "magic-string": "^0.30.21" }, "engines": { - "node": ">=16" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/Swatinem" }, "optionalDependencies": { - "@babel/code-frame": "^7.26.2" + "@babel/code-frame": "^7.29.0" }, "peerDependencies": { "rollup": "^3.29.4 || ^4", - "typescript": "^4.5 || ^5.0" + "typescript": "^4.5 || ^5.0 || ^6.0" + } + }, + "node_modules/rollup-plugin-dts/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/rollup-plugin-dts/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/rollup/node_modules/@types/estree": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/rslog": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/rslog/-/rslog-1.2.9.tgz", - "integrity": "sha512-KSjM8jJKYYaKgI4jUGZZ4kdTBTM/EIGH1JnoB0ptMkzcyWaHeXW9w6JVLCYs37gh8sFZkLLqAyBb2sT02bqpcQ==", + "dev": true, "license": "MIT" }, "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -28647,20 +24951,21 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, @@ -28712,6 +25017,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -28735,337 +25041,29 @@ "version": "1.88.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.88.0.tgz", "integrity": "sha512-sF6TWQqjFvr4JILXzG4ucGOLELkESHL+I5QJhh7CNaE+Yge0SI+ehCatsXhJ7ymU1hAFcIS3/PBpjdIbXoyVbg==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, - "node_modules/sass-embedded": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.89.2.tgz", - "integrity": "sha512-Ack2K8rc57kCFcYlf3HXpZEJFNUX8xd8DILldksREmYXQkRHI879yy8q4mRDJgrojkySMZqmmmW1NxrFxMsYaA==", - "license": "MIT", - "dependencies": { - "@bufbuild/protobuf": "^2.5.0", - "buffer-builder": "^0.2.0", - "colorjs.io": "^0.5.0", - "immutable": "^5.0.2", - "rxjs": "^7.4.0", - "supports-color": "^8.1.1", - "sync-child-process": "^1.0.2", - "varint": "^6.0.0" - }, - "bin": { - "sass": "dist/bin/sass.js" - }, - "engines": { - "node": ">=16.0.0" - }, - "optionalDependencies": { - "sass-embedded-android-arm": "1.89.2", - "sass-embedded-android-arm64": "1.89.2", - "sass-embedded-android-riscv64": "1.89.2", - "sass-embedded-android-x64": "1.89.2", - "sass-embedded-darwin-arm64": "1.89.2", - "sass-embedded-darwin-x64": "1.89.2", - "sass-embedded-linux-arm": "1.89.2", - "sass-embedded-linux-arm64": "1.89.2", - "sass-embedded-linux-musl-arm": "1.89.2", - "sass-embedded-linux-musl-arm64": "1.89.2", - "sass-embedded-linux-musl-riscv64": "1.89.2", - "sass-embedded-linux-musl-x64": "1.89.2", - "sass-embedded-linux-riscv64": "1.89.2", - "sass-embedded-linux-x64": "1.89.2", - "sass-embedded-win32-arm64": "1.89.2", - "sass-embedded-win32-x64": "1.89.2" - } - }, - "node_modules/sass-embedded-android-arm": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.89.2.tgz", - "integrity": "sha512-oHAPTboBHRZlDBhyRB6dvDKh4KvFs+DZibDHXbkSI6dBZxMTT+Yb2ivocHnctVGucKTLQeT7+OM5DjWHyynL/A==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-android-arm64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.89.2.tgz", - "integrity": "sha512-+pq7a7AUpItNyPu61sRlP6G2A8pSPpyazASb+8AK2pVlFayCSPAEgpwpCE9A2/Xj86xJZeMizzKUHxM2CBCUxA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-android-riscv64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.89.2.tgz", - "integrity": "sha512-HfJJWp/S6XSYvlGAqNdakeEMPOdhBkj2s2lN6SHnON54rahKem+z9pUbCriUJfM65Z90lakdGuOfidY61R9TYg==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-android-x64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.89.2.tgz", - "integrity": "sha512-BGPzq53VH5z5HN8de6jfMqJjnRe1E6sfnCWFd4pK+CAiuM7iw5Fx6BQZu3ikfI1l2GY0y6pRXzsVLdp/j4EKEA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-darwin-arm64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.89.2.tgz", - "integrity": "sha512-UCm3RL/tzMpG7DsubARsvGUNXC5pgfQvP+RRFJo9XPIi6elopY5B6H4m9dRYDpHA+scjVthdiDwkPYr9+S/KGw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-darwin-x64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.89.2.tgz", - "integrity": "sha512-D9WxtDY5VYtMApXRuhQK9VkPHB8R79NIIR6xxVlN2MIdEid/TZWi1MHNweieETXhWGrKhRKglwnHxxyKdJYMnA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-arm": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.89.2.tgz", - "integrity": "sha512-leP0t5U4r95dc90o8TCWfxNXwMAsQhpWxTkdtySDpngoqtTy3miMd7EYNYd1znI0FN1CBaUvbdCMbnbPwygDlA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-arm64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.89.2.tgz", - "integrity": "sha512-2N4WW5LLsbtrWUJ7iTpjvhajGIbmDR18ZzYRywHdMLpfdPApuHPMDF5CYzHbS+LLx2UAx7CFKBnj5LLjY6eFgQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.89.2.tgz", - "integrity": "sha512-Z6gG2FiVEEdxYHRi2sS5VIYBmp17351bWtOCUZ/thBM66+e70yiN6Eyqjz80DjL8haRUegNQgy9ZJqsLAAmr9g==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.89.2.tgz", - "integrity": "sha512-nTyuaBX6U1A/cG7WJh0pKD1gY8hbg1m2SnzsyoFG+exQ0lBX/lwTLHq3nyhF+0atv7YYhYKbmfz+sjPP8CZ9lw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.89.2.tgz", - "integrity": "sha512-N6oul+qALO0SwGY8JW7H/Vs0oZIMrRMBM4GqX3AjM/6y8JsJRxkAwnfd0fDyK+aICMFarDqQonQNIx99gdTZqw==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.89.2.tgz", - "integrity": "sha512-K+FmWcdj/uyP8GiG9foxOCPfb5OAZG0uSVq80DKgVSC0U44AdGjvAvVZkrgFEcZ6cCqlNC2JfYmslB5iqdL7tg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-riscv64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.89.2.tgz", - "integrity": "sha512-g9nTbnD/3yhOaskeqeBQETbtfDQWRgsjHok6bn7DdAuwBsyrR3JlSFyqKc46pn9Xxd9SQQZU8AzM4IR+sY0A0w==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-x64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.89.2.tgz", - "integrity": "sha512-Ax7dKvzncyQzIl4r7012KCMBvJzOz4uwSNoyoM5IV6y5I1f5hEwI25+U4WfuTqdkv42taCMgpjZbh9ERr6JVMQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-win32-arm64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.89.2.tgz", - "integrity": "sha512-j96iJni50ZUsfD6tRxDQE2QSYQ2WrfHxeiyAXf41Kw0V4w5KYR/Sf6rCZQLMTUOHnD16qTMVpQi20LQSqf4WGg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-win32-x64": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.89.2.tgz", - "integrity": "sha512-cS2j5ljdkQsb4PaORiClaVYynE9OAPZG/XjbOMxpQmjRIf7UroY4PEIH+Waf+y47PfXFX9SyxhYuw2NIKGbEng==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "bin": { + "sass": "sass.js" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, "node_modules/sass-loader": { "version": "16.0.5", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", + "dev": true, "license": "MIT", "dependencies": { "neo-async": "^2.6.2" @@ -29103,10 +25101,15 @@ } }, "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "dev": true, + "license": "BlueOak-1.0.0", + "optional": true, + "engines": { + "node": ">=11.0.0" + } }, "node_modules/saxes": { "version": "6.0.0", @@ -29121,17 +25124,11 @@ "node": ">=v12.22.7" } }, - "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT", - "peer": true - }, "node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", @@ -29151,6 +25148,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -29164,12 +25162,6 @@ } } }, - "node_modules/secure-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", - "license": "MIT" - }, "node_modules/seedrandom": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", @@ -29204,12 +25196,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, "license": "MIT" }, "node_modules/selfsigned": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, "license": "MIT", "dependencies": { "@types/node-forge": "^1.3.0", @@ -29223,6 +25217,7 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -29261,24 +25256,24 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, "engines": { "node": ">= 0.8.0" @@ -29299,46 +25294,44 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", + "dev": true, "license": "MIT", "dependencies": { - "accepts": "~1.3.4", + "accepts": "~1.3.8", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" }, "engines": { "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-index/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -29348,63 +25341,56 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, "license": "MIT", "dependencies": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, "license": "MIT" }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "~0.19.1" }, "engines": { "node": ">= 0.8.0" @@ -29476,6 +25462,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, "license": "MIT", "dependencies": { "kind-of": "^6.0.2" @@ -29488,6 +25475,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -29500,6 +25488,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -29509,6 +25498,7 @@ "version": "1.8.3", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -29537,13 +25527,13 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -29593,6 +25583,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -29640,7 +25631,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", @@ -29654,10 +25645,10 @@ } }, "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "devOptional": true, + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -29681,6 +25672,7 @@ "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", @@ -29689,13 +25681,13 @@ } }, "node_modules/socks": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.5.tgz", - "integrity": "sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", + "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -29744,16 +25736,11 @@ "node": ">=0.10.0" } }, - "node_modules/sorted-array-functions": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", - "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==", - "license": "MIT" - }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">= 8" @@ -29882,16 +25869,6 @@ "node": ">=10" } }, - "node_modules/source-map-explorer/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -29905,6 +25882,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, "license": "MIT", "dependencies": { "iconv-lite": "^0.6.3", @@ -29921,10 +25899,24 @@ "webpack": "^5.72.1" } }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "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==", + "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -29935,6 +25927,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -29970,9 +25963,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", "dev": true, "license": "CC0-1.0" }, @@ -29980,6 +25973,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.0", @@ -29996,6 +25990,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.0", @@ -30033,9 +26028,9 @@ } }, "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, @@ -30065,13 +26060,6 @@ "node": ">=0.10.0" } }, - "node_modules/sshpk/node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true, - "license": "MIT" - }, "node_modules/ssri": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", @@ -30108,16 +26096,10 @@ "node": ">=8" } }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "license": "MIT" - }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -30127,6 +26109,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -30149,70 +26132,23 @@ "node": ">= 0.4" } }, - "node_modules/streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", - "license": "MIT", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/streamroller/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/streamroller/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/streamroller/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/streamx": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz", - "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==", + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz", + "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==", "dev": true, "license": "MIT", "dependencies": { + "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" } }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -30246,6 +26182,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -30261,6 +26198,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -30275,6 +26213,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -30284,6 +26223,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -30352,6 +26292,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -30365,6 +26306,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -30402,179 +26344,63 @@ "license": "MIT", "engines": { "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strtok3": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.1.1.tgz", - "integrity": "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.3.1" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/style-loader": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", - "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/stylus": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.64.0.tgz", - "integrity": "sha512-ZIdT8eUv8tegmqy1tTIdJv9We2DumkNZFdCF5mz/Kpq3OcTaxSuCAYZge6HKK2CmNC02G1eJig2RV7XTw5hQrA==", - "license": "MIT", - "dependencies": { - "@adobe/css-tools": "~4.3.3", - "debug": "^4.3.2", - "glob": "^10.4.5", - "sax": "~1.4.1", - "source-map": "^0.7.3" - }, - "bin": { - "stylus": "bin/stylus" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://opencollective.com/stylus" - } - }, - "node_modules/stylus-loader": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.1.3.tgz", - "integrity": "sha512-TY0SKwiY7D2kMd3UxaWKSf3xHF0FFN/FAfsSqfrhxRT/koXTwffq2cgEWDkLQz7VojMu7qEEHt5TlMjkPx9UDw==", - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.12", - "normalize-path": "^3.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "stylus": ">=0.52.4", - "webpack": "^5.0.0" - } - }, - "node_modules/stylus/node_modules/@adobe/css-tools": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", - "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==", - "license": "MIT" + } }, - "node_modules/stylus/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "min-indent": "^1.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylus/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", + "node_modules/strtok3": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", + "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@tokenizer/token": "^0.3.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", - "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { @@ -30594,51 +26420,11 @@ "node": ">= 6" } }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -30659,40 +26445,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -30700,32 +26452,12 @@ "dev": true, "license": "MIT" }, - "node_modules/sync-child-process": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", - "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", - "license": "MIT", - "dependencies": { - "sync-message-port": "^1.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/sync-message-port": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", - "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", - "license": "MIT", - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/tailwindcss": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", "license": "MIT", + "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -30758,15 +26490,6 @@ "node": ">=14.0.0" } }, - "node_modules/tailwindcss/node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/tailwindcss/node_modules/postcss-import": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", @@ -30784,19 +26507,38 @@ "postcss": "^8.0.0" } }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/tapable": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", - "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/tar": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -30812,13 +26554,14 @@ } }, "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.2.0.tgz", + "integrity": "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==", "dev": true, "license": "MIT", "dependencies": { "b4a": "^1.6.4", + "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } @@ -30893,6 +26636,16 @@ "dev": true, "license": "ISC" }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, "node_modules/temp": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", @@ -30938,6 +26691,7 @@ "version": "5.39.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.1.tgz", "integrity": "sha512-Mm6+uad0ZuDtcV8/4uOZQDQ8RuiC5Pu+iZRedJtF7yA/27sPL7d++In/AJKpWZlU3SYMPPkVfwetn6sgZ66pUA==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -30953,15 +26707,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-Eum+5ajkaOhf5KbM26osvv21kLD7BaGqQ1UA4Ami4arYwylmGUQTgHFpHDdmJod1q4QXa66p0to/FBKID+J1vA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "engines": { @@ -30975,12 +26729,39 @@ "webpack": "^5.1.0" }, "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, "@swc/core": { "optional": true }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, "esbuild": { "optional": true }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, "uglify-js": { "optional": true } @@ -30990,6 +26771,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -31004,6 +26786,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -31019,6 +26802,7 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, "license": "MIT" }, "node_modules/test-exclude": { @@ -31037,9 +26821,9 @@ } }, "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -31048,9 +26832,9 @@ } }, "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -31061,9 +26845,9 @@ } }, "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -31084,6 +26868,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, "license": "MIT" }, "node_modules/thenify": { @@ -31108,13 +26893,18 @@ } }, "node_modules/thingies": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", - "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", - "license": "Unlicense", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz", + "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10.18" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, "peerDependencies": { "tslib": "^2" } @@ -31150,6 +26940,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, "license": "MIT" }, "node_modules/tinyglobby": { @@ -31189,9 +26980,10 @@ "license": "MIT" }, "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, "license": "MIT", "engines": { "node": ">=14.14" @@ -31226,12 +27018,13 @@ } }, "node_modules/token-types": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.3.tgz", - "integrity": "sha512-IKJ6EzuPPWtKtEIEPpIdXv9j5j2LGJEYk0CKY2efgKoYKLBiZdh6iQkLVBow/CB3phyWAWCyk+bZeaimJn6uRQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", "dev": true, "license": "MIT", "dependencies": { + "@borewit/text-codec": "^0.2.1", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" }, @@ -31270,111 +27063,53 @@ } }, "node_modules/tree-dump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz", - "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/ts-checker-rspack-plugin": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/ts-checker-rspack-plugin/-/ts-checker-rspack-plugin-1.1.4.tgz", - "integrity": "sha512-lDpKuAubxUlsonUE1LpZS5fw7tfjutNb0lwjAo0k8OcxpWv/q18ytaD6eZXdjrFdTEFNIHtKp9dNkUKGky8SgA==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@rspack/lite-tapable": "^1.0.0", - "chokidar": "^3.5.3", - "is-glob": "^4.0.3", - "memfs": "^4.14.0", - "minimatch": "^9.0.5", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@rspack/core": "^1.0.0", - "typescript": ">=3.8.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - } - } - }, - "node_modules/ts-checker-rspack-plugin/node_modules/memfs": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.2.tgz", - "integrity": "sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.3.0", - "tree-dump": "^1.0.1", - "tslib": "^2.0.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">= 4.0.0" + "node": ">=10.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/ts-checker-rspack-plugin/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "typescript": ">=4.8.4" } }, "node_modules/ts-interface-checker": { @@ -31427,24 +27162,14 @@ } } }, - "node_modules/ts-loader": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", - "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" + "node": ">=12" } }, "node_modules/ts-node": { @@ -31453,6 +27178,7 @@ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -31498,57 +27224,12 @@ "devOptional": true, "license": "MIT" }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "license": "MIT", - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsconfig-paths-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.7.0", - "tsconfig-paths": "^4.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "license": "MIT", - "engines": { - "node": ">=0.6.x" - } + "license": "0BSD", + "peer": true }, "node_modules/tuf-js": { "version": "3.1.0", @@ -31598,6 +27279,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" @@ -31617,10 +27299,10 @@ } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "devOptional": true, + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -31724,13 +27406,16 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true, "license": "MIT" }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -31739,10 +27424,24 @@ "node": ">=14.17" } }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/uint8array-extras": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", - "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", "dev": true, "license": "MIT", "engines": { @@ -31798,6 +27497,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -31807,6 +27507,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -31817,34 +27518,25 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/union": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", - "dependencies": { - "qs": "^6.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/unique-filename": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", @@ -31881,6 +27573,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -31905,20 +27598,11 @@ "node": ">=8" } }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "license": "MIT", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, "funding": [ { "type": "opencollective", @@ -31949,17 +27633,12 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "license": "MIT" - }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -31992,7 +27671,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/utils-merge": { @@ -32008,6 +27687,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -32054,21 +27734,15 @@ } }, "node_modules/validate-npm-package-name": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.1.tgz", - "integrity": "sha512-OaI//3H0J7ZkR1OqlhGA8cA+Cbk/2xFOQpJOt5+s27/ta9eZwpeervh4Mxh4w0im/kdgktowaqVNR7QOrUd7Yg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", "dev": true, "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "license": "MIT" - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -32097,8 +27771,9 @@ "version": "6.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", - "devOptional": true, + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -32195,6 +27870,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", @@ -32208,32 +27884,12 @@ "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/wcwidth/node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/weak-lru-cache": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", @@ -32256,7 +27912,9 @@ "version": "5.99.8", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", @@ -32303,6 +27961,7 @@ "version": "7.4.2", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "dev": true, "license": "MIT", "dependencies": { "colorette": "^2.0.10", @@ -32328,29 +27987,11 @@ } } }, - "node_modules/webpack-dev-middleware/node_modules/memfs": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.2.tgz", - "integrity": "sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg==", - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.3.0", - "tree-dump": "^1.0.1", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">= 4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - } - }, "node_modules/webpack-dev-server": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.1.tgz", "integrity": "sha512-ml/0HIj9NLpVKOMq+SuBPLHcmbG+TGIjXRHsYfZwocUBIqEvws8NnS/V9AFQ5FKP+tgn5adwVwRrTEpGL33QFQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.13", @@ -32408,6 +28049,7 @@ "version": "2.0.9", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dev": true, "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", @@ -32429,9 +28071,10 @@ } }, "node_modules/webpack-dev-server/node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.4.0.tgz", + "integrity": "sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 10" @@ -32441,6 +28084,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -32453,7 +28097,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", @@ -32464,19 +28108,11 @@ "node": ">=18.0.0" } }, - "node_modules/webpack-node-externals": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", - "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.4.1.tgz", + "integrity": "sha512-eACpxRN02yaawnt+uUNIF7Qje6A9zArxBbcAJjK1PK3S9Ycg5jIuJ8pW4q8EMnwNZCEGltcjkRx1QzOxOkKD8A==", + "dev": true, "license": "MIT", "engines": { "node": ">=10.13.0" @@ -32486,6 +28122,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, "license": "MIT", "dependencies": { "typed-assert": "^1.0.8" @@ -32507,6 +28144,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -32520,6 +28158,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -32529,12 +28168,14 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, "license": "MIT" }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", @@ -32549,6 +28190,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=0.8.0" @@ -32558,6 +28200,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" @@ -32566,6 +28210,19 @@ "node": ">=12" } }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/whatwg-mimetype": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", @@ -32594,6 +28251,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -32680,9 +28338,9 @@ "license": "ISC" }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "dev": true, "license": "MIT", "dependencies": { @@ -32705,22 +28363,31 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, "license": "MIT" }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -32736,6 +28403,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -32777,9 +28445,10 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "dev": true, "license": "MIT", "engines": { "node": ">=10.0.0" @@ -32837,6 +28506,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -32846,24 +28516,30 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", - "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "license": "ISC", + "peer": true, "bin": { "yaml": "bin.mjs" }, "engines": { "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -32879,18 +28555,29 @@ } }, "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yauzl": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.2.0.tgz", - "integrity": "sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.3.0.tgz", + "integrity": "sha512-PtGEvEP30p7sbIBJKUBjUnqgTVOyMURc4dLo9iNyAJnNIEz9pm88cCXF21w94Kg3k6RXkeZh5DHOGS0qEONvNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -32901,15 +28588,6 @@ "node": ">=12" } }, - "node_modules/ylru": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz", - "integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -32924,6 +28602,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -32933,10 +28612,10 @@ } }, "node_modules/yoctocolors-cjs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", - "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", - "devOptional": true, + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -32949,7 +28628,8 @@ "version": "0.15.0", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.0.tgz", "integrity": "sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==", - "license": "MIT" + "license": "MIT", + "peer": true } } } diff --git a/package.json b/package.json index 43df41e5b..385553d8c 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,43 @@ "version": "0.0.0", "license": "MIT", "scripts": { - "ng": "nx", - "start": "nx serve", - "build": "nx build", - "test": "nx test", + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "test": "ng test", "prepare": "husky install", - "doc:dev": "cd docs && npm run dev" + "doc:dev": "cd docs && npm run dev", + "serve:angular-simple-animations": "ng serve angular-simple-animations", + "serve:angular-view-transition": "ng serve angular-view-transition", + "serve:performance-default-vs-onpush": "ng serve performance-default-vs-onpush", + "serve:angular-lazy-load-component": "ng serve angular-lazy-load-component", + "serve:performance-memoization": "ng serve performance-memoization", + "serve:performance-ngfor-optimization": "ng serve performance-ngfor-optimization", + "serve:performance-optimize-change-detection": "ng serve performance-optimize-change-detection", + "serve:angular-content-projection-default": "ng serve angular-content-projection-default", + "serve:angular-crud-application": "ng serve angular-crud-application", + "serve:angular-projection": "ng serve angular-projection", + "serve:angular-injection-token": "ng serve angular-injection-token", + "serve:angular-master-dependency-injection": "ng serve angular-master-dependency-injection", + "serve:angular-pure-pipe": "ng serve angular-pure-pipe", + "serve:angular-structural-directive": "ng serve angular-structural-directive", + "serve:angular-utility-wrapper-pipe": "ng serve angular-utility-wrapper-pipe", + "serve:angular-wrap-function-pipe": "ng serve angular-wrap-function-pipe", + "serve:forms-avoid-losing-form-data": "ng serve forms-avoid-losing-form-data", + "serve:forms-control-value-accessor": "ng serve forms-control-value-accessor", + "serve:angular-anchor-navigation": "ng serve angular-anchor-navigation", + "serve:angular-async-redirect": "ng serve angular-async-redirect", + "serve:angular-router-input": "ng serve angular-router-input", + "serve:rxjs-catch-error": "ng serve rxjs-catch-error", + "serve:rxjs-high-order-operator-bug": "ng serve rxjs-high-order-operator-bug", + "serve:rxjs-hold-to-save-button": "ng serve rxjs-hold-to-save-button", + "serve:rxjs-race-condition": "ng serve rxjs-race-condition", + "serve:signal-bug-in-effect": "ng serve signal-bug-in-effect", + "serve:signal-forms-and-signal": "ng serve signal-forms-and-signal", + "serve:signal-function-call-effect": "ng serve signal-function-call-effect", + "serve:signal-pipe-observable-to-signal": "ng serve signal-pipe-observable-to-signal", + "serve:signal-signal-input": "ng serve signal-signal-input", + "serve:angular-module-to-standalone": "ng serve angular-module-to-standalone" }, "private": true, "dependencies": { @@ -29,7 +60,6 @@ "@ngneat/falso": "7.2.0", "@ngrx/component-store": "19.0.1", "@ngrx/operators": "19.0.1", - "@nx/angular": "21.2.1", "@swc/helpers": "0.5.12", "@tanstack/angular-query-experimental": "5.81.5", "express": "^4.21.2", @@ -54,15 +84,6 @@ "@cypress/webpack-dev-server": "3.8.0", "@hirez_io/observer-spy": "^2.2.0", "@ngrx/schematics": "19.0.1", - "@nx/cypress": "21.2.1", - "@nx/devkit": "21.2.1", - "@nx/eslint": "21.2.1", - "@nx/eslint-plugin": "21.2.1", - "@nx/jest": "21.2.1", - "@nx/js": "21.2.1", - "@nx/plugin": "21.2.1", - "@nx/web": "21.2.1", - "@nx/workspace": "21.2.1", "@schematics/angular": "20.0.4", "@swc-node/register": "1.9.2", "@swc/cli": "0.6.0", @@ -92,7 +113,6 @@ "jsonc-eslint-parser": "^2.1.0", "lint-staged": "^13.0.3", "ng-packagr": "20.0.1", - "nx": "21.2.1", "postcss": "^8.4.5", "postcss-import": "~14.1.0", "postcss-preset-env": "~7.5.0", @@ -107,9 +127,6 @@ }, "overrides": { "chokidar": "4.0.1", - "@nx/cypress": { - "cypress": "14.0.2" - }, "@ngrx/component-store": { "@angular/common": "$@angular/common", "@angular/core": "$@angular/core" diff --git a/apps/standalone/module-to-standalone/src/assets/.gitkeep b/scripts/.gitkeep similarity index 100% rename from apps/standalone/module-to-standalone/src/assets/.gitkeep rename to scripts/.gitkeep From ecffc41baf437e3ec4c6fe7c0b28cc9203114318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4=D0=B8=D1=81=D0=BB=D0=B0=D0=B2=20?= =?UTF-8?q?=D0=90=D1=82=D0=BA=D0=B8=D1=88=D0=BA=D0=B8=D0=BD?= Date: Sun, 16 Aug 2026 16:13:30 +0500 Subject: [PATCH 4/7] =?UTF-8?q?feat(rx-js):=20=D1=80=D0=B0=D1=81=D1=88?= =?UTF-8?q?=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D0=B5=20READM.md=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lessons/rxjs/tasks/catch-error/README.md | 86 ++++++++---- .../tasks/high-order-operator-bug/README.md | 110 +++++++++++---- .../rxjs/tasks/hold-to-save-button/README.md | 126 +++++++++++------ lessons/rxjs/tasks/race-condition/README.md | 127 ++++++++++++++---- 4 files changed, 339 insertions(+), 110 deletions(-) diff --git a/lessons/rxjs/tasks/catch-error/README.md b/lessons/rxjs/tasks/catch-error/README.md index 562f5bef3..757ac1d15 100644 --- a/lessons/rxjs/tasks/catch-error/README.md +++ b/lessons/rxjs/tasks/catch-error/README.md @@ -1,44 +1,82 @@ # catchError -### Как запускать +В этом задании мы научимся правильно обрабатывать ошибки в RxJS-потоках с помощью оператора `catchError`. + +## 0. Запуск приложения + +Перейди в папку задачи и выполни команду: ```bash +npm install npm run serve:rxjs-catch-error ``` -## Документация ---- -title: 🟢 catchError -description: Задача 38 посвященя изучению завершения Observable. -author: devesh-chaudhari -command: rxjs-catch-error -contributors: - - Dinozavvvr -challengeNumber: 38 -sidebar: - order: 14 ---- +После запуска откроется приложение — форма с полем ввода и кнопкой **Получить**. По нажатию на кнопку приложение отправляет запрос к бесплатному API https://jsonplaceholder.typicode.com/ и показывает ответ на экране. + +## 1. Посмотри, как работает приложение + +В поле ввода можно ввести одну из строк: + +- `posts` +- `comments` +- `albums` +- `photos` +- `todos` +- `users` + +Нажми кнопку **Получить** — внизу появится JSON-ответ от API. + +Посмотри на код в `src/app/app.component.ts`. Видно, что в `ngOnInit` создаётся подписка на поток `submit$`, и каждое нажатие кнопки порождает HTTP-запрос через `concatMap`. -## Информация +## 2. Воспроизведи баг + +Введи в поле что-нибудь некорректное — например, `foo` или просто случайный набор символов — и нажми **Получить**. В ответе придёт ошибка `404 Not Found`. Это ожидаемо. + +А теперь попробуй снова ввести корректное значение (например, `posts`) и нажать **Получить**. + +🚫 Ничего не происходит. Запрос не отправляется, поле ответа не обновляется. + +## 3. Найди причину + +Открой `src/app/app.component.ts` и посмотри на `ngOnInit`: + +```ts +this.submit$ + .pipe( + map(() => this.input), + concatMap((value) => + this.http.get(`https://jsonplaceholder.typicode.com/${value}/1`), + ), + takeUntilDestroyed(this.destroyRef), + ) + .subscribe({...}); +``` -### Как использовать приложение +Когда внутренний Observable внутри `concatMap` завершается с ошибкой, ошибка пробрасывается наверх по цепочке. В итоге завершается вся подписка `submit$`, и новые события просто никто не слушает. -Наше приложение представляет собой форму с полем ввода текста и кнопкой "Получить". При нажатии на кнопку "Получить" данные извлекаются из [бесплатного API](https://jsonplaceholder.typicode.com/). +Подробнее про оператор можно почитать в [официальной документации catchError](https://rxjs.dev/api/operators/catchError). -Корректные значения для успешного ответа ограничены следующим: posts, comments, albums, photos, todos и users. Любые другие значения приведут к ошибке. +## 4. Почини приложение -### Ошибка +Твоя задача — обработать ошибку **внутри** внутреннего Observable так, чтобы внешний поток `submit$` продолжал жить и принимать новые значения. -В нашем приложении обнаружена ошибка. Пользователи могут успешно получать данные только до тех пор, пока не будет отправлен недопустимый запрос. После получения ответа об ошибке пользователи не могут отправлять дополнительные запросы. +1. Открой `src/app/app.component.ts`. +2. В цепочке операторов найди место, где создаётся запрос `this.http.get(...)`. +3. Добавь оператор `catchError` так, чтобы он обрабатывал ошибку только этого запроса и возвращал какой-нибудь fallback-observable (например, `of(null)`). +4. Убедись, что теперь после ошибочного запроса можно ввести новое значение, нажать **Получить**, и приложение продолжит работать. -### Изучение +Подсказка: `catchError` нужно ставить **внутри** `concatMap`, а не снаружи. -Это приложение предоставляет возможность понять правильное размещение оператора [`catchError`](https://rxjs.dev/api/operators/catchError). Если он размещен неправильно, вся подписка будет завершена, что предотвратит отправку дополнительных запросов. Цель состоит в том, чтобы сохранить общую подписку, правильно обрабатывая уведомления об ошибках от внутренних Observable. +## 5. Проверь решение -## Утверждение +Сценарий проверки: -Цель - использовать оператор catchError для управления ошибками внутри вашего потока Rxjs. +1. Введи `posts` → нажми **Получить** → видишь в ответе JSON. +2. Введи `foo` → нажми **Получить** → видишь в ответе ошибку. +3. Введи `comments` → нажми **Получить** → снова видишь JSON, а не «мёртвый» интерфейс. +4. Повтори шаги 2–3 несколько раз. Каждое нажатие должно по-прежнему логировать значение или ошибку в консоль. ## Ограничения -Пользователи должны иметь возможность журналировать значение/ошибку каждый раз при нажатии кнопки "Получить". +- Нельзя создавать новые подписки на `submit$` — обработка ошибки должна остаться в рамках одного потока. +- Каждое нажатие кнопки **Получить** должно по-прежнему логировать результат (значение или ошибку) в консоль. \ No newline at end of file diff --git a/lessons/rxjs/tasks/high-order-operator-bug/README.md b/lessons/rxjs/tasks/high-order-operator-bug/README.md index 1df3f7267..32b7dec51 100644 --- a/lessons/rxjs/tasks/high-order-operator-bug/README.md +++ b/lessons/rxjs/tasks/high-order-operator-bug/README.md @@ -1,40 +1,102 @@ -# High Order Operator Bug +# Ошибка в операторе высшего порядка -### Как запускать +В этом задании мы найдём и исправим баг, связанный с операторами высшего порядка в RxJS (`merge`, `concat`, `switchMap`, `mergeMap` и т.д.). + +## 0. Запуск приложения + +Перейди в папку задачи и выполни команду: ```bash +npm install npm run serve:rxjs-high-order-operator-bug ``` -## Документация ---- -title: 🟠 Ошибка в операторе высшего порядка RxJS -description: Задача 11 посвящена устранению ошибки в RxJS из-за операторов высшего порядка -author: thomas-laforge -contributors: - - Dinozavvvr -challengeNumber: 11 -command: rxjs-high-order-operator-bug -sidebar: - order: 114 ---- +После запуска откроется приложение. На экране — список сущностей (id и тема: `book`, `food`, `sport`) и три кнопки: + +- **Delete Food** — удалить все записи с темой `food` +- **Delete Sport** — удалить все записи с темой `sport` +- **Delete Book** — удалить все записи с темой `book` + +Удаление идёт через фейковую локальную БД, которая для каждой записи случайно возвращает `true` (успех) или `false` (ошибка). + +## 1. Посмотри, что есть + +Открой файлы: + +- `src/app/app.component.ts` — корневой компонент и кнопка удаления +- `src/app/app.service.ts` — сервис, который собирает удаление нескольких записей в один поток +- `src/app/localDB.service.ts` — фейковая БД + +В `app.service.ts` есть метод `deleteOldTopics(type)`, который: + +1. Ищет все записи нужного типа через `dbService.searchByType(type)`. +2. Для каждой записи вызывает `dbService.deleteOneTopic(id)`, который возвращает `Observable`. +3. Объединяет все эти Observable в один поток. + +После нажатия на кнопку `ButtonDeleteComponent` подписывается на результат и показывает сообщение: + +- `All have been deleted` — если результат `true` +- `Error: deletion of some failed` — если результат `false` + +## 2. Воспроизведи баг + +1. Перезагрузи страницу, чтобы восстановить начальные данные. +2. Нажми **Delete Food** несколько раз подряд. +3. В какой-то момент под кнопкой появится сообщение **Error: deletion of some food failed** — значит, в `LocalDBService` хотя бы одна запись вернула `false`. +4. Снова нажми **Delete Food**. + +🚫 Снова появится сообщение **All food have been deleted**, хотя мы только что видели ошибку. + +Тестировщики говорят, что интерфейс всегда показывает успех, даже если часть удалений не удалась. Это и есть наш баг. + +## 3. Найди причину + +Открой `src/app/app.service.ts` и посмотри на `deleteOldTopics`: + +```ts +return infoByType.length > 0 + ? infoByType + .map((t) => this.dbService.deleteOneTopic(t.id)) + .reduce((acc, curr) => merge(acc, curr), of(true)) + : of(true); +``` + +Здесь несколько Observable объединяются через `merge`. Семантика `merge`: + +- эмитит значения из всех входных потоков по мере их появления +- завершается, когда завершатся **все** входные потоки +- ошибку пробрасывает наверх, если она случится в любом из потоков + +Сейчас же в начальное значение `acc` передаётся `of(true)`. Этот Observable сразу эмитит `true` и завершается. Получается, что подписчик **всегда** видит первое значение `true`, и дальнейшие результаты уже не важны — сообщение об ошибке мы просто игнорируем. + +## 4. Почини баг + +Нужно сделать так, чтобы финальный результат потока отражал **все** результаты удаления, а не только первый. -Давайте погрузимся в удивительный мир RxJs. +Существует несколько подходов. Подумай, какой из них подходит лучше: -Этот вызов вдохновлен реальным примером. +- использовать оператор, который «сворачивает» поток в одно финальное значение, например `reduce`/`scan` или комбинацию `combineLatest`/`forkJoin`; +- применить `switchMap`/`mergeMap` к источнику данных и собрать результат уже на уровне сервиса. -## Информация +Требования к решению: -### История пользователя +1. Если **все** удаления вернули `true`, в итоге должно прийти `true`. +2. Если хотя бы одно удаление вернуло `false`, в итоге должно прийти `false`. +3. Внешний интерфейс (`AppComponent`, `ButtonDeleteComponent`) менять не нужно — он остаётся прежним. -Нам нужна кнопка для каждой `Статья`. Когда мы нажимаем на нее, мы удаляем все объекты с этой `Статьей` в нашей базе данных _(Фейковая БД в нашем случае)_. Наконец, мы отображаем **Все [статьи] были удалены** в случае успешного удаления или **Ошибка: удаление некоторых [статей] не удалось** если удаление некоторых объектов не удалось. +Подсказки: -### Ограничения: +- Помни, что `merge` всегда эмитит каждое значение из входных потоков, а нам нужно «схлопнуть» поток в один boolean. +- Удобно сначала собрать поток `Observable` для всех удаляемых записей (например, через `mergeMap`), а потом применить оператор, дающий одно финальное значение. -Мы можем передавать в нашу БД для удаления только один объект за раз. БД ответит true, если данные были успешно удалены, и false в противном случае. +## 5. Проверь решение -### Утверждение +1. Перезагрузи страницу. +2. Нажимай **Delete Food** подряд. Сообщения теперь должны соответствовать реальному результату: если хотя бы одна запись вернёт `false` — должно появиться **Error: deletion of some food failed**. +3. Проверь то же самое для **Delete Sport** и **Delete Book**. +4. Нажми любую кнопку несколько раз, чтобы убедиться, что сценарий воспроизводится стабильно. -Команда тестировщиков сообщает об **ошибке**. Интерфейс пользователя всегда показывает **Все [темы] были удалены**, даже если некоторые удаления не удалось. +## Ограничения -👉 Найдите ошибку и исправьте ее. +- Нельзя менять поведение `LocalDBService` — фейковая БД специально возвращает ошибки. +- Менять можно только логику в `app.service.ts` (и, при необходимости, архитектуру сервиса), но не публичный интерфейс компонента. \ No newline at end of file diff --git a/lessons/rxjs/tasks/hold-to-save-button/README.md b/lessons/rxjs/tasks/hold-to-save-button/README.md index d8f69b6e8..8e2cb8881 100644 --- a/lessons/rxjs/tasks/hold-to-save-button/README.md +++ b/lessons/rxjs/tasks/hold-to-save-button/README.md @@ -1,57 +1,107 @@ -# Hold to send button +# Hold to save button -### Как запускать +В этом задании мы реализуем кнопку, которая «срабатывает» только если её удерживать заданное время. Это типичный UX-паттерн для критичных действий (например, «Удалить аккаунт»): случайный клик не должен приводить к действию. + +## 0. Запуск приложения + +Перейди в папку задачи и выполни команду: ```bash +npm install npm run serve:rxjs-hold-to-save-button ``` -### Documentation and Instruction +После запуска откроется приложение с кнопкой **Hold me** и прогресс-баром под ней. + +## 1. Посмотри на заготовку + +Открой `src/app/app.component.ts`. Сейчас там: + +- кнопка без обработчиков событий; +- `` — статичная полоска прогресса; +- метод `onSend()`, который просто пишет в консоль `'Save it!'`. + +Никакой реактивной логики пока нет. Наша цель — реализовать её с помощью RxJS. + +## 2. Пойми требования + +UX-дизайнер Люси прислала такой прототип поведения: + +> «Как пользователь, я хочу сохранять что-то, удерживая кнопку в течение определённого времени». + +Acceptance criteria: + +1. Должна быть возможность задать длительность удержания в миллисекундах. +2. По событию `mousedown` на кнопке начинается отсчёт. +3. По событиям `mouseleave` или `mouseup` прогресс-бар сбрасывается в 0. +4. Прогресс-бар отражает оставшееся время (от полного до 0). +5. Когда удержание завершено (прошло заданное время), имитируется «сохранение» — например, `console.log` или `alert`. +6. Логика должна быть максимально декларативной и построенной на RxJS-операторах. + +## 3. Сделай директиву + +Создай новый файл `src/app/holdable.directive.ts` и опиши в нём директиву `HoldableDirective`: + +1. Пометь класс декоратором `@Directive` с селектором по атрибуту, например `[appHoldable]`. +2. Через DI получи `ElementRef` (или используй `@HostListener`, если тебе так удобнее). +3. Сделай `input()` (или сеттер) для длительности удержания — например, `holdTime`. +4. Сделай `output()` (или `EventEmitter`) с результатом — например, `holdTimeEnd`, который срабатывает, когда удержание успешно завершилось. + +События, которые нужно слушать: + +- `mousedown` — начало удержания +- `mouseup` — отмена +- `mouseleave` — отмена + +Собери из них поток `hold$` с помощью `fromEvent` и подходящих операторов (`switchMap`, `takeUntil`, `interval`, `takeWhile`, `startWith` и т.д.). + +## 4. Запусти обратный отсчёт + +Когда начинается удержание, нужно: + +1. Сразу же поставить прогресс-бар в максимальное значение. +2. Тикать таймером (например, каждые 10–50 мс). +3. Каждый тик уменьшать значение прогресс-бара. +4. Когда время вышло — вызвать `holdTimeEnd.emit()` (или эквивалент). + +В шаблоне (`app.component.html` или прямо в `template` у `AppComponent`) свяжи `progress` с текущим значением из потока. + +## 5. Сделай сброс + +Если пользователь отпустил кнопку раньше времени (`mouseup` или `mouseleave`): ---- -title: 🟠 Hold to save button -description: You're tasked with implementing Lucie's button design, requiring holding it for a set time to save, taking over from Sacha; functionalities include configuring duration, countdown initiation on "mousedown", progress bar reset on "mouseleave" or "mouseup", reflecting remaining time, and simulating save request on hold completion, using RxJS operators and ensuring declarative code. -author: timothy-alcaide -contributors: - - alcaidio - - LMFinney -challengeNumber: 49 -command: rxjs-hold-to-save-button -sidebar: - order: 19 ---- +1. Обнули прогресс-бар. +2. Отмени отсчёт (`takeUntil` отлично подходит). -## Context +## 6. Завяжи всё на кнопку -As a member of the development team, you have to respond to a specific request from the UX designer, 👩🏻‍🎨 Lucie, who has designed a button that must be held down for X amount of time to save a save request. +В шаблоне: -Sacha 👶🏼 the trainee has already integrated the design but doesn't know how to perform the "holdable" functionality. +- Добавь на кнопку свою директиву с нужной длительностью: -So you're going to take over from him. + ```html + + ``` -## Functional expectation +- Привяжи `` к значению из потока (например, через `signal` или `toSignal`). -> "As a user, I would like to save something by holding down the button for a certain amount of time." +## 7. Проверь решение -Here is the prototype made by Lucie: +Сценарий проверки: -![prototype gif](../../../../assets/rxjs/49/prototype.gif) +1. Зажми кнопку мышкой и держи. +2. Прогресс-бар должен начать уменьшаться. +3. Когда дойдёт до 0 — в консоли должно появиться `'Save it!'`. +4. Отпусти кнопку раньше времени — прогресс-бар должен вернуться к 0, сообщения в консоли быть не должно. +5. Уведи курсор с кнопки во время удержания — то же самое: отмена и сброс. -## Acceptance Criteria +## 8. Подсказки 🤫 -1. We should be able to configure a maintenance duration in milliseconds. -2. Pressing and holding the button triggers the countdown on the `mousedown` event. -3. On `mouseleave` or `mouseup` events, the progress bar is reset to 0. -4. The progress bar representing the remaining relative time should reflect the remaining time. -5. Simulates a backend request when the hold time is over (console log or alert). -6. You must maximize the use of RxJS operators and be as declarative as possible. +- Сделай `HoldableDirective` отдельной директивой. +- Используй `TemplateRef` и `fromEvent` из RxJS или `@HostListener` — что тебе ближе. +- Возможно пригодятся операторы: `interval`, `takeUntil`, `switchMap`, `takeWhile`, `startWith`, `map`, `scan`. -
    - Tips 🤫 (if you really need it and after careful consideration) -
      -
    • Create the `HoldableDirective`
    • -
    • Use `TemplateRef` and `fromEvent` from RxJS to catch events or `@HostListener`
    • -
    • Perhaps the following RxJS operators can help you: interval, takeUntil, switchMap, takeWhile/retry...
    • -
    -
    +## Ограничения +- Не используй `setTimeout`/`setInterval` напрямую в логике удержания — всё должно быть через RxJS-потоки. +- Код должен быть максимально декларативным: операторы RxJS вместо ручного управления состоянием. \ No newline at end of file diff --git a/lessons/rxjs/tasks/race-condition/README.md b/lessons/rxjs/tasks/race-condition/README.md index 80b243688..d74be6c12 100644 --- a/lessons/rxjs/tasks/race-condition/README.md +++ b/lessons/rxjs/tasks/race-condition/README.md @@ -1,38 +1,117 @@ -# Race Condition +# Race condition -### Как запускать +В этом задании мы столкнёмся с классической race condition в RxJS — «гонкой» между отложенным HTTP-запросом и открытием модального окна. + +## 0. Запуск приложения + +Перейди в папку задачи и выполни команду: ```bash +npm install npm run serve:rxjs-race-condition ``` -## Документация ---- -title: 🟢 Состояние гонки -description: Задача 14 посвящена race condition в Rxjs -author: thomas-laforge -contributors: - - webbomj -challengeNumber: 14 -command: rxjs-race-condition -sidebar: - order: 11 ---- +После запуска откроется приложение с одной кнопкой **Open Topic**. По нажатию на кнопку должно открыться модальное окно со списком тем (Politic, Culture, Nature и т.п.). + +## 1. Посмотри, как работает код + +Открой файлы: + +- `src/app/app.component.ts` — корневой компонент с кнопкой и логикой открытия модалки. +- `src/app/topic.service.ts` — сервис, который «получает» темы с сервера. +- `src/app/topic-dialog.component.ts` — модалка, которая показывает список тем. +- `src/app/app.component.cy.ts` — Cypress-тест, который нужно починить. + +В `TopicService` метод `fakeGetHttpTopic` возвращает `Observable` с задержкой 1 секунда (имитация медленной сети): + +```ts +fakeGetHttpTopic = () => + timer(1000).pipe(map((): TopicType[] => ['Politic', 'Culture', 'Nature'])); +``` + +В `AppComponent`: + +```ts +ngOnInit(): void { + this.topicService + .fakeGetHttpTopic() + .pipe(take(1)) + .subscribe((topics) => (this.topics = topics)); +} + +openTopicModal() { + this.dialog.open(TopicModalComponent, { + data: { topics: this.topics }, + }); +} +``` + +То есть: + +1. В `ngOnInit` мы подписываемся на получение тем. +2. Когда темы пришли, сохраняем их в `this.topics`. +3. По клику открываем модалку и передаём ей `this.topics`. + +## 2. Запусти Cypress-тест + +В отдельном терминале выполни: + +```bash +npx nx component-test rxjs-race-condition +``` + +или в watch-режиме: + +```bash +npx nx component-test rxjs-race-condition --watch +``` + +🚫 Тест падает. Cypress жалуется на то, что в модалке не три `
  • `, а ноль. + +## 3. Пойми проблему + +Пройди сценарий руками: + +1. Открой приложение в браузере. +2. Сразу же (не дожидаясь загрузки) нажми **Open Topic**. + +Что происходит: + +- `ngOnInit` запустил запрос, но ответ ещё не пришёл (1 секунда задержка). +- `this.topics` всё ещё `[]`. +- Модалка открывается с пустым списком. + +Это и есть race condition: открытие модалки «обгоняет» приход данных. + +## 4. Почини приложение + +Цель — к моменту открытия модалки темы уже должны быть загружены. При этом: + +- Изменять `fakeGetHttpTopic` **нельзя** (он моделирует медленную сеть). +- Изменять Cypress-тест **нельзя** (он проверяет корректное поведение). + +Возможные подходы: -## Информация +1. Открывать модалку **только после** того, как пришли темы: вместо подписки в `ngOnInit` сразу вызывай `fakeGetHttpTopic()` в обработчике клика и открывай диалог в коллбэке `subscribe` (или в операторе типа `tap`). +2. Кэшировать результат: сохранять результат первого запроса и переиспользовать его при повторных открытиях модалки. +3. Использовать `shareReplay` / `cache` / `toSignal`, чтобы загрузка и отрисовка шли согласованно. -Цель этого приложения - отображать список тем в модальном режиме при нажатии кнопки. Приложение функционирует корректно. Однако ваш технический руководитель попросил вас добавить тесты, и они завершились неудачей. +Подумай, какой вариант лучше подходит под существующую структуру. -## Пояснение +## 5. Проверь решение -Исправьте своё приложение, чтобы пройти тест +1. Перезапусти Cypress-тест — теперь он должен проходить: -## Ограничения: + ```bash + npx nx component-test rxjs-race-condition + ``` -- Я вижу, как ты приближаешься 🤣 => Вы НЕ МОЖЕТЕ изменить тест (тест работает нормально) 😳 -- Вы НЕ МОЖЕТЕ изменить `fakeGetHttpTopic` метод. Добавлена задержка, чтобы имитировать медленную сеть. +2. Проверь поведение руками: + - Открой приложение. + - Сразу нажми **Open Topic** — в модалке должны быть все три темы (Politic, Culture, Nature). + - Закрой модалку, открой ещё раз — темы должны появляться мгновенно (без повторной задержки), если ты выбрал подход с кэшированием. -## Запуск тестов +## Ограничения -HEADLESS : `npx nx component-test rxjs-race-condition` -WATCH MODE : `npx nx component-test rxjs-race-condition --watch` +- Нельзя менять `TopicService.fakeGetHttpTopic` — задержка должна остаться как имитация медленной сети. +- Нельзя менять Cypress-тест в `app.component.cy.ts`. \ No newline at end of file From 8f55c0be34561cb05264ee3a67bc2847a36dd791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4=D0=B8=D1=81=D0=BB=D0=B0=D0=B2=20?= =?UTF-8?q?=D0=90=D1=82=D0=BA=D0=B8=D1=88=D0=BA=D0=B8=D0=BD?= Date: Sun, 16 Aug 2026 16:34:34 +0500 Subject: [PATCH 5/7] =?UTF-8?q?feat(rx-js):=20=D0=BF=D0=B5=D1=80=D0=B2?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...272\321\206\320\270\321\217 (Markdown).md" | 1268 +++++++++++++++++ ...1\207\320\270\320\272\320\276\320\262.pdf" | Bin 0 -> 889964 bytes lessons/rxjs/lecture/advanced.md | 1 - lessons/rxjs/lecture/basics.md | 1 - 4 files changed, 1268 insertions(+), 2 deletions(-) create mode 100644 "lessons/rxjs/lecture/RxJS \342\200\224 \320\233\320\265\320\272\321\206\320\270\321\217 (Markdown).md" create mode 100644 "lessons/rxjs/lecture/RxJS \342\200\224 \320\237\321\200\320\265\320\267\320\265\320\275\321\202\320\260\321\206\320\270\321\217 \320\264\320\273\321\217 Angular-\321\200\320\260\320\267\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\276\320\262.pdf" delete mode 100644 lessons/rxjs/lecture/advanced.md delete mode 100644 lessons/rxjs/lecture/basics.md diff --git "a/lessons/rxjs/lecture/RxJS \342\200\224 \320\233\320\265\320\272\321\206\320\270\321\217 (Markdown).md" "b/lessons/rxjs/lecture/RxJS \342\200\224 \320\233\320\265\320\272\321\206\320\270\321\217 (Markdown).md" new file mode 100644 index 000000000..20e37a4c8 --- /dev/null +++ "b/lessons/rxjs/lecture/RxJS \342\200\224 \320\233\320\265\320\272\321\206\320\270\321\217 (Markdown).md" @@ -0,0 +1,1268 @@ +# RxJS — Реактивное программирование для Angular-разработчиков + +> Ментальная модель потоков данных для решения реальных UI-задач + +**Источники содержания:** +- Курс RxJS: [rxjs-course-avy.web.app/lessons](https://rxjs-course-avy.web.app/lessons) +- Официальная документация: [rxjs.dev](https://rxjs.dev/) +- Практический контекст: [angular-challenges.vercel.app](https://angular-challenges.vercel.app/) + +--- + +## Палитра диаграмм + +| Цвет | Значение | +|------|----------| +| cyan `#22D3EE` | Observable / поток данных | +| violet `#A78BFA` | оператор / преобразование | +| green `#34D399` | событие пользователя | +| coral `#FB7185` | ошибка / опасное место | +| amber `#FBBF24` | успех / результат | + +--- + +# Раздел 1. Проблема и интуиция + +Почему привычных инструментов недостаточно и что такое поток + +--- + +## Почему callback и Promise недостаточны + +UI — это множество событий во времени, а не один результат. + +| Инструмент | Проблема | +|------------|----------| +| Callbacks | Вложенность, сложность отмены, невозможно комбинировать источники | +| Promise | Один результат, без отмены, нельзя передать несколько значений | +| addEventListener | Ручная очистка, нет трансформации, хаос при множестве источников | + +> Запомни: Promise — одно значение. UI — много значений во времени. + +--- + +## Что такое RxJS + +Библиотека для работы с потоками значений во времени — единый подход к событиям, HTTP и данным. + +- Поток значений — клики, ввод, HTTP, таймеры — всё это последовательности значений, распределённых во времени +- Операторы — трансформация, фильтрация и комбинирование потоков (как `map` и `filter` для массивов) +- Единый API — один способ работы со всеми асинхронными источниками в приложении + +> Запомни: RxJS — это Lodash для событий: те же `map` и `filter`, но для значений во времени. + +Источники: [RxJS Overview](https://rxjs.dev/guide/overview), [RxJS Course Lesson 1](https://rxjs-course-avy.web.app/lessons) + +--- + +## Promise vs Observable + +| | Promise | Observable | +|---|---------|------------| +| Количество значений | одно | много | +| Отмена | нет | есть | +| Выполнение | сразу (eager) | ленивое (lazy) | +| Композиция | ограничена | pipe + operators | + +> Запомни: Promise стартует сразу. Observable стартует только при `subscribe()`. + +--- + +## Где живёт Observable + +Observable — единая обёртка для всех источников данных в Angular. + +| Источник | Пример | +|----------|--------| +| HTTP | `HttpClient.get()` возвращает Observable | +| Events | `fromEvent(element, 'click')` — клики, ввод | +| Forms | `FormControl.valueChanges` — поток значений | +| Router | `ActivatedRoute.params` — поток параметров URL | +| WebSocket | Поток сообщений в реальном времени | +| Timer | `interval(1000)` — периодические значения | + +> Запомни: В Angular почти всё асинхронное — это Observable. + +--- + +## Push и Pull + +Pull — вы запрашиваете. Push — данные приходят сами. + +``` +PULL: const answer = service.getData(); // вы вызываете → получаете результат +PUSH: stream$.subscribe(v => log(v)); // источник сам отправляет значения +``` + +> Запомни: Observable — это Push-модель: данные приходят сами, вы только подписываетесь. + +--- + +# Раздел 2. Базовые элементы + +Observable, Observer, Subscription, pipe, operators + +--- + +## Observable — ленивый поток + +Observable — это рецепт. Он ничего не делает, пока вы не подпишетесь. + +``` +1. Создание: const stream$ = of(1, 2, 3); — ничего не произошло +2. Подписка: stream$.subscribe(v => log(v)); — значения пошли +``` + +```typescript +import { of } from 'rxjs'; + +const stream$ = of(1, 2, 3); +// Ничего не происходит + +stream$.subscribe(v => console.log(v)); +// 1, 2, 3 +``` + +> Запомни: Без `subscribe()` Observable — просто описание, не действие. + +--- + +## Жизненный цикл: next, error, complete + +У каждого Observable три типа уведомлений: + +| Метод | Описание | +|-------|----------| +| `next(value)` | Новое значение в потоке. Может вызываться 0+ раз. | +| `error(err)` | Ошибка. Поток завершается. Дальше — ничего. | +| `complete()` | Поток завершён успешно. Дальше — ничего. | + +```typescript +stream$.subscribe({ + next: v => console.log(v), + error: e => console.error(e), + complete: () => console.log('done') +}); +``` + +> Запомни: Контракт: `next* → (error | complete)?` — после error или complete новых значений не будет. + +--- + +## Subscription и очистка + +Подписка — это ресурс. Незакрытая подписка = утечка памяти. + +``` +subscribe() → Начинается приём значений +unsubscribe() → Приём останавливается, ресурсы освобождаются +забыли отписаться → Утечка памяти, зомби-коллбэки +``` + +```typescript +const sub = interval(1000).subscribe(v => log(v)); +// ...позже... +sub.unsubscribe(); // остановить поток +``` + +Angular: Используйте `takeUntil(destroy$)` или AsyncPipe — он отписывается сам. + +> Запомни: `interval(1000)` без отписки будет работать вечно — даже после уничтожения компонента. + +--- + +## Что теперь умеем + +- Объяснить разницу между Promise и Observable +- Создать Observable, подписаться и отписаться +- Понять контракт `next → error | complete` +- Знать, почему незакрытая подписка — это утечка + +--- + +# Раздел 3. Операторы создания + +of, from, interval, defer, throwError + +--- + +## of() + +Создаёт Observable из готовых значений. Каждое значение — `next`, затем `complete`. + +``` +input: --(1)--(2)--(3)--| + ↓ + of(1, 2, 3) + ↓ +output: --(1)--(2)--(3)--| +``` + +```typescript +import { of } from 'rxjs'; + +of(10, 20, 30).subscribe({ + next: v => console.log(v), + complete: () => console.log('done') +}); +// 10, 20, 30, done +``` + +> Запомни: `of` — самый простой способ создать Observable из значений. + +--- + +## from() + +Превращает массив, Promise или iterable в Observable — по одному значению за раз. + +``` +input: --('a')--('b')--('c')--| + ↓ + from(['a','b','c']) + ↓ +output: --('a')--('b')--('c')--| +``` + +```typescript +import { from } from 'rxjs'; + +from(['a', 'b', 'c']).subscribe(v => log(v)); +// 'a', 'b', 'c' — по одному + +from(fetch('/api/data')).subscribe(res => log(res)); +// Promise → Observable +``` + +> Запомни: `from` разворачивает массив в поток значений. `of` — передаёт массив целиком. + +--- + +## of([1,2,3]) vs from([1,2,3]) + +| | of([1, 2, 3]) | from([1, 2, 3]) | +|---|---|---| +| Поток | `--([1,2,3])--|` | `--(1)--(2)--(3)--|` | +| Поведение | `next([1,2,3])` → `complete()` | `next(1)` → `next(2)` → `next(3)` → `complete()` | + +```typescript +of([1, 2, 3]).subscribe(v => console.log(v)); +// [1, 2, 3] ← одно значение-массив + +from([1, 2, 3]).subscribe(v => console.log(v)); +// 1, 2, 3 ← три значения +``` + +> Запомни: `of` хранит структуру. `from` разворачивает. + +--- + +## from(promise) + +Promise превращается в Observable: один `next`, затем `complete`. Ошибка Promise → `error`. + +``` +Promise: ----(resolved)----| + ↓ from() +Observable: ----(resolved)----| +``` + +```typescript +import { from } from 'rxjs'; + +from(fetch('/api/users')).subscribe({ + next: res => log(res), + error: err => log(err) +}); +``` + +Angular: Когда нужен Observable из стороннего Promise (например, Web API). + +> Запомни: Promise resolve → `next + complete`. Promise reject → `error`. + +--- + +## defer() + +Создаёт Observable заново при каждой подписке. Фабрика, которая вызывается на каждый `subscribe`. + +``` +subscribe #1 → factory() вызывается → новый Observable +subscribe #2 → factory() вызывается снова → новый Observable +``` + +```typescript +import { defer, of } from 'rxjs'; + +const time$ = defer(() => of(Date.now())); + +time$.subscribe(v => log(v)); // 1698765432000 +time$.subscribe(v => log(v)); // 1698765432100 (другое!) +``` + +Angular: HTTP-запрос, который нужно повторять с актуальными параметрами при каждой подписке. + +> Запомни: `of(1)` — одно значение для всех. `defer` — новый Observable на каждый subscribe. + +--- + +## throwError() + +Создаёт Observable, который сразу отправляет `error`. Полезен в `catchError` для повторного выброса. + +``` +--X (error) +``` + +```typescript +import { throwError } from 'rxjs'; + +throwError(() => 'Boom').subscribe({ + error: e => console.log(e) // 'Boom' +}); +``` + +> Запомни: `throwError` нужен в `catchError`: вернуть ошибку дальше, а не «проглотить» её. + +--- + +## interval() + take() + +`interval(period)` — бесконечный поток с задержкой. `take(N)` — берёт N значений и завершает. + +``` +input: --(0)--(1)--(2)--(3)--(4)--... + ↓ + take(3) + ↓ +output: --(0)--(1)--(2)--| +``` + +```typescript +import { interval, take } from 'rxjs'; + +interval(1000) // 0, 1, 2, 3, ... бесконечно + .pipe(take(3)) // взять только 3 + .subscribe(v => log(v)); +// 0, 1, 2, complete +``` + +> Запомни: `take(N)` — простой способ завершить бесконечный поток. + +--- + +## Что теперь умеем + +- Создать Observable из значений, массива, Promise +- Понять разницу `of` и `from` +- Использовать `defer` для ленивого создания на каждую подписку +- Прервать бесконечный поток через `take()` + +--- + +# Раздел 4. pipe и операторы + +Трансформация, фильтрация и побочные эффекты + +--- + +## pipe() + +`pipe` — это конвейер. Значения проходят через операторы слева направо. + +``` +source$ → [op1] → [op2] → [op3] → output +``` + +```typescript +source$.pipe( + op1, + op2, + op3 +).subscribe(result); +``` + +> Запомни: Операторы в `pipe` выполняются последовательно: вывод `op1` → вход `op2`. + +--- + +## map() + +Преобразует каждое значение. Как `Array.map`, но для потока. + +``` +input: --(1)--(2)--(3)--| + ↓ + map(x => x * 10) + ↓ +output: --(10)--(20)--(30)--| +``` + +```typescript +import { of, map } from 'rxjs'; + +of(1, 2, 3).pipe( + map(x => x * 10) +).subscribe(v => log(v)); +// 10, 20, 30 +``` + +Angular: Из ответа API → модель для шаблона (ViewModel). + +> Запомни: `map` — чистая трансформация: вход → выход, без побочных эффектов. + +--- + +## filter() + +Пропускает только значения, удовлетворяющие условию. + +``` +input: --(1)--(2)--(3)--(4)--(5)--| + ↓ + filter(x => x > 2) + ↓ +output: ------(3)--(4)--(5)------| +``` + +```typescript +import { of, filter } from 'rxjs'; + +of(1, 2, 3, 4, 5).pipe( + filter(x => x > 2) +).subscribe(v => log(v)); +// 3, 4, 5 +``` + +Angular: Фильтрация элементов списка по условию из `valueChanges`. + +> Запомни: `filter` пропускает или отбрасывает. Он не меняет значение. + +--- + +## map + filter в pipe + +Операторы комбинируются в цепочку: вывод одного — вход следующего. + +``` +input: --(1)--(2)--(3)--(4)--(5)--| + ↓ filter(x => x > 2) +filtered: ------(3)--(4)--(5)--------| + ↓ map(x => x * 10) +output: ------(30)--(40)--(50)----| +``` + +```typescript +of(1, 2, 3, 4, 5).pipe( + filter(x => x > 2), + map(x => x * 10) +).subscribe(v => log(v)); +// 30, 40, 50 +``` + +> Запомни: Порядок в `pipe` важен: `filter → map` и `map → filter` дают разные результаты. + +--- + +## tap() + +Выполняет побочное действие, не меняя поток. Для логов, отладки, загрузки. + +``` +input: --(1)--(2)--(3)--| + ↓ tap(v => log(v)) +output: --(1)--(2)--(3)--| (значения не изменились, но лог сработал) +``` + +```typescript +of(1, 2, 3).pipe( + tap(v => console.log('got:', v)), + map(v => v * 10) +).subscribe(); +``` + +Angular: Логирование значений потока для отладки без изменения результата. + +> Запомни: `tap` не трансформирует. Если нужно изменить — используйте `map`. + +--- + +## startWith() + +Добавляет начальное значение перед потоком. Идеально для состояния загрузки. + +``` +input: --------('Loaded')----| + ↓ + startWith('Loading') + ↓ +output: ('Loading')--('Loaded')----| +``` + +```typescript +import { of, startWith } from 'rxjs'; + +of('Loaded').pipe( + startWith('Loading') +).subscribe(state => log(state)); +// 'Loading', 'Loaded' +``` + +Angular: Показать 'Loading...' до получения данных от HttpClient. + +> Запомни: `startWith` — первое, что увидит подписчик. Отлично для UI-состояний. + +--- + +## distinctUntilChanged() + +Пропускает значение только если оно отличается от предыдущего. + +``` +input: --(a)--(a)--(b)--(b)--(a)--| + ↓ + distinctUntilChanged() + ↓ +output: --(a)------(b)------(a)--| +``` + +```typescript +import { from, distinctUntilChanged } from 'rxjs'; + +from(['a', 'a', 'b', 'b', 'a']).pipe( + distinctUntilChanged() +).subscribe(v => log(v)); +// 'a', 'b', 'a' — без дублей подряд +``` + +Angular: Фильтр `form.valueChanges`: не запускать логику, если значение не изменилось. + +> Запомни: `distinctUntilChanged` сравнивает с предыдущим. Для объектов нужен компаратор. + +--- + +## debounceTime() + +Ждёт паузу в потоке. Пропускает значение только если N мс ничего не пришло. + +``` +input: (r)-(rx)-(rxjs)--------------------| + ↓ + debounceTime(300) + ↓ +output: ----------------(rxjs)------------| +``` + +```typescript +import { fromEvent, debounceTime } from 'rxjs'; + +fromEvent(input, 'input').pipe( + debounceTime(300) +).subscribe(term => search(term)); +// запрос только после паузы 300мс +``` + +Angular: Live search: не отправлять запрос на каждый символ, ждать окончания ввода. + +> Запомни: `debounceTime` = «подожди, пока пользователь перестанет печатать». + +--- + +## Что теперь умеем + +- Комбинировать операторы через `pipe()` +- Трансформировать значения через `map` +- Фильтровать поток через `filter` +- Добавлять побочные эффекты через `tap` +- Создавать UI-состояния через `startWith` +- Убирать дубли через `distinctUntilChanged` +- Ждать паузу ввода через `debounceTime` + +--- + +# Раздел 5. Higher-order mapping + +switchMap, mergeMap, concatMap, exhaustMap + +--- + +## Что такое higher-order mapping + +Когда значение потока — тоже Observable. Оператор решает, как управлять внутренними потоками. + +``` +events: (a)----(b)----(c)----------| + ↓ switchMap / mergeMap / ... +inner: HTTP HTTP HTTP +``` + +Каждое событие запускает внутренний Observable (например, HTTP-запрос). Как управлять несколькими? + +> Запомни: Все четыре оператора — это `map` + стратегия управления внутренними Observable. + +--- + +## switchMap — отменяет предыдущий + +Новое событие → предыдущий внутренний поток отменён. + +``` +events: --(a)----(b)----(c)----------| +inner a: --(a1)--(a2) ✕ | ← отменён при 'b' +inner b: --(b1)--(b2) ✕ | ← отменён при 'c' +inner c: --(c1)--(c2)| +output: --(c1)--(c2)| + (✕ = отмена, | = complete) +``` + +| | | +|---|---| +| Поведение | Новое значение → отписывается от предыдущего → подписывается на новый | +| Идеально для | Live search, отмена устаревших HTTP-запросов | +| Опасно для | Сохранение формы — запрос отменится до завершения | + +```typescript +searchControl.valueChanges.pipe( + debounceTime(300), + switchMap(term => http.get('/api/search?q=' + term)) +).subscribe(results => show(results)); +``` + +Angular: Поле поиска: новый ввод отменяет предыдущий запрос — пользователь видит только актуальные результаты. + +> Запомни: `switchMap` = «забудь прошлое, делай новое». + +--- + +## mergeMap — выполняет параллельно + +Все внутренние потоки выполняются одновременно, результаты приходят по мере готовности. + +``` +events: --(a)----(b)----(c)----------| +inner a: --(a1)--(a2)--(a3)| | +inner b: --(b1)--(b2)| | +inner c: --(c1)--(c2)| +output: --(a1)--(b1)--(a3)--(b2)--(c1)--(c2)| +``` + +| | | +|---|---| +| Поведение | Каждое событие запускает новый внутренний поток. Все живут одновременно. | +| Идеально для | Логирование, фоновые задачи, независимые запросы | +| Опасно для | Поиск — race condition: ответы могут прийти вразнобой | + +```typescript +from([1, 2, 3]).pipe( + mergeMap(id => http.get(`/api/item/${id}`)) +).subscribe(item => log(item)); +``` + +Angular: Загрузка нескольких независимых ресурсов параллельно. + +> Запомни: `mergeMap` = «запусти всё, результат — когда готов». + +--- + +## concatMap — ставит в очередь + +Внутренние Observable выполняются строго по очереди: следующий ждёт завершения предыдущего. + +``` +events: --(a)-(b)-(c)----------------| +inner a: --(a1)-----(a2)| | +inner b: --(b1)--(b2)| | +inner c: --(c1)--(c2)| +output: --(a2)--------(b2)--------(c2)| +``` + +| | | +|---|---| +| Поведение | Новое событие становится в очередь. Выполняется, когда предыдущее завершено. | +| Идеально для | Последовательные действия: сохранить → загрузить → обновить | +| Опасно для | Поиск — каждый запрос ждёт предыдущего, пользователь ждёт | + +```typescript +saveActions$.pipe( + concatMap(action => http.post('/api/save', action)) +).subscribe(res => log(res)); +``` + +Angular: Последовательное сохранение: сначала форма, потом связанные данные, потом лог. + +> Запомни: `concatMap` = «по очереди, не торопясь». + +--- + +## exhaustMap — игнорирует новые события + +Пока внутренний Observable выполняется, новые события просто отбрасываются. + +``` +events: --(a)--(b)--------(c)--------| (b игнорируется — занят) +inner a: --(a1)-----(a2)| | +inner b: (игнорирован) | +inner c: --(c1)--(c2)| +output: --(a1)-----(a2)-----(c1)--(c2)| +``` + +| | | +|---|---| +| Поведение | Новое событие во время выполнения → игнорируется. После complete — следующее принимается. | +| Идеально для | Submit формы — защита от двойной отправки | +| Опасно для | Поиск — быстрые нажатия теряются без ответа | + +```typescript +submitClicks$.pipe( + exhaustMap(() => http.post('/api/save', formData)) +).subscribe(res => log(res)); +``` + +Angular: Кнопка отправки формы: пока запрос идёт, повторные клики игнорируются. + +> Запомни: `exhaustMap` = «занят — не мешай». + +--- + +## Сравнение higher-order операторов + +| Оператор | Стратегия | Когда | +|----------|-----------|-------| +| switchMap | Отменяет предыдущий | Поиск, отмена устаревших | +| mergeMap | Параллельно все | Независимые задачи | +| concatMap | По очереди | Последовательные шаги | +| exhaustMap | Игнорирует новые | Защита от дублей | + +> Запомни: `switchMap` отменяет. `mergeMap` параллелит. `concatMap` ждёт. `exhaustMap` игнорирует. + +--- + +## Что теперь умеем + +- Понять, что такое higher-order Observable +- Выбрать `switchMap` для отмены устаревших запросов +- Выбрать `mergeMap` для параллельных независимых задач +- Выбрать `concatMap` для последовательных шагов +- Выбрать `exhaustMap` для защиты от двойных действий + +--- + +# Раздел 6. Комбинирование и утилитарные операторы + +combineLatest, forkJoin, takeUntil, shareReplay + +--- + +## combineLatest() + +Объединяет последние значения из нескольких потоков. Эмитит, когда каждый источник хотя бы раз отправил значение. + +``` +a$: --(1)--------(2)-----------| +b$: -----(x)---------(y)-------| + ↓ combineLatest +result: -----([1,x])--([2,x])--([2,y])--| +``` + +```typescript +import { combineLatest } from 'rxjs'; + +combineLatest([ + this.filterForm.valueChanges, + this.route.queryParams +]).subscribe(([filters, params]) => + this.loadData(filters, params) +); +``` + +Angular: Синхронизация фильтров формы и URL-параметров: при изменении любого — перезагрузка данных. + +> Запомни: `combineLatest` эмитит при любом изменении источника, если все уже отправили хотя бы раз. + +--- + +## forkJoin() + +Ждёт завершения всех источников, затем эмитит последние значения. Как `Promise.all` для Observable. + +``` +httpA$: -----(a)----| +httpB$: ----------(b)----| + ↓ forkJoin +result: --------------([a,b])----| +``` + +```typescript +import { forkJoin } from 'rxjs'; + +forkJoin({ + users: this.http.get('/api/users'), + roles: this.http.get('/api/roles') +}).subscribe(({ users, roles }) => + this.init(users, roles) +); +``` + +Angular: Загрузка страницы: параллельные HTTP-запросы, рендер только когда все готовы. + +> Запомни: `forkJoin` ждёт complete всех источников. Если источник бесконечный — результата не будет. + +--- + +## takeUntil() + +Завершает поток, когда управляющий Observable отправляет значение. Классический способ очистки подписок. + +``` +input: --(1)--(2)--(3)--(4)--(5)--| + ↓ + takeUntil(destroy$) + ↓ +output: --(1)--(2)--(3)--| (завершается при сигнале destroy$) +``` + +```typescript +import { Subject, takeUntil } from 'rxjs'; + +private destroy$ = new Subject(); + +ngOnInit() { + this.api.getData().pipe( + takeUntil(this.destroy$) + ).subscribe(data => this.data = data); +} + +ngOnDestroy() { this.destroy$.next(); } +``` + +Angular: Классический паттерн Angular: `takeUntil(destroy$)` + `ngOnDestroy` для безопасной отписки. + +> Запомни: `takeUntil(notifier$)` завершает поток при первом значении `notifier$`. В Angular 16+ используйте `takeUntilDestroyed()`. + +--- + +## shareReplay() + +Кэширует и переотправляет последние N значений новым подписчикам. Превращает cold Observable в warm. + +| | Поведение | +|---|---| +| Без shareReplay | Каждый subscribe → новый HTTP-запрос. N подписчиков = N запросов. | +| С shareReplay(1) | Первый subscribe → запрос. Остальные получают кэшированный результат. | +| Warm Observable | После первого подписчика — данные готовы для всех остальных мгновенно. | + +```typescript +import { shareReplay } from 'rxjs'; + +@Injectable({ providedIn: 'root' }) +export class ConfigService { + private config$ = this.http.get('/api/config').pipe( + shareReplay({ bufferSize: 1, refCount: true }) + ); + + getConfig() { return this.config$; } +} +``` + +Angular: Конфигурация приложения: один HTTP-запрос, результат доступен всем компонентам. + +> Запомни: `shareReplay(1)` — кэш последнего значения. `refCount: true` — отписка от источника, когда нет подписчиков. + +--- + +## Что теперь умеем + +- Объединить потоки через `combineLatest` и `forkJoin` +- Завершить поток по сигналу через `takeUntil` +- Кэшировать результат через `shareReplay` +- Выбрать правильный оператор комбинирования + +--- + +# Раздел 7. RxJS в Angular + +HttpClient, Router, Forms, AsyncPipe, lifecycle + +--- + +## HttpClient + +Возвращает Observable для каждого HTTP-запроса — один `next`, затем `complete` или `error`. + +```typescript +import { HttpClient } from '@angular/common/http'; + +@Injectable({ providedIn: 'root' }) +export class UserService { + constructor(private http: HttpClient) {} + + getUser(id: number) { + return this.http.get(`/api/users/${id}`); + } +} +``` + +Angular: `this.userService.getUser(1).subscribe(user => ...)` — один ответ, затем complete. + +> Запомни: `HttpClient.get()` — это Observable. Если нужен повтор — переподпишитесь. + +--- + +## Router + +`ActivatedRoute.params` — поток параметров URL. Каждая навигация — новое значение. + +```typescript +import { ActivatedRoute } from '@angular/router'; + +@Component({...}) +export class UserDetailComponent { + constructor(route: ActivatedRoute) { + route.paramMap.pipe( + switchMap(params => this.api.get(params.get('id'))) + ).subscribe(user => this.user = user); + } +} +``` + +Angular: При смене URL `/users/1 → /users/2` — `switchMap` отменяет старый запрос, начинает новый. + +> Запомни: Router — источник событий. `params`, `queryParams`, `data` — всё Observable. + +--- + +## Reactive Forms + +`valueChanges` и `statusChanges` — потоки значений и статусов формы. + +```typescript +export class SearchComponent { + search = new FormControl(''); + + results$ = this.search.valueChanges.pipe( + debounceTime(300), + distinctUntilChanged(), + switchMap(term => this.api.search(term)) + ); +} +``` + +Angular: Поле поиска: debounce → фильтр дублей → отмена старого запроса → новые результаты. + +> Запомни: `valueChanges` — это Observable. `pipe()` превращает его в готовый поток данных. + +--- + +## AsyncPipe и Templates + +AsyncPipe подписывается и отписывается автоматически. Не нужно ручное управление. + +``` +component: users$ = this.api.getUsers(); + ↓ +template: *ngIf="users$ | async as users" + ↓ +результат: подписка при рендере, отписка при уничтожении +``` + +```typescript +@Component({ + template: ` +
    + @for (u of users; track u.id) { + + } +
    + ` +}) +export class UserListComponent { + users$ = this.api.getUsers(); +} +``` + +Angular: AsyncPipe идеален для потоков данных в шаблоне: нет утечек, нет ручного unsubscribe. + +> Запомни: AsyncPipe = subscribe при создании + unsubscribe при уничтожении. Автоматически. + +--- + +## Очистка подписок в современном Angular + +| Подход | Описание | +|-------|----------| +| Классический | `takeUntil(destroy$)` + OnDestroy | +| Современный (Angular 16+) | `takeUntilDestroyed()` — без boilerplate | +| Декларативный | AsyncPipe — подписка и отписка автоматически | + +```typescript +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; + +@Component({...}) +export class MyComponent { + data$ = this.api.getData().pipe( + takeUntilDestroyed() + ); // отписка при уничтожении компонента +} +``` + +Angular: `takeUntilDestroyed()` — самый короткий путь к безопасной подписке в Angular 16+. + +> Запомни: Если можно AsyncPipe — используйте AsyncPipe. Если нельзя — `takeUntilDestroyed()`. + +--- + +## Что теперь умеем + +- Понять, что HttpClient возвращает Observable +- Работать с Router params через switchMap +- Использовать valueChanges для реактивных форм +- Применять AsyncPipe для автоматической подписки +- Безопасно очищать подписки через takeUntilDestroyed() + +--- + +# Раздел 8. Паттерны решения задач + +Ситуация → потоки → оператор → схема → код → типичная ошибка + +--- + +## CHALLENGE: Live search без лишних запросов + +Ситуация: Пользователь вводит текст в поле поиска. На каждый символ летит запрос — лишняя нагрузка. + +Потоки: `valueChanges` формы → поток строк (ввод пользователя) + +Оператор: `debounceTime` + `distinctUntilChanged` + `switchMap` + +``` +input: (r)-(rx)-(rxjs)-----------(rxj)----| + ↓ debounceTime(300) + distinctUntilChanged() +filtered: --------(rxjs)-----------(rxj)----| + ↓ switchMap(term → HTTP) +output: -----------(results)-----(results)| +``` + +```typescript +this.search.valueChanges.pipe( + debounceTime(300), + distinctUntilChanged(), + switchMap(term => this.http.get('/api/search?q=' + term)) +).subscribe(results => this.results = results); +``` + +Типичная ошибка: Отправлять запрос на каждый keystroke — сервер заваливается запросами, UI лагает. + +--- + +## CHALLENGE: Отмена устаревшего HTTP-запроса + +Ситуация: Быстрая навигация между страницами: старый запрос ещё не вернулся, а нужен уже новый. + +Потоки: Router params → поток ID → HTTP-запрос для каждого ID + +Оператор: `switchMap` + +``` +params: --(id:1)----(id:2)----(id:3)----| + ↓ switchMap(id → HTTP) +inner: --(data1) ✕ | ← отменён + --(data2) ✕ | ← отменён + --(data3)| +output: --(data3)| +``` + +```typescript +route.paramMap.pipe( + switchMap(params => this.api.get(params.get('id'))) +).subscribe(user => this.user = user); +``` + +Типичная ошибка: Использовать `mergeMap` — результаты приходят вразнобой, пользователь видит данные от старого запроса. + +--- + +## CHALLENGE: Сохранение формы без двойного submit + +Ситуация: Пользователь кликает «Сохранить» несколько раз. Каждый клик отправляет запрос. + +Потоки: button click → поток событий → HTTP POST для каждого + +Оператор: `exhaustMap` + +``` +clicks: --(click)--(click)--------(click)----| + ↓ exhaustMap(() → POST) +requests: --(POST)----| (POST)----| + (второй click проигнорирован — занят) +``` + +```typescript +fromEvent(submitBtn, 'click').pipe( + exhaustMap(() => this.http.post('/api/save', this.form.value)) +).subscribe(res => this.onSaved(res)); +``` + +Типичная ошибка: Использовать `mergeMap` — каждый клик отправляет новый POST, данные сохраняются дважды. + +--- + +## CHALLENGE: Синхронизация фильтров, URL и API + +Ситуация: Фильтры формы, параметры URL и API-запрос должны быть синхронизированы. Изменение любого — перезагрузка данных. + +Потоки: `valueChanges` формы + `route.queryParams` → два потока + +Оператор: `combineLatest` + `switchMap` + +``` +filters$: --(f1)--------(f2)-----------| +params$: ------(p1)------------------| + ↓ combineLatest + switchMap(([f, p]) → API) +output: ------(data1)--(data2)------| +``` + +```typescript +combineLatest([ + this.filterForm.valueChanges.pipe(startWith(this.filterForm.value)), + this.route.queryParams +]).pipe( + switchMap(([filters, params]) => + this.http.get('/api/data', { params: { ...filters, ...params } }) + ) +).subscribe(data => this.data = data); +``` + +Типичная ошибка: Подписываться на каждый источник отдельно — race condition, данные рассинхронизируются. + +--- + +## CHALLENGE: Состояния loading / data / error + +Ситуация: HTTP-запрос должен показывать loading, данные или ошибку. При ошибке — возможность повтора. + +Потоки: HTTP-запрос → состояния loading, data, error + +Оператор: `startWith` + `catchError` + `retry` + +``` +http$: -----(data)----| + ↓ startWith('loading') + catchError + retry(2) +view$: (loading)--(data)----| + +error: -----(X error)----| + ↓ catchError → of({ error }) +view$: (loading)--({ error })----| +``` + +```typescript +this.http.get('/api/data').pipe( + retry({ count: 2, delay: 1000 }), + catchError(err => of({ error: err })), + startWith({ loading: true }), + finalize(() => this.loading = false) +).subscribe(state => this.state = state); +``` + +Типичная ошибка: Не обрабатывать error — поток умирает, UI застревает в loading. `catchError` без fallback — тоже умирает. + +--- + +## CHALLENGE: Предотвращение утечек подписок + +Ситуация: Компонент уничтожен, но подписка живёт. Коллбэки вызываются на уничтоженном компоненте. + +Потоки: Любой long-lived Observable: `interval`, `valueChanges`, `Subject` + +Оператор: `takeUntilDestroyed()` или AsyncPipe + +``` +БЕЗ ОЧИСТКИ: subscribe → component destroyed → callback всё ещё вызывается! [ошибка] +С ОЧИСТКОЙ: subscribe → component destroyed → unsubscribe автоматически [ok] +``` + +```typescript +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; + +// В поле компонента: +data$ = this.api.getData().pipe( + takeUntilDestroyed() +); + +// Или в конструкторе: +this.api.getLive().pipe( + takeUntilDestroyed() +).subscribe(v => this.v = v); +``` + +Типичная ошибка: Сохранять `Subscription` в свойстве и отписываться в `ngOnDestroy` — работает, но boilerplate. Легко забыть. + +--- + +# Раздел 9. Итоги + +Cheat sheet и алгоритм выбора оператора + +--- + +## Cheat sheet: ситуация → оператор + +| Ситуация | Оператор | Почему | +|----------|----------|--------| +| Ждать паузы ввода | `debounceTime` | Не слать запрос на каждый символ | +| Убрать дубли подряд | `distinctUntilChanged` | Не повторять одно и то же | +| Отменить устаревший запрос | `switchMap` | Новый запрос → старый не нужен | +| Защита от двойного submit | `exhaustMap` | Пока занят — игнорируй клики | +| Последовательные шаги | `concatMap` | Очередь: шаг за шагом | +| Параллельные запросы | `mergeMap` | Все сразу, результаты по готовности | +| Ждать все запросы | `forkJoin` | Как `Promise.all` для Observable | +| Объединить живые потоки | `combineLatest` | Последние значения из каждого | +| Начальное состояние | `startWith` | Показать 'Loading' до данных | +| Перехват ошибки | `catchError` | Вернуть fallback, не уронить UI | +| Повтор запроса | `retry` | Автоматический повтор при ошибке | +| Очистка подписки | `takeUntilDestroyed` | Отписка при уничтожении | +| Побочный эффект | `tap` | Лог, отладка — без изменения потока | +| Кэширование результата | `shareReplay` | Один запрос, результат для всех | + +> Запомни: Сохраните этот cheat sheet — он покрывает 90% задач из Angular Challenges. + +--- + +## Алгоритм выбора higher-order оператора + +Четыре вопроса — и вы знаете, какой оператор нужен: + +### 1. Нужно отменять прошлую работу при новом событии? +→ **switchMap** +Live search, навигация, отмена устаревших запросов + +### 2. Нужна строгая очередь — шаг за шагом? +→ **concatMap** +Последовательные сохранения, цепочки запросов + +### 3. Можно выполнять параллельно, порядок не важен? +→ **mergeMap** +Логирование, независимые задачи, фоновые процессы + +### 4. Нужно игнорировать повторные действия, пока текущее не закончилось? +→ **exhaustMap** +Submit формы, предотвращение двойной отправки + +> Запомни: `switchMap` отменяет. `concatMap` ждёт. `mergeMap` параллелит. `exhaustMap` игнорирует. + +--- + +## Финал + +RxJS — поток значений во времени: одна модель для всех источников. + +- Observable — описание потока (cyan) +- Operators — трансформация потока (violet) +- Events — источники событий (green) +- Results — результаты (amber) +- Errors — ошибки (coral) + +Источники: +- [rxjs.dev](https://rxjs.dev/) — официальная документация +- [rxjs-course-avy.web.app](https://rxjs-course-avy.web.app/lessons) — курс RxJS Ninja +- [angular-challenges.vercel.app](https://angular-challenges.vercel.app/) — практические задачи diff --git "a/lessons/rxjs/lecture/RxJS \342\200\224 \320\237\321\200\320\265\320\267\320\265\320\275\321\202\320\260\321\206\320\270\321\217 \320\264\320\273\321\217 Angular-\321\200\320\260\320\267\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\276\320\262.pdf" "b/lessons/rxjs/lecture/RxJS \342\200\224 \320\237\321\200\320\265\320\267\320\265\320\275\321\202\320\260\321\206\320\270\321\217 \320\264\320\273\321\217 Angular-\321\200\320\260\320\267\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\276\320\262.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..2231c23fd9f740b648c84ab90e98d2837544b125 GIT binary patch literal 889964 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

    aNI(}Os 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 rRWwTo0Gz}Hv)R$LO9hH{bllMEZLx^ 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


    xbHfd2x+Prw=($P`W0 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ÐF=c+U}@_ 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 z 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

    4s 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 Date: Sun, 16 Aug 2026 17:12:58 +0500 Subject: [PATCH 6/7] =?UTF-8?q?refactor(rx-js):=20=D0=BE=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...272\321\206\320\270\321\217 (Markdown).md" | 183 +++++++++++++----- ...1\207\320\270\320\272\320\276\320\262.pdf" | Bin 889964 -> 0 bytes ...1\207\320\270\320\272\320\276\320\262.pdf" | Bin 0 -> 693178 bytes 3 files changed, 138 insertions(+), 45 deletions(-) delete mode 100644 "lessons/rxjs/lecture/RxJS \342\200\224 \320\237\321\200\320\265\320\267\320\265\320\275\321\202\320\260\321\206\320\270\321\217 \320\264\320\273\321\217 Angular-\321\200\320\260\320\267\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\276\320\262.pdf" create mode 100644 "lessons/rxjs/lecture/RxJS \342\200\224 \320\237\321\200\320\265\320\267\320\265\320\275\321\202\320\260\321\206\320\270\321\217 \320\264\320\273\321\217 \321\204\321\200\320\276\320\275\321\202\320\265\320\275\320\264-\321\200\320\260\320\267\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\276\320\262.pdf" diff --git "a/lessons/rxjs/lecture/RxJS \342\200\224 \320\233\320\265\320\272\321\206\320\270\321\217 (Markdown).md" "b/lessons/rxjs/lecture/RxJS \342\200\224 \320\233\320\265\320\272\321\206\320\270\321\217 (Markdown).md" index 20e37a4c8..fd0cedb37 100644 --- "a/lessons/rxjs/lecture/RxJS \342\200\224 \320\233\320\265\320\272\321\206\320\270\321\217 (Markdown).md" +++ "b/lessons/rxjs/lecture/RxJS \342\200\224 \320\233\320\265\320\272\321\206\320\270\321\217 (Markdown).md" @@ -1,6 +1,6 @@ -# RxJS — Реактивное программирование для Angular-разработчиков +# RxJS — Реактивное программирование для фронтенд-разработчиков -> Ментальная модель потоков данных для решения реальных UI-задач +> От идеи до практического использования **Источники содержания:** - Курс RxJS: [rxjs-course-avy.web.app/lessons](https://rxjs-course-avy.web.app/lessons) @@ -9,21 +9,9 @@ --- -## Палитра диаграмм +# Раздел 1. Добро пожаловать в RX -| Цвет | Значение | -|------|----------| -| cyan `#22D3EE` | Observable / поток данных | -| violet `#A78BFA` | оператор / преобразование | -| green `#34D399` | событие пользователя | -| coral `#FB7185` | ошибка / опасное место | -| amber `#FBBF24` | успех / результат | - ---- - -# Раздел 1. Проблема и интуиция - -Почему привычных инструментов недостаточно и что такое поток +Идея реактивности и разница подходов --- @@ -49,7 +37,7 @@ UI — это множество событий во времени, а не о - Операторы — трансформация, фильтрация и комбинирование потоков (как `map` и `filter` для массивов) - Единый API — один способ работы со всеми асинхронными источниками в приложении -> Запомни: RxJS — это Lodash для событий: те же `map` и `filter`, но для значений во времени. +> Запомни: RxJS — это способ собрать обработку событий в понятный конвейер: событие → обработка → результат. Источники: [RxJS Overview](https://rxjs.dev/guide/overview), [RxJS Course Lesson 1](https://rxjs-course-avy.web.app/lessons) @@ -81,7 +69,7 @@ Observable — единая обёртка для всех источников | WebSocket | Поток сообщений в реальном времени | | Timer | `interval(1000)` — периодические значения | -> Запомни: В Angular почти всё асинхронное — это Observable. +> Запомни: Observable встречается в HttpClient, формах, роутере и событиях. --- @@ -562,7 +550,7 @@ fromEvent(input, 'input').pipe( // запрос только после паузы 300мс ``` -Angular: Live search: не отправлять запрос на каждый символ, ждать окончания ввода. +Angular: Живой поиск: не отправлять запрос на каждый символ, ждать окончания ввода. > Запомни: `debounceTime` = «подожди, пока пользователь перестанет печатать». @@ -586,19 +574,35 @@ switchMap, mergeMap, concatMap, exhaustMap --- -## Что такое higher-order mapping +## Событие запускает запрос + +Каждое событие в потоке может запускать новый Observable — например, HTTP-запрос. + +``` +события: (ввод) + ↓ switchMap / mergeMap / ... +запрос: HTTP +``` + +Одно событие — один запрос. Пока всё просто. + +> Запомни: Значение потока может быть другим Observable — например, HTTP-запросом. + +--- + +## Что делать, если событий несколько? -Когда значение потока — тоже Observable. Оператор решает, как управлять внутренними потоками. +Пока один запрос идёт, приходит новое событие. Что делать со старым запросом? ``` -events: (a)----(b)----(c)----------| - ↓ switchMap / mergeMap / ... -inner: HTTP HTTP HTTP +события: (a)----(b)----(c)----------| + ↓ каждое запускает запрос +запросы: HTTP a HTTP b HTTP c ``` -Каждое событие запускает внутренний Observable (например, HTTP-запрос). Как управлять несколькими? +Четыре оператора дают четыре ответа на этот вопрос — четыре стратегии. -> Запомни: Все четыре оператора — это `map` + стратегия управления внутренними Observable. +> Запомни: switchMap — отменить старый. mergeMap — запустить параллельно. concatMap — в очередь. exhaustMap — игнорировать. --- @@ -618,7 +622,7 @@ output: --(c1)--(c2)| | | | |---|---| | Поведение | Новое значение → отписывается от предыдущего → подписывается на новый | -| Идеально для | Live search, отмена устаревших HTTP-запросов | +| Идеально для | Живой поиск, отмена устаревших HTTP-запросов | | Опасно для | Сохранение формы — запрос отменится до завершения | ```typescript @@ -650,7 +654,7 @@ output: --(a1)--(b1)--(a3)--(b2)--(c1)--(c2)| |---|---| | Поведение | Каждое событие запускает новый внутренний поток. Все живут одновременно. | | Идеально для | Логирование, фоновые задачи, независимые запросы | -| Опасно для | Поиск — race condition: ответы могут прийти вразнобой | +| Опасно для | Поиск — гонка ответов: ответы могут прийти вразнобой | ```typescript from([1, 2, 3]).pipe( @@ -709,7 +713,7 @@ output: --(a1)-----(a2)-----(c1)--(c2)| | | | |---|---| | Поведение | Новое событие во время выполнения → игнорируется. После complete — следующее принимается. | -| Идеально для | Submit формы — защита от двойной отправки | +| Идеально для | Отправка формы — защита от повторной отправки | | Опасно для | Поиск — быстрые нажатия теряются без ответа | ```typescript @@ -991,7 +995,7 @@ Angular: AsyncPipe идеален для потоков данных в шабл | Подход | Описание | |-------|----------| | Классический | `takeUntil(destroy$)` + OnDestroy | -| Современный (Angular 16+) | `takeUntilDestroyed()` — без boilerplate | +| Современный (Angular 16+) | `takeUntilDestroyed()` — без служебного кода | | Декларативный | AsyncPipe — подписка и отписка автоматически | ```typescript @@ -1027,7 +1031,7 @@ Angular: `takeUntilDestroyed()` — самый короткий путь к бе --- -## CHALLENGE: Live search без лишних запросов +## CHALLENGE: Живой поиск без лишних запросов Ситуация: Пользователь вводит текст в поле поиска. На каждый символ летит запрос — лишняя нагрузка. @@ -1051,7 +1055,7 @@ this.search.valueChanges.pipe( ).subscribe(results => this.results = results); ``` -Типичная ошибка: Отправлять запрос на каждый keystroke — сервер заваливается запросами, UI лагает. +Типичная ошибка: Отправлять запрос на каждый символ — сервер заваливается запросами, интерфейс лагает. --- @@ -1082,7 +1086,7 @@ route.paramMap.pipe( --- -## CHALLENGE: Сохранение формы без двойного submit +## CHALLENGE: Сохранение формы без повторной отправки Ситуация: Пользователь кликает «Сохранить» несколько раз. Каждый клик отправляет запрос. @@ -1107,6 +1111,59 @@ fromEvent(submitBtn, 'click').pipe( --- +## Загрузка данных из нескольких источников + +`combineLatest` — объединяет последние значения из нескольких потоков. `forkJoin` — ждёт завершения всех. + +``` +users$: ----(users)--------------------------| +roles$: --------(roles)----------------------| + ↓ combineLatest +combined: --------([users, roles])--------------| +``` + +```typescript +import { combineLatest } from 'rxjs'; +import { forkJoin } from 'rxjs'; + +// Когда оба потока активны и обновляются: +combineLatest([users$, roles$]) + .subscribe(([users, roles]) => render(users, roles)); + +// Когда нужно дождаться завершения всех: +forkJoin([http.get('/a'), http.get('/b')]) + .subscribe(([a, b]) => init(a, b)); +``` + +Angular: Загрузка страницы: параллельные HTTP-запросы, рендер только когда все готовы. + +> Запомни: `combineLatest` — для живых потоков. `forkJoin` — для завершающихся (HTTP). + +--- + +## Обработка ошибок без поломки UI + +`catchError` — перехват ошибки и возврат альтернативного потока. Поток не умирает. + +``` +http$: --------(data)----X + ↓ catchError(err → of([])) +safe$: ---------([])-----| +``` + +```typescript +this.http.get('/api/users').pipe( + catchError(() => of([])), // запасное значение — пустой массив + startWith([]) // начальное состояние +).subscribe(users => this.users = users); +``` + +Angular: HTTP-запрос упал — показать пустой список вместо красного экрана ошибки. + +> Запомни: `catchError` должен вернуть Observable. `of([])` — безопасное запасное значение. + +--- + ## CHALLENGE: Синхронизация фильтров, URL и API Ситуация: Фильтры формы, параметры URL и API-запрос должны быть синхронизированы. Изменение любого — перезагрузка данных. @@ -1133,7 +1190,7 @@ combineLatest([ ).subscribe(data => this.data = data); ``` -Типичная ошибка: Подписываться на каждый источник отдельно — race condition, данные рассинхронизируются. +Типичная ошибка: Подписываться на каждый источник отдельно — гонка ответов, данные рассинхронизируются. --- @@ -1164,7 +1221,7 @@ this.http.get('/api/data').pipe( ).subscribe(state => this.state = state); ``` -Типичная ошибка: Не обрабатывать error — поток умирает, UI застревает в loading. `catchError` без fallback — тоже умирает. +Типичная ошибка: Не обрабатывать error — поток умирает, интерфейс застревает в загрузке. `catchError` без запасного значения — тоже умирает. --- @@ -1195,36 +1252,34 @@ this.api.getLive().pipe( ).subscribe(v => this.v = v); ``` -Типичная ошибка: Сохранять `Subscription` в свойстве и отписываться в `ngOnDestroy` — работает, но boilerplate. Легко забыть. +Типичная ошибка: Сохранять `Subscription` в свойстве и отписываться в `ngOnDestroy` — работает, но много служебного кода. Легко забыть. --- # Раздел 9. Итоги -Cheat sheet и алгоритм выбора оператора +Памятка и алгоритм выбора оператора --- -## Cheat sheet: ситуация → оператор +## Памятка: ситуация → оператор | Ситуация | Оператор | Почему | |----------|----------|--------| | Ждать паузы ввода | `debounceTime` | Не слать запрос на каждый символ | | Убрать дубли подряд | `distinctUntilChanged` | Не повторять одно и то же | | Отменить устаревший запрос | `switchMap` | Новый запрос → старый не нужен | -| Защита от двойного submit | `exhaustMap` | Пока занят — игнорируй клики | +| Защита от повторной отправки | `exhaustMap` | Пока занят — игнорируй клики | | Последовательные шаги | `concatMap` | Очередь: шаг за шагом | | Параллельные запросы | `mergeMap` | Все сразу, результаты по готовности | | Ждать все запросы | `forkJoin` | Как `Promise.all` для Observable | | Объединить живые потоки | `combineLatest` | Последние значения из каждого | | Начальное состояние | `startWith` | Показать 'Loading' до данных | -| Перехват ошибки | `catchError` | Вернуть fallback, не уронить UI | -| Повтор запроса | `retry` | Автоматический повтор при ошибке | +| Перехват ошибки | `catchError` | Вернуть запасное значение, не уронить UI | | Очистка подписки | `takeUntilDestroyed` | Отписка при уничтожении | | Побочный эффект | `tap` | Лог, отладка — без изменения потока | -| Кэширование результата | `shareReplay` | Один запрос, результат для всех | -> Запомни: Сохраните этот cheat sheet — он покрывает 90% задач из Angular Challenges. +> Запомни: Сохраните эту памятку — она поможет быстро выбрать нужный оператор. --- @@ -1234,7 +1289,7 @@ Cheat sheet и алгоритм выбора оператора ### 1. Нужно отменять прошлую работу при новом событии? → **switchMap** -Live search, навигация, отмена устаревших запросов +Живой поиск, навигация, отмена устаревших запросов ### 2. Нужна строгая очередь — шаг за шагом? → **concatMap** @@ -1246,12 +1301,48 @@ Live search, навигация, отмена устаревших запрос ### 4. Нужно игнорировать повторные действия, пока текущее не закончилось? → **exhaustMap** -Submit формы, предотвращение двойной отправки +Отправка формы, предотвращение повторной отправки > Запомни: `switchMap` отменяет. `concatMap` ждёт. `mergeMap` параллелит. `exhaustMap` игнорирует. --- +# Раздел 10. RxJS в других UI-библиотеках + +React, Vue и другие фреймворки + +--- + +## RxJS в других UI-библиотеках: React + +RxJS не привязан к Angular — те же операторы работают в любом фреймворке. + +| Подход | Описание | +|-------|----------| +| `useObservable` | Хук-обёртка: подписывается на Observable и возвращает значение | +| `useEffect` + `subscribe` | Ручной способ: подписка в useEffect, отписка при размонтировании | +| Библиотеки | `rxjs-hooks`, `observable-hooks`, `react-rxjs` — готовые решения | + +```typescript +const ref = useRef(null); + +useEffect(() => { + const sub = fromEvent(ref.current, 'input').pipe( + debounceTime(300), + switchMap(e => fetch('/api?q=' + e.target.value).then(r => r.json())) + ).subscribe(console.log); + return () => sub.unsubscribe(); +}, []); +``` + +В React RxJS используется через хуки: подписка в `useEffect`, отписка при размонтировании компонента. + +> Запомни: RxJS работает везде, где есть JavaScript. Angular, React, Vue — операторы одни и те же. + +Источники: [rxjs-hooks](https://github.com/LeetCode-OpenSource/rxjs-hooks), [react-rxjs.org](https://react-rxjs.org/), [Robin Wieruch tutorial](https://www.robinwieruch.de/react-rxjs-state-management-tutorial/) + +--- + ## Финал RxJS — поток значений во времени: одна модель для всех источников. @@ -1266,3 +1357,5 @@ RxJS — поток значений во времени: одна модель - [rxjs.dev](https://rxjs.dev/) — официальная документация - [rxjs-course-avy.web.app](https://rxjs-course-avy.web.app/lessons) — курс RxJS Ninja - [angular-challenges.vercel.app](https://angular-challenges.vercel.app/) — практические задачи +- [rxjs-hooks](https://github.com/LeetCode-OpenSource/rxjs-hooks) — RxJS хуки для React +- [react-rxjs.org](https://react-rxjs.org/) — React-RxJS библиотека diff --git "a/lessons/rxjs/lecture/RxJS \342\200\224 \320\237\321\200\320\265\320\267\320\265\320\275\321\202\320\260\321\206\320\270\321\217 \320\264\320\273\321\217 Angular-\321\200\320\260\320\267\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\276\320\262.pdf" "b/lessons/rxjs/lecture/RxJS \342\200\224 \320\237\321\200\320\265\320\267\320\265\320\275\321\202\320\260\321\206\320\270\321\217 \320\264\320\273\321\217 Angular-\321\200\320\260\320\267\321\200\320\260\320\261\320\276\321\202\321\207\320\270\320\272\320\276\320\262.pdf" deleted file mode 100644 index 2231c23fd9f740b648c84ab90e98d2837544b125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889964 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

    aNI(}Os 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
    xbHfd2x+Prw=($P`W0 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ÐF=c+U}@_ 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 z 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

    ?Ui)mxhx@A*r3%i@bz!KavMw6$~+3L3@ z_t8?(;!?DXeC}IyJxh)BX=R^vNt@>`$=L{BZHs$=59g&#ZGGn5)nFb9wq z=vvd1@4nNamsy{dYv1N?KqG^?y?^Bs|NUT#|5cy(ZyS2B!Eek^c;MjUsC>VJ*jnrI z-N0|5f5BaVG3DSz|)_(ULB_2M?-Jtr2y!;5p&ed|Am9^YR7KJ;kd z->VSF;6HpgUcdc(aqv4jJ_oNJ`n`J(5_ezje0t0vMtJJjx9;%ubdQl1Fn_x2NM@mR z`rv+5-4Q7is2GQDj1z+qWmf+lMtlgtW)`=i_e*JhpB{Hl{ud&W2xU^#CKgM=V3MZ1 zz%-&xvV_5O{;EvuK)Yh6b-|bg7!+;w(tYd@&XT|w$`S<0Z68m_>^^x7?xGGcE!P4S zWMHVM%d|s-dmCaeCSrj58oMC#i9H{C!6da9mzz*N#Bia96I(c0Bqqc(!O@|>-VmbU z0atERdzM+F5)2WtX>|{1Y&=orfF|h zej%#K7LO(ESWZbC5{(mwc;l~R#)QAC=d1gFG03GjmTl(xv$}}RKma6JZ^JHWdozR! z4=&Yv`v#yi{rsSp!^V=Rkb0wW9CCUbz_`@pk~N(HWN9y-8T&I?v@g2$!uq1)+gZQ~ zs-P0PA|bMo=f9n?^*1VQus8|P3oBeP2@>*M0?>B-%2w~gbrwJh+{G$3k$LKsu-u3^ z;{vBjQf#!d^h&3+=l}sBRahq2s^# z<3<{K()Tr-yi6XUu&*1{%;yx?Nku$sa)3P}3syUHQ--d-$~(7QDH{@xAg(OI4mwfQ zszv?r05|l7aha#cY+e<0E|*MgB*GS_C9 zZ)?M~l8sz9Vld|3w3~fPh`Uc4c1QgzW-;Xb#p?6d~C^?!5K{^OVqjhb>5l zrq(f1k8NcBbaeRwJSe%@-i>A!X5Lguu-qj{C8Z)5x?%DM9Rvd^};=hEYR z-ul8*w3gsz>&sHlN~@i0LZs3YtjqoeSCvioy8MaI<>LOj+@HPln1zC_{Q~K+xN`ZT znGMoL@lD~Jb&5{;`u^MggRA@7`2!qZx*p|US;~K4So}B5V}B;5KkX-6;fLtV%7OpW z{zcHjzZ0FA+5YQ^&aD557pwe}Fnk~aGvy353?}8MD??xJ9UNjx`hv95&8t^O+*~m$ z9&V8$)*bwf9YGBX0&;xnN)WIeIf|vz1FKQ{^#*plyNx%3w_UJ1;wy?C2F^y`0npLk zj>P)>^bwh&u4E@p01_9;rptS>WgM}G=8-J_OVKy@(5hsC@34yUmIw?^m zp~H(YbV3bF-PVP$5;H;mE#&hHBdS6hEF5JC8wsh(iNy^kcv0yR6g6a62}()~cNG#f zrq~K}vW$R$>omNo9I7@DlxTbsh#G1t31=m)qP(N8fT3*64@Yov0+bq3u)5S)<^X>@ zoKZv$%}yUx8B`7GPZ1_WzH)+;l>CBO1scE2;V6oAp%VO%3$1D$a}zU$iC&0|EfN(= z?jFhPeA4lH%tl~4GiG^Gby|rt>`CCGhl?A|nS7e;!MU8Q!1c@M9Wt}J^G0iBX};ND zM~t&J*j%R%l*-ItL0C1zqm@(27rMU(1C*-ufC63LT#R+unX%#}w+|UlBTlBds6-c{ zv!55fa&3Q_iR;5+WxcdDQG^E*bZFu6U&`QJ68TbX98Q_rRyK zOS30}IF$1yY0)#BGNu!4J1R_Tytyp3VsEjRsIFiiW0?bofZF}B#No*VD7UNB!4{R4 zYD7pQ8p@7!HIm4Di6l<0>hL^K`v+DKf-3lg%2-RSjnOOR$|K9Ftdq0CYG{Dvczsto zjG6~%D%K|Yvkbb;yavK_T6^9XCPNEaA~leRG zq+sXQMZsgfX02`)B;G!Ts0v2eRqAkb^cGAs*<4$Sd<0?VP8L-?F_Gal(Nc5c0C-I0BS`;WF!$N3|+bv8Cr57kzVmDQoVuctp9+s4hds-2{T zps}7hNKtFiPna!qh2B!H{X>|n@7;itn`gFlsq~`ts8!w-7hMr-+})~ACF|Z}{~l|;9rF#?)Ls3r zV$E6Ee*W^d1{P3UTy+0Uro+yN|I_|qIt>2?i~srjk8Fp5;lDiKg^A@qsNPOsC4fiW;#E=i}Ks$i2i z`NHHocXQ9$boRv5$`(JonHD7uR}sg{HRL^C?~l0Q+72WH+X%$kuV3k&qpA--IWx3w z=N9TSL0~?xTkVQiRJFZ)tJf_$JiDvL2}1^Wb3kuqElr$;O_J`0m(L|$4HS?naEi0< z>WiRG(K8Y0i+ZRmI8Zv+bfFAq$ZL9ltC5sp;T%@FlS!B=%9^=VQtSG2k~Irza5&4_ zsENoy3uzkXYX$#_v?$0fj;2m8_cHXtTbBd||76kvwdPqrDXc;+8IkG%h~rCXIRX6c zrHoKI+91fv`kSDCh4zNTuxKUAbA&8MGpi;vV~?ptLUm+(0|jXq&;7oEP_bck7r~X< zzG9s@Jp3vMFNsU1d-6QDcw9_5`E9mHE8vam3s@PHg7>fL-2dx#-2e7fyZ?`q3;s)( za1jar114PR|KZ66z^DXOq}4#E)RADQ!)0^WUm-@5@lezODh!Nzq9n8hyS1bIS--H+ z6;`e1GZu=OLgR}}V+TU^tT%h3DKYiu(alW&1=1)zvaMRf{FVsuMg7`<_inWG~z zkYx!jp!CqQAC;;dvYfHeYk{8WNgE`o>F;3V%2?Yx`!w zjhfpsW{TXKXC=VwG4bhD3}t$S*3WGP`(R$X*tNqBh=i}pB5P6+>TBaO1`S)t(!%tQ zCarmo>@(vU#niAfwQsAINd!K+Qed;ki#47jirYE)+NRqxy_K~Ke)acT zfQ|Dv&VjWYmsJ~C#8p#!3ET+Qz*3fm)&|&`!6oYlYk;kzgSh^$1(I~rr>(sV5bxm! z8bN=S8MgK-UjUtv+WisT5nu9{f60XV_tES>OWXhKVka{LGsAx*d@gEg#u~BN_+0DS z=K!k>L<%YJ!R!6$7`N>k=IlLUIkCb9F$A}~{ubracCY9t;WoS$w1W8)BO_kmHv1f} zK(e>?#ku3R-+_!P8M1#^8rs8cCqQ}m`Sox&FQ_2Efk-|YfAO;WzF%^fiigMJH8T?1 z!{Y`=94H7GqxI+7GM>kUX?an8yJ`@GV&hvS^OUKiKmZT^TzeRVa z=&9e8eRh@aO)fSmApD%^Wt;G^qPrmE!O|pN?74RO+!NY~JS5EDm!H9$r0X z!DS24qYMyHXbK$!ELw`TTWUYtMqH-wXYnt$|px6s} zi;K!iNJ*?XdT|1z>!_q&^ojV{1jI3ZH3d}4En3Gk+%R?mm02Pp zvI?bJ{J9{xidK0_a0XJ!{oO;rcDg^jzE7soD(!P-0<>w9030w8S`rHMQ>Cx*lG4G+ z>|qhqNt6+_-n5YF5)ITml4@KHY6{958UiX(y`Us!Na_@j1Ph6K@hoIO<>*!mn42lH zX`|f--FHj1)T%EZ@E&4)AT$yKD+&@oaGQBks(5+zlw=y#3+3>B9*B|vjzFz^fDR#^^n^&$Y!{4 z429k9aI6Mw&8gWJHm=cN<>J1*AOONQ?ui351F}-K?;$S)H({#k$sah}LVnC?V%*)O z0TOmmfauAG56q7%jU-wFqN9X#oJs@U0Ms44UFS!5aZvY5!I3Gq$?MQ~xA~UQ{-mDy z(jHStP-@Zug8yCdETan4%|jF3K!Q4lxw{~mb0cLU%(Q7xL0lEwp(_0w@G3|i{tkUS z-4VISyDzwXPfZ#F$hiZG7=<5ZV!C%Zc7Gz9k%3tL0pd^ouT)uGR;lb9kKLLPOT0LC z1Vz%{=P-f&bYzeY(h;k7V+mxI%)zeZUh_=+uoAScGz$3gtfOzC8b$5OFJ70FX7@fD zMknXwzg$MQs!W)z4EASUQDMMq*f1OQ9Ctj%Ov7;6rpefG+jM|B`ohn>L|$$|d-=eQ z#NwGJ#ZRT^L;OIAFfb%<%YPe>#m{$g$x$?L%p8ML0)>iwBUe~#k2~N-t^&U`Lkc~MPWOR zSn08G{sFeblffx0_ zqyw-NUPHh6@Up$?xHy76%qRx(nHsvH+0T(Hl(?heGCy%aBEiWrfhUm`t{bG@MmRSN zT8hp|6$NO^X%mHp$Y%oo!v)TTXT}b}*J6~@U=}p91qqCB1M4icVUK%);OG2d2oR*b z#V6@hLV-Ry{TJ5|_kLX^0g4N`wt)xGiMeC1{t^^TA5V2gv%?$` zY@>>}-LU>rg}9Apf>+>*@X{p7m42UU4`H6{HKhO-m7`u zulY>i4mBI!Jpw8oAVYO~qvB%b-2f=W*q@FV+V zKpu33HAim$T5UI)@MJz&c&{OKMb)4zOLj9io71A$ywr3T7wpNiRp+7F;68{GpEJ2C zjqcbJXOe+-V#*|@?rfOUZ8OhQ#Mi(+&69uC|Hed&G z{K6uV!CZrT?m&zwN)@QEWKg4{;q4~SqEMqgAS!AHP9=U(adHb1>`Htg8J#{nP$TE= z1D_TVVLg~^MM1Z0Z&^mGd?*K7VW=u?eb+_N(TV(ySaN|eY!5jX_42=0YzExx90ETM zp#p)VM8lB*nvd&P>BBFjRXd7n&VMl^gZ_p#1XpPAhNZ+X{h`h zyYqwRlT;>{OObeP7f|vE+cqwNKbgp~H+6g0>kHh`2EyNVXf@goFy&$t43~#=)3Da4kr5VJ3 z_4jgwJU|6rC|qD-;l))rHd+u+MGPar5sGuj#B)r5>1q*%eJEOK1-=VxY+*qGvf2Ix zp0iJ3BgybM_>VB-Ius-XlXc6_fcvV$WTKOEkb|$~STx^{# zg`F}3VC?8?jYJi6TUYbCT}U}6b3iGiaxGTAgR*puOGUY{(x77bnJ}=Wlt%DHa*xZk z*oJW%?xS}P!sYSj_GGS0F_)gjwWNEVl3o5H!^>KR9*1#iVJY~!XXxM|giSXpDj{JR zKFG|Ra#%z0JVxAM(I@<$2^oUnRBl_g&~^^_(>N~KU=Gb5D*8N+3z}M_nDrPs-mbBX zYVDO5*h{;jULbId9<)R2E#8(PufZ2qJbxEe3#~|?(WB*P0Et^HDIax6zrjW(zW|@@ z@}B!+FHk<)%C1;mv~$D1C+oukejoL%@7Q69M5L&RM9NA%tHWuU3Xc`Hsd%9euPPo@ zB>t>-^(uWn+Lj;9?_(o4-pt=klP#h_BS^(Qo1w7*_Z^)HrMyPo84kQ38caqwDwryE z(QLoq&fVK~iVwLY19Hl4Upc_RrC5k{XP+DW87hj-0R(B8y<40hBEV ztyj?mG>?de30X@jm9fIC(dKNi`t%`pr<=y*t)kq&J<3CnFt}^wE`j3##+5An5&3+* znm)XCSO)aMZs~sLsdYN^xqpb+e&Jp~#J-H(7{7DM;ugNo!Z@E>UR-)!Snnq2ZkCyW zq;kg|&`7)cy&+_?d7`QMv1Tl!z$wH|*Y-ozm}t{&#$(4`sMXq-r$0P&Ri-_|4=i-j z&xT=9(3*}-LFeAZw!Yv{xdrZAGFV#GkSVUGH@pg7j<<=>JrLT@V%#N{d5)hKFy1HSZ}x&VAFkz%4(rW@TU4BZ*i3ZL%1@wtlGY_S9fw$CHiedS#AHe#&p*I3v$q&P%^-49w`I zOjUipWrp0+TF3VE`>8OT6vX&)TpIFfhIDrJpiRvwYiUHe8N9 zT0gyxeQWZakwXkHfdc0|FX4OM?{(`2C50S>76c|fuRsoJ&}EUT&Nw~f*Po%Rt02A4 zoQ@s8FIKaWmINLTW}BiUeGf$dl`$zRd1| zS{;AWsR8L}R?^2;2A=23?AuQS4yUcH!3@ zxDQ9391i1f+zFG>41zFJT=8=;6h}aLo+I*+Ara2X9*+v^T*S@y#3UE^U_QtLtdv{G z2_^fP%kC_{)Z<}B#eb#(LEWj7g?T_D zYS}a0RBaR?TH3of(#`8vns;j@Qt3%Ov`@@sLQ-OrcS=du3Vv)h}^SDm8! zc@7Ka67_pM79DrM+6gKZ0hh?^3-6toJm6ofZnFLVM~DByO&Exe%tzAJ!(O*|Dr!%tOj}OL4J#dS7zFyC^Zv)#rA7Sx=SGztBsWI0f zA8^~aZv$?FJ3KrIya(UDFHe8*@)Bx$Jm1dRu^F(p$67<4KIIcOibwW4@N#^PwOqa( zyqvNX{vVvvmOKURD)t9zm$1TO(E7v@VZp93R9Ve z5gi6lP7Mo3Vxx8+0$q;Ipr$Iiml+CpB^{@mzwaYnwuZx2=h1Ipvt?RyrdbqJyj;#B zGU2v(&%rOHX50DjCNw@5ja0I0$R$;2O>y_#c|>tllQi&n|BQgM z!6lf%&w%C6=5k{dd0jw#>3KdlJ^Npq+K?=~>_C3+R*OZ>Y{x-zu0Ii-X{UI6Z^CSD z?5p1+82&b#5;fz=dOacd4x~@9T!RRA#z;_`%D)!361O2_eH|E?S3S~7qrhWUKgz}eJEa(d4stR#CANX-}vput4K>*>Txb{=tPj3aH`@R z9iKt^IHei-TUegr0dr4b>Fu(<-%I?FJuvc<-SEWx2^Rj z=c~<0L-TjQacoFYE#Aj%YU#JnTWu+maBfUv#}5kZO=GyswLiDp_s$_5=17wZbZiab z4#V?;1W!=Ki)ZdLI!@tlH|?b{T# z7y9-ENjqW)b&=d1!rKc$bmZqtXM|kM4Pz6pj*P)_b`nLAFZ_zh7h~7QanPW z!bJi_&bPIgGPH%pw!OV4eeS>+8e29BQ)uo(?aan@Ha6*SEr_i?Y` zmB;uL9*f_evOe>g(xwz7t=a=DV~bYd88T>&u~xN|?bXAZbu2mMEo&>l7F>eJ`*EcU zZojX+H@z!D8lT`-UoF@pE6W=am+;#Uhtn$%!v`7;^EgKIS20g_12A2*Ih)}_^t&uX zk`EVa!kf=Rwa**I7J3F1U1{-*$ZAuft>j91A5LNBA7tomLpj2**rwBQ#-b^hd25wZ z@4Y9TqdK+bpKqmT5|Q5hFfq`cz+{a{(K70d34E9(Rf~WnEsHAC0a6t#b6;%_#L4ki zkx2#Cj139-2QI`8>|)dJ_OHYMz}vF)A+VA3254c_0&0P~sfl5ZOirr&$#4lr{W2j$ zKo{X6hG>O-vuc7o#PpNFQMVymp>}`{p_Az3y7^xJA--1mUt{mDUu4y8UPho3_?H=m z??g6I**xIqC0Hd*$=j6jqQ+RMtIq0iIw|Gz(O(UR?pe!P9tSU*|v1KwM zv=CWJqs~ZrtszUsqxeD=l|Bn!5+f&09MXOCB}D#!IK=osMoFyq79hq>&W~Ix{VysH zoSKLkKo^2w)O{GM5=hwiE^cESAAY5i$ZuU%rhcFAWDYk{s)4^zG-$Vl>T`rRY7Ru& z1iutW_#u(rL=A$o1>e4Ny^E`APWe z!uXJOgvgJUKlOcgZ-YnBaCP0h{vp1r+&;j3=SL{HNfVf^ze;9opV_=&8$(9<(Ky-? z&>Qv~ONvMvIwTArvZ-&?GmzymEVac-36T=tXl^5vqIAgxBc-y4QSq|`e*m1XoEhrjrDSaabE9JdyF2C!Gu?XEvCzp?p{U&f6+ zwIo6=ijrZYs;QI%o=?w1L8F5<(PzOIrVR0)-V6i{>js3L(m_6W(u^i2*`~$ei?)fr zN>X7;4$cO_FY)t_-eU?`%NISCD^yZKEx~wpbF7)K;LSl0B+)2OK(%5m?vcJql18;B zZSHxh$iFVieR?mY83^W18oFsTx30l`I%p(13B5N4#$q%0Qo0aax8MepV`OrlmdofN(eO}^7%f7Q+$`dhye%>Y0&WQH16!T?8w?}GE>xozCQNHM z3btL)4uv1s zC8*dkIXGiN5tXD@9+MPYB$fj3IS&U4J0v$34p?Yq4SLP9lV65p=;)y|M(B_8DjPcb`IEnz;yUx#+_I7 z=qI~Me_PH;qJdy+P&@eE^29K>qXF02p?vi$F^R+Q_(1Twcg5PxwW57nZ;jR>FQ_6E z64ScLeoM^}%D3*MGyil(a3g1M?HBBMn;0AjwBfI>f^goE3!D)PgC+Q1Gk02lTZu3ZP+5dCxBec+&jJ z{5oqX9z5&hKou&$Yb47*lQk&#(=x1Kv;n@0-xJUn9NF4n$mz(0GC#LaQk?&?Ql0qqgX6j#{ffO_q{%3XnyZgX<+LkDvjy523U&a&CrKboS6W%)bkv)uqt zw7n;2q=R^dDo&G2(t^x!pwSH{{kj#Q(`Dr&Y%k1s-ri;VTY3g(Xa{sFw2 zphAcHQ^YcQVRgVnS)tT7f-a;m>W#$dQTSFJA)1ja!;vjsoSV60hy^A>O!P1*28CAL zs4~z2Oa+_qyg7@2y{M9E-k`}TVtdZ?!@??dM&;&yD1&rviatYbjx|5o&25iK&|224 zJjzL*B33EnV02sl!{*q}00$ zyKN-%mJ$KsybL}*znM8L3ZqF_)0J{q7;>Q>KjFNxgh(ZQ%L8#Lpe5nlI>4t;Nwh*# zB4KhlLS6`}$uWwbs?l1(5Il}i>w?-KXj-HcnkV2JA=ak87EaL7(Hp~A7`;dmPa~j9tW%J|{?_7^ne`I@O`XJeL1zfy@$GO#O#&ISjyVw+wZpmh%#awmNfdkP`u*C|C zB+V9XK>hr`1NW4+h5Mm=HLF@)veWZ5(eDwCnd>jtcT|zB* z2#Xx3ykJQt;(=HHO$bCiuKw^!KoHzBFrlNBqpPM3KIBTL5Dx8@yFM3RNo-~$NqS~O zN#XUzp8`lzwIT9njyTPwm{3#TQ>=m>X^svHIUKV@lqWP2|Gtq4kZ8xH7txJOF7y-q z1tb(ahJfDB4O^gB1SB($tY4o0ai|gmja)a+%l{5^{GVb5Zrrv$df;_ll6Q#gd-gkG z6DRjw)Hi_yx13Jl#+Ac*)TRO^ep3}gkkXswr}j~xKQ0I*1d^> zPS`<5pHS-x8Zvq})d3z)u?md_FqWzhLyID0f->wzvpd3ef5DG6$CbJ8((sVi4_|)e zyI)?^E*n#dZA!NJWoK{GWyliLE*!gvf}4a+*hRxIcj7ha&6MOTXAq{u`D^THYdZy< zP{E{ND!DT=6KCxBrzad^>*}aw5JI=r`5iX7-RXqRnEQ+<81$zvv48UM-EIN55Ki_X z|FFqDv3fAAFu37RG$YkmA*07wi;KM2WG;-velCl|bB>`82x9;sD9VIS@Q6f=keB|3 z(3c@jGpD)7+7AwhZMV`-)r|$1;R7!&njNr-sGtpk?;>A=&o0I1WFiP-L&XSx?v-&0 z^3cRDncIz088Xjp*cy@Va%Sl&0%pRts;c{IZf(JWA`wO}9VJ8n)+CWobKoUqewQfY z-8KS70P+RrFUS|?O<2V2Fe{C8m;YAsgLuLFYu{QOEgt95(l3ZU0ub{qg`M zl8tWNW$*F^*4Nh~v~{1eGkbgY5&#a5$M;^Gy3$?*JY~CaP8?itfB>8SB(SdpqFH|g zTwsO3V{7?_f@bkSN@E=cT5Sns4{KeFt;D@D9^+UlzfJpF)5iu9 zXU$Sb&A?1`BTE#W#J(z~fOwifld?!;8VpnGKINpNG`+?pnLsXh>C?t8XV6;y zk@AXy`OnWVffl3=S0t~GXz4iBGxW5_?KgKT#-pm#wRxYjs9Lva&Cs+B(b=r#nyT{l zUd0_vC5ZZC>d51zP|-3=y^=vuG5$+MbyvZ>Mv(khnE9y=SR9sFt-&XMmrXX#g%+Slp_s{J(3Zm+*nJee5`H&^<84)KOI3IiwA0#$#vLrxM z;}wu9xNo?ci!JeelYTjdmB<{+7D8FufR6LP8;RPuYPw?vrsC z!=;r-E**Uq!J8u*U61QcO=vE;J*0np?yHQQ2O4z7Eka2^6*7#q6(vHn$z2Bml8#o_ zf*@{S@WHjh_(C?L0U&F{{}#(|*@4ls;rR3)2nY>=>5~ za=f1?Q)ngk|Htm*y9{}&Ait!xnK?cD{&}!WKx@zI>=kWQEb&bvN!+>%IuC>+Xy~}N zTqy|1)m*ki@WP@xt3bGHkTq#iI870`fI#MhFs2nH7Q)#&Wruidx}ybuJWq76e@PLt zScnvQApNhD5y2S4LX@XCD==&cK7P@tlYB;=QqUV=tOPCsl%)J&2H6zmw; z)&)e1Zd?8$gzd+-I#0i>C=hLrCY)e0UqPmlnT@66 z4b8E0v-HpsfbLE~F`JY3OOOrfzoY-IC-^nIa`aIVwlT01j{{koJ9-M?R2t|Z`_jqf z4t#g`$Obwc5jP0hA5lD+3^Ig+f`eR8CQF{?y^Q}%#W0DTcb821q994JPM+ayLt5m1 zW^!iC(0&zsuM02-_P$FKCLbn;ii`ivY@IV z-HuckK$$hl3j(rV3v>ieje>_#eBQ8C}p$&;d($vO5Cb z>G5GIOc|b5Suu~kCi&43UH(!zI!Bz7+y?m*luvCsD`dt1ji2q5^XP&lEYWJV1dVT? zlr?PYK0BDsPafHJT*m0ZRh`UGDO8dHc4#@f}@{XC!6p@pbh+3DEqA`XX?B^7l zm57Muw1zlZoJGN}oM(uR*o+i4Mtg=V9@zUf&9xAbM~|yn+9PPj-s^DbS7np4Td&nF z*Y?fbcank{V5JG82hq7cimpmWW^^Aam9K3c)T_`1QzcIBLfQ+e@wlAupNy4vb)xQ6 zaqnL^-rjny5rRnqu~Wm?T<`Ka;^YWv(=sw1=-0FsJEai&EF%k%SNJGvHr_;tQcREV z>R09#BFt(bR^3MBjR!cY=kMq(;(wo6t^VZMy18J1d!m8ZLOjhu=pYThlTh@Ib@jU; zv1psW>7&fM_Q511^?kx4Vjy4p38la{6rE!@=<>0%utNo{BOlxeTu;=5{h zZCiGOBDpvA9e+I{1%W+~10g!{ z0AV{S0FgSF1kpcw0&zyg1&Kfw1Ia~o0BJuBjTwv8XgC0r&Ugsw5Ek(5|!o~@=u$j6Na4MIrA%?Bk$Os|?e`qe1WBCG|> z7JquH-OCq$%CD=G8fKRRVd5+v?=s3o-*<)>ADr{9lbTdjxts&9ZPYM{Q$~xhss&&A zr^rZ~lkVqnDQdK`6Z97ziG+mxA0`e@^f@wXrMSeB@zmI$FBj|`m5fhoo7QLFNq`&(9EGH{5~u|{=_6w@w725wvh)^mLl*QI43Ko#np0O>lvU}~1#P#UN# zgLOI~Lp=3S(di(dpiUco3a@$i)U33+^o>oqtp5JLIY41&Ku|1|_~gWr%W};-IsR35 zC}&Q^B*E4&l6cHml1$8&l49%k>Su(~Y7v3maZvJ}c5^|Xaa#HmMfxoih);|>ht7@& zpneIiri5kmtwdrB&%`$bqNHhzv1IIxqxd_8=!9WSW<=!8Wm$ahd(J`7<#a{eac=@= z{}lg*d0PUncrL}2{1`h2wq5Nspl170<#R+L{uv}NET=Nh&Vu=TG$OdqCm9|Ue$ zG1|s1!A9;Vyh*BE5fX*~AGdMUp+1ZKd^ik2O#uq?2|+;|u)arFO#=b%L@=7hZ$$3zM~PB5Ka;ymr5b@nGvV|*2glv zKUgVj!5Tv}W^??_htYrH28Sg(i!15XoLX=q7rgPH6ufz_hf(Yfz){su*&&GIp~on~ zkivuv&w)*cwx|OEH?B6sV69ddXZ}>QVBwTUB#l(~!@91h!G@RrA-g3crtc#fhFD?^ z>CxXrlRI9A-Hi=nVvmukXUnQ>Tgq6aHxVjO7Q7#{q?(=Vq<1QU$k2`R_CSXTV7)5(~S3 z+$=wC&?HYF?ZU4Szrm0XEEXpZ zi`m7`t!~Ah0RWLR>6cywRN$x0ty(bF-S1B)1pV8`NJdLM^LoqKtf-L4BbzAgbw$i} zw9^5xUNPHYG!bX;w4qT%5q?x$yT#y8E$3Z8RUG%o_~Lq1jB3pG+}qmtOibnVqrbyv zA~m)Tw#bCT$gQA>@#FF<81LA@WD~3*zlpiJmn(SPlos%~dX#-{9IM^}bJ0N|&P`D8 zs|JEWs;u1hAl#6`v&Gnb#ZokfPni=P!+ zS%lz*~s_>*>(%`^63b}8+?h%F;O856Dtu$=~N=>Cut@_lpVJr>K|w& zLl9L3ABXhw0t;S(9-*b_>iPJ;{zH682EJw{jBZskctOIh&S)CNHI_FK_KhivxwG#= zl_Qwy+aop$HpW>mk7<{o z+#f1+%jE4-%?G+-urJ1#Hp=wutJgZ-JsoS3oz;^rjd@np+kGxdjlTfb@=Q<(tHHx?XBQF5tsL=lTdl>tI#~nb%x2)v!oW&ucSH9 ze+MdDK|;-_AE90txQ&g9JqQXZI;aY1J6Q5Fx$_;ci$DtWh#)656ueM><(oZyd=aJL zBG2H)0~k}S0mgr3pbq_Obp#m4b?OXo@Z@xP$gzx8)8glwl6NUAh6FK1qY@8H4(``*O~o3 zcot1W7u{R`;UD5tnBh%&#_a2$B~aDQ&F3hBPZtZPS5dNj3c{KK6!ZBqg*uuvwV~qn zRN;w*@RdduOPr3x$?(2-&~~sV3SI<3O3py5e-|*+%WaeZ57%xKX#?Z@R>c9Gmyw{X zfgEWPGw=g!R0Lo4ul2_*$nEfBCkn6#w6t*`f@o~N0Wv73W#{<5b|8^jJv)n`N%?Q`A^y@PFwU&px}h`yVf7$P2S++boVx-Lh@JRvJtD-)2D z!;Elp_iKH8MdJU(-d(^((rpQXHZzu)nVFfHnVFe6&2|~e%yyNTq0G$8lxAiwGnT1r zkN@|#W?%0-?aoRwJv*aLWkj4zrBWGE>gvXcbH6i!_sS~~UN_*xVxD!0?jZTDsKTSV ztB9yH7JF$58G$W^s$lRq4JBg-1MULljRZ4^{Oof?PSqk?}kGP+S6bA zeagHM<{_?xqzi?^mpI{ zw%`O{ohWUA?+jVryTgPQhN?&%`Ta`3#N|ptEzM&WQi=YIQB*QIkSBB)gIJ(mSYY62o@n1Uj?O2+~9R*R|IA2CbMlo%!NBxZ;aLwOj zjE=$xnNA|8tIwb~T)nZKM>#Q>vq^tuoKycSUZ?ZpQ7e!bJ1gd!)+&h{5+%44Cgok< z%MVwj!jP`B;cyu_%Jd77?jPaktmS{#3n`EirwnCGxXEK1k1aA7FL*THFlQW}h#zeo z1ErqNEJPvaH{GW^CQJC<1XGA=i#lAT5zX9PrTaAzr3uFDs6ql;?`rI`IMUs@?+J1r zE5?X9;P2oA*Z7YDaG_OC`w7g-)^DplWG2Fv2Fz8Zh%X_5lp&-#1&umVA<<3+yd5{l-k{$Y!Vn?a;q=O5VC%v>@GuZO4C$oCb&zEt7nnQn zhWg<)%qL(oeU0!t&{Rz6FveFBET92K<(yEpBiRLdhd0%;s2lyS*wJAbR&F1>;GM&- zch7pJ6f@)v{gk<^7$iFemT2?=maM5PJWi4ZF+g*FvT#Z!7C0MEs{J37J#31$w?GNQ zE}r^2{p1NeJkBslTV(Il-dcs-v?r&~=krxqkl@}CR8m4Q=1#2)QKB38;EK%UXd4d3*cpP*ZWdI-!BDT6s~5N<96Y!;9PvkF z7M=t+WTBR;V-+X0w?MMnU243ck@9%ns^_DI|pA?2^3w2*n(k7Ow>=XE7?rq z#d7K~K=*-wo|~|-i$-ou+E8m3(y_>oPm@xO@=% z(y1~dn?z1vO6p~(bXX6+-bVKV0?bC3v-oO}P}5z7NprD8pX4EX;~^2Ls9okJcX24` zWuzqF@#oKbm!hGl-BVdE@{&~Sf>xM&)u!ERBg|Hle~F8 z`c0MJ!t_|%>JKlUW#i+q!F8Tdpc*-rk=D==iVradRwM}mR(@8VQ1aN=*#QA;D}xPA z!)gz0#ONiMfqtb~hD-n{1H}ZL3aat|RhKeaKQS6z1DyjYuR;q?=)zI${<0)SHH$Gf zoIsf?UUU#!5s=tb%)j^JZ6-Los^MB4=ysF8563^avKPw{7wnmZi5J9)WpI8BikaI` z;tdYGj#83QPkOtaiyNT!+f_GxPPAXI89jatK;H?8Kiw+25$ge^rG9KOb;RqM}aT#Cm@jA1wdVTvYadUchaj!4r4DjdK4G)rgg` z(HW1`*mW1yk1rX|((nO|Nv`pwi8=xSV~n4aG?3^Yl#tznMC6W~&DY+uWs$r2Wn}GW zA)&Y)p~0Pz9w}^Tb2w|Ll!08Qk;nbqP?JC10lj~*s7TDm-qxGXJ~P}%x$s+Q`|Ch9 zdJFjoqhrN|+PPh~Pnrx~99)eX2R$`Qin$={5*;=Q)v*%P^ee7D;@^&thg&QwFA1ub^SlYM6zbSAs9-TaA^1j zw-T3YfuSWyd4{wW__Ttt*-FF2&xhj_fc~2!Gzd-;1^*96NQ7Ty0egjIuv1^SQ#pis zBA8Pa66YU`kTgntH05865PfCmr(gu*N+%TpQ5caPLf!1v7V?$Y;|vCyEydR4 z=%Vl_>BMH7b#{*t+J;@VT!fsUi%5cT^eXPBO?E@y zz?OvJ1j^cBtb*|AqB3{nH%#7XO-~Y1>wn^883J{UxfbS53+{DRLp(5K!!vb?RgR3E4cb zQ{kUFnSAZMWOaH_MzYExJ&|sv^Sv;WhGONMZTc1L7OfC4?yx=>XeP9>63w>`AJ)j- z42?z|9cRUP)jJF2M(`UQ(oDIN=#coFBwY8izuKCAHKP2- zGeQ5o+~NNu7WLne5C$52)1NHrb?C~WE24`lWX-1=BQ-N)qEL}=G3-C@rT$Jv zczu8TUxS*osqAxzaghi#=YUJcE>HTq^;z2ioFZ1>B=}H0hJ2Vq*igBThHPv>LoUpS zV0|Z&4cKYI4VU2PV+u0p+I&%JW5qg6t#vJZA zHqIPU1oq`@yvpjZP*LJh(6vw{cB~Llc1e)69*tWV)oIkLWE{b#U+c`0C|yjj~l3 z989N!{mW3cXY&xi6(AhV)l8GK6tlGi=q4JFxaFe3oEWhauK@|dl?Smxl{aOksihV>_oTFO!o8kJ zQwqZ{-!{$btb_j!rZ?oiMVPj+V5>lN+c#en!QZsz=yY2+ghx>h@MA-}5~#%l8$5*1 zSxYMJo`A_hnW?#0N0sfDDHU8Tl@}Z5A#^1s{emqhK+_c7{fLc{?}P1lDH@Z4J-E=P zjM|~l-TpQYzI16T2Wj`X8V6z6VA2q%N_cyA5%H>alK;+s!u;|3w}M}=&7I*je`AkH zpf(df#vFWM=AG9IP-wa?=}h1G(?vBdcUd;rsvi;g9^i|wUo|-vtCRh?YE{4|8ge3r z(eFa%9lA97=I5LJ_J{2Ucr8Zl*}obl{^Mz<|K4HZf0By&f17xGg6#j_Rn!jlzd?2< zBOz;s_dne4&nSgNAA}a6)+hY0moNXX zC@LE#+yCem4_yBqMg6>#smA9+nEVSxon(r7g*CJ{GTEWPhW_0nWGvkk=^#H>L8wap zGwQ8_Wls5IX4m_L9}oc~IfAP(s;bd4658>8x+{EpG=UX*ccNtOECo$OB4&NMtNNUH z;C@a#-h%c`!Vt1a?ENWu>bv!zIl~`8(?^~!k9Dxokiv|Xe{pv&tFW>KeXlF!0VVUI z@C3K)!?%Tvv7{YDV{>mN_vYvmTp)$b0M`gXfY3-T;Hz~%aAXm7$&lm*pXgO2gEUlN z@wXlq$H}gz!iJK%eJLe%3lBBRAYUCs7)T{BWMHnBvIUXLQ$_|qU0LKm-u%{A1R*}k zX^#R3L_KkIB&4?+IpGDQ$`4B$U)oc%_s0nB6D94Tc-Vh0^ivbmb zjHAtODPQ2oRCwbP!s?7-j7qi4nuNDUJL&*Z3Un-|;1-p*)svNs+$-nRB%i&G&-ZjH zEIdX|EQ{$hmDF*cPjWe6pe0gd>V|uF8hs1cS-yu|tWKa-Wh^+Qy+nDMQ!=>MOXd;y zI~?hdv4j;ze&v9*nd=%F`~m)rg0S99A!pJGmD)~`O8#s^)G&kXSnRg4ocfk|q<^mX zMO&A zGot1_Pql4^UFD*7G|1s;A4Y)dL+zQw>A(ushXpJ>XqGC?>t34rDqYLdZz$c_Qu&GM z_CtNoH5xyrb*EKJ9r4qg&MNl{wGIWW$0GrSmhBw_a+Rzi;UUvUPQ=$}e|w&HIXG{t_7LcP9Xt0PfT>w!|?@h>Fq!&uf$H zjB2m^N2?dSmkj_kZw3ZhQ|Zqs-#6Vh7yTAC)ecY`Ch8 z|HXj7{Z}I4KXyR)KLRZ6`vJJ&^r$%#^dcPZLKyOCS$k{$>G_NLPuL>nKw+OrSRs|Ds~COvr>^HlLCN~bBnn|P z9`>)nQfb-$&B4;7UQulYT}XOuOhoz^m13Shh+`RK7}^k3rslnIvijl!Mv0-^c-+iI z_3I@Z<#JX?WHO)qgAj+-+k^2m*!xRZ<|e_uGHcxPt~#QE)`&r@W@rQrsVr20iO-6W z`QdU@=?PzEBj58c|2DG+cL-_2Utp{2G)1n;iTyHmWmAS_asXmh%zygL{Dpto1{Z^a zCP#DyqnDZYtX%hy`;42}5c1MQ-aK8~_y8wQ*}?fSr0Uor_9&Sbx&KtbTII@K*-4Tv zHk;>^p-iFKO}-1GjZ#ZdFfAJty(5I^^441fFC1AJYiw~{#ah@0wm?yS&86ZD6X?U4 zFu!Ha8GAI(O@T9L71XO9&Gn3AR@?>u#=dp2<4O=7`=uq9x>-}azg^fICU!ALANy+} zP19@Khz;!2Q(W!^iCS(lI%4N@6NPss&M(wS{E`-bBk?`Y7Qz zVm^^W&+EZ#k3Vfo_04e%8>*uiv3qNc6`geX+aS%rY=fS37|?4wN&|tc1RtZlSRf&% zU5F&z?Z&0jk>&T#{7USfkLN8_oK3g7Z}x{h58ZF&dWHHLtAJD5?M=T&RwoAlNxjEC zo(3-=O1H|^xK~g_%nH($dylaR9_9f<* zUO1Rtj+5)=2S{g}(I@s9_W?qk_%FrMf3Vp9Jz^;{=f5L`7xm<7^m!b&mTS1rKosss z62CCR7;i^-^%ac>*CRSoqCt2<&kKAIfj)2-R5(62UwoHnH`(CjrT9il6F@|RQM>Sa zI~bZ!NW^;*Ha?vxy~hwD(#^L=u*#zakETjwkFh*3a?H}YOc z1Pfu$`}3_)dSKU|rY1^p{tP#}_m)8303VO;+^8ol!*2bpw;Q4N-z`EPFB3P{rFZ)i zPFL@vX>mdVf8;){*C&|lEHxEc8UnBWtgHpTd*35Fe2aOsDj4|qc;25CqEGdEa`$sf46iYN(Pl#Wv}Vhj|Xd;)%wrESijUq}+cE^Tp&&rc;NXe3{RTI!r2%utS-1cgY3buQTA^@LMj|r0e@S( z>JA=)bKmOI&9}jBk*zmAJwd{c$4g6r0H3Z|spTSNdLpAWHCeEVo``` z^}_(nqeKQXW)uR zSmu7HSLuSOrl3#drS&D<{$-W^2!<)d@2jvVS%88UXKwQ!0p46bp=+1Pn898UXZ6yPj{BSP_U{jRr<0cT48aI7(O6a&Jd+;?TXrOb?A7Z=w9wa95N$OlR2ZKBI_G$;(n!j0Wy=KC@fLx7cp1Mwl}a zO{>aq2Ow#Ppe;Ch5QWa8ku8@zlOPnJP8EIda`$fMlIWtUQuOwYrE*zCCvAbFi4h|~ zCJI;94od}_L>*7&nd3Xi=Px&FExh%%OgV-gVUDIBH9HI+{ z1s8Pnd7G&!xsSxDkbffM*k+W(Ag=VW(7zL}K^szxbR8<;m~#O8z=qx!VTTkch6_rh zcyc+iN|;0Ladiyt$GJ2+!=1+4g!^bj`CPdm-rW5+R=x=NO1Y3a#st-c5Z~-5pB(!E z)jo9kA2p553t0%t>?jsKfX=xYH~sY%Rru4Hwv{1kZHR%~c@AnsKL_`{uQkCnJQvDb z*BYGK_)kB;C-T14)RSF2fvJKV@~A>w@z7ie3qeex%k*hSDJ_sPwNKN9b})Fn+dxV)KaT7BYb0LEwzUv|AjF$9u`#9q{x^SEu5xK zW-&nl&XShBaadqnMlsi`U#Y`3C*cH-Z^qA*R>uoT%?oXm&@>pi;yI2de66nuGNA^F zSDEtz4#dxv9ps_>6>(094)R)v0Y|#O_V*s1%2-kSn7Wsjm>yEPUH{wO(6keS$&YZfI zP8rsuwPDuF{oh<_;J5@y9isTZOge=tQoSXfM@D?zwk>eH%7F5#hiPb=dcy+wl1+QQ zPqNDn#PrDEeX7vo;if=%X0(Lev@x|_Z>iPe;5&cR@*vnHd%hH-hUo0g12~T5ibh}( zP(OF|=DV!!wf+y7<9i1v0V#P{Y1ZS$cQ}yXxv6BgEhA`;I&GzCs5B`Ja>l4CDN}4e2<~;-yf4L2ix<#1J!b^_ zFaT?w%t6EpT&}R>7frbD-Km(1R(49&1;XZYA7G_=Bkis8=P{Pbfg_ zgJ~0Bny9Y3$w23`1dy;xe{H`1dC|nA57#?*_zOwzM3M*StnQp>Wz!RkqnsQ(bUG)N zF=LmMwE?Csb!TPk4nUW80mWS^;PLerLoiX6A%^#$drz!$Rse3<*!@wjv0}@1>vWqC z7#;7Uim}phTr~UH#*g6mY(4Jl=GJ4QauVxpY$sCRXA$!niZM_cSb~JNn4!M6k{bm- zCZ4OOfEsP*o=#!#ou9Zm)OA9)0_yJ{u*(J-@YO^vAT|Pbz7ayc{lBp&Uh7~?RfUv) zIlS|*nNkj#NB#n30rnJT6F%B&Ayy;~uf0@^QsvE6fY^oc)>}_fy#C&-07o`EANdxs znw;Fu_O+1~2PW+cMO0x{)7S9Iu5RWi3Mb=7<=y_v?>~`kNr>eQhxM#5f@>#lCtt6I z?FK_Dp(_Irgv*77+(2Xnf-qpAK~n$_6X=Ry)DI}(odl4|KSb<5XNV8P;Wx}db1-K0 z*-(vtBJ>LCZ7Wg$#Bvn)FpVkFm1T}pU?~84Iv#vj?|pt$>s&17mXXNyDwAMQY^U83 z&c~1+#K-+bwFQty>!(Xcx=U`Ti?Q@9)A=kGxXu8WnU)be5W}7;;(9Tk7}3JR81XI&g_)?VxkzQt8h0n_R zuZ~OOQ!FT|nMN}bzaE%8^DGMq5%ldHgGbX%yAqp?*;mbBq>~jni4-+`I5@SWvinNn znJh6}m(3F-Dw!Ab3ugA-b?v5Hd`ydjIB!BI2P=H-_sW`@3n4iq-l7&EC>478Fd0Y_ zOk+LmVu$7|cV{!q?0GXy{eBossd@Z-hH=Y)Gk0*=M;}=L`8E+#Z{W)IHAPQcDBYTp zOqHBZ(ZVgitWCa33qn7b#1x8Vy2&PJ?uodZebd?D`6QC1<=cS5NIFx^-1eNK&L8nZ=h3_v=+po!Sn+5= z<*`4w>B_dhh86ZT+EwN}+Ji4V)jCE~DvT6x8z1Q^JLAch$#^D&m71qPZ$i;-c@nm_ zcEKADMRgl<>$ljqa*1K3s}-i)pk%k{EhSrVi?qhx9ZhYaR$6fDb|?TgpD>E)M7nfO^!1yaTJj5JMPtLCYn!EL_?0vue9+B)H`l~m ztOiN&7+~-t&MYqHSheN37y96}pXQ`Rb!FvtZ(56jg^RlQ8`67w52)NwQ}}&cwIR>D zFSv!DA0~%nxPEMm)A&>h1TJqi!j(7nHZI-lYR-4;2VCJA#Um`34)FK`F7qz z+UcyC6oT2Tqk=M3+z)oQCJ&?w%U|C*_mj7^{4LkY58iUM-{3xbP5^jHD~u85QZCe*}3!R zCA+M8`GAd8x0Y&akbZjw^q*_zf?G_nkPL36u2~aIad|nV*y_eKA$HIPxFMglhip{T zy@Y$ly7RU$FcMJzZPzgV>lA6L zOYD$Gx)n?Fk2%#yzYib0VngM0vAI$dumznFCLGtB&!U9oZNP`92PM*IAlBo#ww0*c zbLn!T@a5(-vio5&UTpR!W{Bp*-Cjl%n@5GE@}EcUm<#?Yf8ZB%c03(gou8tbWK18v zahZ9#H*jK$r?8F7!-!woV#{*C^yolLAs3fc?VPK=UJUWx`wA=`DlqI%Cwz?tR#uU( zxZQ!3TiR{kZ?mcMtRQ&D+2gEOrOz+*o9`khgL}01 zL_>oB@`Q$=&_||4vem@BO&`_nEe5hLx(U@0I~uEL6l{aJeK3H+lV+41#w}AYh zHhNTa2mLRMt$<*~;mShKspHV}u#%sZHB9Nc1B}PfVDwxD1v%55nvI=;jQ$t##YIi= zX{^g}(Y8juZaCH#yB4Fh$5#tgcGXU#bZ=ydi!}$o=tgy4fy?$iqUR65p9_2euT_KY zb*>*j<9EY3U%rod{(3wOZw}I3boD@!9+oKa=%vLevW;rV##YO`=P?~`zc|23wC(eQ zFOACnb*0ROW%+=~y#yA( z$yp!T`^9+mgGj_+l=s|eN#{b>jK>Bx#Ii!jv*FBD5m9I8s)+p{mkfXRY459%9MZ_^ zRqp$3%CxjZ^{diVParSe5Fjf*43PEqw8=Fhal4JPKaVH zUTO-uDQoWL^0m|`BH^ru;OhOArkSl}&6l_T=29r$C_-79DJI#v2SvzvH?(E^Sqx|m zAjzW9pmnIEqZ!4h02BufcFjSTVBCue$-#5X0wjHxtctvs2t`jm&LZ#A3t z+f(P<+fyp15t4a|<^`Ba?4Xg0Ywe?q2t@%SP19IGTo5e zzS@Kh$1$t9!j|I4XH2h%!jL$+U<~ls9?J|h+})9PmrN`)s36ARV@b5I4Xv$Td-+p# zD68ftR?zLn>SJ3ma-?ij$Eg5?i#^MlyAakKZu|YE!20SKR`_+A^_@= z$vt(KM}N(gqTk0EG&i%bl!9Yjp1#65K%|{`N(~u*(%_poI6NG4h*Z_4);)!e*7h1? zU8IZ_A0s_&lfYRU!X`z(iwU)`Z=_^xGP8e^=FQ9ISV(A&z9`ZLtU9U!70J@yY#t_g z!a^DdQOxW+lsI_T^S(|mpH$`_hAXZ`)*bFm#!jP;6T81k zTH&L^4uo3NDQ|+8&*G?BY28KIePyBP`6Y!sZmW$74Aw!+yhfEl)Vo0C{7#-$1wG00 z%|b6Eos8og-%gj9#a?}?tiE84qfoPOrAZ+(W8JB%%c%b0*gVI6g4Zcz7B`$7d;O;tdfZ5yqVlpUf*L{1rWHw; zHYD1m_o;;r8=UckQ=;`rq}2k1i)OpXFZots{NDnhtdyRn zo_!(HzWu8j%%p0w(Ob#2bS|hm8=R?InWlxdeip3*K^vCc!jH-p8C4Pm^0L7QaZz)Q zG_cy?`Ykp+R1oE&{09i-F;-3-QQC=>Rv&Pqv=R{?5ZQ*9u42$1YOv>8vdHkib!f%G zA^KQJaEZU9)hSV#v%3d;UXCx%zWs+&gSEp#Or{xJfRzp`VjR(b=qH@vXm8K~SdC zaGO=e-076~+lPSzxpX2UoTc_jp+g#RAK@B3CS>ug;~KTI<}9=;`pQ6KvIRoC#bX6N zwv^3X4?ctw%b~@p7-yfTHuTx$n~Vi4ICpQb3-Qc6yr>0 zJe{5;C|V{n+?|p2*{8>jfU5(7^h1vunHNeD#E$+FHt74ev)iVI#teV%|g~W5cl|4bp5+0#iX|*Q%P=oXqSkgf& z^k!P$g3f6?$LN1I8KoJr!KWE~ZgoOZMY-si`cgTjINK3Hz|R3n*1=3L&Gk?NJWjqY z2crc|ySGM{b6BCSR+W97+0k;9qRx1BAV4%q$3B<`bYjI4(lvsdi41&B%(SoG&NPt} z2i;Mr(9X24;PZuPigH!@GP?MTyBQ6+^!12>-EP<e zV?04m_GG|qn6uz=qaUDM0u+-j3lvK(Cwtp39~6Ov_|toY5~GiVPB}Q<`f!|<3e@~5 z8n$(D1LN?pVTI6&76k~3K6|sj9Yb`>f?*xXXdwFpazR=lE||0-=@|ZOp05(!!V0@T zqKpLGQ&_=1@>-!iDjpNu?~f^6UPTXTs&lW3aDq0T1Rvf10+rcqc)#vxdp z{yPZdbPNdVxmSy`^0`rZ|s*b9Xr=v;cb^CW5p0Qif1MG6Jc*2K)ZHcZjCH}!LUb>IGGdG44_rL zc;JSvsm#ir4at2WKFEpcD;Brs@*)4wEefrn2}UHlJEyh^9XhKeQeXHIM~J9xmnaYtu?d#PFt?RsJrdX(*ws@2>>1?i$z6 z$~foY=uJQuF2Hb5cvPF>9-fQ7D6ASqA4&4SHwemMm}ral&rHq12Dl1B3nf@&c|#CP zl1##9Z>pwH=8{wTr^(O`(8^g6anws=q7`R+0-ofCl2>U263@oy&X+<{idf8pgsE zk=uVz7l(u@8s65>r*_6*OrH!-^yu?*6zFJ8tU%Rxu||wGIeY4;4EF_Z@*Gc?fqm$p z&?=VQRXCgxP;GtZZhdj^9oho+%|x}IywTUkA@QEQ73s=tHm&=>{=ggSMe54taQVG^ zbb2ALdfT$v)WXJ233eT12%Me-kDEKwF^lndESo+%5eN6L(aK?b?RvGYu|l!k=xoE% z*_u3g>|z!eW)RfI#8GaMK0T}~KmJOxJYi;idu(}s%KRER2S?VhNn0;}Qd$$yT!^DW zfj2cTM~@*nAF*bKeKYjXFQpc+Kr6Z&!$L!lCt|h{+0N;x$hj5+R_r_BJ^UMI%HBtW zg)LLa8fw^^_)&on`t9b zW-fhYsCMlHXj(UC@k8F2b{u?%P5rnDYi%iKFHmTJ7e*ms%;AyEPT# zqaPJ_Jc?O=>qwG|FH_E&7j{+zE>-esuh26pm0;cjeg>U%!s#W z7y61nHs?GhtUCL<0-|z))gVbCK+$JquZoRlLbiPTa`=hfjKQf~WPEceR^XfQcSia< zSNqR~GesNrsJcZ{n&mFqO%La9po^N_E|iO!qb|ckX>*TWbj>G7x}&R@$0B+p~MEP=Nvg*i?aT`$5`9mB}E>XAn zxKPrSKm-EUyuX!4jG9kaM(6Tp@{r8jx8OwGW(J_=AwV&XhDw2O_nTwJ^cP`mysU#V zhT>v|gtlYOg_;JV^@4RDU8U*LgL6U(g6%UMfl=uoKwm=WpTr$k{z5uEKdp}8KUci^ zdeOH#cxm#LCI~u<3Z5{rlPa_02%E5rw&{A@Js0Ss$JcS~w8BwY*u~Tlp=}d{0xl zR&}}15A3yh1UlFW`}w%A6DUA0z! zhUk7#8|BR!xF{jHx1Zh=!WLaCz3tp+3RFIa>U5`3mE)_Zbe2rD+19OS#~g2I6qkeo zYRpU1?U%Q=^NJ5k%lJ*Sq2N`GYDk_%U7%KBHz)cfXn8ik;L!4b|E!0ajIRUJtIGXZ zuRnq{~k;A$>DwE4|<==}~i^x{VF#0YNyw z2M~D&@5EAk^IYA0xd55ndiE{0F|+$bQCgCUrrk{RL|)=ibA0F`%5k7^N+SAl`FvX6 z+^V!WdLL^OB1$g-eUl+dk2|%kt}(*!`??NxNwIg(Yi>Gm7TJXto!3I?S%E(oDX)6s--Wb#RVm07sAQ5?P3lM?`b$~ zh1%ckcxQ@<*Iggy2j$gdycVr_Hb4a(7F(0PGkmlZY*M41)R{hXWoZD^bx53Xv4a~d zSHNaMFe;)2D))QymiNr1pxSs_+MDqvyQ<%G-0u7`(;Pi7?zHmo(!HwOI^Z8vj{~r% zQH(J?5EITlLC-zm!6plvf>AfvvUoPag3M<&gAz74g4-9qg;`}CP4320Qjr1dLA(Iy zG{B{RZ`?cP@ruSy@%yoRLjJ|4)99D-yZ^j<4>X6XsY@H?(4&xmj7K3t=GdJsLb;>< zNRj={e^elU*+7K=qWYBsQ1hTh2z4#w;3Pnzj@fC4XDZk(83RcG=l=f=n%QbHaL##{pwkx`}akzv$WYy*{Oz zwoFBGN3**jW2w&;+m?0Hw@YLLf?{qF2Z7j((}QY-3L7O4*X4kvm~zF-xhGuS65ci- z;VQ$TNuA@0{qMwXy#NO;b39MVN6TBz^9@GlIL>oFCg%dqj!>^aI|C&osb%{$=M63@ zM+2@N&p@Y!XdJV`DMzcA0#3Zb$4I-)IJton`-?Dc%#9_U*F(ry??T9eyL=mH{j41@ zE5B68{p+QK-MkRZaPS}c^dYj)!y>Qro}yxmxMG>$hxxwr0C6c@@hC;;B0D5pvg^D1 zgV@p1Wuq@yI3ze|UvcCh*eW*;~({wNc{lZm(>m1M>dc=r*;%^34Q-%X9jyg%BHU#m(|GV7>xK1x!r9HYSRg`+b z_@@ZD1nYv4feANs4_}6kySNnmP5~cw`V$MT3e9?NAC=uDTLf*H(+CHQ@ z>!;tRuzb^GRIK*i3)U*U;QOF|w8(dS(P8jR2CnAhF4?pB#j~{hvGm{?*uZuh0iO2C z2-@HUG#LIFEd;)G>*z2RzHVGL;NH6)%pUy+XzA26x3nxbJKlEC0ufX@{vEtY_id6B z_q<#|QtQ3Jb}G(F-~243xrMrZB5~=}5+~C_tcZT9G1S81;5juqf034T-OMKKX8eS` z#Vk!h+wzrj!jry%fv}cU&VkGNS&WdqB{prlcG5Frqfa~I;F|wYJng1L11#R+`-M}m zla-_35`v2a=!89RvVfwT9@8hPxSjKd*B&v5jyvK)CvHw5`qZ9P3F2e6e$nPK_}xsazg{b<%5lcfU$~V+XH})un=FZjB$W!qU!y?Sb1d02Q$zia zgLHjf#A+L{--d6?rv}cSMDCRCBp6l|peCBA_uwd36FdeejbueJGQDpqQOx!s~P4WIGGrK`E$U8pbz` zJw;F1!9}mwu|gX0Fn2fjK~w^H;pRd+(7%ki3zBF3DoXxg?Pf(@_v=a8lTA1QQy?Wl z*lLDkc6w!F>?s+m$x*R~=k4e|bKdFizzDyzXZQ<7V0K21%+kxMRGE#C#ZxXoTH!Fv zZ%m$cG1^zscqusHXw+MOls)NNKjVMFmI1S zz#+K?lEyKk)ufEJ?JJ36y!M5=8vl1Y~iHzufndziK&X;}CnYn`?m*9&GYg%Gu) zA~ueKZa?`C3%}Ek%LPAL|AZ=3uaAuH$f6N3;^yrwkT|e%4tSGfOqMYUZwf;2#1Ujv z*n4dFoGzSb#x6@}k-HE0bt=ec>ncXc;L3H=nARa8r1@9?= zLcLd%>Fr*O{g7Nxwonm9(>xY! zR0+u3tTPL@-c}75*uuUjqQVJuD?!p)%D7Vjx4ivR^IS^X{Qh_Me+O^0{BLk};7x~Y z7Tse~HHe*-H{-mAl<#11ZHZS!Y2d+)-iHGiREvxdwm#~ud54U9M2SEy-D2uHagx0? zx+uZD*v*P&T^e+vn@{2^Rp0dv-p0_nYH@`~&bGRt9<@e$N%ZUw9)SNNeCe61ak?kp z;~nw&nXAx?cUrLupK5vYwy=g(@U6t$H}B27@#I(`5hI3DC?jeVXGy8H;8`H(>`CIs zHYUum2`W#^>zIx>8|*b&^Qf!^S=Nw5V||o|C6>;OL)bnRY|!9hf*bsr`1%CYv+#%wm&b*?l}xK3f_8+ijWJr~eeXarRG+ z+~FuSMDg*Q?rp;rv-0`quk?1|oc&?4eHlGS91qg71_q0E5JfOtZo7lWhqj*rO=$ zbyWM9%#o#0QT3~F!!|ws0~cRtqNT`jFd3E09$S{F3ukhS%TjW~?!#zhv=#H0sn7Z? z3yqpgQ-K;`G;M~9;F9`+^{KL)xx8nq+fYZ=Wb%6|h0-I~xFa7;=@={KBn^D5dyAj) zTXDwZKTRmPLlP@jzB9+vUaf;WYAO$)#-KkSNJhPq#8BpnAdykw+Q)0xf+p)+?lT}Z^9ix~$ODEAR&U`y&wq}u0I(s}DUQEW)W-f-l=5A~g1I+%*rLSys(bLtsB zs=c|Qhfqam8`->QkEpWR-iKvqkXq@St})(@TgS58`@Kq4(>qjS{Iuq@4eHcfqrUx= za;GpVKLI0#MFt|4vkhtrKDBZO=4TQHzNJQeh!qbR;Ht^3^wE%S1aQWYP{(D+XXm@! z)W8R^5bdy>!z}EqyUbzGUTt&MKAZ@TZD`;Ac`iA2pXbuHWvG-7pHh2`m~to`Y3niR z4$j@&o{t|kTNJlE@f376Arl1Bn;k@(whvmYU9xMilwm_GH>D50YJY?~>YHOvEH-Tp z{(a$WV&J$6WJBB^?LlFIOJ)1-phj$=2JmHkV67MEf--$hqn2B}F4F|wM z-aD*#bTNLYCx$j=A{H$(OqE3XWteapg`>g{2Q)Dig6h`pr*c zwr^C!sYSp{aLKi}>>ScJUq5W`hgh9Wn&1C3W$#vWU75_V0FUzlP)FVPDa_6+mhEHQq@ zS##gknPS`_WKEe3RUG4719GhL2np#l39eM?m^3PRBZ7)47xQF{XmvbZM5%n}btFU~ zdh`~4UAAFk{#o(C#t%T{gcv6EgvozW9jl;%M~PFB)8v>6x{lSZha)3^+moaC$&3e$ zmD@Cc(wVcLde-MMwFn6V69rl6N3R2^2Kv&iUJrK!&2MA~*88D4MeCiz_KgB}lsm_o znCri=cbCDDEm?w~MJc9KikX?2nVFfHSxPZ8Gcz+YGb_c+%#>nYy?WJVUE6PGYu2o* zXJ`6H+&CdqgoW9?cCLr}IiF7o0+U)EqK!CZnc!0V;sjp#A)(A;!M9C(l%8Q@-!=OD zXYlbn@~reKhK&r!otGU@Jj^nNH!>^4>h*Sc^4QJp<)XK`^OTp2&=+hh;hBEPJvkxe zq=ww7an_H{zF82Hm94@8dKS|{1j0I`?O2i!p@#Rm?6cLM`fQnyp5`R^* z@E;J7|2E40mo>^*|Mir^|C~|A`qeG-pJ9~!LuZXr?1p(iEp*`3JEEI!n+Q)65~+Vx zxO-z&*zr3rD9H==_E~VR?!KF{ zyL*(ZWZR0q0qJp*ZSI|(gvbF`eRb;{kWNy^tlWhx(`Q)o*j_RU-y}G8zH)vFfg?`H zSDt%@93Mzs2vIazF!^wj9?Sj8D9$w5bSGbB-lNrTLYzebyFYuMXN4*n=j9BEkd-n$ z_R4fzBnQE=m}oj{%avAIs;6BmR2hpPsNs6s7WckaU&aX=7;kJ}`|d^&I$>@n2OoQ! zOe#cW{G80!JD;R0?r^fU(lX_$_LwSqc#JsUO~46nOWdU&h)s| zDxP$Z#?W29TF5eQ92YaN`%dQGf7Ixf!xWm-S%9T}=*2>_!}JC`uaI2(SDE0ypsWAC z7ARx-_jNs5N?%S08}#}kSqnBUCekNouZB#O?tZ7->Gg1SeKw+PuL_g17{N^&CEZ zexIm3WEA@udQ zH{0I>@lm5sXEq44D9v$MgHw{BLQy0lVsAa@5AE|N<>?}1GnmT!2toUW;tgw*VAWJz z{jr0=^O0f+0UxgA5e}RaD8#^{tup}~f}+$@Twg0%3Ek89r5mOX2q&2p$3*!}s!gH= zOmb)sG~30X93G-degIIe3=lN616UwO#xKM5)dm?NdmAqkGOt}pXjf2}PI@Ugh5rDD?A1-1B)R0R)P~$twOMWid1=v-$S)GUIMwD%u1&9W% zLTCp7=NV6txXJwpIm9b?Z(Y(;r0H0X)e!xMH2^udD)FJmp}clt_rq2?AV@u|XI9UCQ~2ZUl7) zlnLRi!k3agtu|Z)`75gk_KB0K^+RS6Zmzhqu&dW9Pu1bu?Nnv?Pp@zZ!yu?I!>ItV3h?I;T66L<9-GPv z7o>g*1$z`F>|L&RTaaW|o#zD)N-^;nh$nKxxqaJCk-)prA3YXM3D06=8=cH%2?*9%!txtXRRx#y$_5SKdaJw~e3%d_V`C^58FL?DAPPQ4v3S@cQ8t<>x*k@((T@M=T1#A!8q}_IH{(J8X z!<8oHn!{;ku+Y!cIa3lJ>4&xY&d;+%68>$_V+j19%e~PhG{fOCJY;G z;2_#DVwz~GsT}DhoJZ^2@%`$221l|zhi^%?4|mah5AxV_SRZi;>cD*)Nr~ zOjS}R<-Jx#E$%x+r^CF}O|E`k92eHrwdubv2a<`gfw#VRve%Ti(}$mMEzTnCinbTr zYjHgm%$(=d3E^+=4}?F zWB+n{@#N*f#(R5v@4u*@dF=``@;u*mcZ*6Gd)K;c#peC`3@zDva(CAHgQ?2#h4XQ7 zLnyD8Of;qrb{JZ?VcAnK&OQKxQPi>qwCuzV74D`4G!%jWNqp!s5?xGxtdbPZ1fp8} zk0fDPJiN0`w#htW$OQZ?S^4aFco)_pcOTLsAnr*Qr~lXvQ6<`(1_1^8G%=vJpMXP5 zbA?kALKg<2m(wZ(5B-i67gNp{nGl;ZPZnfPj;k$wAYKRtG746L#L>i#&+pIej-e5YGAvlk^nPuAcLMSuN_QD>M$w(jll%QZxxK9y zNX6R|Xfa?omI$#u1j{z1!v>5^Su$4nl_8QJ+|hO>)2JV`?FP1oM%L5(;gthNH-!SE z!%jZgqi8Rcnj^8kN60O3M8c2Ca`cAV^3I<>3(}Ya&2SPfSVLy3mcewyVvY0~D@Zg` zOV`X9f6=HuAmwQX>5I~=Zh6V%GJm5{e{?8)aB?J%gK|f|>pIX}TGAj!57u&}=&Ct- z7~eu>SkW(;$;h!15587@&GLoiDzoV%_Mg9%uxmV)(Zv}+SXzMTwQXn0xGj^xQKB+(x1J(k>^vT1r|hp3pCHP=q_Z#8xv>gOZ#zRHc|{YQi-Y4_eiw z)MZ(>n0kthxJvGEhJVba)&9*!jkNpIMm=D+atC!E)pU)@O@^x2*i(hAbHPb}uetdb$H#Pi0zu=p=<1y8? zDuFTjUwy{+JRWZ;BOrqNs?QuTx6VjY(R#jmk28E?zladPdR^E?5Mc(S-B2`k4TO#~ zT^#dRkO^OMK2X0hu^B8?cKc@399Bt!3|}MN;#i>Sq7-gMqr3>|l^@Xl1g`H2v26Xl zbdqtF`awHmu+_+@UoNT-k!(pYpwqc|*6rnht~?OFAqI1ZZ(_{y%Jzb3j#@|v;2H1t zA^?Q*SS|+N#2Gh)m^_%7X}}7vcdKJ$D})+k`s0{ z6~}Zjaibo&WE)tZ2IPUi*ntO)SfPbjF70%C^XeaVN~k4oF9pRR0%J)tMMnCTX@;uj z%4^kgZ1y))JM)VYQSW`}m0?tjl~FJ)otI)L(lMNGC>QG53>@ock;+NPBR%e>&;$JO z#|l&pbZu9;StLA#IOyY%+0_W9qq@F!-HuJ^lNanu3t&9i)YqT% z9YBCvsU?;zE8ed-bj9F0lo%G@q($sG{LlJULoXTf4>dM z)9SW-kAJUs9{yPek^~@Kn&4?CQFflF;o%Nkd8|-mq_Sa8&2fR)m3+}`Sx<@YB(tg9 z_E5S}6z+bTRiyDS?=C{4p+(HC{AzUTb1dk(sn+RN!s8;&B4u%^Ej)HHqtCVavQ3ccbrjoCVW&?l^>3K zj7?m!S)*kBNG{&Gq_ICZd$Io`_ndM`tw6=H-wmGe$5Ie zO(=HJbwytk`ucyMRrxVzTiwYiL(Ul#=>Ul0N@(2qcEH$mL!={<{h!ZRK+3Peicgu)Q)6%UV+V$QY3=Ic^ z{^)_d_qvCxYxcxCxn}?Na5g4^$%MsSO%^1GfI;p1##wi>`%ffH<_5 zof`NZ#?|1)EKb;6oU0uW3mlR7yM!d}+uBUOHtT|q;=J52_;qTqZzYo~E>14pnmu-JhWvy88RPJ@h^Sw28tmT=6ZA1pB=Sj>@ zZWiORA(|uz#n2*C)_6$VTb>lkbP*}`ipNP0yl$r-0h+%Chilsgm#c&7^eZ;&x0+Vx z$1Lva6F(PUABwFb?UjtqO3OWd-foO{G@b;GEY6@fmcL%%+W7D4^>fKN7EdyHvTmX_ z9nSCWGEXC0H19Nj_ehVIfV9Y=9_6fmL|!61W+<{jgRF4v8g=>vzGnBr;`#U*>pHE} z<@{Bm`6pXh8Q7Tqp_O$(L&L_9&DyJ4$1V#vA`K<9z(>fZN$av%mtl?fH#%!Ngx@8E zv+*Yn(CL^#`>JQE=Lj@IcWR&t5SiwnWh0$?bs+inM59=T>$W zw@w_wSS&AJl;Q9cPLv5%_q)C8qi?j1SGNlsp}zn`)YgaFbM<()_Q#?+0|2IAA=Bp? z4_0><`<6_R`f9<|#~Y6K=c|tQ>wU}T_{-DXYdcT;$xZUB_X&=d_lwh%BzkX~0~r9dkLRZ+ z9+de6rHLn>y*+PiZy?fnoq0h=FJBhzbxiUj4TrBLsZg~NQ!N|RRgAcgp)P&OE`_ngq_GcM)V*WZW`*v9 zn*2Icvg(&i>bIsLcz!dArE^Kr@3(nba@4-^VDG2bj!i}icR76VWT{wipY9GQINe>F z$N3UThU!sM7i1>V>QOQ%6<<8r#fWA+Z|OpynEL2xY%5_exjnqBK2sq9192s|Gp80f ztJ0`Yv}9VD?89bUi0IQuf&$&c!a_hHjA%+hOz2Nxaovc65mT|yeOyX1C?uP>gtd|V zhmsH%!->%}Xc-iI=@6y6k&#exCC(5=yo6J$gfYH|&@mU6Hrz*{$0M1KiqXz&;UD(B zhM*&Qvin~yg&Fr`w5Bk8VXmT_$AyE~h|k8k?jk~+J`go2U;2o+ z7L<;fvC{&-xko9q3^fwht3k*Ul8Wm)s`*Hmpn!+4{ zOa&+BET{Qtzn{yvzj*v1d&BBQ4Q5X!x*(o(?Pv4++Sk5m55^&B%k9P#R##P(>#cAO zjQyK6y}A|#HseFA*N)Fu$QZxqNC`H=_&5b*-{ryG(nSdk4++rB*yQi0q;s?xxe1^H zz_QT%7yToa*$uXXVX?5=9V#)HpFiw6N+y)XgNog=xC8+T&Qa(Aqen*9D?PkxTy3UKEU5a4q!Maw$?8b^6W&q^b$iSld>uG7fmu+nFC}dvMd7?$0E)nAVJdQz4*M7FRQrsF2- zSULdE@LVEcvfLzv4CiowP{LufNxKS8_^||YE^V@8b*Ur8P)NQ5iB<@S_-wU&m=I0LXI@krvM zqYSC2t41#yq<1mNSj1yl_Fa=$HsM0kcfwMH^LzF|y)S{)7ObWDmH&_1RSn{rhR#-? z%ry);`tD8>;G^Ysj_FYcNtaQMHz*wePVzV08{BPnwjjnuJ8Rc?d&8L@M=g=NTat*j zjw6?lb_K6DKsCw*nIhbr>uImVM=g8-#z0dvXtR|@>j>ua)Lp@y&>Pe*ziafcnegb* zge$UAyNj1el^xi2)cuzxy)sTsghxpXEhB{4?OZ&L0hVii_L-wyZGnN#tI6a;KEbcd z!Gj?zn8Sw*5;DbeEO5^nTv@4Y;$jLgrQ0p*Vk+jw{6@RT#NMV1Gn~N1Y!PtJg$P56 zR&OW$ou(OI>!ke@_n29Zwxt>mA10W~MV-dW&qWj2gRjUrJ_F9ne|j>VN)Qv{x*PC) zen86ya}VVK;wULJlTV&K8b+5Kjk7-d&WF%s3UF$ha)ncE;`>lx3`t@+Fuftx*x`nA=9yqV_CkOXpKa zpoRnnb2BqbmvyHI;U@BGPG@DyjHfy~BJRE<;`&u_GYETa2l;f=i5H1i-5Voq>dB<< zHDxo8Tz(@DP^kJVX-s9~9zKPJ2E%l7V<7Nkxcf&UP{3W}4e|FL973Q4dK@y7Ap#_x zRy*qJyc;QY-NKBMo=Wlli&YR=>4?hs$ z&}koWO)#auo=8<_F`0BP^nN3fuwk+3Uf%o?XLYz9a^0Wiwz0K|{=TNs4;n?gIg~QDjuGXTfzjL-#ypUz z+&x2UYTkdSd@{5Y|GCSf%J%WT!ceZj5k#V!=!I-kY91aMozFbJz}Dl>E+a9hG< zRqXS1?2IM^b3z8f|CQeq=d0i28r@xLn`;Ve#RSgT%Xvzv4B~H2V?O`wwvq^w;fpLA ztKqm%2;zF;Hu{4s)7k|c)*gp+$0fzJOfD>|sZ0`o#1l~TTCNzE)Kj5x7$UuXArsib zw(;Tg+!8Yhenkxw9uNBx%VeslD#5oShlrQo+v!8katY(~srC~Rq|C9+6ULT-5ZToD z;e@1XpxoJFClm3pwP~M)e4EY+JT0kx*B^Y~dd@dSCQG;x7rN35$; z$c>8_tzo$ddWRzhJE^ zphDwf8&ep91KNM+c&&s+``xy8%%=0``+7wdXG2t>rI`nd-zs)Kgsz!<9139+T2k4q zoVA?gcN&XkkHsUSXWwdlO1}>C=x-+6g5rv$A}M&wjJx?oE4v)nYgru6lp_SYz?HSs(0biF(z`KZ7&MWfF+X3{nSc75+K) zJcE!=f|wtfDS$!(T{&2hZ!2AxTTb`5yCO<5U~`dcC!K1Gi2D8liO#WP%_J#KZ+y=Y zN044ZFru(wlgW&_b~{X&ROuJHJRL`| zK9a=T1Q|-XS2JC|=*i1;A}L!87+TpDerbz%mDZ|wQpx@wjF^$_W}n@AVkV~4A=8~= zr(p(0wc2ULI=Ey3`QRxf$Xix2#j+uHbA-w*79{Kt~>36Z1o!>rRuU%W34Xf%w;xXR-<~VuM=& zkcOIvEgHt5^Ojqlrz$nVnMquOW#snsLUYp=N0rr`?yU%Soc$AmpFV{X68kBr5{C{{ zP8-{PakbV5pFK>a&TAM0Q;(qB3yB_qVd6}Zm9qPZD0)1pJ!NSV-p2gXu#T&bj3mGd zu|T;^2r5dFX={P!8D(uw9ew*NsVLe^baEJSoZYj^T7GGQ>LxVT4KF1semz&Yipea^ zj#UK{UPxHw4Q>iDZ4W4s0dn()`GN@GL1j8c{C0bIMX0twf&mMhyE2#bNn5;nk z$awf8h|BKsr==a(QAFjx!6+i2>fSpr%SZbEI&}+UG0&GgRmP=;1Lb9rk zme_hVpfJ12ubk-I%UgZiTnAlscfp`Pf5s4+Q9n&zC-@|24c5VnPhJ;j{Un#T$uPo7 znOcszS<{K7BR?Q{_NiYSGzGVdAV#b=kLh=146!_;pu`X?gQAplX^EkNQ zp01aIZQaD&Hn=^XZgwblZ|&N4f7>nYt=U9jj1J>qe{o@$Ja2D4$l7HbVJ&-mk8s{z zPu0QQWsK}cu(1WZJnxrJCo3Oarm$PD*L(fR-fvgk?-#GpJXlv<8aQ9?JisYT+-v{& zx$+h7kesQRJ3V%Kn}13lY2MzqjND*v$zQw@ zh^!X|?7c_Bb^oMZ{AAty-14U}p=@2WZP|PO#QgfB=Y3xwD|Lf{VK=-^o04a)&=^f4 z>AN3?z(}09hKk=DMcixROW0;VRA;+aZdPdvrs2IDwmVL5b}ReQDUaoM?6q?OLK)A1 zVY)I~b`{SGeHCnzADTA{)SNdi^;#~!J#rUN+-x4HPSvz5Cxh-A5)Njacj(pv_XE_S zsfuQTIja$M#&})>-f(vc!CaRrwJ)t3U1hy`6$@8Ovi6_9HaUNnI}Aisc&J8QD5@Zy zf3+q*BW$~Lh`s`|FF^hk7X`nICeB{q#x^%Y_>P6hmwvjFT%W3EDmLp3of(JG6Y_Dr zbN9`5pJo60(y~=w_M_rh=DQ&|W42ITJh}~%`mb#Vs&hkn>VlYpK#%fi=b;3xumk1X zXU8~u=^f?l1L#_3=~fjIM5IC_2nDs<>La8>2g+eG>V`e&*}T(p=@RqXUIDw!c7fTO zJpr?q9U8bTsmvsFxEl{KA}g=!VIAy`$DJuS6KHO16NgePlN%z7>YshlJe)3!0w!HS zKLpj`#7sz^SovT> ze3Q3j$<{_m9#6`KHG3y8Kcroa0zT81Z{dA-j@Rocpak*qV}uq6M_2=E<$Fd{Cc)5RsM2puDu7LiH5g3+3`y$b?z|AiAgIBdg#mM}SL2ro zLceASYi^O)>M3e#;*kNH)>$258CvE8Ho8Vm(p`40eI`go-EooFv`TE5!dvh$<6l%h zPw{Foln3ke&Vyjqg^q(J^TX*=Tv!{_M-)zXxZ#WAK*&cWFTMT zWtS4$>sMFE8G`UWI$u{vP%ZTP^|2@!Patx|JQFrXEuYy1O?(424<5{a5gzn*Q+?K{=q0LTMq)n?eTT0Y+L{D75oR3h1=4 zGqAlwG~lz|PeKAPht@&7!xUlW^FCpT!!uzW3PR+`$my>+N$v(*hRp`u^MaRLhuZL7 zoZ@kLSVCp7)+gyNOALifr@$ljx6s(%0~+bEt;nsL>XhrJ*W29LBRWSng7Y~HDP8p( zHBO>pP7~Iz`Ee2{;*J-SchmyHlh6P{?_|+Gu3PX$+;XPAFc2Sdr$SIa@ey76AjJ{g z^%h^6f?P4nfZ3Q{4anS9La^@ByBb{_c_MUt@R0=55K&xz88BnaP^oH?JmQf%Zb7}6 zdsX}*e|Q0?flve|_)HhDpZr0=R2bvpl+CRmf-GMT*?QV`iHV=BAcoDY0R!s}5TRn7 znoZ$i`Fu_3f|2Rzn|VP?%w;8VsLj1#kxOgE(C91a?1FpVD(R&10T|zak!(ds-(?5lZUB=0141cbG1n^#uRN-uBG3VB` zTLQ_)1RvEvU2t>epScL3prk~m`xv7fPhQR@sZI9~N6bE}mEr~}M#!H%gUE84 zZHGc8R`aANGs@Lm6LUG+{s$!1a+32U#z9%S417UiBI(zIUy#^vnfYVuH$W1zFGx&n zG$!T3EX68`#gYZ?gi`jW3Vj=GF@rkY5hh5&PZs7fdT$nS4L!Yek&|z=1wv`Hr9y^r zQ!kU=a`!?DC`vkto__}2NJ`zkl0N$$yGx%NoV;%Bu0G4cVtf@?Igq)@V|6l|oe*e< zm@J%%r4)tm_WVgqjL>>`5_COd0fRApQ1rgchSy1=+t?Nh`}o$30A{0=$oSABanOCJ z13;;QC-sZ*zWP)q;{b^HqaOsd0`dsQbTD|6BLl}+j4WlZMDRtg(R5% zS$Gl<3IgGSc)te+`z&!R0@yV38vy82sN`PY`93=NWKp(gg4&4!RgH3X7Sq=ck>T+` z-A2#1I;s|M;yIG&YS&g_8l*Dl#N4 zgh~f(`L04~ip!CA7f$9=Aza*ej*uBdT|#^FLQA)Hf5m}>%M6YzJ3v95P-D?eO%k)7 zV>u$O1kcVGR?Z(Kjtf4*4U-uK8#h)CR$FFOhN&{_4dC@-&FQqB!`ZL%H zDc#aV#uel8bYxqf0^VnXyH1-#s@_nNW0*I4CC5Hnzl9%I5atMegL);;T5s7VdO5#* z0OYFwu~$fiZlNGT-gxG+ru^eqMqG&1!*d0CsLYzJ++k3-ee+J9OIJZ$>rP$;3<}9wEb&V0E(%Y098&x_exxT{MoDAjem+yS^oiZAF>P5@Ld@0@NZ6f* z2k#+Zi3Z_<Q8( z%HXX#O9JMHn%Lxoo$PBNwmM_lWk4=ZWPB;dKKn~ZwAoxawatE9fwE8qPU9BB5#z=K z@QR!|rDQgK*}{51he1|utm};${`Np6E8Vt!h^caiq>zX}2o0@~9zL{eq{p(YrL+kU$Ay}&+jtH7_1wQ4ZmzL7<80S9YU|zC!yWH2R72XHgZEdyC>mSSrMrjYcN>PcfZ6m zj$~Lr(c)37v!qe|;m95o3%pZAQRKHU6d=Cil{brpKsF8y@gmoC@X--=nkMjJ%-Y8L z@h+D8M1bJSY- zPAZ~chUS#FP8rR1(do~b6yieYIuUmpGM6H~l}!~H`g4{)!oV-90qM1?i|f&+LFOg? zn?5FzpK-}D3*wmd%yKg}Xp`r;1|nCh=(#)Eqb0K-+I`f%qnxl7A)5(iJ1GlI6g@fB z=$64&;%I5`m}8`AcsA=#H~F0VZe!9@o%eDOqj_6CY$v{LQGYdBaer-F3mK6XNpn?j z=~H!4nJ^-0Tqw#1TnVZqymSPd*c%jw*m%kyf}i-*jKd6zj9^U8Oe)6M%*8ByP205k z&9u9SJwU(WzJ-shGfF#PeBa1#mJo4qsQ3MwFLo_TTr(Z=<%>-<^@M%-Vv!9-*TZg1 zIgC)KS!spPt}8`BGsa)O*dZb4^SQJz?4gS={$Y+V%lVftHnA7kLHXs2*@2^Bsn__@ zQekpLd;K2h8SF=a)8X{Ex&AYF3%|a`cx!?q%2blweK_5E$gXwWQxY+a@&Hm8Y|Z-s zuq0MbyEb=vgA8_hIX3w|+->x4zStZ4=-d|0!O43QCAA?;N@U;-JR`C9z%#8PmgztZ-<+0V>xf0 zSP43TvR+F3&q|O7Jh{l^t+a=B?!!+Uk@3^B%eJNTS|axZg%af9Oov{FKaRgvgyff^ zb570lKZ_csUs#wj71gp^9~f@t7xNs}TeCq5IcV_uHC<-&v)Qu+k{r+4aoDa*F&k)S ztJhKKtG^|99ZrkbYm=M{$@rgg(9Eo!&3hdePnx;X8>#{w9|`;ZqO%Pi^s^(^I{Uie zJKxfh899X1Ji#k1u5dO5DM4}xn!OG1RvKEUPWAknyD<>FOXr^Szh%!JR(1*;_?ddy zA$V41L6$e$bxYrr7f#igEw|EDbS6?ugADP4t??p_9nOBM&1dAP<@8WCxK6dl@`R2h zoZ-kO)>JIoc8$1rYi?CS-OR`(S8h>+8B>USlD*6GRehirvv&EbAewV(Z3$HIn8%M$)G}zCJ4V5avmOR-^pxo2o zwVnr1muGaypw6HCT+kVTqm<9I$WI1<*9J4+qP)>zZ2gug=jc9Nxx4H(=@}IJ`Z(m^ zsAqX}SPZ_m1j17t@xG&_p}>$fs4oC)HXW@)UvZj+Qas~^J{T=^ZrPD#YNPCIpyJW| z`womn{Ak5SII7!qxx^pmgUzG%(;6JC_597X_ZOFUi0K{@=pKm#r*h2%4l}0WEy*-^ z*>|to=2gw|f^pM%Zxxi0S~8y~9tt7&j%eU-IPwB20(w=^9)$Fz0tpaS z6^L8L5RuEd7QukmLNFk7^MYm}?Bb2oR5DmaBoaly(tLG$&^4VQ)5Nr=(X6)Z4ErDY^>{Wn-oMs|h8 zM5dD_1UN++0GLi?o(9juJ(fAXiGU`gRhho@f#x$^$ z_%tv60DSe3kR9{t9{FEoe(Pk&CKtZ2;i_v#NVAU12Z-k4X~ z<^35+p947=+@fKI0b?#nOA}8iSlvN%jT#8z>X<^%*BYV7qUDG9>17e(n_3pN4?ZuJ z*7**H@6@eyatv&5_;!#HLJx@i3COZFl^}k8^v&266dfX@KcAtUEzD|qJW+j?O`%OK z=Rw8ZJV3RJAb?v7X@CUAxloytA;7hhOTj}%OF&lUUINa?MM8i^(nBbdw$O?x9|?cs zi4do$W7}9Z0r{Io^M`=jf5Z5G0y)N4pUoLG@~S4I$IryUsf_o{Mk& z`?S@UrJ~_?`TW=?)V%sh>8N@lvv%a0{-78(N=Cvmz1Hyo^(jslF}ZfCk(G<9JE9HM zW~9bJTz!inRaaJX9AdU>sy({}S>TpQr?|Pb2$Oop!CJzF)7Vsp%!+o2rHx{f3i%pG zBF3h@i!#{>t6XE*y(~*zG>_?l_m!3ZVT>5&%azUh8$02iNp-UFP5l)(z zGF>6c#5y-M2nK`3HuXP_keU!lgKCvk0jXDNQq=*ewN<-15J@%ai8T}cC}ux=0=l4h z`?_Fq#!b}dn=`&mxZ~8%r-Cs^0*Pm5q;nltX5|87`F9^HlaZ+jl4d$iSj6X~2xetB7$uzmazqkEja0e3>!!UXV>U zOW?yFOUvN6x0)^f8q&M_+!6Y&jPVh!^YQg3H-@UoEI=U>j6U}VN8xOuwMi;95O1_J z>0@xWb#hdNdbd;i!5fCeV&^i}9ZY^KK%zXpvMvNZ5%G{eUVpPr*{*@%?rjU?dIHeH ziXy@i*oYB+Tjz9)eE4Q+AoX@_QbG)` zYXyx55X_a4l0b7CT>Uj>wu#lD_U5fc^Ud6g`y7$RQnPaGdKJ(+#v%|a+(-LNvVhNn^p*}kI@RRES<#fn)(dz@qcw*^`V zzX27h6u@#|i7Evb>u5Y-h*A#3;c%sP#@nipTR$@90f9WS{t*({{j^}GZ+ zFg5evQ0aHAN@RPK&T+3wWX62I+Xs^mv%-}}qa(dXcTnUMbSe3Z;eSt6imOHO?i|0C zDNa$7dT>>X%SreHeXf@wMh^813R}?%Mw_@8xzTEVokXColSpx;QaGX*(Dn7c*k_2T zvEUSND3fA1;RI-}-%-`PAX z8ch;;D8seHn5Y!Z-OW}?3V6(1NE7!6jJ|Ao{heM1RJExNzrCPO(eHTG_QN;P-mKNC zw_pZL#^S-%#mNPw4asT1%tJ;Lx$U9z?#eq;(`D(UyV|BYaAy=?lK39ybxNVL7Zk0N zn>rhv_Te+K*U9-mE{ieH{)eXV{}yTfR~2a(X#e${yZ>_{4FePHe}YIu&-xDyypeL_ z;sSK=8%Gp}U};&dge<=J%W004>pZfE0o3!KV6E|rXVUz-tf_3#qaxEIao`~63(^3q zN@7VT&j=|^w~j?}9$kU&Y9|*Im`gQReFK4uOFh48490}z>**_#ZGE@_R@ob{aw7pr z8?2i7+Bariup#lG^3i=4QP_Fg`8fnMup_-F8a6lp6#*o8$9#}*t(?A1fLeQQtJHe= zIkW8g;WHT%YIuRHjS5*}n60Es>XSnzV5sz4OG=r?oF==2&?pfwZpdcqp zQ-g;^Ex-V(I{bHQ#=xt~E8_Mb;u;NbpYvq>?shvjZ|^psdFgp$ih|}_VYJSYIQrRh z>*C@DQ$ZkmEUNfeRBB{{9GwVsAvnwNfFDo^dUSutU_QD)+lXLp|464?hCnJr;Q0>W zj#8-rnqs2Wo*k=GShJMk=vs@2tXX4~4m(7JJ)x2+0WosIue3coL?wsDC0XjY-)Rd3 z4)42e2f(D$h;6e$hgRnSei*W)O^a*DJ zacfS(B(7=tSsMd0L;`6MN@K{(>Fke13$Izx!+iBE%j!Hf7Nvno%$} zr?0&y^oZL&VG}=u_xu(E6uG`|G$!GkxcqbNP|gl$caX)3QF*y@H`MDMwc*iuv=P5tD>YOMsz14K1l@U1H@TWz zm8Gzpvg)>k zL_p8k65nliHI6Oy#~bU%2fRPdC-x!G><&;Gpd_Ss7uHs^H*C<&>kHt~F6ZtZxC1DB zh8hnX5K`b2LkHEcHxJw(JeZMWu+CK`;}kj1(PmpauX;^U3 z|F@^^ny%`exy51~ew-J)I_qJd{p|hu!gi#!Vke+hL?Cg*^tby74njz?oFDc<=Ay_u zJHj$;iBXnfae_pOAO}=aON!CNmK>TPMyN(*P3upBGO`?A_o(KmOZkC*p-7xiQ*4Wx z4NNHHIk(RLg@yH#EU^|7JO3d4uH`|2DLrS+mk{}Le$=N2&yZy#4Icf`3CqY5g=>m{ zWz6-krnpos1xlvICdM}S(^WhMhVQ!elgXMPjNfz2CyO$s;IKMsW>{^|EXg3n3`!vk zaQq5R8y!aVhSHw-acwzPLiY<(Az@10L&Av}=ZtNSVmQqy^n&PznZ)y?!Yo&eWrY-o zy_R%?RwsflYJcfp^Tg8-=PVjH=5iSkefN6V@j`7a)`3?aD+EH_15iD+jL!#*u?1I^q%SJR2yv6Jn?h75cb!IbXi~3IH#;R*hxdGGLV@HTxJ6t z0(X(x{>?Uh16#*pgrAca(;JsR`obIc_eWUT?mhthOqI`t{zX;KmDhlsE$oO5na3jyMW?0`(kr|lOy?2 z6L^p3WbN+cw-7lAXxjF8*u_otn;D#ZkOl~mhJ(KlBAEY^5UKiK2ob0MP>4AFKSE^r z4}?hj|GN;O{$C0a)o=uL#Fi;P6F3EP@h6yii3-wS4kL=iP|~Io&CETsFgIsp@nje? zCRIv}C7R>4bk(!(eA*DYTxOTxWHMvJ+_{aSKBTFS<-^6TY9BbO38`&TW!A;Ilg&|9R8dlK?QL@~5 z^9W$vrH)22BZ5{QXKIF!6w_XA6C$vtR&RyZ3b54VuMC`l6=LlQg9|XF+MR}d(=7_M zngK@2H&4Q+(zLx5qVJ#sz-Q3!u{~}-v^Cr?`xdWiVxA4>oP`jx$5#EJ;^Ol!R@*_? zYlltnS5ZYN$gcQj2&H*h?Kci&*Yo!hW~nw34N3Y-+A0V_jtsPY9fHf;<0)+fZ32Uk zHdZ#(KFN1P>Yv#uKuUY1jfgdpWu6;!AlFG0DLlDFruRv5@zNf!TDL+hufDRGN!Q3_ zdr0lZ#Ujf|X-Rh78t;v|8zdJZCP_U|-fIjfk4~9XM{k)q7q22MoI17R8jN>FjVqzm zK23D&@5;X%MJMz6@?||}{<0g4ZrkK*EjYSgrOl3J_1=50xvG$j-o8NXNbfayx)1~C zkRyN&$vU|0=_!il_3(UN7d>6#+AZ)^^SnFGiPmh?{(f?NJaSLiQ{la7zW(xBaQv3t zbMk2S`ZRilFN)pB`A3uGFABMTeuMbCH~;@HfX@sc{4sonY5kw@nSa7({?CBV)N56m z{n0>R`~M$&=C4eTKY-7q;cWFv#o~8QynPb33H6@Aq!Nj2hUK*BCBW+ItJgp`DwN_* zp1NZTSa`Y;XuEo6>f}$D8O@HB9r!6plw&A(A-C(s6ZM-tgPyb6Z27P38Rn+V#XqrU zT5*4~XOeV&vuCJU3^q^=75sE{baT>Y-F>5mERnKOsCbXKXv~Qk;scQJj18w@n3<8B z^G!r)aV#EBlX~eD^e%|&bK=V%J#zo9UGjJTAH>W^0QhDgPy`rg%uE0Y z`};E=;0u~wNXW*OK;yTw&&&oe_!*fv|I=MI*1v*;Td7J`YO=$ubt&26cEcQQgKBes zHT@gtGb;gqOrN2s`QN9{5Q{oGpvvlg8I!OHT+C71sm$q~8^SDw3DP$#*_8~i9>~;9 zkttv39#b3U0pTchZiHZOD(aY`&JlEtYa{U>9XWO+$l!g8_-U^JR=aI}Hq z8JzbZ!?9Rs8b4J=CS7q-y4>xmA;An-91O)}tJ$=<0_Nb@e3R(jpdG9A?no*uy;%%1 z<4-~be! z1glPph3-AD%!M=9`_w4n-H9-H;vKR?hNYp%5uQTpVr1SaSJ-Db;b2q&KQNHhO3^S} z!^ju2HGl6}xTzJpk<5h9yCbVFc3~@K&r2Mbz_~-4BU|Mx+z8W*rzXcAod62c>VbE0 zYySb;3sD@tcYH>{@}nJ8ft>7&W8NwJkOzCn%!Vml?8Yo34rYg0K)19%-6ObWW+TuG z>%!T#1+G^tbX5*TgPKTBi-0L$z+8?F=I2ntis#@i3!Y(AB?oiM=GWpc{&y~vI2^GO zbtku-Wd|6T%PQ6Li&GpNYtA$%qRr>4HcOzAObJCFuncq^X0g3 z;aZ_u2S#@YH3YHLermE8;dQ?1s2Q^_L`?>@MsjGGTo`O{CJpf-O@=W3>oedwHddI> zu_q!s3ERJxY4d*`w%POp$d^h{(CagJ5_0R=F{3Sy9I8ziFZ1%M5%b^gS5?#1-735q zuQ%N{-{&e6DoZVSof0psJHMwkv2`FUb3OZ6JAL5pS;_NQHj{^)*S8eH4`TN&WT7+Q z#$psR2PflSdQ|}UOf)IGwHJR^ZWf4IZ@LJg8fZ%AxJLCAT=ffLp| zQRew>RyZ;N8~Azwl_ZMj^@~Iaa!tbr9LLrpVc;N*EsuBS>)TH#%BF{xro+kP{D6Il zAM#Pk(fIs0UunBu9e=ZDvb{Q7;q#$`k#M?R@2+){y}MpJ8lVB}nHJWMC!MHloy-de zi)_GOYJb`Fe%;0Qe%n9XeV02~Jk;5Ii~SVEzy6`|vA=kj{V-;jsy*>uaU*Q;an(ER zZ6-z1%!`co{t*p8(Tu7NuMdv475#}mQ&#B76ZS|kFgQ4w%nu~-wz#|dp(!74T9OFQ z!S{Z61>xi2vKttIo)j`czqcTNCl;+~eK++EjO370-nhX~&#wHO{tQ-k6Sa6dZ3cOd12XMI9eC=mIW4LvS*UOYFqRO`?LG;04~H4@2C#f1 zyxJf|RM-}lP^>&Hs|#oWuxGv$s<$&M`i-Q(_oO8h;{0LEUk`g9ol%iyl(%`ks<(D=$1eB-vFem+xF)UDq?2!!!W(t%`o)Q*}*Wks~vlLy_9f-#XTYiu!h-NoZb%7_jwmDo$7<#Bw zQ}$Ps6*2Y1l`{A;9~q$OQ=nla;U~a)?$1P42fXm0cb>{rq&e+@zc4{1rH>kKVC`*V zX9V+-0-H^@>f_vGW{NhDO(sdM(0FBC(iC~IZ)F3Z&sf(bHm+MxyKv=Z-0QVjF4gX@ ze77+maqWC{35PqRAdzUwMVKTI=|T zAV+?k>gmmEO0nA7dnvm5nIdxo_xQl`Jpow$+DidEA9c$->_rrhSKeIo#SbpJsjymO zCJ73m%8t4eK%bEcr0A9(ddo9d@uMGs>IWqS!n-uE19g$cn*@Dzyns9a>fDSLG&jSG zV})bl1M(8On0gA&r?IU4`uYfDP5EMw4Tg4lkf9d7A9B_m9W4{^KDz*Bf%h5z4jbPCdXGoysN?+GY(loVgT&{I?U+gs8dnxc0E_@x0K6y#=z7m^rNrU`>Qsd3^b`Y;L-KwKMO-t3zKBRZcMte= zZ^fOT@0F>-0Z;wmEHe#{dnh^+D3nxwVW?o?ks{Q5oa&Z!WWD|PWC_vvb`#W$#WHGd z(mt}xpNK`Q9>G;UfX1XA55-q*h>t=DP6Ucvbc^{L20jqDHlujhtAXqnlS(GgF$}kH zwJ^E)RQV=p^_xt zYZv+yE7kNXQzSG_^5a|VM`+N#nN)HT3i95}YDy_mure)cHk=t7wr`-B&bV%fn7Kf! zwSsS^wDoi3+#mslq59YEmjYj8X0=ji9Q_g&+sJ}fWa@9LD37BnBi#-I&Nl8Wu=+Q7 zy3D>`txlj}EH!pQD`@jz`>e5De)y~+$~xM;NdHJ$Z3Bi_&vM-zNje*<+b`bNyr*RIhipy}hu; z9y$Yi&vpX$8n>{nK0uozHoUJv@paK^OH(eBi*~P9)*0_&svOYeokID||ez8g^*+jLde-r#t+f#DOH2;3u=p+B;TV=$ZYY?H5RP3bV# zW_D44GObC7$5Bw)sYYx@Mq7YTFh3nikr3}dg+@brw9aE3Qlh(?!1S#WZD#`81w2MlBuU~*NHLucj^skk1=DOn!wBX}|C^FK%*id5>b$ax9b%Mw9N z_KaC&_OV*NjkiN0#Bai|)cE5^CojQ!4%>~lX_4osbL?~)5YDi1Q9a)9$V zRQrPL@C^=$W5PbaJ1}W9Q*G9MqPr>y83GTj<2^A~?5OgJOm@^|r(R{7IFtd8@{;z&GZNS z{h`XPD~<#UoKHRpc)#nMUl~)aIp$f*siGe@aI0xvy!VjY36THi6ZGz*F^i%#+PBI@ ziiuKZ;43FpLZ~ueefit7pZ#3Jk7!e19P;0%j)Ff^yisP+{kSDi=ER}@aZ8cFm;v~~ z0P4u4E0F4I`t^%~JAt2TpAQqjg`B`p7Zaj&S_)K8z>CNaG6+h_uU=4;J%pj)#hJ%} z!)mw7Vy@q0e{LLv?5xm(xCbz2d;rWDIskL#D}Xrz`kOgJ1z^sss2+iL1DG?aL76K* zuu*aO~9~*V-b!m)=`bm zU%SP=&lLrA^uxNZU{y_=g^M1*F_<+EyE1d0w;Z0kMm(7MNtuksp2VTf@<}mMp;4+5 zTGBrJmqlnPkAI(XP}vH+avN3A%9@EvzY63031f*+xRnL*D{0NxueqkNT_MU4@g)Fv zX5!w!v6bstla^NqR!JS#f4l-J$7z6 z1uqw>gHMT7H$bK?MJuc&r$xM|0`~k@u`gaT!bTadYY)hTZl{}m12-{!1xdsJ3W~Zx zLQ)EVIkR6x7^*4d=L1z&q@Y2Br+C@gcSq&hRl{Z|VT*-uE=w*&-*y>m=QT?G@u-zl zB+2!l&0L>X&)sEp@U^Y=dX>yHyS?G+D}9@~BF7}C%dQUn>8DRX+Z=msC(MoBue=)1 z_8|57UUN+(SC}iY`rp{MI*qN)GplIMc!6e=)tWGI;_KP44->U%Jg`O^0Wo*ynX9wM zWo4(2pq6fhlZ4&(hdc1pgIZ&bClkz~I=4rocQSYdDaHQY5$(Zs3@41;Wlb;sSzQ@r zxsw}=U2dX_u8r9`a=JVAMLYicUsr94^2icKhd&yKHFvq5Ue%EEOppQW837ZM&lLp= za6NJM{tF{()EdOe6kc-h)KW-4*XrQ9D*X~OO~3o;CXA%a+lWRf|Fj3b@Kxz%M#4J{ zm@`4Vr!q01VHK3(C`(YLIvVS1-dk9W`x3P;U+(4YD=LnsI_Z}3)bs8{WUTFpjPaz2 zzY>BpBME+^K^)|SSVUH#Ad^rq%<$C+Mpm7pa&swlI$ujz?f^{7EZ?|fwi#@@*u|g- z%;2CwcmRN&@o+jf*nARmT*>c6$eMJ%I=UuvxjrP7f1l`ys=xnHJu(nxjDunQIkx zsJ6z0pQL0XWrHpHpYoLBs(3VegUcMMDU=qq?KTC1%1XBq%rsBU%o0DQxnW5ar@uZoTz61KWDKN#JMR8QcQG37* zsL|4lCG{`kanfbvL8@anc=TrG`nhcSbv#y1*wxBkPEHHrRo!l}KKqCZCVy4WO^9bu z$!@9tA}d#7jx@T`c{_SG0P(b~j(S(kV-I&7Va&$^U!FcmUY#Dvm^9&QFt<+BcgYh7 ztKdOHDfZHF8}b+?@Gmw4c z0X&&-J)=3;qI%HdM2>J%@qgjTP?1#Ch}IJqYljQK0&XHH_5X0~YKpHNkK11&@>5rI zvU`wq*Q?YK-C;bT;GA*4v;=IJ-aXRi@SL%AP;}Fe(3~)Dw5J=Nn{UtXH6&M~8=0C0 zMH_53*Rbn7U2P06pRo7EM(@e0Pd>=1>u}VxKRKUyzva8i>cJ&2+v>kQOF7JBqCHMt zSAT4PF^1|eaO)tsdEgu>c{nNGV+ic(;n*(!y1@e=Wcs`S2pQ7dv`;9U7;D-CZU_3b zYIAIhzXs)9K=j#AS|~ENT4FS=D$tvSc-N}6+H~NFa8<`pZ8I}D%h9JYt_}@G#%gD;e`S*y*GX0e= zt0FIDF3bqCc7oE{?I4zv&5zJ3L1ePNgI&)eKSXr)mb2u=Qib84k2xOkM&Pvb72MyX z!PO@jNip=*i+tN_qmn250voq-qzRvkl}nkPCUup3SY9o_KsT`R=b5bdFH&LJPTLov z3$4o`Qs!pQOGI^4^~ou!Owb<>Ug;01V=F{+z;h$b@#sHL<+6?#Vv#ZvPJ6RMGsy{L zzg*iz%H@x)#K3eXux8d_4X9GlxrgL`q#89@YE+KWVgFEN*KiUf1z)CwA!%dXf4bAi zfNq$*Ps?F*UHFyg^{M;lo5~+JWQ>22cNG>SpkriWWP_$R(EHa<(!vA`(Dc$@{&f9H zzz9t*BTc{ph?@%jDP9UN&t(YcWo_)O^eh2Zx{>D!A+gS?ZYl{3GV6BMw#7x8I?o-q;Ii%vbg*5nL|m|CyG;0aH z|K%boJDR`iSqyU4<-z-i-^=T@+8NEzv*qPt9UuGsY<14No|tK4BUJJA;rA~ziEABg z?e0U893A0JY4?;yGJZmF8y#I9k=H>V85?geKVh^>Q6y6~-iSRTuLZ1ps2C1wVKoPR z{GZ(f4qzC$U^Nec^a+>2uPX|yCyJZyn`=Hw6vt4X}`SiktSpN?bCld$se*3sD#hn5W%xG zQ5c1-HE+>#Tvas5TYbO~E0PC`-A_`}sUNQJhZ*hcw2)ob3PlRmS@f7S;mo+4-wdGW zc#=zhvatS;WG`$KQ>`X3Jve&vi1~SB#)}Z55jGehnjVf0+JvJjEDT8*_TWN4YxKd3u2wr1Si98wfS@`1UO=(;GR*fFJG2V*HG-79m@<-c}^ zfUPs^!RP}aa#iDrB~*Ju83#4Ri^IU$d~n>q$m-_yo9cqma)Ovmn1hT48nF3mOy|&n zk0xje@G#@6+4FkwX@@Z4N6VcdGD&F@FmhGL9aznSqakyB7Ki|2v6z-o)i3u^HQ#`n z@1|ih%seC~10@^jEGhN1MsTMb@0ay-yC zO!qVJ83AVF)zf0%f~2~B#CYH`$&H9QUovfS4AnJ(hf{kdSA8adH1ng*X@SzD(E|}! zl~4n{$Je4+0}NpaUXI+O(gmN0-5Y9j`mPnb1d}=UAIz zs0En0(sh0Gc6x(~TGT<=<{g<%fn;7!K|ein{5)VtVkTe>{#J=f(BNQYjqxMq9xQ1T zynH;2ZP8lyY|AwwQ!6^SXcUk0;N^Qj>gS6Z)8T6I3d(c5^@Emsj%MZRo&C9aJe4BF zhhJ^CU4uuG^LP{FMc=n{ZmT})uMB%dO8c+SXBd5dnP;hR?D|>Ad6B$c`}(GyAzQni zHJduXN^O7L_9ldf*GhMD(6_q&?)tR2-`!1kNOjcC%DIlkq zh#+qdMJ+atvLv9#mM(PKrw&z)$_{@IONbSuA~p;FrzVYB?y=+Ov`^8c&G>mnQa7JZ zBhRD}x=bR!+RXH+E|iQ6VottZ5f+(5b_^1WJKmoi6OVojSY?Tl(g=Z)bHjl_ER?+h zHzkljmKzVBen-#uvs-Hjx4-*72=W6=io<#mS~S513wyv+qq<(PD%-dI@ctZ2?s!*9 zglRMWcGpPx{Pq&bc4$cB^*KsyR867G^c~_AV54$uQCR9q?nDr7NPK3HRIw|^Z^#xZ z2ugMJY{m0ARKfnZxd=qQC^jzBacKysVId8XgIAEmJ1w-V0r){oE!l=t5e!0|s*!mx z{YV4*%0uknkd(p$iZ6C#-vX3@j2JjLtbSNj5PBAM3NyN>4T5ITjrugYjm|XU7D{Fr zers&&(`M_$wQ1>+a2%cO-^b>#M(p5UQr(n_Fx(4OOqhDOxr{IERPR$`SnB9)k| zB|*d_qwKi5Jf>Y`EDi8Xc-Dnz@B*gUCpA4Kx3$sli^*ukC@>0{7en8D$C}3;na@2I zX(1W`5y#&y7OJ`!P`~w{EujtlC224&Za@+?T8x(WeA-ooxnDXRD9}Gid-AR4^WE#M z+Wot=L}|x`-J@D(}u3|!`azfbs*)F*7cU)dL z5eJd+=?(!D5oOW(yqUKITH9|4Q#YB;tfe?(JTUVen8$5F$5ChkVgyWR>(I{_=PYdN zhk_@buU&FX@}leRDq+``tye^gi}bG3>FqR}n_F82aHB24eZh1izdol3S74qbkr%{$)?qC1s?*8mG^9be-n?c{x~@R+<&`PMaSW2+2r@bD5Ql(c`dwU9Mh`eRXqcA5{Y7a}^+|hW;w1-${ zgaI)gPOuy{F&6B{!ug3e!(^lTQ1kS>rziprZs0`lgh{scmq*~|tc%6(PGAY?0_1hS z#KdA9Fk^3)M=YD&7yTjkw0q7#@wUB~hcn*}YFMiL{YTZ66-iK`Bto&%Cu`{UW=*d# z-`y8?9e1lDINrUt=3HAPa80n;E%GYx#+5#I92V!R!dQdAVGi3%(a4T(B!e)|Owy_o zw0}g(c1UW1JM0o+*f}?isLJZI*k}*w*4=5yXZ&((&~!^fMvKJO&9w5OGTj!wvosl$ zxm~s3iYRAz_PAIDna`~dy>-k{Cti-A6Ql(-ozFvt{iaNza3?{qN7)!sVZ!7wc@mzr2F_!DD_u~Y|b zf9&4;nmS_#0?l^h#)gPMd0YyVy~2aYyg9e7V@OnR(zDHEMI80?NbzSBdQdb(2U;5K z-0O)u5a=uveSNU*?3ySJ(Wm47Zq;4oINdek%p6v(A$(MzVx3uhOO?qEs?EkzQ?KWp|pn! zH2$P$nz`txoO%p0QN6x_53G1o;>8D%c#C?JHg6A$!^WhA60{TZj-9?AH7yinb)UHF zKhKt131Vs|We98U^c0iwQ>VV|FV#ulib(W+8z7IgR*94o{}@g5jt?;7uG)Ckv)y-- zS%1G0Le2i_m964S`Q7z-nCU#|)#`k+ zc*e)83q&T0)G8l9<5?q6VwMGb6zGGtvnZL@7^w+X*AiRhhXOtrbbwL6JoxN4A|p2%7BoV44)1 zeJC0oo+z58X7aK67==qFbW7ZpI0&X^6U4zH*Hl*sBE_hTn2XJ{l3^x%CRgNGE~a9l zPz!C(-7;i<$+m2EANgTvPMUM9$0)f~Wz6Dg95%T`XJlcd-Szo9Xj<+D1>%|@IIC?? zz+*6jW|}hEqag(43!{X$!wi1gl64T%4H{BH!VE;Yla~|A`$b_k`;9E;kzuk@a>6hn zEvwOwSAkE+K9(jf%W$A$90wN!h3e04om}MxnjeIDL=+A`0}&MT5Dy2?(p zZm{{VjoG8v8_{>}FIU~GT{3Mc(iq)vfuP=mCGH z0l~q_`IoUt6+o^Tn-gaJ1Vxh_fenyr24GfthN>UGk$8IlAe<*z{amI-BpQ3c`#kyQ zim$3pK)|+?2}jS#!;ic3RS2B$F8;wTeErLtF2tlCG^$(ETfp93(fGS3x+$AB__j1~ z@Y#632L$LF4k!+EcCeeqgiBYDFH>0WgH79c zLi)9h18c{{EA#RxE8~0*V5+TXy%sFSt_`fe2LzW-bzh|&Yyk=xp+-FUy^(!hTf z6OzoPP?#&jRS|}v^v8~_i7kK9S3}x|J`GGFn!&)`aD1O>WCkbh`M#l4CvgRQh@>V-_TQ zVdEt#L;KffDlipowm7GZ8_kETcke#h~mJ z+dAYH#kLe4y02^{M(aaPK6?p_B+v1W$sHYk{Q&H2pw{Bj;=OVQjI|8Dpqc*X-6K}n zZyb31gT%PO`_swfd&HuP+jVBq=2~Wz2ie#6num%)-@6_u(;Ab1DKB=!6d|OyFTNt3 zb#SM*^INTn^=OP{w_J4_WHYeGG@8{LSYvCl^E7>O>3vKMl zz@}saXaeY~Uol*v27KQx;4u_kqFDw=kTi0el~E5La)x#U1Z*q$J|lXZ)4;pFa+!Ml zs}||{twlZnT4V(L-?WH5L&WAHJO}zA7(O~jo$uD|6AvT@N>-7ZMwAVIRdvGj_F}_! z%lC;)CznrUx#}X^6jYoR;MH9A?)koe2k3+W+*wqqXP1HGs@PbUc8o3wNciC(7nDut zfr835;j&a&7dauuIe2h;iE@K&EDU$N4?#`6;-)`a|uZ5YG(6-gAkv8ks^7C8a}Wk0G7ZK>S+3iFRt*|DA*Eg zS%#PmyzCyqh@P{hF%vl5SZ?VyI|DN-Y`_$iWDw)@NYLsaq2JmFBN5$R;VF=U<)MA% z07|?$!XQim)_@q*P4)I~F=CW9US2PV6{$Q@$k^9Ph5!y+sCST!rq&`2!o#+)yLMss zY)ZEO4qWuv+_po!_b4c1HNfp`ChV|A zR?49Hi&m9PQ=FQ<(Glal8j6Q|q&f^y<0nqV;Je{Y9Eiv;r&Fx7=C|hDm zmGRSyI5Mnk4~==3a+a#*m5*bTQnowLt#!qogYfIJmx!JszOff}MaV>1+7<%TsUhdk zi9o&}p@SSblS^`W5TufzxX5_+ToBQqy?t;m@xz=ba(nA63^dk7g1d0}pg3VWgWW9s z8-znX8yyxEM|>_mq^_rOj;XiY*A`ElBC?FO!y3cgdK#;5bjdJh(e(Z5dUR$QM>MD& zQm>>b-$Sj9*1xnUKUN$|)i!}!9d~lIMEW&VR<+b1)XJqGe_4NFY1L&{F~QcP53oi) z58PvgaT%*>X<4cPKh>Y+4L|E|LVU$q4NtY`qzAY0hQJ$~+SrCiYjLu4kyg*32HUFklNbd=YgcoshnO6%$aw7egAU*Q|sVFnQ8$7 z=4o#@Q8Wl(KZiR}35-t1B#3q|d=~GQd%#Q2#pLcLV9-2m0yIsz<)1YTK7UjdVAJdM z;^SZ^_877?2JUw=HRivj->w*W#Dw`CpIV|!~QJ~Gmg=q<41yjT2 z*dT zj#e;erMBh40i3{jSy$XhOl>Pz%RoeyO@XD6WvJ5t<09e%#+)gxvscUwY=MG8zVzh{j#%tI;AefQWL3xXIdA*OC_ zVx)miFohz@;80FXdM!v_HOYvRALXBA4J(srJ`+4P1VGo+N-vH5i>&b@T-g7?WadUx z2V@r75+jIZahtWwW0x^uy3^9-JBuosw^6t4C|;Yo7yqP-gf`wWiObnBMP7C9ZVR4c zdr`0pGcY5#P%(rVmS!y{95?COYwUiZE%t-zMI( zu?5NQ$m9&lA;yOdlmltexSqKFJE+1a_4C$0i5e|om(DnMMB@;4@QrspG z;pZGlOQqdnd2B+dG3NOS8P@FFx_R%IleuHiCa&;2-(9;p^^&GB8aFJ4KWV^Sevb^M zP(e!8wQX5Z(cNW!co1CR*aD8pHM;?FNh#~$MEtTZ(N3LUG&oLX2bCQ7x;-O}d1cO- z_}8E~JSQsCFV%uI%aIL}zoaU{&L_CYeiEOgQm_5w&(2{#Dm} z!iV^+Ya;%|W4Ua^ne@^&qcq@pZFTmr=099$ZSzr?=8h9o82-lWGe6x&42wd%rUsEh zfh7Z0)f>~7m*(3LTfT$=vz{J~v;-NRTi>JbvrN%fX6hT)wiAbQSQG4=d~+%WuvD2- z=ds#~3|uJc!mhJrXj*0eB^PvA$;#&?=yWqLUx3Ggyac7PJP3ioN)mv&gej~vyX{o1 zE0X#Rs7*KB{&O{b{ewmFhZJScN#E20m);GMgj~LK8zydR;BYAPAz%=6JGcUg<|CmhXcpKg{N}|ZrRCcpOuqt zPQTQ9RfY+I(`t`0%b*{~6?A)Ud@zy_$P+;dk;=W(Jf{^+n7)`qAH+gpgrXg>WO)jX z`L)y3@$w!a#zjOXOkZTE`0Dqi1)aAuw~%S7+-HGJsN9>+YPY3@v1l}((^A}C+R(@~ zdDOZbxqGr$yg(;Xqrt`uns`0%PMpk6!v*9tDf7e4?hSs)KCyT%KU2rcf7dzF4SG#AK)d%)WCz`!+a8t0wE*T)NTZG2Y^C5FAo zAnn{Y{55N6pp-=@$KM&?5~^HN=oC$3LrFa_^;U83@WLg_%>l4vYQvGgWz`DNy)5&0 zW|$YW&{%1ixNWZX<0r34Ij$b5ju>^=sOZpju$nU8&JT~jZMJrb_3IDuDdSODftVJp zvz6loSu36C+gsjT9C(a9xkZl@M6oI*hn-(p*tl!NyHh&I+!k!T(RZIb{@I(sdalj> zqsj6YNw@znE5gFa@Rz2>c$!u?ZVO`2#bni#lkVspVIqkd@ckpsW?Ah8M6)I#JLId@>*|vg63pRQ3Xo zJ|v9=#BA<^w9yGwlr-6;qum~R`I0Pk0*H$k4qQGpjdsy_cX)8A6BB_SII?`4$!+iE z-MlHY78%T-cfIaL^LxF#GOoR~(p_}5KZ;89R=Ic|q3fLUuZ;Pr;7`1F-0V)j-^=_$ zA4J0J;zJI+|5#Nboypi*Pf(lqf zej{|L`VZrkWGPl;WkdU@oHXJXB5nx9aVYz_@mXaDaKvlIoV3pfgXTHdGG+r0zm_zN zUpIBi@pDLGs1p5U1SnARbx)XO2qSCFzY@iF`!DsHJ3Bg>reqR>bV%ftEEdrF&SH;jin$_38#DZd8}>f3?yMZ zT+lb_iOsI5%)|4r6VMYsF1=b*ars-xwG}MiZ?5U4?r0iQ?q_h<(VzQPi>&LjA+Lxo zqWipzc17o2nkl<-W#O4!b9{kgX@6{!hpYN{fsqzO3HxNeS{y@p;(G`YNsc25rObwh z3S|#earG;4EcY?Syn`R?i-tFmBgl{T0Wpe%6V%nXJ+erk5LXKqil$oE1TcBlT(0^^ z{9%141;Ymrp_a}xmR=g1R8N=K)MBqKP zTyn@T0h#_!paqFFIJ^Q3NHNC~@DYgSk)6Mo2Y?&o2gRjS)PZ8l!O-|gOo9{(a3137 zgeWDfX@i zw5$)!2NoBN`s+4rhCc}Nida+&b_A|NowQ>)?EW-k(}rwRgCsBKf%Zl>qsto<4znPe z?U?jR4`bXpXjE!8ong`-His1u00d@=2dVO}WZKHU5E z97x)mKrb>FnM^M-!=hSx3<`tz6`_JkwgrURb;ca zjAu*7J%6=gYm0BKn8-ZtAkP41sN$@sUb86u3GovO;d5F%6`FQDizm8kY_Ek*c@z#5 zOBM^yvllePl-^ey4xbh+G96)WG@zBa{Pdv zO3bUkZnbf-WE)K;;(=JPnv@+^Fn5FWuZSR-BQ^0NXG`cJ=XOqOsq`c3n^hvMT-V^{ ze5S*eQ)YJVhF#&E+7)q|{jUDy#PGp>S*d87ozi!VX0Ev?5znlZR1gpPimAPRLb;J9 z$@%VT0-?dWca!!_Dqsm$S1X2{^Ay{kqY@5UnaV3(xnCB{bc+d(yOAHdu%Vg+4=!fZ z?aNG+-M$AtdB=PiC|PFG+m}_tQ$3++>@m+;byllj&hnqfHdW=18xob;K#TX~EhomE##*?E(ozTfE0MmAp zifVhPMSVwyg!h@wJO}|@(|>#g1iYj{0Y=G!ne)qXr9*-`wxfT-nGr-u!x3+us@G|R zddnVWL!7n2ob*(t0(B~_E8Q7y-o5)3s@5HfBI7$o{_)Ra%woVLwb)$f*i}PJSh=6B zIxC=T6)2=Pfl8Um>Vq+D0v`_t}M$pQyGm&+O2)ndaat)ffS9a%{x`; zIffcfr7%j?+>9>De$|-C&4gV0-MPx9+(Lgd@(xsNu8GYAeX{Nw_JS15+ik#g^&}>K z!#vVz^?L^@dkyO3m(f;^0#@+JdFl#l$c1+53O$yRuj-9F$pjmybg5%jbSGmyvSv@Z z&6f9e8g4d-_klaqic%q6Pz=wEK+X~s60bZZtPqddUaYBi<{qES+o^VqwvjO!H-AcDMQI zrxS{1TjN(;SjK4$8XwZD27Z=m=~S&J9GroyDebF3+*BgK!y`RxcF9t>G<>*uda-pK zP!gy*e`M^kNmL}1%mXP!^%7x4Z8M%YdA?&4yyJUN>7@OUWc!PF@1NIc{|ra`w+%-C zAb$)5zuO=GMkfEe8-@ShX!{(j>;#M~O#j(zCl-dkik1f|jhd4%0?4J*uON96NwmWV zz}&pf6WGu2wUz`i!f_wL1pu99g8%J#>Zg6l7pkXqMtKQ5-e=OiBe)~TyIa{ zy`wcJheTtfgy=9^P$EKBzkw9{n1=`!I9N9a6BUl1n!xH>EID zE#|~X*twF*J3@e&K&%b~^?{C{#L1cH&>rz&@f7asGe zb^$2ozQ=?z|8@W-JNtiniid;suh6l`gtYQ0NaLkME+_xIIpg(2BzpWQ(gzp436c5X z`Qmf3{oB!wHvR2rgHwsXjnNS#T|T^A?LN9Qj9sikXu=;NUUB9MBJYJgyCE1-d1znW zb9}tH8y7|-!gXa=nMLf}5Z0=>pyyL6ilh8#eU^{e=<4%(dnVvp68kCoPbL###S|@f z&s0YX1!1N*|lN;dxlVUf130sCdOFMon*=QB4|g7Q6O_v;$V^}%vqMhf9H2X8x^QR^tqGeask_U z@ST(#rB&U6gZOq5_q6M^^&unYqw(Z9GCXYYZMmF z8;(2^7-I^otC8O8h-6>GWsLy41ehKkFHbQgP4=|eH0 zo54+Jf%#^8)k%HcGFi-#O*GCaX@2g_xq!+|@}BH`hH3rT3QqCN28oAW)Bj-aEtuol zwlrIdSr#*s#mvmi%xp1OlEutyF|%YbGp3lC87yXIi(2-*@4a(govyC#sC%orq9XDi zWaiv!?J>XcO=dwrxN>&wSC3N=N(`y=Gqs`E-$z@K68UP1^i?vB$M;P#4P&aB6RB(C zw6h3cqy+X>%)Cd`5f+YHo|aT)N9~8z-gJCH`j$sBWn8|6!No=X+!}HyC?hX7NnLqJ zsiqP-XnE~JA&b~LNj}kw$7*n^Ki#3KJ2L4Ib(uk-sbewGrsITgD{P#Xd9LoPF0JlV zVl5Pg#c4jd873v|`4Vl$(X@85H9T$Q3~nRcb$CwEmlmPTniexB{s!t5JnWwafc==OAgh@aehGep!mzG87IUd0tn6AW|mG6*L$~WhG74;YDRO6p*6l+ zHBB0=v9R~$1nRiGyz(~6OXGkR!;2Wk0TnmHIlXX52wY~D@K6o*iZ8x>g(9Q=B zoEQ`}^Ik4t+fmWmt1z>9z064QlRcPveho}Is63}6n|xE6q7$V^mqk&SO>Gmjpf}=1 z)de?<^b8AHIx;7PmBIF<{mY!pASPMFQQ;-qGjGRf1x*1=NYMpotESHMwQ#E`L3c_?ht;OLjdi}A!rXAN-3E;@aW8XE`W}Rn%%gd;mGOUXNUxstmE1i#{{_j za@uIYlm}KJiT?vELbAmr*@i(`opVlBe=DwbMNgH&)*W)+e3-a8dI)Sz^>Q4HKRsi< z)5axxBt%Lc)wuN8J!;9c{)-MYge=MQ2`AvZghN!+3DxSBg&7{c5f?@TvEu0tn^hnd zcK6U5M0$}ZroL!$G5&`BkVwXW#WJ|ZP|YyORf9*ET6`yrAaUkt%PLzHZ2zWx@HE+K zDNdviJ}9zB^xedPn5pJS=T8j9UDBOGOJ4LA1W4(I9II@RkAIHX#n zmFmB_xx1N>@M)@h8fYwR{3KtH`T^AvSZV_x$rhjG%?)rNJsi-Jt@c}_r!e~Y7(CM< z>&^2rTZD;->|nmr@j?M`uWYMa-EJ;yEJWXU-Cof1et6Vzd-n45{JGoL*v;Yj_K@_t zn^fo=Z2Vq=lJ8yNVRdt^oBx_`9dp@EB6)egRyx~(6V2Vm3uu}pN!J}vg7cJQ`9w$) ztJ}fj8JT>XHFNxyE>3945*KiI%Qv$S68HoMv3HEUXj26g8jZtd-&{+?*MJQ!QVspo z6?Rr$#ie<dXghDODYS=y^O z&^}v3lpBB?)DdXu==8|oK}?N;cHV+|x{y!H<-sqfNI+UkvU4CbqsWRDluXA}>W-MU z4#>hFBcVZU`rh~g?Ep3tyPiIXOEjc`fT=ubiGe%2#Elr{yQfXcz!;KhkHEyPvUBs* z5al8@96aTN49ur~=uvG_#2UX`1^O@9)6MqaDlAaoy*^~he$x6HmWGtkR7u$}LJV{q zcA#;{3J7or`Sa=%z{0vhKqb)<8A!Fj2A87L^35b@(4h0TGZJ-J2cm8cNGjkC)&Arq zsH4$Nuem|h<@V*_MW4wPJr}t6VVdsX!Z`hQ-TVWKV2YfsdSzy*vW+(o(HsMZ%@*bn z93lEGT6eK7=lcy?iMca=-hPQ=E3}SO1+}}ZV^~NP0FIN1;*XoED`ilD=U1pR=e{q{ zBv1nQ3C!_tX$jc@7l?M2z+HrvrSiuFbus#hE;82ljc8k-GS9A+VU;3&^>V{<_S*~$MCw$B|sUo-b7w;_9Rje$qR)37EAvaSX-=K9V zCm*Ebpmhvuidj#?8DT`lM6-^EYph-qM;q{6CPdX&QEOiPrCcc>SD1 zR0*R}uP|{{K}b{3ZZ8dyDvOw3#)GIRqg9Hv29Zt8PD)zK7!lR1WIXGLXc+RCS~Eo> ztI33H#`N{fMPB_EhbB^eSCa*yvd3Hd%^W+4w93jzYlCWmDv`-<3z+)A!-!$~z*n@+ z5m~M8bnfc~At|{{E*=1-NILjlRT)8UD?b;X#)$Insoj|#Jn)^_O@JuY-L{4} zIG63eO$@<(H$VDrXMs8_^J3adO1dFg3`VcElJDU)@tk%q+Sgf`-@i`jH3f(voSoL} zu4lu)`{B6yi~`8}smBCcf0@>G1H{mAk_{R;u4hFRi}L2ZcL_a?vZtYV38XNt7M!<# zymgb!MITJ#?U1~7jS;B*9etQ0_w>quK%S4M^9Z)epH$&KMt|v}9mt^HV0$0aooTpp z=SnSWgnY23E5=@04~EMldjQAVCIT&@9(;FSO&6okC_E%K4?capDITH-xbkO@t%~8b zuTr8+1VonHK|XY7Hqw(dGla$&CsJ?gxnG3!!Udmtbv)W=3Qy#$b~?#nbw$YRoERPh6hUN!o2#AR>tD2Ao@ z5OBhBP8VENWFECzQ9tKCqoS17X?F9hC$&*v7wK{G@ZyQfQ@-tXaeePlr$bh!^!zyN z)T}KhJ9>!e0!NAYu~jE28}43(HvKq#&G`l?yrhvjtDQZCyaU%ZHM@=`%c9+VGT&u% z8}$wncBhk9hSN!+?S3ZNSN86idc8K+w~+1tUe4UfkCEiOuesYjbhL&+9&w=*P_<*t zO!q!cKQtL+H66BSzwU#3GubqS4Aj|{SGiNU5oiCHy2lfGd8!$Koky=+tY9T(1Jr*o zl4^P?keAnG99~iwH;tDPX+{`+oUX(MSe9Z=uG(jI?@E)STYs#dMjEC4OzkGz+-3z+ zDnf5rZn-JKO2LTU5bOX%oj)%#Op13_$puYrFg`x8mPDSUJ0oZ#6^Lk~=(ZshV&9cR zbvvQ%fOoFFRTrU}aYiXd7wpG=(Egpq30HG4so$npnu6b5^hJ63`T>-7!(Es3Lw3?6*C4UG7Lpj><~OU6QjD7shpmyPWRK z)xsJrI1H_2%f9McK#6qp-4RpQ>hUbllkQ}J?_D<=97otTR!sfzCX{=zaT!>|PpP=B z6o#Ab(KPr72DQp<)ZW=d1*4*K_i|%c0C0%WTSO4T_D_H+BbJcCbh#>HP`_0j(1aOS z*hC|Kk8p%)m*84YEW>tGXxgpe60KJ8jw51T*CFM=cCZw#)yMr6RQA;yc}I@x>b#!g z`*QqCJD;z;Q$Tx&c3dZ7R(Rl?h7a^RXxGl`+Afz-4PbX-4PddzbNki;KM+xsZNJGk zp66_{>|fsON0^I-@kQAOb}AZ8sO9&&FJWb!)2WFKT>{5WJrrz>;u8|=rdEQk&U1Z3 zN43(LdN%8V8Dpj%(opP9MypXDLgd?DU}y9iPjDt*pZ)? zFCJ$;i?ig`u{DF#>!aq z(!&Pc^9Itw#Sf1?Q_<`(a$6jfF>MLTyL(Eq#$D?j8k|!o|u{tn=Z*k1G@9Sx1l39AvdXUHG zFC6@V)7HrdO4Cws4Leghr%?-}h;qi$pQdMJ;e!>|4i+P{{5L3>0&zmTaAHe<))m^4 zwH=oJ5Mg0iGfv#&eO?G`CUr5juROEBY`I5VTJ4a&w2b9>b{%J4rog-DOvi~{k znG}i9`^ta>IY#dxQ4}`|}IO>q|&b z)>|aKyo98_6A)Bz$HqX^r6c|5M&n0z_~WpLwp;avk<8C%v&%gNenzw=izCd#Lb;$>BP$qZeRYC#L+Wd#;=@Nrbmfd?BwXOoBFLFw$Z46C(DZ*(q^$-N?k>!&jJ}BeEYY z-h<#^@sNMVNTbQQMGZZczjNSW4GJWq{tnH8p*i_>zU(ICbBI(dX?;?;`z1}i?-@`2 zU%@L?X$Jw?S1&iXTk=t^D~{Q?Nv;O2Oh2;HAgWq7tT0h-3;7BDnv-(PTWRXB#TLa0 zQPV@Qx1&CC?RptW0H_pKLug6TSa)Wv8r^`&vVmfyu*w~r+%09q(gHldjisU3np(kD zv_N8qE$ufy>f*Yc5B0ExRXHyX*ohpXN-TN#(dNdL$}?MSn9&d_4ggUZ!?)0yGIKw$ z@25P?*&x1CeRQq8vIfc8ZvPaSLh87u`AAw_o?u-n46G48T*0b3WLSi>3-4@+JVpM^ z6H-u}ki-;!zo{u^tyFbvU!7xWuCPk>gLWZ!tGoFZ9lq*R`9Ot*=V>rXs@OxtyGTB! zf<1d*5uZ3pX|v&_aF0*PZ@FU*VNUK3kw)BIEQFQOYe* zhhktfU@hbxl9CD$haI_uS9C^4MBEa*63S(HY4@hqUQ6|cAqNWWTt8z4gN+LHOS8^}g6p{mVf90ZNrp1K5VpVgxE{@KysjH3deUIwQz%%dFmbjT8%291; zs=GXO?^ItnyzcHYv+b^D+p@;?Z264E_lo%j!WU3p`d72&Uu?qs!yjz_HF(lC%3txM zI>!IzNq^u;b^eLgfAypL57_AWk8NrD_u)y(MSsncC?)>y=1I6!kOnN~s8#wJ%vJQF z340f8Bu3wq^%3jBVt}|P?GWL-Mc}ureso3;+oa8Zr_JDqAmMSxVMVb$2Dee3f=ufd zXM#cKR-QUGZWRG-gGV$rQUyX2Qz(T-5cwE+VLn@D1JvxyJ9(|W5>*XX2eoG}Khb*? z##86UDoN5&n4=pI0}_#NRrD$L@S45QTzU4p3$%gShn|D7LW_j$vh7Y6)TUsD7#&03 z7*ij?`mQyYhRh_ERJkK=$Wpc(5kRc~0JEIgX|Jd;n{{cN;Z}7gRh#2c-3eU&1lp@< zWE;#HgO^{2M9o$#2WXcxgpv);(^CIaO{u-WVYZ2v~_`eTOR|;g0rZ z#--7J#1Vs4a@8w$Q4L-#XjC7^JAz-1}h`si1dg*YpB|p;F(VKDOXxwWKX1l8F*h@1=T1bsBP7+xk+$=}r zL$p636~c;5*bt)fZg^6uGDIZXD<34@@w*+p2567>4OF-EEmj8A7?!QqZZs^<4qM*V zCcMo*-4)tI+N*p%E-v+OzFr$?t3M1JoS#DfTKaTOVC%nS(8HtfwQ!8ZlYJedVQ+S8 zi**vsvT?H!(IYKR3feN8c8I(79&Lf-fT_S16S~Z`eaP_*{{ z$okiL(w{Fn0Ia2NIE|N{?S2zL+9m$RDnOzi&dpS9eT`tmb^Rl^38GOR9=t(CYSK

    CP}DK@x8gY-HJ{} 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%0Db$&_fo!v_)z~0&lmP07j;vVU9 zTeF|~ya1nn-28ynDq=`k>aCj7^~P2~P^iOg{)OpDmNK;38Ft^@tN%v52nrLsO|b}S z7OSg8`jw`#2&(+h@EZ1^Oft7HH>XQ~>eEmTL8HSx-S3*s&R)4t4zXB=tCB#~6mj1T z9GOR)en@h9%~4g2+Z=!2-7&%iI0Ys;^@+i$1g3L;5O04Y9df06@@hKE#h>k2C>(rz}qLE0i7)!E!9;Xi=c`56QU{z|J=-lSCbxhwjOu$i5Dx*R|(!f z2WoJa5&XN*1*(XLynVl6hKha*0a-W(Lji_%gLc#BOiUcrW#_ULP=Oz1B7;~ZZ;=B7 z*;A>Cpprl5xv~JV)d)7O@J~RY5cQ|e*a$Vw5B8_uzGxYjB8yKt9CakSM`IZ;JCq#L ztuTR|!5`&KY4>9DRy}#e=oUUc*qzD|eCPbcowwl#_)t8W`7@=UFBVK3%E1i^;xvH@ z#pA-J9C$^m{B>mW12!ZCH!!-l-M5cCSZW3_UXrB4r_i-{X$$U~!?-?+L!S1G@Z3x~ILpeQUS1wK zP0M=wM*BkhYWt>pHEJ_Y3mfnx2BNEO4Fq3RV|F|T*8wac=W znwm;-nwzfWdw{J9woLP9iKHKCd4yCWX`w))n;3)^kuW}7n=jMemU1!M86+yi58YAP zOkDfvBBIS=udGIw)|Z!h&O+{*svE}qxy$6hyuwZT^OTKNF{;XZ)RWt^`BiKBE|%^7 z2xlKxm@bymsa=6=#E_+0_-&$LUv~^J1oD7R0^QN^4fnxsJz(G+p2=fbF|t53WVjah zukQgL-~h(guW?-HGO${A-QqRkI!1M_LIo4u$3~B$-`;e=wCI!1C$v!SUF7B3<(8>Z zS95)N1Zm@g`T}sEHg2qQ($f#+B7O9y)sx3cO6uu&<)EOC_)&&Zg690><27=2K*lG> zd7?DDb3o*{OzlN&mJ@t%2`JScQ0Q4hX^g;KtrdU`$MRH%9ye(`9#znMcY6ir$1XYm zFUJt#+8^RRFLr~PgZAT{1x`bAn0hDIXE`ybc-wH&AEI6FHtTk@Xj;v~-b=^?bq2RL z5LxruP8szLoUb-Xt_UXXks2l~Kf9Pn`Kc)>rl3k$)q$_|I0A4MidV}p$O$C2^e0L< zSb1llY)QN>h<@{w%Nxyc26X5I5`?0T8_LGQ#;cVRdLxXEy|NSZz^V!~u88{*dN~g# ze03UhLoZzG_$aJ6Ig`Hrd6x^J{k9j)A@r`qU7F|x6|C#PqPeovNgQejWJ>o|^dP)y zfIR}=`pn;Z#eK?h^CvG)D7@_N#T&<&h;#aECUx$Y%St+%W8L8B$)p6IAi2g*NV}vXjEE;4M(xhdcz#>{el)99=wxzW=+S(0iAQp%#ODsSK2_Bacb1tg`vWm6<<6F;7akeM_ZM(l< zCbL5uXoP@W1t-4Gc3N=bS)l`Q$t$!eTCM@r3J}~>RsjJVQ=B%eI}Qe25}E=;2Yj5^ z0?RrTuqJPJ2}u|$d?j(u?10=-;Y1I#!wIxUij$I$sfFxJ{R)%{HOh;**@GXc@CeGs z5*h;X9bbY6NZ6JmPHw|bH+*)7pY)M4;Op7yH*t5$UEyVOU3d%vR0f?y z214$MJ^N4+#2&orm+2yvxi^#3xyHhCsnsl!R1-C*`B zmg+9y$uXkmC3`-8HV5#qv-DR!eyU+rdJQIyI<~Xlb-P!6QJ-(P$JbqDK|xCsY=>*Q zEp~?G#!A}GNpDi?g_b>FY%th1jjmlUJmp3k?U~ESuLm7n2U(xr_KYme6A*!6!WG{P z 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%0AKpzS;fX#X~MGU z<)rp9oki?9|0Z_y+fvWa)T(t&(WV=fZdV1K8J|7DyYGG-ayBMRR;>E@Z?s0xjdCaP zVlYQY7wNr)SP!AU;@?ZZV^_qjroKMCMaI-M@W@3SoD?{^w_goQ=%}qtN}aUAP(PJx zB{CPFAm{`qZm(Lu0;LmT#f?dnkUGaFWLFI8+MCd%Fp{03Id7VZ*74dGg#K!Gmu`*( zy=^b`I#gjX&iS+*$6r-)`pnPl*Eba+WGE7#?YH~f;T4};qC8!G(Zn`9Z7m1wV^)bn zMMkTnRQ|C?m?D)8UK#>(kX@k?6-fN350@Pnuyp^d-Y;NEl3Or(FD5n_9U`~+u;n>QCt z>L`aJs}{9Vc&5HS7)#9}vfi%!{(9ji>jeVQ)Ff<~IF&j?JQXTxf469}bYZs2t_ok> zlQsAlOWh_N=sfYcjCKsXSM@w~pSzrBB)(_>O3)7Yfq{}aQJnukjQUB$N72G!9jt&V z$tqVV98n{VkdiaU^0-}jS>ZUV_W6i-fvy#ab&Hm=PD~$rr#b@~(ERgdO8dtuW=PBv zMU&pqBN9#Lkv+^h6%&O4BH8Zp6uUIndl8Ic*(|PLVocL_T_<=gmLB_eU%$ee(YLrC zy+ZSbXXyM_H55CLb&CUjr*O~l2#lQv<7P9`55rfoL&L%c$q?{a#EFfVcCp!X@h=Kik6ALqQ zXHo_Zb}mK^ZWbU50+Xb(fwhH^kgb`u2`Te$owcyAoja)(1CWb_k(-STr0is1162d$ z0CE9IIk-6(L3&>{ASpK&7b8ed$;u9r_x%#7i(6Qmu#&O^e<`f~MRLXYcisP8=AVNA zD)?)d{zcLK?*`-lLq#_$3o|<@2WX&~xj8vFev2FbMcVjFO!_~OHnMX3RZ^ytG#XpL z3w~BTOZ0Osy1=6qCl%;h$D0j5>d$v+2A#+zR-N(e zq}{_)dziEK*d_f!1G@K^Hn!`m^^(4}jbG|DC+Y>uL<%E0%S~LgW%xO(qth&|qz62) zGRA!yuk~p^KTnf1Hx03Tu*h9py2j-3%Og)!8WP?b<5nl%3VWSVg<0HRdfgZH);UH@ zkhb7}Rz~Jw{RFAp0Byj~lb)O#N#i85$eKu_N?wLJ5JlOWQe7&IJ%o3|Y_Pzf zBxT|H=d5F8Xa6mS{{7dO1>wK;?)O*zoX@}4FAaG^OA{mKzbHB-Z4Asz5SY|0jGfI% zxj=pWbEVt`x4wH1o3K`|_Rmh|V4T_}Y1lr-#*QF;!Cfc|hLfVo$kKgtOXEyI=U z+C;A2O5apSy;#cRLOC<-O>mePj zJt3p}Sr`~A*?S|k45La?hdX8e_{pC5zBJtGg*Q$iPXMyiU4>63tw9k&Welv+01;}L zJgx{s%pnL2z5%4#ud|jdGH3`aTk;r=3;~vjk_FLj!dJpqS~eeYpzY`2H%)`%lgYcV zi*Zk_&*U6y+{>S$G6+v#;hSpxX}g3atG}jZdL41F&1`;=2h=A1&@YorAyRXz%_;I3 zK>A=~vrb~#IYuevFCzfQ(KStv^mDmBUeb_w{&%wg+Dqzj zbVt=N3f-Sop){z{u%sd79CfIHon$0xS-f`S6m#_~qfLh4@cms)fWUzexF-D5P=&8hZ6vtx98vM~-l?WK(Uq@1oxjSSdC<8&Xfk{jpsT<4a_CoJUM48;(bvU@zazf zl7Q~u%(%6OVbO;>x5npCl(OE8>H||(fpwcqSw+GW`2rv;MQlY5`u+*}NqfPm@eqN} zM;$o1^1HdyEVT@8_dIt5$B*$=Olv2LqRlPA<9-tk)=oX?W|O*}%YORmx>Jb?*l-@t z^u)ejY&I)$TspDkEO<5TYdhTMp{dF_9s%75urxAF$_xJM&(rF4}_5i_Ph+ z)Y*pIT7A@*VPr9Y+FJin^%|eN`k2*|F~(kh7&=c)M*j_(G8=*F_zmhoCKTmmi%ULN z-!hxcF*a!yTF(3~1Uby7>h+MQ4PYU>a3!VvA^T_rXcVq{Y{x;22XycfbuBoi_03)o zU(^L3nR?RJD96z;r`L8&HV4!8V3T6msDM9p0-$?90v^t&$$iH%ST)=|Vd zDBgzb$w$HGs8@kEXtC4q`5amX0GT6w#ihc_{)21d@J8#+UfO9 zuVmYp#MQ}U8x&Cwu{>N4flDsZ33Q1H)V@n$`DPUUM7<>`{2AgqXU%h7S6!<8@uGat z@uZ>E=7NzFp|Po}MtBXM$iOstWm|a?$G7u`sLx5R%O)07T5J>zn^lBL2F3-!<-IhR z0=h>_eN6nQ|2=9nfT=KTW z+fEw^)uxvuvx{E6u8UCSj-xPZM_jE;^5!X~Y;6!OPWmignOF_WN6IuEWFAk&R~|d^ zGj6%vL4tj&Z)tmmfru6u`fR?Kl&arcon7rOVeg(8mOLTZCm}JnKAFCithi~U5rmfu ze~wdh?lK7srXT+yqN+Dp{?%+--nG)fbKsl0fzr2*n>R!^*LCAiS{#%)jBq_NXK!qz zXyQy@;OFD#NKE$OP<=(_cgEgK)8_b^mXI7w7)wi7<)Pxgj+Eg9`=FvNFq`0dg0lzL;1Ui+YgvQEDUGZ@ zuQK!QJyB#vXJ0G!;%RHqrR`Bh#C}u$8Wc(HSi5ZG2kKaWqto5iXEKtO<${!uv4!%5 z8MmLuJ&UFv&@VvMyi?;13L`PEetj0R`$p>kSx$i7-wV#hsL3X}Tp1^E_U#LY^=0+7 z{*vYr)1|c;=6f#%d?W5E9a_F#FAIP+-TaETn3c~7{f)2kM>F<0RahvTN_&70^}NLZ zo*!{>Y(rupdFe7o^JM|C?KH0m${D1}aI+_bdN~YNctsKZFJN#@4UIoo090!Af-)<%M|A_YEFuT%**?g$&m8PnP2L^Qwxmy^mmTvbR-^ZQ_!z&h zb5`nUtvAV+Au#WG`lFxSy6lx9ZkOr3a`2K&vK7#<+ zo-s~|STlenEuM_a0x09tgRSoZKeHBls#S0^IjJO-Eb?L!gw#(4FFo|eDMs}dp$LXf ze>jJKq>S_mc|t;9J036Cb0~JD?N|#!F2xF~;HVzYM+IE49lRG2?lAVK>}qLWi|bL> z7Z<{pun;GLm8#C?38*60>O=Maw!noUsy8XU`GqnKQ;kAD(frv;7sFEzb>0t2ki7p0OFp%>X}%tHp{9lhv^4we1_}B z)NU{@2oU@9l~%T*T8xq1!a%et1b~MIkIs*+22?_`MXISy^p4)-V!Fsq<8|s^ZF9@a zaU0XTe};UQ$*bpE1+Gz1qdMc@h_@^3l(}LAt#@wWaSEu(j4AsdsKV0-T(l7F9UPU( z+*IV+ATru;y_NuakM$nkS2|vb@o9h095R4Jb)zX=cc%>7X~o!lf+o}+6OHZ(BV1ay z!{kLj&%Zs1f zQAd>VFyM`2-J(UN6|PIkXNNG~eeR7)H=(L^YZfu5B~E+y?Cx#vJF_)D0=T7iroR0^ zSmoKH?RRg(+~5(9W#)RH?F+}Q(}2A>OiMlRj)IjYs1$1{(#0R?t~A!FmHM*ojD!%s zeWse7IBccU{~C->(Zd}rO>Yr+T^mPK-F<&6^)>6X!rsUP-S#yQS{83K)&9E>-DJ%B zD$&#m`&(^R6jrgQh5t@y=`0(V5^WfRTF?;ep;S_C>-)FoI<#BxZ%}G2su}#H>XOD=0<*EE&g)Yk;W~8=9I%jLt?~*9X-*Kg+y22`qbOkzVl1His`W#U19}SqC ztAn8AJyF}JR?5oW$98U@;3!bYb1%`+F$f8pk#jYkO0MlMf<#5rWX?()POLQ zP++f}gG}5u_Kl6qYYFFGj%j?d_U=~?1C6>yPkneaB0YsrVQ)8|%OdPd#n)6_l~8CN zTeFDUUW~kL(ela~pIwZCdMNOt27d(00ArvWS|mfaUXESAGcPbDrMX*Bgr9g@(7EMc zt4iK{HJbex?---U@NqNy>>jjPC?-FEznIwm?NI$CGt_@imx&wLSXg_IQp?#n+mZg^ zVUmj3*jZZ8{3e!^ogGb_jm$}z0h#~gx#SFNKrX4+Z_4dgMSs-u zM>YS27yAo&#=`xp0*yaC+~1#mb910nRljD}FJBo%ko^Y<^v_=W#bf?;62#p7;saz2 zoE8)@d=5GMW9~-~aQ+fRjb%m#O`- zG6hFFqd$xibYt0pzj!wgtM%I`e{B-Kjq=ac0W@Vmr~U^VF=%!9>waL8AdS*PiX;k3 zf5!xfU_r@wR8hsgdRat(rIvFWcYh)vRpPcs@fLJ4T%#u}yFmO1*-!qImuzF~f#dAJ zb{t5)wD(4o2pM49ivL~zdm>@1_cRgemxGUdkR!3E?Vz{*j#of^f*x!L#BB)p(5T2@ zPynfTfXN3@@+sr`(mP7DY_p|U_B8>y18&=xCht^bOgCBINX6#|d%=YHjAq>Wd4J2< z?&1w<%i9krZyU0C=a%ak8~0@Okoj!?E;0gIbpA)9z{<(`*HO?>lCA}f!lDy`9x2`v z=dH)&etz5Q4RSoxWEKEsII*NgC`5q^FzDY6fimSUK!2&fe%4kElfxJZo+JE*PYTv( ziN=wHiYu)UW5~NUsVi?q?ro~1mDv;yWr+MfE4HJ}_;cvsZB?6;gk?*xsmq|~M3Raj zHA$U&MNnSYevdd)Ge3O(0b9VF786`C}?h%?GFNd6oPJmEp<}bApZI(jWIv;8o{+ z7Nru0(_BrV@@!y!LJql$x%FQ!>ut4b`YiP7$)E5`^QJ1#PsnOrFjiflCfI(C{yRML z7ee~qp$$-K%zqhIW$D=Oe~c^Rk4SI$Tf7+4pKhiZTfI;R(Mm1@bdi^81Xp?D?}=T_-l7xIPuXMHggpiAgsAL+fM zPiahf{Y#cmN3|zO{jJ638F0o^9eY51a)V!{y=;lvdWL4TDP;qRQ9QbJ+BGAMO=@>C z*gLipxE07wA)=FZv~2PAXG4Pk^R#lKPXyI71*WafQ3?}Hq5ym@%AL&K^BOcktVJuS zFmWkIy1ZPV##8EjJ_O@&ZoJS7&~@Ks})oYf-CU*jT(egkOOu_T^9*JXYUbDA*;< zc-ar#k|zRB3@xJ$u6Kl}4^P(<`IftfaO0l;JJKpzZ*EWCu0yJQ|6b@`NqmM~aeK)e z{JnI?J_$tODbL^Cw*O(^h?VVMb7CqCTlO*|wI0$rFY(il!K5oOhf+wBhP^XyCRv-4 zvNSi|FckZMZG`dKl$KFf?^Y3Jl=7 z48_j#4W_26C4+;b1^@EFN!)ooOgHQ18rw9}8!{G9|r>=5C3AVTkPj$ZA_*c_v^-n;To6yh5n3kF;{-p1}HsGS)o+gu~o9oUEc-H`ny zzVT0(^-oOl8>9RKEQ*>~8mPIDDjV23{qN&M@!vS{cOAc~_%|346d(OZ0G1nc^dDG} zh4mNo{3DJF3SRsJD*}Ikp??Xm{6dBQFJQ(01_3gI!oI&+_>BNLnMv8WfuyWl99$p> z2;}?~(fl7kz&|2Qe**#k-1z>81c87K3n)$l>fQh8KdjtrzxFC-(q9Mv7wG+;3EV(& zd)B|;ZqP^ezejI>ptE1-?T-?_e52oB?pFzr_wz^K^$#EGA8_suLf}se{*Sb>prp*8 z=;y!Ne_4Q_bkcv_fscI!&thamRUeDJXkrne?Xn-=$GUfO-|60dtd`uF2~(sVeJRW(DA&u zq~BiBJtnOr_z0g-1i2yCsM{J`728}W?vcR8zy$SekL%eymsDzT{qOm~-YE!F85qKyoFg6aHWVU85Q)WMjwaIrN6 zNd=`Ha{?~;puvL;9!!|KmpmU5NNj<6HdD@wh8z_J%{GlEL#sXt45-i8Pm~BAI*+?m z(c^JAx0ji|h0m!wWg)0w)Gj5$b72k)_Fzj@jnrVJCGr>8+TXck2#wY?`>3rkn8ir~ zWOAOFGMOQOa8RckD?j@URB%IEEWvI`9$~?>hS(a+$iV35 z$iUk2n6%*v)(jgl4Vj54ySAAL4%T5BBV4NAaYT)p^w(}eRIcd^l7C-ByjT~;1;?_7 zkA^lfW(xa|28p;vsb-*KjlCGeFv6GcwAsPun$7>>y(eEGK)mQz2FLu}op)w!@Yvq% z0Y49xUP_NmKd5YS77C`b^NM}31Q}K{KC6AFYpp_BpF0{3cw< zM?ya_X9(K{<0-&`e<@(FA_JQ=AkJ!m{yI&s@qX8e=jt;MTiB215~qtV4VG;kKMfol z7yJ^`@Z{w@@uLvf2;k4d$w65+s1(GaT;ry z#x+m>E%;^_-m!=6R|4-dCMipPVY;IrqUw9X9|#%{VDg#D-$-;r`}e1Pst@#XeP9}j zs%E-i8jsBub&!Ykv8)4TyD_S9h@m?Pqq~QhsgR%HR=5OcpCH@8-MZA$ zAlKp=20fjD@nRAlP-4Fe9gYMw1D`V?LF5ucgoM zgl`-CxlUEv=|Vt|=Ms}XXwd+93AxVTog3U18-Jo-82C|+;KXXkb1!OKx2t>lyNOH> zwJ)UVY%O@7pHso?sYZf%^RWF8JImkTyhQzc5@7UZ<3-dy%78(oSp7+0faeXhxTZOW zB*BOj7;fUP0g+^{@!-T|xdtJi8;*b16(>R(S;PzvD>CID6beClx9@>byTD;>)lYN` zcWh4Vg%4SLzNo?Ux;pH2|Ejjq?^nvVQT1-#JuyK(mS5AyadeP~ihFoB=lbmReA2Pw ziN-P~#p}tBOZP;;@oDZnsXxM%kEi;{y=naQT3zy0{Vr9KincxTN(@cr;ZW~|b$=X- zd0#&M%Fny2MzTL%=3xthb^n%pKXvu8qyI;e>yP3T5)b&>dgSX4+~G@sS79c<3%uy# ziq*xhsYkL67K3fE`HrvIwfsi6Ba4%bW|P@OUQnyH<*W4`>V`N8ZtDxhEa$)>`2tDb z(xZ|j`Gn8C3s6b#zf#0fzVC{yB^ucQiCI`}tcZ;e zh%;{IUiuT`Y6wn;ulrAWJlr;4TFy@{PF}7LTYWvU{B$;(*$)#B8@qYyc|U#Tt?`we z#5X<0x7KoUMrON-J>cD07P4iKf8bmW98SHyWwNHe>G0U@4`u4>x z5kQgTo_IA2`p322T1lM9Lm_$7rr65HNq_mav8 z3wG!+CY5cAe@fnl@F?e#*L_QplvJxg$vH%2!is87ub%|Vy%c5TCYK3_h@Ph-?~jv& zt0{rkPJokV9$RRnf%g@Ipp^aep$WsmUiYhOb_#gKpe09crJ!ih3NASVD{P-GC_CRiY&h09oJq#fkv8GH~Cf#d)J z3tKK_A&>J*lsA%-DCKYk7&&fgrJ3-Y&i5jth9qJLS)PO|tmmLb!ak-T5d*6m{S1UU z+V9&ucS4**xP>~#i{?x+j9H>619mmKNw;9pHP~o{y1|QDIe@e(T0c1jn1?v6j8~r& z^Dfdwb2;Lvt3Yp?%!@?$fK@6BWeE|{x*(d{pzIc%ds%oCk^KA^$_n@x!dvK{_Asc;_{HJD3h5}3R zo6-I(?91>U;dndk_tlfucxdhG`N=k^rC{>a-4W*1((lv^wM1ugj~giBU5Xa$s5YMJ9g1 zef0^OwX|rvAsAiq3MEG7s{Ncz57bLG^!vPo0(3OU!?bgv=V0AU~IefV%(%_YT(Ovc;4T!!0$GeB*Rl`6Q`+Wkgh|)r-lRuP3KPh zq`Yy`e-HN-y_KcAE0+a{?$*-YWc5iu-$L8u;2oHHX^S9TcrS)b47kOx;8GIOdu5o3 zb9Y(lIZnTk;Gq;K0%9E;e0JWvigH> z!3WyIN~t@msbQj|sF^;IWVQ{M#gL%lbE2r8_!5ma;4{9PfC+wdHO`0s#Sp%}t*9|7GrP&uXS zxNdhp1Sv}6Ewc7}_vQ=DiU6gM zSI*ubiRB9x9snLRY;zy=yWi59C$pry3)+WF&cn-dH&-Lg`%W9<#ugeD>*&e6msY%M zxxww01yg3{3lV5U>AHj)^ocs|OBO7r0~+XAn2I|zcV`$vbC!@k8FQBSun9P_u3!nO zPJIKL>UZF7S8-^}qKH=^%l$qM`k6I~$P>$>UI9zz@T?_2NYi z7|gavGMjX6ER+knKH`w(`3fm&KOXnJ(9E-Fl*5>Pn378Cig|_#h%7)LsLdK7-{eCb zvriR`>a6IY`8<4Iyag!Dghjro3Ay-kg!nY092>vY9U>sRHb3}ajMB8%{X-j0hHGSc zy5&!(HM}fw*M&66@|r@z$=RFdclHHWqa@oISolWPbOjJDFa=APInzoQoY(~J z=rUYg!7KrJ2J!mBJ+5zhv@mvlM6bh3n>Q-znNFn^9e5Pz!XeA&!oKcq%EFt9(g(o6 z%2XhQ9z_Vw5LiY%(;0o-d8vKm%4OFvii*vmqbTuE5{AC8O=Va z?0ko@<*0SBWw!M#_-a%os`Cxj@;4Oo-%Lo3P7dF7JPz~MdX}G_*LRHQ?ZmnLYV;p% z>m6uZtnRtD9^NrIwjy>y5{~t%eMansKgU%UZo;JU2w- zuek(1XQ}PhiPEX|8S18HpB}FPyy0R|$-W)RlFcT@74t=6ub;>tHrmPnYt-yP9&r&Y zwGO#D6Z(OBzR^r7*XzNPo!EcTg4Z9L4~*f7L!*o1$19Athi9f*H5i2q{M|fEV+b^$ z5pvKKyK^`&0r4ZT0M609TYtzrjL)ljUrm{Fa^-|-vy}QitxnOe4;QZu#z(Q07kX9p z3z}L<8IZLO3^HNXH~hF=^+m^n{bN~rmQD>_Z}Gg67cy*ddt26Z%HrH4W8fi%5`||`^;M53SB{9BM#|4F01x_CkYRKA*NnRx_lo=BQBRwYSp(d47 zG`;w3M0UnJ5o(N9g-sI*>Q%PczaH2V2`Mf0@eBH~ z-X0RIP%*j+N*$ZrsvA7_2>a`g0j!*xT0iy|OZfubLB38R2!bthS8#gM?sQGk+U0U| z|611X0lJal`L(<-Vjki(ysdeB;uhWy_s8SM?vATBJ{8f3LGF8_1)l9MAumNMr&%KI zxX=Fj({!H(G@pX&(*oED?gG9D^u@V~!y!9UyM8vC+Ehpzm>jqB^L>onjYc_oVDah9 zu-nwy6Ju(Bo+0BeeeH4&YI{JPLm~-)<4*5()ZdUXMYPu{PG4&;p`;EM-Tr%G9FmOkIW=2K2`q%KEO@sg-1v9Sbu?oH02)H+PO-u@ zlQTB#vhq0rU$X}rv-lef&TK0f@FQkb0%|f1yly8-QhF=&aFH6;X@|08xwyCMooSHr z+|{E2Rzw<`ox-r#T-A{&_m_F)U+6z50VGjn63}CKq@)PNtAxRuJDy_v`qCMRcf?e)x>>ycnLTUT>9wi{D!luRZipVVwwrV*WJuI*3yL_P_O(o zKa_m8a4e;@V)Fo(p+ASEAEP%@b6NUyXv~_*PIG&^^18gUeFg&nV;+sj& z!mke*H|n^Z%5FfL!1#RJIP&M?1uNAUpTT z%MrRCpR;=I8@^VLYcK9NXVwksdG&v0^lW~$nkLP;gh zCTw;uIZrKafUsw4GzE0Q->0kZjC2MJk1m#O@~v+jaP7i1(u9<-oUWNTvy|jP8-`7p z^EBcuUd^J`zap>pm7S$+Xo1u01d~k=4lCymVbK)ACzzsx;g%oYziG}Jt;NpT%qUxR)QAqwk zxdKd9q}W6G{Ay?NnB5eGnRSoc6lS&Z1@$@kWF;-%A5j4T+gvvQFaxD;z@R3nU%JTx z9*0PMB>N(CxJ&30WZ%*`0Fe$QR5(mSYLF2O56>w*M{dv-%#Pki4y2Y&9Z5`AQ^gvj zUq_0%VFFn}>{AMP<^XU3P-Hjy$4F#0ek zLj150LKv>EPH==NnH$Vq>!v7&+~w=ceR<;G#a!0I{z}O=GS4U|v)PO9IuV zknFH9N{;=wd4Z)!ekP`|i19-F%pZW&8t~Y#SU7QZdmZ@anMRV=vtv}@@BkR7IMeGxeEU@RIG-zoRI&EFZ0NTAf8W}Oebv5q@4r?8ZIZy`r1UZ^(&oiv~(qpQOH?bG= z4LD|uH$@jZvtz6|#-5@Bwdx#*p!@eOn=o%=IohR#hI!Xz$z%<*B}pXnjOrYIn9bjr zQfbqOrXc0-vWE8=1G2{Y##tNFYZFR}pRMLK#P`FjF_qY~RG*nXKlAz5#mfm&Uy2Xs zt2|8P#nLJcZ9~GGLxfg?J)58L-UyyD69y}WWYFK7mQ=N<>alUXpR*}G_f${g6ca0d zP2sC?I96sGGcUART=IAvli5li$3$wXkf;h<-l`zM4+vP;fZ*ZxvnU3=B4Rja$M zuI}|)7-*)dma%Z;vbD4kCr$o_9`iN}%R<^UCx?4K0!ba99ij6L%#p1Lxe7Y3yRGhi z5Oza4UqP|oPAA@ZWjwdObE|bcf8sdk8gxCafY5q|i5N^JT+DoffE-)oo$H+c$nNy^ zP>_$ma5R$DDZ+^2h-d^sL?|3n9yClwg;00UAW9?I>idNnP8Jodn@%QV^Z`rN{YAM7 zS02#inVrc~q1~K`{eWI$@vQZRp%H-dbbd;)!n>2g%i;I^rS)es4|V&dRt0+2{0UmR zUljnERNNqV(bzCe(qZk`Z|ndzf}C*Sg<(suWh!(c24b4fs$9`oH-$y8oIhq+W0~`| z^>+Ft*{wsQ=8#|G?8R?E~G)C2TK&{{Jl@{4FQ=gSVe|ECCC$5Mt+JM`EYuKNe%ej+c&BmIpoEVB_Ul# zIdcj_D?|hO`2Gl`1(*8Q*DtA?*s>lNB2Rhx zfM-mcQYsZZduCDXsoG`r+vqM}qoZM%=Yly{EvriOZ3)f_=T`Q`MqXWncKL)$8 zt@TrJQ7zZb2FTeKTB`@b8QE}B-z;rjD}fe;k*m!c&p;o6W7#jDTgUZp$y=no~%tu6c> zl4PNZY2|vwuGQa!$=a31^ELq&J_{uf1!{2jfOZY+nAkvLhO z7CE1HahT^MlsH%Km*dZClG<4z9bJ%LaS$Js3`*uj9AaCvxeLgZ2ozbK&dS6zV*JRV zWTQ1O!bNP1CT!c8Wt1~JpPJ9ZKSe)6 z7>l|`KyCSFtb_&mPhpRaoh%I0IQs=1CX}?%VQK<~D!5RnJ%3y0>_QTiJ)2obmZ9-L z+iTYV^QBr7EUjNY;Wn*YK;DHq&-(@M3FbP(;#kX{VmPgmF|;P@&`da^=+b=NU13-VoF*JFz={m4 zrVT3|)~q7ByFY#_$(ywlmO9G15}~4AL_!p>#}Wy}^Xq6!4S{cH?a;aEl^f_YKU7z3 zI9g;Q@U+>?S-sF~*6R(yO-j4>y*hpux#=2Qs=R&lkFPB_qPUg$cpRCQ*>t;s=hH73 z=D%k;`t;*xE}t!j3%~VuQi*yueVfkG>G}bOvHlhfN4H;9F+n;8kjn{za->hTUUgW1Zm3CY%ojUwNoM7 zE84g9T%I2h@V}<;e_@Z{L$H-i8;MKrMeDAWrQW%Y+0s~kBH{|}Pj3se>}>4fTu?u^ zxUIOdyoRl599unF-(LUCeZYN;9-!#<;FgRQHnaiu8$oT-rGD4}U8~&KQ@Bh0sQe0L zJXGn1B)a73bAjAC{dW$A{7ekF^RFdBq4KM4MeJ%^Iy!Yjr+|YBPLXx?*1HY2#Eox8 ze4A56y1%2ijYVR)M=doP=UiKhUqe<5KV=>##>SpuLG$r0<;_F3=NuV}(+d-O%Bw`t zx{cGNQsafTo;8TkSl;|X3T;*0Q?0AYGWExz>?83{qU@``#erpXEJIp_wJ|5Qr0XjX zprI6MMv_6_k#p5eNx*o=#|3jB$5yUn%uIj0ODoQ+2ye>>$j6io5lqKaweRZUm)j^` z8V31RujmRVNbYpF%AMgzQy~}}e9`jWWoLzF>0CyruSa;8S)u~SHXL>^Bd4vLqSs!I zV>QAsb}-iW4k#FoM~ zNf3ckw4*S5cs{9O)$G-T<2?;Dk_OvUuF^)^S2SluYia&>s!P?7bVFjpMY(xr8Xg-+ zfdq{x@-y_pAsi=`W>xD-0y8#QzpyD_4vrexC?Z1{gbT)qVJ>TcA5qk_n zN{n}5ZEE*@ZW5gP`1Yfe$Oi=YgvXKWKq47LlE*Tw|D{1r(;0PM@07XayjVIbuH;*S zPl;zuXQ8mi$d=5LPH3)Wj!^t6Fc)WY7plywbs8=A8xBz&NR=Na1cplfI7_ez#yE`% z4VbR#@JZqb=>WTugm`d#{+wZMU%c3g-!M9>d~BVnX>7#zHAWcz@9VWh%lQK065x>% zg`{#ivJAE4$>0m{mXy@g)HexREc!zvvn2=gVzlXB`mNOp@M$Qghyi$sd9s~mE@sr8 zw-G!zUcTDerEIo=6LU;4T2r1fC-~M__=~4?HW0t`k-I!XdUx>%MxEsVHcLVtWe3Q-6KTv^W!;hdqMbAK)V8$Mzh%HreiubK=>K4 ztdshFVI9ZfNA%a8^FXdyE-bZ|+sZ;XX+jJNRgFC=R3AlV;dRrKIMet{3SVA9SA=ct zKu?5jA;H!QU7paBJd#8H&e|G)mJZ)qf-XVk!tai~-H!Nl`X%XvNC3AA`IX#<&`_35 z#9A5xN;V3wJ7yN`UIT({mI70LPM;}H)dZ^eqEWU*UN-&+3IF-Fuot-bujlV2Ir1YwCMEE%^@ z<cT}FZOn$`qPTIB3QUL6>pYI8Gt>lZ^jbY24A31#o_eusmK#scS@KONP zkBR06qs7z#oKCOl2&mN``9|sP<656oWlP~5f^x8H##Bukdcg_kFdml3mfc9Xy#E1-?IPAZxoinLR57aJ%-!NY+n?Jmjs26$bVve)D3cS4e6_W(s^4Qz|_)%I(ROr$z!4Qv{ZE0CBNU)kC4X?XQx;ZBQk<#qiN%2%)5Ifja8SwIvQ{^TzVfYYOgx&(%M;4 zs#k9>^aq^0v>g+3Ph3SJ7`$ljmzBIs=2N|}wK-kRqggRfFO7D=5RXrArh_Oa zsvnFyDoexkni#8dne_OS~>449cZU&n_KWg zK$8KVJ=r)vJ@cgl6u0cwmP;VAT3i4z^!rGelZ2thFK2ytp`ZKoCq;(_6`q{A2v@JG z$q7@ht7!<&pO&)W_*CO8{qXf2D{w?FV|P0f4~UYB#CG+bfy*ijzKrl?}^V-=w zM(kQKlHD}pc^gODb(?3ZtX1uk&#Sp_{`1ATWgJGjBab*oB%Tz_*WGZXe z1?)@Ya+&S)@2B&2r$1(%8S6Im`uPb}ug2{_4L=Bo@hv=8eg&&mcZE1o`>>u5l)hu) zj!n9aP5x$xOmJ|lkSBz3h=|K(9vO3%>FhW+`)OTt==8EY<5<2}+SwH00>iLu`Dz+? zHHz1yDe;98%qrfZk4i0AK!d#7pDuFP4rt_r?fqTDiD_2v$uan#5g5+p)UH+(V8EnvGTvmEUw?=1f+UESpvQjj@vwb1xO5G zP4?%x4x5aBHo{Q#W+2!4G$4hE?7)!|jevB_qCfu`LkL6iv<=HEhtMc3{yR>$m7C za6rEf7Cir({#$Nhm1^e=$ja1nfG5R9$mA(Wvim@ROuu%c*X(-(@ifPqt!)4;B%)^l zSvt9@O_Ff*5W>PCD~Dm>4`jnFJsa8I*W2=hbho?A zbc8iLT>HJdJnoBum5=Y`_r4J?byUaq_~D#tjx48L%gykpqg!Bv4Tf<8Nr<1_O$y`j zZQ?TR#6OliJR;&M-evHY4tb(syz>N8((~$=3yrHO)D#1-9PV|(gu?(vAN|5EZw*?- zN2n`2yXJ{e*OgjRW+F5i`P!Dv;UA)Yw3eGjr%%DRUu$n}&1850ph)*eiMsK+c02wn z+F?UHUA73AGf}TX2%@&^zj`%HWjaQ;sqq?YoBVqfQ@`OU)rTWcOv6XS_6se+6ZOE;L31l}+ugQVMi{zS;Z*4ULPPQ<=JRZ4W%C2opHxNYr4 z-cDo)VupudU~aTcf$U2N+4c>tEi+`}<}6#55B})gUz)7s%tfeEQstU^+~Rn&V@z@z zLxESk!U$7^h=wtEsCq5kMkkxdHKJy&6Dc(JLdRw<+>OA}>u~XG)a~J7eU(a3=oi!Y zXE0qzWfp9&Us~oUiy^7P3j#ud@~Rf!AqVsHi&;EFqV3&@cEhud3AzMfRYth!v(0XuJ#9;T#Y zif!wTg0&N6V&u$M7Ep+~&o2%&JfXP#tiJGT*1-#bm}@y-yd|+j5`?^OoZ*crNl?U# zBP9ADEGH}sFks-&go+1D*?FVMxzlmEVMLFe{o{`K0z>$7AcCZV6-EG!oe>WwwMpIeD&fR)GB3-Y@9LiypGlZ!&`#rav{-&q;_@{GnFSz~ z%@5qkqE}8Xa;H+{tP{xF+6owbtH?G-nV^LxAqkZ8v({DlY=uyZBKJh#M`4R(P!!CG zvyacDK$J^UtJNwdu&#<@P0cKS2zndabA>MU7;^8a_KgGnDU5L@og}c~* zu}ipjDvF-PzbAm0OlTnR&|#Ls!{^+8^mbC4m#ebCcI=%|p(4%h(c$gJ(0}PYn5THP zp8J8h(Li;T0-3lD(JP1abY^*RMO0_R2(NN+>+DmHM@i{SS^5Ew6{M74!$o*-m@z z$F=QzPbLL@I<)F~SbM_Le&ng< zuSID3!Wp7pLhv-Fg&_^6!N@|ClF8B;>%(O+aoWD=AX$3!^trzc13I`v&3F_Vb(mY< z0!3=>2KEaJ^X%d-3gw=X7FP9`8N+(F(Im--PgufS*wli;t0}|eQR#J}bkmdrbqwZb z@M=oXsPi$ti&G%v^d4{_=9+U8{;(cD)b%l7ij~>j0`gUp{X{{U2sCPYVqw1VH5|nM zWD?{H3ue`8Um~@{K-Eh%DM`^5Ud@b$m2=IUh_Jtm68$~vLV!TbQW)h7PT7usm{%38;rn9{qasSEENH6KfqLrIo3HEwWzA zQ#MOAVSB|VrE~fZ1ns_p-t!j(lDqmYEZITQyOfej7ztJ(?a9 zel(qxx^;@^K3KlJbZ)mf%BF1weJ1pg;O z2;Jy|om#Pkb<0!!piy(?LqAwSEGDhOt|c)+$ZUP$FDN{tiTk*inThjB_2i*LswTv$ zssPmsjL^}Vae~m*HQo*R!&!-z%88FFrZepzD$soZDHod=JBQj1y+;Oee}H6^KQJ~j3e^j_l$8Q9FlrUMY};#Q?eOdF3> zI=k@6_~umBQ<}BN36NS_Nh)cv!JP5D2@{q=jn(>0oVVHyHTk0xVMY?+&5p;lOX#;h zDdNnU(|U=axmHxgnbc_A17Mv)Lz0JH_{nRM2Lg%IqR5< zgodr(*tV%~-r+|Hd2a4|7bBBbBUL>ymvb{`D%)${>{^6N*>;K3+>Go~NIc?5sEZ_# zK$>98srqt2hLn;pjlgu{dY!+9rS@Qb zUi8EEY9bor!x}GcceT2XTUgCe%ws!OStB0xbScxYc(u>6;rE-npbc!Py{K({sHTxD+diqEAk_hK8zrNxhp`IUW6f5xoTw~epE&MxF-Dg1B`@jh-aFF4S2CzC-m zyEICKsaAKjKv1%}s~cQaqK7aHbI4DSB92(vZwlP+E8QF+EjOuu23cct3UA#Q{}!}* ze#4<>lZpSR(iU*Bw?`TZilK_Z#Uk8zL!P0w51Ec3SeS3^NFoDs;N1`I({Jo#lL9td zEpoY)TY0~(_$o5){&o!YJ6#Js)5@cWFk<;RmD6~mY8!lUeEdnhK+5CoJ~$pzrlV=i zf2@FvSve@I?qJ0&Q*6)@UM2`)U#-u_gp6xal_NDRYIQG{Nqnf#pg_wqhHVySLXtGu zxGb4tKyj+7Rz{7uINW`U2#$(Q@I?LVOVC$$P!IwsfmEqsK~DV#m1S!os!zMT;Y=|Y4QOeyh4D)?VZ&1(X>@E# zU}cuenp;L=eX^i>Hpx`_15AC7VoZH~49bPGCm0Y>;V_Jjf+M-f_y;u9?_$*KiFaxf zy(Z?zPgtM31@t*T)hC+DSu=&G+MqO+ZmjQVos!>O_@#n6b!mz%7Y&a~2!i=zdav6|yn^Y4p@=b|Dmx_1uADgiv%+Yi|-^+QmjOHi#mOqvv&zXwVFt# zkSjhdOeq~MJZzG}kHr<0<$C552Yj${KwmSzSH@;U$0lNx+w&ViJ_U^Ey?I*^cP6bx zCNM6+myP*UrgNaJHH%mZ^=avHq+7BaDkLX)+ht-*l}su`oE3#pU>Q!#gkr85-QJaY z3N4hP3O-q?3H*U1x*84}H7D5)_1kc9CBm3?6oAaDr)&TdO8y!%a5qz3{mybg5uwkw zP`kI%ofVGmn^B0uD<+@3Wr2F1W6FK*iir`T=X{&v(k=uOIHIK zrsS((4(Hv)J#Q=*#x~?_L_uVe%P0UdZ2r>|x1wFfsNpB3R{`m3Cw)Ou76uH&9mf)_)lUJ})-tMkd*t=?e!~aUA-K;oN%{fzq$P3I;Dl>S! z28cLq^xUYG*{;7keX(5w^xUbp>P%h`ZnWOF+`TD5QEI9{X)&sGrhtu48~X^@M4 zNPf)TB+5+fJ|5MR7)kL{I5NxkTyzKCQ3EDIPATqWJ}y^Ef4^*S+@?l)IbDW$;I>(v z@uo={am^xRyerxG%|FxJe{CWEUVi~Mm@EmF0$FPiPgaMFFpd?Px=tRGV1gfW#$}$N zXO9;_*!X_E&1_YZKR}v^ZE=Ja5a4S~0POtS zccAdOG%xF`Yln_%oe9$U_bmnf8qdfvkG%T3n$`rCN?nP&W<+#`wd2K0>&Whh@}3v@ z(qM`5=h1p1P;XXM8XBb1+a^DU8QWm0xF{GgN(st*j1C$#Y9RzeZ;;@AcFFtthfV$xCqZG>0<+!Bk?jwRXi%RKf!)<(B<-N zh)`WT-3juW3+Ce%=w#xu(8z5By_t|&W8`za^RrdVYr8v~WiRETWqq=W18Tv1Wy;;= z82UD~G-A6uJuYar-z<3>IE!L*9~(k^vDZ0$gucDr2UZ?4-?cj*Y|RLNwsMIr{@5?j zwjg#(I0kok3OSyolUYX5h(i;tY#cxe^xIh!7E-Q!eMR5ge;tnOlZixLd4S;7btaF~)dbxxcIOE8G=%v#;%C zyx|bfqW6BsS1~5<{xGiRQWA zMK8BWWY6F#$XSvU<4eeT+WL|T-c$r=S+}cs4}dF#9Qmh?*myDD*#RTVql;~>d*9TB zLAhI&Ktj4S6^7Fab8-8CdYtg*FZfS+>4$mx@@d6Fe*E1#S|dg>oVo*KM{c{GhUX`SC( zd{zgvKEc`tR;%@a@&q@gNahTIUp+*vi&&N^G1%MIA(bkzjOL^k4ba7I5YA*Uv9r~- zDfmcEB1u_=e)Ei@=(TvcUTXD1UHs9SL zUye~m_?CYzP*-bKxyvb-ql-=j{z=65dy)FLayw`yt+#o$>g!BGf^MNxObN{K=3;!r z6YwivO54-lJa0GzeVv+etmR*KdoOK5@m&J?i=eGp-4Q`lQzVnhXviWNxR(f)mHVff zibpJt)_&2a{%VGRzFoA%N?Cd^*AU@N*j6$4Tm^TyjldOvXX+9S>*q7HY^6@!&)*1h zxxX4-C*cl#^7wO1jKobVmbNPxu2(!w3ZNPc0Xf|(jK3;Af-rW9edoL`!tuz zRF-2io-z=kOJ*#v#IASzJl&kTNRQ8m&G5vLs-txv?G3FvPM0K!(US!EDdm?sJ``mT zU&5qkkr+QoisT_LUyewLcwBezv&bmM>HFIPEe61Q#T(oe_Z6{+rNHTbh?fTZH$2!M zfx!PYUizP49MS*EqW)*l^S{EE|HM#pFtE}w0Rx_aan66p`2*cb%ftvoM>Dc80OKG3 ziJ@j;r31ocSeV&?vBiJGP_whq0Ws1{z}o*EL(R&z1!Kp_k)Y{0PGKL!H~xcq}d{g05$zoT#ge^5C7hbZg+Gyw3A{|3_j zN$dSz4Dl!47Z@%5hmb$w&zb($*lA!R1s6LYlUv-<$m$PZkG!GrPdj^CAj60sNDMLr z2Bgc_8W`ICv@|B7{5N$6SgGJ(ZEbF7@rPOefK1c>_yZoJ&h{^EFB2OZ9gqXgz^qBc z$Vdd_P%$$z1EE2G*oBc52;lkm>A&hViGY#J>Hq+Mj)Q}V@sHSSHYO%IMgSWJ+uurm zKmYd@e+twjVqqgv2ZqMdF|slNVMpwL_6uzOXRm)3^H($1G zW(NkK12l<%vFHE}V5sfC#RJ(!Y`{tV>zMiPgZr!guM*Ht{y8d5A~p_S<9{FirKu(n z&`Rvgf0N1%G})g91fB+t@XrDN)l8F!cr2{#MJu#7xKh4?_SLSb!79%mExIBRkNwffK{Z{x85gu>8mGFT4J$ z$zRg{)aGxd1uz3IOxAx$1OTbe-Re_e|#K!W_g&$838axeomW(C&$v&6#8Mh86pQvv{Zq5pB7>0bu; zOCl=^BOU8MhW%$9(3Kg0&aD1N7yoeOe^da~W(S)5AIkot0%-KVY0ty}^yfd6WoP(z zCx1340ssg0FO#wU*^m|Jga0xQ@M8K)4`BJ3J+o$y`I50_uUc>u`0v(iswY3f!opmY$UX&p50YoO&V&K>^8%G1OdiAe%z` zm_VMdl&)2ATzlZFS;z&HHQs&j7Z6d|uAE(jga;JUzN#U|cEjlNl=Fb| zgmaPFA%$&(E;O3!bPi!Cv)>)JjeEh%_=!~>&D(P814Hrt2f@>!Va#0Y{dyBSA;P0y z_E}cb`tgG~h4rM27rHDwxvFm0XFcEPl)PX-J@Uv3guhd>xW2C6xTM5Vzj=b>-HpEf z_r;Rse_Sj73zh@O^Y{zv{=X~~|7L*wMN^{{`}bmLpbK2FfQyG6(3}6ULj4z_`#;?4 zKbEn-f#v?6Y=Qq@lcNCtM}8JFJI8;pavanoYIa*9(%jJ3eqr|!szh>r+sL|jFT{r# zLDBTs#FmQ@_jx2m*~&&EG>h7Ij=jR!i|*BbMQo4JABnMb|B@b^!20fz-=FvWgeopJ zeMHnqGQQuHR`FKz`sVBSPp$1ut7v9SvX3%8v;Euad|q5ntvVs{2XLM#8pqtLL*Y>u z*X58aa#gdF>)UrCmW@6K?mi7e9|wQ^uT+L!V(EIrQHn%?-}{JSSi=+LD!;9eYVcP5NFLJ-zp2@`KvP1_N}wVqjPuP7P{p~Fxr>MyXbt9V!3h(4 zYb~)_e$IEkgJ>%N;(S%Kxk0(2)}GqJ7kk)R{t*trnd+14U+|j51e0W{Dn{Fvk~0PK zj!DAp$?_9Qa}Da>73y=?ZsP5JHY8RAiN|aNTC333ThvGzDcjsZ%{MQ^VEz7@Dni9L zgb$E4m(5Ygq1nD>3gd?SxAm!0-eiN+3mGCGgaD# z&GJrwyzzD9d^mJqb=H^>?*8zb(Q0?14DE8nni}z${-uV*p(i{#9UZP!Zc3RU%aD>0 zx?r^_$9(_5Pdw+(<@?L79%WS9%x^QB`fmsj>T50L(~9+jk%Zl|G&7BCJ?Ey;k&SsW zs?A#tpZTl54ydz`E1-uv{zUaLgPul{x3p{A9Br_H3N)!K1o>3S!<{p{)x9g#9Xp=a zpds^^ECusP%^~TL^w=byl^JDfwz?b#>|yITZP|y`BFV3%pjNRS3WVMK6f$UxRKSZw zs;?}6nsM5?uapEfsh^rix$NEHyx8o!((Z9e0a;J(_Eb>$G#W^~`?Sd;3v0-y=Hu-K z^alQg9e%wPq;YnUW5^CB;a&q3Nk&!+;R+>%WW&c4EsgUKbXISHZyLrJ0GuIwaZ^8F zHn<&G*c$l!pWBS%#z?`0voRiOLU^ZMTFuTa)$c(l#Fv;kourc@13a3F(yT=fb6uG~ zu%yOio6(Jak|aoJn-x}uU zPfCy!Vh^4x@x+-GxETYpO~x>iHbyQ)wt8yqaIjKeFSgGc7O2lyv6x)3>CD-=_GBW< zQ#ZG3XQQbHH_2yye zp0CYBp-=0d>JfRMCb`l@hV7#Fw2p-7G4k_ zi%2Kf%jEVDY-GHiEy?s7jL&gm%o2$e50>??pPBZnv77ZW z6$X7tk$!W@hh|ci7|E!ObDf6(#ItT1|8TZ)guP5lUVa}wP#EbKwU(r|Y(WggRzjG3 zBv&+Qzy5u=kMK!SlZgR)ByfO2Kb>sjOe@V;p61MCg;lgCe#{B7YL;%Pg3A;T0VejOmKJf}|) zDm~c|_tHv1l1Q!u(Jv9A?Cw5m{f7#%7S3;E02AKUm)ROPz=eaawvl_Z_VoIWpj!`qtS%}6M0j;ui~kOr z?{V@BXpHi)ZJRe`a_R@2{0<;0xfZYmwJpq6VOnv|#7=`Jptb-owttml_%f#@p z1oW2K;zA%{ymm0`;bRqSwtB}Q-?wW{Pk@-Roe;TfwZ88KNcfY zWM#-lmBdU8)%iFgYI{w{S9iK(L~aP*+x$8`EXJd}KKQj7*)-BnJ*wsSg^HrQU%@4H zmmQr}S@!8wPGFIqCwBEdv1bZe?MRB_dgww6q6KIA4%c%Ud<0 zjc58V_73y+tC$Q`=Ghj>Rt;Dj# ze6cb6dRneZBe5ENQ|3HN>GI~esRRC3;GNeuuXKFm6NGh=<*B$TGwY`ATb-vY^w3O; z>@Ty$dS%%A!@JKob8o!uMPCu58&3Q(-r-Be=cDRuU_FBB$y>8NwIIQ>HqDww06#@a zLERe0B^pj$fP%a9&1MgvM}6_vkUuQgu>WG;xrhxms$r7BB-RR3M@%SxakzfFyqiv$ z*Xe=T6a&-G?&QWaX)Iw3>6_+Kf@oL$&Rlv9{=2Wy0R`;a%rIJj15LNtqp*&`i1yrUZTg^HcRpH8n+41s;Ely~a2N{QF0kf;og$_OU zmt@R(eVlM`qW8OA2wqHO4f`vIxP!Q@z1GrQ)@Aoag1jO{Cq zZBZ#>bP1cRUEdN0Kr$=TL}7Tqgjx&dDx2H8hKgAt4?>HkD5Lev&8Oe=fra%)bf5$| zoyLXQwNi!m3;8@h&QsvA>MOD9mMx9O)t2--`2k;=M||D4ltC%kZb>@Xn-KrVH zv!_**e38K5hV7}^_lgJ*F`s#dqedE^uSgFPb}^VoIIH_2Yxtu>NmOQ<^jr-!$7z;L z{VOdz4>LQ;4m>{nvUlpP^>2^dYP?*B7f*>PR{OVF+O(S`LWH&8d7*~(a_v(oCdY|) z=Wt3MySWX7+f(`Q-<{`M@O|eNH=lcSKXTn-Pii$&aWIfUIf0z|A?0gz3}wS4pu(8iCbjzldOD^h2yET@4P?8 zM7r{sG1x4b^f_EBW5szE#Thn|^ z<0u@};z{4`Lx;4w&b1L|^2`uUHq(>($XDq3y;CH2UTxy4!3Ud3NXz)w)?}XbikF7{ zOGGf%_4elU9e}iup25Ktpfj1XcC`CQd-_5B@#;0ls?< z>E=P{?L%KF<^k3x_3UC#%WfKCoe**5;pwG>D+8u0^0!~dm3G5`&GH)?zGKYqi=zT$ zpBJ^#$I{Ti5-(4y)cTIrc5pV{a>E%PHnTS#ZAg*Gt4b)heSJt7*A1=4L9a#ONc#aB ziH9`)>P^i`kN1{de*v_I+Q5N6xn)l)oew&78HF?Atw#pcb2%37C5OAi%G9Y|blY?7 zNWxB=&L16C0548>ZNZ?hL4Ep-M)A$_UApgX>uFgcLkRycwR_7H{+Y?S`%bM^U&o_x1_AyonO!z7flU!gWjo zc5JsloZb{)!Z8BWqCeJs+%K>$;7~C@M5@nnmAqbygTTnlqdgnXKw}BR>CJ zz9DE3u5V{g1^}JF2fp=lu0{0cc&T$Ej;Wx$>}1w^01~zsoLc?YI=%Kjrq>QgnqEO| zF3U#^ZK!tA9}^?E%Rjr_s=c{)T>oTA+CXwE+iD4PZhf#>;lxadR7XzO)Yaq(O6 zG)tqyU~JfjfsHOv!&|OsftViKFR_YqH(a{kk%t{~d`R)G{IKFDE-DMeshsz-Vyd{N zzjG~DG1_ptHz<&XW(-mk(|)h+Oiv+uOF{m5z9RnMR34n4enfO1(IKK#>4G1ZH*lKu zMIYa!uMMFf>_rII5aaq(VNV{<%_lpqnoW(qo?TAbkY)(vG&qg(@yXm$&Jaj~w8UI64T`1Khje!S3rESlP)YN!58Hfg^v%;vu=z=o zxC{=Pq%8#Tdu1=msIlCvhbV@v_zs;N%Ob?g;w zoU-!sg|p%o))L;1ja59y(x?^=1o3$x$atjlLuHtTYCjF8ZY+YdwcCQFJPw|o9^tZm zuW{M}G-ymeh0Lj~;5ca8Q`K}jx>DNdR`^;Z!U+2Ula zPYyO039MTc(V}=-ms(=m5E$kgrE)2Y9OJkWuolX}LqtBqqK&z*_z&P9tm)QqMDAG2 z=?~UzgK!&X%#HgqElxYVI#a^f4G14a5!09c))uw=T@~0PaEFD<`Vd-yU*JIFuL0hk zD95s06OE8_uZAQug4C*NLx|_#{VoB@oB7f1o(0QOl?UBHSusd9+}w>|8{88SE+4l` z9uvQ$A3gA$YK(r4SvtiPPB;68otVXmPQGUFZjOybr2HiSB)U1Xvn0E zzPS_DEEVk8eJzKc@oiOr9Ane8rdXl(`w4#t?l(%cE{v1W064BddAcmHniA!s_^Mr= zID(%HpNickuaHoNg;tZN?df!S@Cfu5)4+m!Y}i#Rrqj;N)1^EyzgOK|{D_$dt86w% zG*#>%hi?ZQ9y{R&F239$Up)w}tkx4B^(`J?v&%!meCfyRTtMi9us1B=m@H#6tq$2ZhI zFyt>r;yV_jEx(q?co@xW5i1f~q-MSHgD8(cQ2l)$3v`McRyID1gBu2OC^&C2Lq?HW zVok)w*JDRyZP&1SZNSjqIOTksaq9V0V%@<;H{869>2K~;#-Y-InRC}7>N4jOorI9T zpahVMD^vG?4QqlWd8Y2T4I!{ssqd&?5Y3Y%&@r7el?%SdLpGlA`}OOZQs8{Ms`jnt za!9W)0LLtVT)JrHYc`D;r!3YEpD8^NlGRng*IRs*5ji{M^ux&%C9u9N;Ky-QOr#wb zdVwO6ywmV^(9lk&)b;BfRK#=paG=MV%O0!2_CP`k?Qr$R(yN$D_TzMusOmOqVL z_$mKLtL!$_nreucl!$iOD%ucNqj@RV@p%jfep0I)MuAN?@t_MnZQg6sCYJzX9&B_S zG%w~)F-PMo%?~ewFS=~E%{Ls?mTbp$mDJ;qzg1qVc{H5YVk(gAH@@qv0lHmD@c7lg zvxe9`GukeYM=E&JWyU_xPA`+Nw&~{^P9_qMw@<5A`(u0HivQj3YH|nSHO8Fcd zkT$}-64??C5w0Ly1L-f{*9DK?O4UOG-r-?$lJ_Zt|NH;6i2onc1hBCG z2c+0SQ9NQ7$eVvbfBpq=G3qvhbxZv8;XtHXv!7)JCl#&KuQxRfizYya&QYBufapDf zNC53OJ|z6zAr#vaL9uIq=4ZaVki^)~HBVHudY)|r1}(@^QCp;r1r33G$tPCn#Ef~$ zc|JF+s!!oy6!q6U5LMpBV~(WQ?fArO%#dCYjeAeFf-gMZ`cHtgg}%k4azYeqUyvYH zE%drj)a4fT<|#1M;@~Ms7>nuPp#Fz6=C9-^25|`xM}ih6N8gTe!D#uT`RE`b;mw1X z?QEXi#DDKTi0vQbU>P4D^69EJMGaZ%4e z(T#OnhL!kpu;4^F{}3-~HoRwXvlqOa@~e93D}2l~4kYc9>Q6Qv$C32@K>&WycF;Vc zI=j8KRn|xghg%FmOWY{Hgj;2Im!n%{fky&>DzvgkAQ{I54epKq~KNe!O1I_YBsVY$zkMknBEM^oQuw#{ik6XfoR25FE zP*Tr{^smOXrsP2_)E!!;lSq~0<5@=x@%&`5gQLF4s6YLQc*bo4I}p*-3RovlX>|S& zL|qPog!WGPq%&T6Yi0YzK-JNNb=hRcwF$6JxNCOjrkVwglH^#N@$_6LOo*xi8u{^V+_D_}t!*tl8;? zr$|E(AL~xjp#gbJt<86eD_g152hhdJVdlTK9P>X!i2v?U@K15Xe>Y|NA6Y^DpQQI^ z|5xe#zZZD?CB6T5`1?DE{ePX_|9kz#zok6?=fyGKX7K;E|9`Xe{{JiX1Ptu|ZVm9i zQpx|F&oZ!muSKB8|I6mP5C0Za{{O9}{=ex)@c*R!m+1HUssDXiNmPLO->*hgfc0NH zII#Y^6P@W_uAJrHRtx;a&*3kh{Hu2H*AnY@>0h`x{AH5+CpQOHcJ}X8ivOL|!OYD3 zpWKuhRe!i4EhT<3xC14}|Dyk6C&Y705!%iYkh`A9 zOHSA=TMc}h6TsQjZ8#@sZ66@$0>GP!5gP|^M+{(+;XYP7Fn0MUSkdo+86O+4rymLy zV>@2rn*I^D0JmZgOs%IE7LFC*-TGYv0{@zxB9)$gD;Oe1h1f>SawvXD+xB7{ofW}U zVJ5+DFnj6?@$$T$MJLdJ1!YTvXP@;j{ECjM`?8HUk-^FuICW(Me`*44M9MS`9Pr}M z976?lA@_&Saum4>Sv)|Q>Fubh4eu8bl}^h*W(dUZYy?X{hXNBHM9mhh@)2W6Ak&zb z)jgRqos~5xl*MHl9dRec%7y^hAbwrX7dXEfEo`Q;C@6rcuY>tWF>^qekHqQFueE-H z52cM;?p~f=?M8s3&4-9DNyI#Kq&zhe;T?oL`OlnyF(GeN?~V>xcU^dbsG~CF}|}=FY>PzjE(2_$lu1HH0D8PZ~jocr*g7 zmm>tu1<{F?L-fyu>H3yK$th<8^sR;gHZ3)T=RHtZ)FLdXML*hK%jY3ZnfoM#XQKtq z2mH({^AJyUue)~Mjw)AcU^Htd7tZ_f!Ey|G8lZ(l_(BkRb%4%}&Hsx&7^j0Mfn z>If@;KFk&@G*B>$Z1uv3cSD%|gye$N&7O>>9#HV1qrPdUrfj zF?6^Va&H}Od-&=)D8`n+?~CJnU9*OyOYSS_9d2N9{VkTmSV~9AUwtTuX9Ug1>R$eK zZ~*Xph~qtq{oOB2^|cg380LCD?0#L4^EPKjaxRxY_bDeSsb6kf-tzc{on@Pn#V;R| z`6tV}5)2{SyHYTzV^t0#ajrbZZ`5A7LbJT!>-j$BD^aA@Z8FugC9^JbKEBE1{Lz$I z5kv@FM{F{ItGqkK`$md7x!LQrf^M1or6?^fm&mUts)w+nF+GN?uCMmb*I^{deY74aAmaC@PRiTDkgJW2$wYQ#6y8%_w9I7 zvn(AA?%}6uFNI#Y6Eea4+mEZspR``nl|iJ@(pjndk)bkKsU6G|L-D3rS=3o);bha? zOsTOK^@FAS&9h5grz-c=36=LJx~bhWXk^8gK2;I|86kVfe5twH#5)BZ3Vaxx7#tLs z^Re+qaylFoLlTSiYw5_`SRP4SkLNF@t!}pwS$9?@QPVDYS0HS?Y?Pv_gJwkrP6`Ze z*hL2LPLzM7HjH_V*O@lCKbKqdu*kf*i+g_U#qQ+~zeo*NV;_C)jCvf5(l$GUVJkW0 z&5o4pbJTfAGBg`-Rbb=tdTn3t^zR13wIogn8F~8MgELz5u6d7nuZ!_oDZcVb zOYt7R;k&vfYp!e@sED?$OE!#GCWwq65bz4B65aQY&=IZ62L&L6kyRhR5n-%!?POkz z$?8Tb2#S2}t`c@Djla=&DL}fmCd%tZ&Mh6NuvS{CvOc3yo-J+USKKL6)mu7z5Z?IY zhCIRD8SSON$oi!4^@MwO7Ca@XJl}7+-+6mnofB?p^IToEcK^D%%*c0gp86TaHO|?p zchn?HE8FT(I9*urh(dM2TUA5Jx&cIYx?jXbF3zurcNuV)dG_>z%^qmKIl`BNYof{drrpMrsj?g zB3cqp&Xk45tXYA>Qx?%qPn>#eqw8u-ycB#7`sW>?Uo(u&fs6NGYGyVyfiU-ADK^xi zp1>2lu6Y17y~pBCMy~E@A+}CJrYO`okbeT%ZyyeipzR0(HcHCXo1Rr>9 z{t>K;)!jBc*ImLSUv&hj5;Z=72%6cfRsn(unFld>z-SSkW+^qbh+g7gZSAaV-KmIr zrY*aY$|s72q+3L9EPqD))fXII-MPU6*+d^6Gt<3Nj&);exdfYRUuy0~P1M-yiWy7&iq|L6cBj>&g%&er!Z zm#6s8!vV1lRh!GsVtMn`+dl9t$9mw_^4s{w6Za|t+^>tT`^>xIw`lMC%aN+YYOMAL zVqcnsP`G^L>;<8?K?X8kA5{7+<7~s)1R94?mla$XUb^{WV@~pTxgyb2Nux9p#U$#x zu*un@?K<~gLO;Xu1VnaCMFPu^;|LMsr^F2s3#9Vr5KcOXB@uNa4mGBSo;KDswu&Mh zYywT^hmaG;TT@z94Vx3l%=0y*BHQuyLR8i$^#>PTqO z6u3v#2gU~Ct#s&LbzKi}UDlE6(BWUc5AxxDJfjVrro zcN}%yO`i+NO(B>>2Qq!qK?oh592vCoilNf9Vw;l0nj8tl1jptmCm4^_s+B-YPByl} zWUXo#GMzk@vG6S_6LT4x@^BoidX;I`EfB`W`%>CFp8_mNjmwcGNoYxE?jrL@O70#N zXl=vk;$`jgHtz$sj$cYINBHJE0p@9A3z3@SYtz-MQ!Ahn?;nLecIA+3RH$g`&Wvd~ zh}}`d$>n;LjggULZ<@lVrB7<0x{npF@hVSX&t-^Oumq^7iq_Segqn3fJq#o2iod6< zafvwWiiI{KZWV@jXpBOhI}ltoBWfwCI_OuT&hjpw>amsU zA|MweldP3`l0-Gl$|uGmAFYQl4$oK#_S)&V++M;#c7V5aB!{IHvSWw3@Dg>Um(#$v zj~hU9q9JVhU4|Ol^_x3<1fp%c17Rq*goRc}_Z7C|jKq#ki!)kbvfGY9RkyjIsVGNY zLt3=+77FU-IMN$5%|Z^Zn(8EA%(o%|-ilAG|g3Vfd$r1{k=xlJ9yqOL^gW zr5Mh8&N+RvWQpa#vu&6ahv)M;kc5WH5{pO5Q7Wlw1-Q?DAFB^cp95;9)YE}@Gz`d6 z;HSQ<4eb`n1kK1;vL2U;uvpl!Btk8rWF?V^Q>)n!#}YH!bPM`P10#=v$+!}x2)7j1POsw)%v=;k#q>yf-k2d|b z?%LY?#-jV1wI%1Ljq@92c5`K;ap7i1Ug-_bI93vkwt}wqfx4FZ&$gKhjhsnWN)h+E zjimU@REBX%bz%P_2o%cvnB*H;<;P%_YE+x*3i(bEA?rjGok=tU3pL{|c%*d=&vuHr zK53ZJ2^_0#zzBUP+fv!EFzmns>>y@o2ToYHgobX294^ut$H zN17HH(sr32oSBIzWvPj=m8ZsC?Y|5*Zk{MywV!n5d|FBpXLS z607hXdlNm9Rm2i#w;sa$c&E zQBDou{$8u)P|9M-feB&*LC1qtQ5kTvrGETLnq1FV8JT$D*;rE7$2CIPz)DBOCeP(j zwCA)AEg|i+!ouPL6Ct>oZo5tiSxkbO{DB!kvZsOZ0FnX5;gv>*9R9+*i1uT!?`Hql zM5fWQHngHbZ2(IFqYWtHd*9s?SIU(?e*LcyGk5ws59`f1k`)@Fl z$1sx(p5l%wDo*!c2GVwwxHBDVDL%d_kv1k4&$4@Z%v|Fyo&BYQ4#thWNX*vCL+vVX zR*I>|CaC?EMZiewAyN}Ij2zu^GPd83N4xP>i@+jQH)!nYLzqH7S2&c~*+~myP)j;F zmcCVh`86fF`Ti56J6R?7jx;uG1LV~|Cf{lL%n*`_8>O?WVv}4oZF`&~+G{&hLgal{ z!`(X$I~6)>rb^(k2U{|1*c48Irk*cznFoXb49^SztS{)#UAJT0tt0Yp_S3y2wN z{NU}t#Y+5ag&71aL16iq5&jEE?7iwTp2HM4=q!x^6!b5j?7a!ivkOh_S27F(pl2a}HuK8$Q1{KNC&)yF z{;X;oMjkeIGDx}8Td$kRDtp35B8EoZ{Vn~l}#qd3RG?@#W(W_CaIrW&w zI(u`~$j!7^k?E%f+0hv0RQ&8$!ytF5)v1NBtn^bg!U=3y_a`Y@2V>njq|GSGY%eT_?FB;&lQ0(8E0spTJ^{s#Xom=|v zn&ba9%9ZikZ1*4GOqOpX@NdB5H`Mvf|NR{!{i}ZdH(2wV-Ta1J|Hkosx69uS)&48Q z_YKhgW7GWu8~opCeE)1jA3JUHZA3qG#T^`dkqeYobU_f-P#Bib|7oU<=jRtsKm&r{ zFtR4cpDe)z@H(1(F&&~ZS;?>p?ClzFH7isd>A)@*9uI*7y9)0EQdsCK-*G@rovZ9< zxwNvkoZ>?$0?5y2H&gFQb)L1bu#+{zRy!w#gEub%F_CR=E zj*eg^&BY8Ax#YvMUj8U|)2b0ZdSkm zL9796uV-*2d%&*W&szeFYyh~~DsQZdgggE?1lB_X;O27u6URyK2MF-o<$l>0Quadx zv>5=o11bisswzX7VaC-4@!NUVFL!Yy_;e00rIv30p*d2tk`V_h8R-a?bZ zlmc*{d^MYg-BI2oXAtv328bux+6PgBbOGo!iU}14^{)c+Pu@A9ax_?cK-mV2ej1L8 z=df?rN64Z9f3JBG@_E#Si4za?qo2udg8EFS)DUV;^6=rAg+_4G7n&{RF<|P@iC-&c$<2!k2eK_q0Uk}HMef}kxn>$I57N6S!7Gsd&{f+aufd+1ujaS|BGHPhys9 zjBYDd=KFvd1J16isLlE>dbAIEU#nNg-E5?NLP{b8L4M?-by4J=RyhTsc0j_Gm;S#$vvoxIU;}Y6`0=vC0fAk!Q>p>f zkFL=}!uHuL1KZ+n<0j}qg5I!qz?yEm&d}hZHTT-ww76+;!-dBJ@y9udJ79XvL^j$X z6y@R2_E}z+$_tpp;J6WCCzS=k5n>)W9|g(LgM~ z+Qxfv!gdA2cK%@E_cImGYT<~RjTU{*bkjlyjO<9-bvGk4)B^!<+tKc~84UyMr>w=| z)Pu~Hzc!sJq0gMArv&cNH;b|%a?7D@n=BM{c1rJIp=WH9sa{1TK%L89Lo5L9K`#k< zq5o0T$Cv_Lp97ZELnHr#MgB*i9`m=4a*1E5JmfA=DokR(AKr9Nsk z5a3>5HUXFk|K4r?pEdBP0pO(CMUBE+Q=tIU3bVS|5^d6LTk? zdRd!~oN8e8`UDe!9NYd-CBY)}QhdeOh$_F5a833TRY%6FW3qLLzdT~Gy-vVxwyE|D zu}1vyUshD=_{4oQ1T>oC&~)v7)6wG7v5z>y-cl1yb6X>1w~A*q#dyo{;9nXV>0)_X zTruC2f{!ScpKOxN4|dLvY{GjpW}fTs>joG#hjY(51U`ch$zh*fKs?MPY3C0lVU1M% zG&_Jw!ccD;Af&C0c^wQK^bkdbBXw3DHQ10;z>=~+?Iip|UuUMD+H#CiXU3w< zK21kUP4q*^sTYXRH%m9;3n~@u^dbJV%&4|4V4_kI^++YAOj5Z*k~ERBRL=;Os2(G= zF)o3Lu|8m;WrJc$Z{LM16_~6uk9@uyuzJqdiWGZ-_vr zJ1)XL=FDJ}oQeV}E*2Bxrx}VEy@Fe%1a(84rHqlAKm@xN6$QEp;tvDyUJK3%;gDdn z&lxoazHDe5BeY*baUJVw4Am+7hwOvvYH@qSy#%!eH385V-|r2?o%36b(3nIM_^UCx z#b{$^NQ1#F3<$U|9>>5#jXLQi$zYeneru%=qs(WRc47ei03VdMLLEgt2lzn zg_>t43>bSv8N(zzG%8ZEMBmM8^SV@M=hPOVxAE* z3=Y7!%yuTW+=en`v(u|PX%Ro-&o1PYXcJQ|i?E1W{ZW{0ic{;Q)sPAuG((~p9k8kk zJv1_?LjXO`o7F>&WHpFrn8ByW>y?J?2xd$aR!=}C#Oa#>q#P6G4uTKMccLN)5Fs8F zu7L+>|2+zF4g#k?_&S;Lz{lC^Yq%l-5Q90%)(fNtV0!;fQ?vuJ9(Cac){Q_d*mljf zOHe+FahltBuX-QAF7%%2rgfe;S5Q00ebSISam}>{ut&J3IJ7sUV_3~C-zC!}z4Mf&xPz)Mc-4ouPd@ufBUZu=VQ5#6JNpI$1y&RF7DUP^D@KqPr9UW z>%^ZO8Qr$N{9HNY7S(Fz;M|yvxlJP0iD#{qPKlMb>&h-uxHiec=7(b4SNS;fpJjCl zucxwHdgvE^w_lnU-_@4#Jrw`P>Hb={|8mX4`PyJPmiwwE!FBC=r{QN=lPn+P;qL*s zAzITb}{B+u0DLS*tCG!At5GsM_99{@p&`uOn?N+0)=lI z+~emDDTo;aXb_~w6c&aGTUB31p(aNM@^>tbGR{}sOMQmO5%!q~1w6pyM!5NcY* zP;{dvMYrKA3fVHp1M=^C)CFx1{CcE%P<`)4Rg8&T6`vTFAxlHimTm4A12YUsieOmP zn;6GQ%T7i@TG;{DmL0{%rpEOASR)D#+gy!k#>wJ(YNW7jzDZYKC2HRI9GZQC zgP`=3%c3{f2f+@496Ad@i)e2E1&{4jCyzvrbW-}kC~tsH(x3suC-*l{ z=2{EX#>AsySx=0N+jdwr^g0pLsp82#Z*hG%^_;#~{altE{ZvJL-2=B8c!|Dgl;i7N znznCqKbK-Gjjr;aXUQ3bK$cNyWLn4V5M&#+cI5yKv@PMGQ|;++G7GuFH#_-aEtl?r(rx0rDJ@UH6&o!x?}@10ahe7^NIhLJJenN*0%Vb%MGA1Y)4& z5{V{pm&W=U9=Ea@9(2W=6+^dLwC7kCpPnhP=>V|q!});-ffPCmj2Zn){hUw5%;Jc&U}HKtFm+lbJ~;yp$d^1%V+h5nzTN z$VT~usqQB`eJ)e%uV8q<$*Oneo7~l;Ucc#TB(m#6mnENSB{sbBv2+0jUe2LoYfy!M zLsEbwNd@Hr#jUP5hs{HsbqIOEdSU%o_2mP%TtTyfsR9}hc&1z-@`37%>E1oE#MX{_F%IX6`sZvyDs-JEUE%2vIM zq2>n_frt3+Ca$&ocq(vjqm2{0C-a+U*Kj|6!z*=8Wo|gq-+*{U!3N&};~kc2@sgWA z#jRGOh{T#!O=^y5n3t!g+(j;MfDh}zw2kd|nddXffDn585HSESzX2)qAkcvw_#som zav;Kk2o;3G2M9|?Cskao_ z>dv;AlI*#+q0D5eGMULyf7Dvt{qlHL-TiTBxideKiWM}AwsKVQwky(*zh^M5>PA;( z_*5h6!qyJHbW=R33!2loYcG#aV?;((QX^PF-vhNmt`3}k94$-9 z?oXPc9(>%)q%ks69p3#jgQa9jjE2}0qynubNifK#ALD&{8uaGEH^(8Xkhaun*N+p^ zvo05r?i-ddb#~7f&=Hw!K1zdmd4k`u=`3D_Ht)lfOO_5*mB*~Yy@5M=02>J7wp`ik z^~AaDaw+C5WAm7^g|q<=f_WOG9CGt0Cz>gPA!NrQOdDG`S7#UVHaBy=VaqBP-;GKa zG^2dEaY)z?*N6QyKM%$ER@vVfXz$-r05kJKLc?U{+Zl$o*?Lo}G2UB*cm1=`-~?ZV z+D#8|A8bLhOp2DvBmi@<+m^fe$NWvG?WNC`mIvl4u#kl*tvV!-65x#Su04DYP`(g_ z838K(z%IA}V+DMy(ukQ#k3~V;pjA`Z4*k+dT2<_eimvH=en)?C;n*>W4$bhvd}Fy? zjCD_l+r(P^FYkqUNw%kRGR^)w&t-k=$WgzU1<#}?lxQJD&OBmfBS`FiB?VWzptks*U+YWtC9-&XWmc-@7Jl1pDa5JM( zOe&i?EH8s|IPKZbvq9R;VZ-VvAA=V9+3z=W=he7yl&Ps_sx)gEz1inFOP(Q9sO`NV z<}qlJF8ukL7Savt#y0X;ik66HA13PI_3X@fMJXRzl)>$*M1rBJms`(fMUu3|TnZ=) zU_{lh)x~QE$X>VtioIA)KhDOesK&>SrbM=aXqFneMS%IT?$Q;v-eW%=u&^Tnhj|H| zHhizz-mY|;F9CN{&--!&$TqQ9%AV?_Dt=hnVVN!(@uIN-%y`|fi^rgaAzc6={LXaX z)c`~hCKjIsG6}@Iv{-61-xgF&kmEhdHZO&({?U27!LN}z;PcD(a)l80ss+6WhhI0 zq$H1~XgVwFpg>A4ytAXwrUj`B1boN`;g?FbwP*OTHY6qUHTJ5Wuo{FH_5GD5^WdyK zTgs^z8!o&v((qD^UR3T29TMXAYVU5OWrn*b+cPekNv&FKmJ|)Phf&1jyuHC1ZI?aI zJ8Pr$K5-HgT@$7=&xFUf{fD{4A_F$3Y4b991`cZzt&HntHrV#@h3{!6kA+tH9CF4< z5Ky2*aqt~amR1(Qqu=hYzaIh2fjk2`2AcdmBCO7T1rX6LEcV@WAQWv6FzR2 zhEdR=V<`_`ZT$u|j66X1YI;gmn*illQo_`)hoK5*k*y&hAf;r#;nYI%3vX8Gcyb&^ zBWO!iC4-S{I1Ttqgj zfx#bVLmTw)Lw(R{UJjd$h|+v1(UDpecz%QGS(sf!dI8#m;1K8$$?#|bmHLbrsmrL? zD^^P?rn$?hF!fX~*FP~G5r8H!1{v^3wxJAMoeYP)?iQw=E!r2bF6A3(+G0nU7dy0x zjZY0{@0AZMoLFye1Z3yGzJa+@{u53z4P<6ZsdS)rQM+4g6#B35iv!(0qca6AF7H>Zo?XR6gE-Ps9j z1!u|CAI9SNj(h#*!{@}F={$%K4Tnd2p3eYP{jiT4>hL{3_%)q7i+kjRmVkgzO7Rr} z#Yuh^l)xWcVfw*~kcRyv2*dlGi+M$WQb&#j6ZeUWr7kURAafeLtFpJht8(z?q>v9B zRItCu*?th0oEz=34M-Gv_h+ER!lKcZ&HhM(5;RPMy$@m?gXRdU5f+Ret3P7!;diE@ z7J}&(kSkOb!+1LYU4#l_`H+EeW0o7lYI$$Ip&HhVUvRZgrZvX%D{uFcS;M2d;p#0Z zEH|#p6(BiS14w!xFx>Qv38>(UVOrMJJr>5!k{KzxGt#00K;@G(tBCQ&H7oHQ8NT`W zBzc$4g+rA~CE}#sSUy)My)sM)&CRwtUPnWZk8NBgi#5pHcN>Mj(zCp?f>$Jx2+xfT z$CKG6(1z;B$fi;lUg)~r8r_>kENwqN=-lC~&UmDL4BWwk2MXQTTju=H7NfSDXtc=G z5<1<((P1hO554KI(N<-?SlU?mq>3NL$*0n=@x3({`7vaZ-M4AjJrK+8HWtOOmo{|a zb33~6y)`Z@+zD&}!n*ElV0JM(C;zjCWYU>G#@f+@Hg&ztmG$0B%v<8M^A+PnkEhLqZtrGXgC`#Sk5~9>UWa==i9Rgwq zji87?Y{YHhResQ6>L^8_N0I+=y4NFxjPaTn(l7X3F}&!8XHJNXhNh}YS5;kgsUFVg&_G>ptCsRmV|zTTTT{IpOxMNFq|v1ZRMi)01*+Nq zrw*kB0pxQboEJ>guBS&H`cJ8r*794BNEjF^$1H|^2(Nvv=BS%UkOw*2wO1NiG^>?* zlhqHZVKI6*>+>IvDlneeSte}LHfAXw7p1mc9E>x{%OR5 zq2d%bQpoE;ZD+`;nT>tY0>lGZ$ob+6sJ3}GI-X(UM)d`xVw8(jD?bdN8b&4#S@u{T zl*_0Lq~xRqjUoi-B&Nlu=L(~Kjek%<5g2Zl0BEd~gGVGm{xGR~y1}^DT3x-n_<*@9 zyF%277n?kPLC0DcDE52|ACCTTe-jYUzq?dxFeA;e(YL#j16v3dZPONvU;<{WU{$UU zM+N5(+1i-^C?l?xD0}!bNM*UNA(g3wq|1ljzZ1l)j2m+pCGm4Zg4mgV;GBI}KNMD) z))MmKEk)`ASbP0deEdWa8@sGvyPK_rDaN}6>13t#N@;Uerz^+jwzC|TyZ>{jtKy^P zb!z?xT4f5mtXbOa*iCsbG zq4KW%%ywFgCaDR3>6A*fUa)pkssacW@d};X>UQu*!fdeC0QOu*8l@XgpVvf5bw$N+ z1l&7^sV5sTC;^R&I>Dd=tq)sZv30dQytx?%_t<;Woxcwp>dyvnni*zAf$ke zfK#dU_p8k}(NnFHHaltWc2@`5_k|=s?(TZ<l z<6Jhd9kesGrYPPnhO}ECis1f9@fSb)Hk_uKx$fS zrPR}4jOoYZ_iq1&9+$b-gx58O}QG^DuO(X{<7E zg+dw$?1I;mpZ1?|K1 zhQ+|p7;Ne$%eO!A(reY(21xC>!`A_bfTKH67X+d`!|aW6rfXgF3Z(SsA(zwrNXy6U z*dyo`l+-DuYRYYOYshfuOcc?|+j-xu=MpSkpSx5t8!gzrTv3ONI78m&--_lkeZFs{049ov7ODj*dycc$Xzya2LIg zx}MFP{5~BXQ?D`WPA8tX&e`K9x3ESfPa>U2QuF}Ukul-%Ol9NdnSN_!?ze1hZdWzM zT5J_Xn5-ogOx&~Er3bot~6Re+bTe%=@NA86Lk&_!&%&iQ9saa|*Nrg=Xs1qoj^ ztGl@N58SZBBcNcjdMha6Ilvr$u(2asE*b%mD_f>dNTDFF$4ndl)Io-_GhRbMxY96s z6ge$_aA(?J?vd5y^VxNB!StrkJi1z?$v7TG&N46A?5HzM+&^DYRC(Zn&w=!_N&4dl zjoL!G&qy^yYL*m4Y79w2>J*-XUg6b47+c7XCN_D>#fj;9(-M~)_%Yvyu7!?jhrks` zacoLv?(R03%G4)ISY!GuZDUYq6xRSoo%8)C@F$o^Lzw~6&$Nk2qwux?S_GuVfHl%J z=PNPK_9}Qn>Y}dxU&L!y30|8WzY)jh!%5?HJfa(YSv?WC2qH|$X0uUv?TZd|6dVp| zGB7iv>5d)fkZ&LLT^N97()CLTF+?PZF*fG(M)n{&sn7=*w2$&mKk)=^(Pp9#*ncG& zV0k8XYWK=YPF=UR#7&-K(4>s3L*k8}0610bgZy|FazTh#7EZ!UN6wchvH`4U`$25* zcG4oN>Zv868%}!(rZt?-Z2o9k(Yc5J8I_RT>a@R^#?*b3Kn6JD+<>64vm-BBu|cW` zOiUsUmfX53#7e?ETnaX069bA>fZ|0(;U=5(dKQi-**h{E2G*IZW*kRsVal z4Db5)86|G2-5Z?Sew91i=6rov($yYyABpt$6fcEEw+6XLThe5`>k_cWo6<6w`n4(B zvfCOBp^oBJimx=SS!=NQjzZ;;#&CIO6Jdzw>N~|tn(q6#AJ2D$*Mw!w9?&_}rKel7 zWDl~mVMVDei{-qb1TWdD!De0eXAgBQqo7qrKwC(=uyfJzs7gidbKE-W^x`VCIk~kA zw}YiD%g!a+V|B$*T;XvtZ8EA>Zkgk8jq!b#@`5>2rf})BGY-N%w_url1-lnH-Rc2S zb2lyCNf-g7`Gc}@MYa0(T!*CCCx4lRj@F_o%=#a2N?b@g5lZOLKY2%$sm3Xhq3GeQ z^`;kZmzMnZ_L^!-si_3T-?q1)8N`f2)OA?Ww2k%JPm~$$Gm9%#BBuzmUMd|H76UWN zE0#7C?R-3ca;1_!#(yO5$5r?Pi$zN7s?8%69nd9AOYPdq`cyqpPv%9&0Lq1ks!aqe zCd64KfCk28#GNOjl%>QelDA#DvJR+Ny74j3SbULI`ta9TNlMW7jDR$=Y;C&~9e&tG zMvv!?UcGod!Cez31lMtI_c9aAr%;$urWQ#%7Lm+z&LG%o8V+}xcb~2YCc(iRoq4C z&LDKgq^r_f8N{&9XWRIEx@W@?_`2!$*7PZPzFtPQ!xaDs(g5HPUV?x_Lk@}jNJHHH2dJeIcbwy9SQUW9G`+}6FMkis}I)Tsn)Wv$#C2`yYamtk%n`v&`sYv zp+$4v4d8)zfQbPKhDTA3`;rr#qFAvyzQoYA2qYsQTqz7lhK>BbT9Nq4z8UbzfJ7?2 zr$KWN>rV3(fED!QDT!Hz*CM9oT54>ou1tn64U%JN#vx8mw|_*75gYc~E>TsScqRf7 z&gnOO5Qy7vBGLfgt}CdpHuvJfOS;6CtpS+Lc@)LR1ahP02&C&0`rZGmexUadKkGyo!+o&jOh+zktyKaj?rA#7NOV zeh{V(#ebwsfR$=lr%9%DM|fM{fvfz?!Z>e?;|av??}&(Ht|gu zO_+ErWXS@lN%4N~(QY!woi$xMcL!Ls9fQ1UE&kr35V+CwuI-S8e zn$??Wg(K_zf}*i`CoxT6rH2)S6|B~THw@g@Sdn0pf1nq5koz-C0x;c(9`Pqwjk>j7 zeF_Z#YxrVb3Ud8u!7~l1I%xc|aFd$MWZ9yDiczTFtf;k+G@x?y{wWp2Yf<+{HfuyU z7H>`-N`1^;HK8yaXGdT960iGF@_2EwQR|A*gvc}2A?x}2?auF2LC!KVMRvdv&t@ny zjuColWI1S2;3te%jsaqsyx3}MbSMS>odCKzSt-|G-2=|BkR#)6$S?o$yd0%1ov%qq%0q{C_xE@Wz*Uy@|{AKu>`*CIes`4XDlo*uoxL}I)(+b35|tSZr&-qSqw!zyez?$7t3+0+~g-4_EVzhIM@ow;9# zep&8iHK!K?>@HDDxamrURTXG@7?a@WdKbPh?|jrN%r(D@;ljh#d@PhVH*qr)4`y$( zu0=qSs%Aun;R4xPBI#95H?az6p2|gpv$a_r*DL;(v(JShEn{Otr?rYE$Kbu(vZdpz z5?RZ@L9#ab)azKcV6)v%R59K04>`p$t?n@W19OMj#>Fbf^B%MLSg0wN;e-Af(>j$eLNE;%!@>Mz>-S;|`#ufms4?|N8)gDwZ-CfA z9PV0pBedQ01<0eWhvb5QKb?dpEo$uQij!Z zUG7$Q`O%M$kAuTXkngW_mek$YRIMZl;zs#a1wpT&vj8YSiKVdxhG7ia(h9FY{IM$b z-e`4p1gV7OV2dRRrRTT1=wo|cn6~6!Vp8fUlSa1qgQz#pgVdb6b7#9ZQq}VaGiz&T z#quQR&|Z9)rawtW=AQC->6HT*UayoQc9&Hs!Qh~SI$|b|qkubxtT8eUqa2N375W9b zpz^gZFo6i9L>trQggY08uio zX%jqZtTrGZB@z~cRy={$UO%FBj1wL#VP{8K1GQO&B`1tGRI+}0C4 z^AW;(>C?a|Zk5qDA5NO+AxiKNgWVj7n~}vwlZr>R4V&3ah`O~)WjSY1qQJ?)$nWT? zv(elG9ASLiba*sR1D>R8y>%FK!B6n1N;E40)8a(!xFKW1x4*)!ZS0c=~yX#m$ZVIhaFK3 zpSWl#gf}E_t?p^aA3`@X1`>5kOswAA1F zwLEr-9x#aj#Jw4@5P!whQWc_jtEd>vd_3cw@U_f}S?SL728a|U{=7kKf>JS9z zgnrd%3tpIR*gQJR2i0X%pYRt7qtNk4hy- zn+1+ODE>8P?j~xZQ$s5z_C>|u9YG#KRL1DTjA{h4CJKd|ni?u}@G|o(G~3l?oN2WR@gEnTJH9F=c2% zC6S>>=1ieTGK(}InaWI}@LTse-{*O4!u7 z=6Ykrh&IM2Jg>c8^cH($ zqO#)I!_ht0n)dUIN%E|aVq*)nV0z!lA$`pFO{RU-^*x%}>ua?Yo0b`t`Kg3|`? z9!Y9%zrDD8{oPY^oemC;oQ~JZ+qdkhY@s&w)o!TU{GlV-&oJHmOZf61 zg=$6{rm_e>d_^0hefQp9;5Y0kd6=ft^DXV#aB-S(Fc;!a?&!$jGg))O5<=sD?;6vJ-N(HwSJmWp$?qBlb#>A%jqFIuI$_07oLt4e4a+KKdwfSug|Ha~3i0q}XSD+T=6G@6PM0m~s}}Rz z9qHvc+%Lc)4@>v$^^6}q*E)|J{hd&h-|OzL=X|7Bf@^S6=7Cq4^@N-ReLJhP6kCIF z%$38s<_{f|#8pZce=kfvyE7xWc*^hQgvYnv$=(qTT`Uc57H3?-k3{>L?Xw$coDNi^AJ`as z#>>SqJcdX*dpuO7N33>N{g{2_)>ATZ*U9NN+B9E(^`U`V$rQheHnrm8sl~x3KaJO# zZyo<$?>}qoDX(Cc7oYD}B$c@>^WgX8-d2o3kAIrE$~&1DXkN@9*in4Ku^@35Ko_&jF#e%*IY zmNr%v{qx(Wy!b{O?uo~;yjXame)etezV|yMScS_XFX1_!)QVcK4J%pWu-oZp`};LN zJA!=sBODI>?m8h%oGAAC6zcn6-}kBDoNjArk71svZad#m_~*>#u~Mc_m&0bT_fyE! zKZ+^+|J@ne{r8=*9kwSdjocWe5cfGdIWM_02A99o|1N+?C(!;bRQRtlPmG#~P>$`d zns;#j1E@b+q@+P!@+4Yv;$8HC&)|hWwF3#?C z=fl7t!F+!E#P;MGZpU64U$^dWiMR9XuN8iD%iDAJ^tbSAIUf1z9?JV-yPPMIMEY5a zgL@++YxG8>&DFk*7)pP1Gg)Z7X?j&BDoJcm?%Ld;(%&QX(yMfR9Co@|^5o^!7yb(W znXe$tm#s~$*xF<}$T?B05-AsTAT>&>nY2&7I&52sL(sDdm!Ctbm+X?ZL=kdBqx$xy ztvSB@J;8+iy_U`)RA2i^P`UlMqpE;RcjVHhS>f`k0)O5UQ7vEQfE5Gn` zZ^dzf5`MGVBJ&l&${*OJ3w0a+>t)A(3m-$Cms~CTCz1VMUoB%S81!lxL#CFjsz07p z{nynp8jVi)=bL2|JcX{NCIuBiZ7m&nJnz(b@t!d-jQR1&F5z_ANQOsJ>V$6Ufk)@B zUge1v>Nb%}*}8*EV3qXM^U?-V>(*V-*xM|yhIz%R{?YL2_8V{I)(=b7-Hj9U&*_{R zy7Zp3VOE@TK8}>t>7w(%@q1R5>*P$vYSR0++lUTzhlw-2k9~&Xed_7I#)q9pMYl8I zDiozs3apd1HT0<1v6MM8Z?C!-^PbXH>CY5k$#neFDZONf&_?yx1-zJkZny4y8Iz%9 zdz;C4Ba^SQwc}3Ff$cNNb~*iFqPL4gTvCSC2iVgCP9IFUm#bE_as!VY+L{w2YkRlrmiMYFzuFpsd5u{l1^D8A=77%a=nJQdAk>T~IwM0+Khz;V|n);F*6 z@<}nXZe~+ozP;XBhO2A4fU3*_a~so+goTN7Oof8vH311B&r%XXc+ZaS)tcfzLOt`D z`f0X*I;JB*y--bgto(J$J%@L@_VkLosF(8ScXs3y%+lRC*aGBMN3dGF?~VR+QTrID z1xMW8m3Ebh1!Bdoi6%pyfjp%St$72nDysE<*zKxXKP3`Vt77UK+rK272|UO z<#lj>r(!r$WaK<0-@}SU%H3H$sv=IGcX-vRRYIj7;GFvyYn(Ib4c8 z`v(_HqU{cUI^minfz73#B5M) zeCP#xmWfc?mK!m7Hnv~6`ukb8=)!VWeYHfJ%`@^!$0fM#l|CywyI5XdUfw=E@Gdl` z@^RvCF$3SapHBY#-aqNa74_v0+lvv&D=v*m2>S9{tY!T4nAkSX;;c!} zlh3!hn~RPn++i&q6MOc8Y0KhumDm?s)>djv^|)+hQep|o*^|GlO@n%LyV9{lp;e6` z-o~|I0~e^4j^7{UWQNH$2~SzA`yQk`6&UekRYZbSHg6qIupy)4f^=`Ji&RdZZU$3v!bHs6xxWWb$)RCax)3tbnL2ZG;zWQ%KHj%(oO)8|#V%IRdx zcEp0UH%PQklSm2@ef^}qb;W!ullXqGk#led&R4(WX&RqE@Q8!;)b2dN#e2*j8dgUa z^Nn0oK7LWAoyjTXlF{*V?+0!WD&5&t%#8-8?7as`^JAOlyEYa7e38*p)jahgv%ZOGd1!cYgTAWy(~{PcO;3{#IpH+En_LaJ9)yT540{p;_Y2)Jo#= zW@6FL$mHzG$W6*Cd-d!Z4{n;@7r+rW_3_-1Di6cCk%r2GE;dO|*OImQ(eZcmE|snl zxI}ICV3|6vbJj1K|7g-HL*?ViuY6k)wlD5UDm^f`KYGq!$T2hcllW9M^CizpEl!Et zU{-$bcAa0M&6NvGsx}Y&eDp&6HVuC~sPH5HVR6yVcuqenJ@PR31gGD#U(6xxal4iq z4=nf>>LtZ(D z>Lp%8#}gA*_9Z`(r*$XlTi@bpZGQQZl$8}PBAR|5A10D+@T7?&ddML4qdIw0Mp|-? z2fgxe^oVQ2EhfW#*&&;R3=0QzGecAiQ@I*WL>pz0E*lyhw!b^EMsfcqz0EO4s(6GH z@|wgqDHIi(ZTXfASU%F(V{rJnobHy9WG$C7orZ&jrir1qdkXA@P*LU0A zETHfG@wX?lZzMK-H{rl{?#*6C%HCr3=6mu}VUGQRdbUMBm$BAyO*CC&+kaSRWApd> z(&vIhR_+*IxoOjx%lFwfozb`O4&-WSp0anxtDfWe&8;3QXS{uZ?RCO2p;>#9LcPqx z4*T~4yd1Xiu?{P|D6d7W1fsk~46>_p^hX3rM51O5cCR>CM{?uxU?1(J?>QcP;c2YC z(Xqhl*V5+40>>2Y?ad5%!#1HTx1nksfu+|)h`Zj@HRx!5h@5K2x~A)L3h-Y8oqaBs zTbPn)a&&oJX%#t>ii>ZquXJ25AAU_{CMqTG@($6BCwvO8%hKfhxeLk^P3L>JY}_ed zWqIpzkc=v9Pj9?AC1|O$A+daYsJ%_*RTlSq?}RUW z(wN)L?RIVb8SN(fm9I@#KE1m7+C`jaFz?Mu0S#Q_r2qP3E2FgE?BH@gXV2#TVqN-Y zKc>@*J0-_H=euvhaXp&fDjmvQvtilc3+9x zvX$$a)N3M_xA@1+PU>|giEXFRTq0wy)L!M9Eq_ocaojB@^3kjI6OPyO^nDK8dBrt& zK<65HCI9hN;YYd6xsNE#cON)cA8JNzPw(Q+?{SBvnag8a>*2|wwP(n)fJ<5C5X&YB{m0#Z7L3*Wd{OSX% z8jXyM^iS-mc(HxA%Nh2x-kRzYk31bU?Xu_Ae*3k3{>xl;NY;H<$9~-(@)MWu`%fro z1>ktfJc3t*%?4?osPMKBj9(_tpvKM_GyS!3r&ecoQ1BBM%)^e0q%d`Tv|b*B> z=VH>+TTH6z-Haqus_N4Sx<6iDZY_5W`Ltd(`%FwlU#8cb*MvlFi0Ts`GcT=~V5_$p z)V`|;I$2D14O`!b6^*SMN>ZIrELfiKz6)EE-Kw4O_NQiEZ6$b`jFQ7W?Gv+usUAk$*vFAY`S(!_!Kr< z;B6mh9hKgCGCQ^^R;%@Eg5O48wUbKChs)ifFDG>N)TR<}d|w(hO*%{p_UpM8-QnkU zyj2tO^m$Yq^>f6r={NGlgW+}GT0F+q7M2c3F8ZE5ba24z#|E#3!tu{mvE;8E{_adzH_zyg*Sl#KT52x5Fx@s zI>X5iWG3I+Yj1{Xu5|b^EmfwGk{2)8CiS&+CBNybO(7|xDMenXg||yD>@{SzY_8P$ zw6?0h3P*&oXMqNEbn|FQEzf$HnHO(F}{U$@d9v)RnarfnWvWq)EDly z%MLfHq}_YpxBKM_o2jd>0wip1`>1_0zwnzr{l!`@HQ{ok(#3YYmv-ZwkNd8XU4_@C z-_EZ-H14Ed##t2PZxUEJ<(a*oQ1;T(K2brn*I&*y(IX*4)jw~=bNTTd+%g@u)q1kA z8)R!mxJy@XbF$=m*3JC3#`kBNZOZPjKFeNiuVv3Z$Ud^Z{$u*bj*<7gJ}yt1zI=D# zD`VoXW_`Wl)r$Ur(`96VZCATeU#92@a_IEkt?!ekBvLn|<)>6aT%@Skw5GmFBQGS* zYp8^r=P{!3WX^0na_*3}fq~g)vFa^XmXx(fLCT_dTz<8m@6OQEGn%oRcRZYb zspzolQ?kqBTCSu6<7Y3Qwm!1?Yf06sp%$0vqi-}0PriBG_2p~vCI0Eh3vK&s3kqng z;scdWA9)Q$H<>6&sCuWKeE2Ydyh>i`_f4TeZh;JSzFN=w6Z5|9N5Xmf7?e*{w06{q?qs z5iM<&D`YHq1P#(+ZoGKrmjP&dj5(d!PT0cd9j1HTdK=AWU#`HJ$ic|-DYp*XQN;D# zK3bzFFRQhot@_kn6U%STiuMb_ZhI?CzL+$dOqxIvbHCrwvlo~%>8g!1W1an~LqDIs zoSaE1HT?YY+1dFGFT-j*;dR9Bx`gcT+>65(n;so>5s^t0?@t{~Ih3n<>hl|~_LhPS zpUqNYoR^32{K0{{Ei#8vgffczbcKJNuRCceX6miwYFuA05&lMkfA0%90WhKLpk~+y zrf7-hvf2-t8W4EnJ}tX)v{Gj}#aq2Nv@OxP^jDY6wndkZ#~)mB4_EwEwJMSQy^wg$ zwa+g-0+=6`-S3Keu){j_PV_!kIkHn}aqXI?`qf2BMfDTMPv{!0&ktoT>UHh!HQvzO zy?f8$ORubMz9pZI@vG`ig(b&3Rn7ZHLuuvxGlpWt+R2)XZm_ha_S*9k9X9O z8ovkQt>%k!UvDj#PG#MmGp9|rmmgG0sZT9kl%})qoAvTIo9Hl0c%!+4-7Z~zv~_Gu zjA>@)bgblFT&E37lt!)}92>mJtCM4F@cl-wn?ln?S?)5*px^ahVT6#2dO|a4qY9?E zzF~6`-p#+Ls`Tnl67`m^3N<+0Lr0^;zUUcJOW2orGyi0M#A$;oZ@Jr?GT?Jh&#G95 zQ zxZnN84ez~^y=FPrUMET5&hhC4$rI#WoLp1A-i}yYIKvt~sbaC(} zsnbHNr%95RS+>_6tGzF?rR}({pt7p4iD#+I0k4lchsFwo#uZY9=X;_#b3+$`D5vR6 zr3oII9KM@x#98E3n{qy?x%Sq6S%JN|tNDFHPRbsg7jGWW1?TtLhuc1^b5MO^`(Tgm zTBDDKvznRer?d@eD|1t0Nv$VX>KE!HkD2qdzdmVu_^EL~`2ng2Z(eU(!L(CHMn0c^ z^5?G+GqOKd&C4$soV~T}Xl+ct{N%F9(8-gN-zR(e=za9-X^G#vbasrABc9(oI1tMJ z^m_cus)$^(w>)eQeYb8Ds4m=kE#J00kW%RTEimCx#g||09pY)53ST8>XMbFi<{qlo zPmZI0Ea?%^@T69%tK;^|kVLHo27h^94z(A!qBFfFl;&JkE$-pRzF~%)En%7*P%vlDIr=wsA{anFEeZ6_=>o3k%foLft} zlhvO1HKB1=rEZUIj$PwWzXpu52t}9XN98mAIkE*#~Ef?7N&#E%&kWH9R!X?fmpt z=~~)>kDe0xzdj3$c9W&l4>rg$2X?WnI4`{xuUqLGcz5~6a$%kuy8dzGmEj3*NKSG- zi>5IKws+E_o+(#qS>;#+8|j@+e8yqae8OzwVA{RIA;02ndR2#34OtJZx-nT}Yc^TM z^yJD^^Fs%>)lZl=JfBE-oH)0@JCve7wMV<*o`v!QYvn!3(sYyE_y?jnI-8CpSZ}FV zX`lVPJd-c?+en*-@JyN6$DldCm#@0;Tjj)CroTy2AKI@mw0w4dQ>c-_A$JeI=Z^K! z?^+{%jO^dmLyp{#?)ls8FbrE{`+MVdIrgqgo^=U5J=W#7&p)_MbBWXK3EZG*wTv&| zZZ*$(IS#GlcQxL{Z<7aTuBubq$MkK)ckW((ve0ZoG$XRR`c!DZE0%F{hm0p#@rs*@ zkM@~b61eYOx78Gm8IZ1X-MeZ>_~9peJ_cQCu^u(kkLb3X_D}a5Bs~#cJmt$()S~*G z5_31c(l!9MC!?3si_h5N$f*)5{j&9gQ_?m}AssA&*BjX^@Hh7btK&tM1=rhL&9D$C zo=WLxup{3N4c@Y1K;Z-7V^`h@`(p+&-^eq0i?;*qyS0faIBUfdH{WjEvHYc1yPln@ zUwv|CTl#CaM{A7Fj|mI9iTh8@(=)PXe~*j(phzua86%jn65ephMCv|iE(x4{W)tpx zAwIyGdzZf!udhg7;?L!ue+uuab-9zW(QUx%ihKB?c#&#TWlY#&;5%QO+39Xp3e(sk zQ@-%=huEDEG8A_DFIyr1dGYb@{XAVuM_VZ+o&WbYG5@Dt3xg1h8ZBh%AJtm^aTD`@ zN?QGA6Z4;l@$Y>ksFlSig2nhU?BM(#DrW)spx0^G)!prM%vlO5G99qBvxlu5FDW^7 zz|vNpM@i4s#@5x|$xce{U#}Me@SxkNQzva5ZJo|YF}5j{4oMxsNzsY_w1r9g>JVBgQ6Q`7B_#QZTIMw(_7NuXRv!9ziJ5)aD%b5oj zZ*S6L)nx0fPL?jfA?&s-^IXhFA9U*nwY3>v>iqq?_fTu0Kl8UAk^iOM9X!JNUse@^ zWmacE7NnFg8;t)XPXFr-#=jnQg^grlll_|epSa*~Br=w!BnkoPOCbQ#7&^m25DcBkaGV4kgF>TY+R%Lcsv}bS=tVVhZ8l(d;vyBVH9}Q6_qs#iA<+s z`hr*?azG&y35@D~f8qxRYw(ORh)ZDtuypy~X7Xpb<>k)y07D2`UT<91&6KEh>XkQwMh{_*W7YaHq5eHI^^d$o0FfalU zp0!?zACX8RqC6*($P`rmfa3%Vj6x+L^Cc7TM9lX{I6MU%7g$b5=Rv~bFtR}+5Kz5A zp)iyaG7o4+M&|+4qhs2UNO+8F;HivKp^V?Z^&g2!L)SEpL?e(<9+7BNly77LL)g&o zfmmT-6pTE>6Q_8TE+DxiWL%&;4xKLrECq(Y&=;fE$OJMTp$p(lq9AmEMM=eBU=%!t zzhID1ngViE)PCT|G#VKh7o>nrMb|kz8BRmw3P%Asz^o$z7*>SN6nKptr5~V&+7ui- zXwG<=dI`@dR4Pgr9KbL*Q)pQGMxm3j>zoLy3mJn-AfvhoM+M!9&KLMgL*|PEOfdLS z!52X32PoqZx{yI%Vb%hbPJzeVm(qX+HUPyLG#C+)12Tbx!=dAX>A|dX8t7OA7aWa% zqoC`JM#RGjLIf8$UWwoW6Iq#Yeh z4;Dtk%#BXOfrq$sZgdhJqjTsCWrt};M0ts$lSz0~Ug$srl%}wqgx z=-L7p71cQ)7(|rkcpTt@`5pyYqGQ1G?Z|oqT(D!{L97rO;9+3YR^S21h(8&>f9Y&I z9;+h&Mk8Uq2QDEZFJuA*i~#yQ3Kg}Xc$fvMV*y4({V+V9Mn`=C{D1MUVBEjb2utPx zBcN*)rbb0&1Kcno>YL$VeW1DyPk?$12(4gTIt}3mJh6}Qy@7m0MxoZF_`%Xb`3sVP zp$idD#qR3Dpri;)8Rxhvw{T>X9 z@&h=8>SEBubktV{ml`5Ro6=M(q}!OvcI|w8GGtOd(M&^d6knpI#28ci;wG=-v=D^{l zFsS%Wr(wnbHH2vgIHT>TATC%KC{JVzsCk3+z3DVEItG;l+(i45=p=N$)W5PAOXZnL zpIEZMFalt=8Z73eBD#liTe}KUm`~!^s12+sa515wZxbRtwV!lSYQnh6}wrT78mNhp2<9D$6Hd+->r?ZBQRvJ0Lb9@Sw0 z1FwJSxIh;gscZ=IwlT<%nd|bNMABIY=~?y++sA=AVAcEp(z=1BPcEm_X;BiU_VefAk%4R&J7F- z0nGuBA=*dt2cRHe86xwb&?u;l0&&6Q%?MNoQxN?O)s#qR4hlR>GOC|J)W~RVjsUA1 zBL}c7QTqn-z{KYa7ZdeW07gY=3Qib^J~Ce#WHM2{fqF*uB!LDt3gHJxF4TBKzefi` zBQVGyqx=Am70Oeg?Le0xHW@P4K&++hU>?Awr7*ZNNW|zXFe#|MB7paT=JWwZMEyhp z9gGEn3mN=kG-d*mjEOG+MnUZYM5|O(HlQjV4fUUiki0={<6ov0p*;}-el)%W{2*z* zlrA7Z5R{-Wh~SX9fx4ohb^*KtI+`nm!hM)LCJ_&I72ze|0++CAPYJVSiPv662X9=G7iQKlfxqtNZ_<0<1%v1$UMOGz$ejm;Af-s1BHO$8^jf; zF95h;a$k@sfFvz42KWLP*#Jy1{Dp88jjXIdIEo05 z06EBRA~-W#E_5CwhGe1bfcBWaKp9kCNEEOtXkT!k5xonzU~CzvNg8S!iI4}z(12mf z5T3*LF#aEe&KN%jU=(zpj-g^PYafg^>fgg=BPO;2MF(k*rSoN&OVmaYA-jR_+5uB+YM+>H#>5{GO`~%oLR^NC zXK)iSe1i-WMkg}dCRDEIurd)DXY3qf>Ov-d=V>a!@% z;d{Vg^m~v#K*j}%f@N6RjsZh;9f%}I0@@DL0YU>3jz~fMH4=_QMdJ#FSfRcY14hH( zM+F3zjtiUYUsAb$c*Y(Nc3U$r~ro9LnASs)j-xX;DWJ(kO;!;8|4uhd}@R) za3BWbQ8i#SW$0SuBnC=7ggq#YxDfRRb)iP|W*=mUly{T>X0$_pcfjKIhs z8EAe3wgadboygdOMCFAMN+LcccoA5=26;z}{-aYd``C;v2UM=eaA*wm4*+NIMwiYP zmK%m|0HdNbAj57WDjTpFkIA8sA@7LN09?~5n^Iu5*4GvpdB!{V0FoJPjsS4{8Y2lb|NS)g$HeYi(a5kemyQ7;4#xLkggvM}pg_6=Pd9p+E*1_4xrtMsuYAqoMLg zVI(LK+5-&ZvjPkwldz!isQv>O=BytDxPj^>Mu>>!{{V*By9057!#D{2NED1dg)A2) z&k7O*1{mqfIG}^_1H=W@iGVQX91oajOs*7Q;9Q_%fEXY;49?PFWRe2$B^t*A4C7w` z3>++E42TTSwNC+Ci~0-zgM$=EUm6_$`-7%uTrJ`GG*=!t)ql|5n{gf+&!cp}+4+nV q Date: Sun, 16 Aug 2026 18:03:57 +0500 Subject: [PATCH 7/7] =?UTF-8?q?feat(rx-js):=20demo=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lessons/rxjs/demo/.eslintrc.json | 39 + lessons/rxjs/demo/.gitignore | 9 + lessons/rxjs/demo/README.md | 45 + lessons/rxjs/demo/angular.json | 72 + lessons/rxjs/demo/eslint.config.mjs | 56 + lessons/rxjs/demo/jest.config.ts | 25 + lessons/rxjs/demo/package-lock.json | 14129 ++++++++++++++++ lessons/rxjs/demo/package.json | 46 + lessons/rxjs/demo/src/app/app.component.ts | 170 + lessons/rxjs/demo/src/app/app.config.ts | 12 + .../demo/src/app/core/event-log.service.ts | 29 + .../rxjs/demo/src/app/core/log-event.model.ts | 17 + .../demo/src/app/core/transport.service.ts | 157 + lessons/rxjs/demo/src/app/core/transport.ts | 68 + .../config-cache.component.spec.ts | 47 + .../config-cache/config-cache.component.ts | 107 + .../fast-navigation.component.spec.ts | 35 + .../fast-navigation.component.ts | 121 + .../filters-url/filters-url.component.spec.ts | 27 + .../filters-url/filters-url.component.ts | 194 + .../form-submit/form-submit.component.spec.ts | 44 + .../form-submit/form-submit.component.ts | 104 + lessons/rxjs/demo/src/app/scenarios/index.ts | 36 + .../live-search/live-search.component.spec.ts | 82 + .../live-search/live-search.component.ts | 148 + .../loading-data-error.component.spec.ts | 49 + .../loading-data-error.component.ts | 138 + .../parallel-requests.component.spec.ts | 40 + .../parallel-requests.component.ts | 120 + .../demo/src/app/scenarios/scenario.model.ts | 22 + .../subscription-leak.component.spec.ts | 43 + .../subscription-leak.component.ts | 105 + .../shared/event-log/event-log.component.ts | 56 + .../scenario-shell.component.ts | 23 + .../shared/split-view/split-view.component.ts | 35 + lessons/rxjs/demo/src/assets/.gitkeep | 0 lessons/rxjs/demo/src/index.html | 13 + lessons/rxjs/demo/src/main.ts | 7 + lessons/rxjs/demo/src/styles.scss | 262 + lessons/rxjs/demo/src/test-setup.ts | 4 + lessons/rxjs/demo/tsconfig.app.json | 9 + lessons/rxjs/demo/tsconfig.json | 26 + lessons/rxjs/demo/tsconfig.spec.json | 16 + ...272\321\206\320\270\321\217 (Markdown).md" | 166 +- lessons/rxjs/tasks/catch-error/.eslintrc.json | 31 +- lessons/rxjs/tasks/catch-error/README.md | 71 +- .../high-order-operator-bug/.eslintrc.json | 23 +- .../tasks/high-order-operator-bug/README.md | 109 +- .../src/app/localDB.service.ts | 17 +- .../tasks/hold-to-save-button/.eslintrc.json | 23 +- .../rxjs/tasks/hold-to-save-button/README.md | 132 +- .../rxjs/tasks/race-condition/.eslintrc.json | 31 +- lessons/rxjs/tasks/race-condition/README.md | 131 +- .../tasks/race-condition/cypress.config.ts | 24 +- .../src/app/app.component.cy.ts | 2 +- .../race-condition/tsconfig.cypress.json | 13 + package-lock.json | 94 +- package.json | 1 + 58 files changed, 17223 insertions(+), 432 deletions(-) create mode 100644 lessons/rxjs/demo/.eslintrc.json create mode 100644 lessons/rxjs/demo/.gitignore create mode 100644 lessons/rxjs/demo/README.md create mode 100644 lessons/rxjs/demo/angular.json create mode 100644 lessons/rxjs/demo/eslint.config.mjs create mode 100644 lessons/rxjs/demo/jest.config.ts create mode 100644 lessons/rxjs/demo/package-lock.json create mode 100644 lessons/rxjs/demo/package.json create mode 100644 lessons/rxjs/demo/src/app/app.component.ts create mode 100644 lessons/rxjs/demo/src/app/app.config.ts create mode 100644 lessons/rxjs/demo/src/app/core/event-log.service.ts create mode 100644 lessons/rxjs/demo/src/app/core/log-event.model.ts create mode 100644 lessons/rxjs/demo/src/app/core/transport.service.ts create mode 100644 lessons/rxjs/demo/src/app/core/transport.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/config-cache/config-cache.component.spec.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/config-cache/config-cache.component.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/fast-navigation/fast-navigation.component.spec.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/fast-navigation/fast-navigation.component.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/filters-url/filters-url.component.spec.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/filters-url/filters-url.component.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/form-submit/form-submit.component.spec.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/form-submit/form-submit.component.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/index.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/live-search/live-search.component.spec.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/live-search/live-search.component.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/loading-data-error/loading-data-error.component.spec.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/loading-data-error/loading-data-error.component.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/parallel-requests/parallel-requests.component.spec.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/parallel-requests/parallel-requests.component.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/scenario.model.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/subscription-leak/subscription-leak.component.spec.ts create mode 100644 lessons/rxjs/demo/src/app/scenarios/subscription-leak/subscription-leak.component.ts create mode 100644 lessons/rxjs/demo/src/app/shared/event-log/event-log.component.ts create mode 100644 lessons/rxjs/demo/src/app/shared/scenario-shell/scenario-shell.component.ts create mode 100644 lessons/rxjs/demo/src/app/shared/split-view/split-view.component.ts create mode 100644 lessons/rxjs/demo/src/assets/.gitkeep create mode 100644 lessons/rxjs/demo/src/index.html create mode 100644 lessons/rxjs/demo/src/main.ts create mode 100644 lessons/rxjs/demo/src/styles.scss create mode 100644 lessons/rxjs/demo/src/test-setup.ts create mode 100644 lessons/rxjs/demo/tsconfig.app.json create mode 100644 lessons/rxjs/demo/tsconfig.json create mode 100644 lessons/rxjs/demo/tsconfig.spec.json create mode 100644 lessons/rxjs/tasks/race-condition/tsconfig.cypress.json diff --git a/lessons/rxjs/demo/.eslintrc.json b/lessons/rxjs/demo/.eslintrc.json new file mode 100644 index 000000000..04278ee89 --- /dev/null +++ b/lessons/rxjs/demo/.eslintrc.json @@ -0,0 +1,39 @@ +{ + "root": true, + "ignorePatterns": ["projects/**/*", "dist/**", "node_modules/**"], + "overrides": [ + { + "files": ["*.ts"], + "parserOptions": { + "project": ["tsconfig.app.json", "tsconfig.spec.json"], + "createDefaultProgram": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { "type": "attribute", "prefix": "app", "style": "camelCase" } + ], + "@angular-eslint/component-selector": [ + "error", + { "type": "element", "prefix": "app", "style": "kebab-case" } + ], + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/explicit-function-return-type": "off" + } + }, + { + "files": ["*.html"], + "extends": [ + "plugin:@angular-eslint/template/recommended", + "plugin:@angular-eslint/template/accessibility" + ], + "rules": {} + } + ] +} diff --git a/lessons/rxjs/demo/.gitignore b/lessons/rxjs/demo/.gitignore new file mode 100644 index 000000000..bd79f9271 --- /dev/null +++ b/lessons/rxjs/demo/.gitignore @@ -0,0 +1,9 @@ +node_modules/ +dist/ +.angular/ +out-tsc/ +coverage/ +*.log +.DS_Store +.idea/ +.vscode/ diff --git a/lessons/rxjs/demo/README.md b/lessons/rxjs/demo/README.md new file mode 100644 index 000000000..85447fbc7 --- /dev/null +++ b/lessons/rxjs/demo/README.md @@ -0,0 +1,45 @@ +# Интерактивная практика RxJS + +Демонстрационное приложение к [лекции по RxJS](../lecture/RxJS%20%E2%80%94%20%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%20%28Markdown%29.md). + +В приложении 8 сценариев. Каждый показывает одну задачу в двух вариантах: +обычном и с операторами RxJS. Журнал событий помогает увидеть порядок значений, +ошибки, отмену и очистку подписок. + +## Запуск + +```bash +cd lessons/rxjs/demo +npm install +npm start +``` + +Приложение откроется по адресу `http://localhost:4200`. + +## Сценарии и разделы лекции + +| Сценарий | Операторы | Раздел лекции | +|---|---|---| +| Живой поиск | `debounceTime`, `distinctUntilChanged`, `switchMap` | 8.1, 5 | +| Быстрая навигация | `switchMap` | 8.2, 5 | +| Отправка формы | `exhaustMap` | 8.3, 5 | +| Параллельные запросы | `mergeMap`, `forkJoin` | 5, 6 | +| Загрузка и ошибки | `startWith`, `catchError`, `retry` | 8.5, 4, 6 | +| Фильтры и адресная строка | `combineLatest`, `switchMap`, `startWith` | 8.4, 6 | +| Утечки подписок | `takeUntilDestroyed` | 2, 7 | +| Кэширование настроек | `shareReplay` | 6 | + +## Как работать + +1. Выбери сценарий. +2. Повтори действие в обеих колонках. +3. Сравни результат и записи в журнале событий. +4. Сверь наблюдение с соответствующим разделом лекции. + +## Проверки + +```bash +npm test +npm run lint +npm run build +``` diff --git a/lessons/rxjs/demo/angular.json b/lessons/rxjs/demo/angular.json new file mode 100644 index 000000000..1e696b2be --- /dev/null +++ b/lessons/rxjs/demo/angular.json @@ -0,0 +1,72 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "rxjs-playground": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": "dist/rxjs-playground", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": ["zone.js"], + "tsConfig": "tsconfig.app.json", + "assets": [ + { + "glob": "**/*", + "input": "src/assets" + } + ], + "styles": ["src/styles.scss"], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kB", + "maximumError": "1MB" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "4kB", + "maximumError": "8kB" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular/build:dev-server", + "configurations": { + "production": { + "buildTarget": "rxjs-playground:build:production" + }, + "development": { + "buildTarget": "rxjs-playground:build:development" + } + }, + "defaultConfiguration": "development" + } + } + } + }, + "cli": { + "analytics": "6638a0c3-078b-4030-9e3f-cc38c394820c" + } +} diff --git a/lessons/rxjs/demo/eslint.config.mjs b/lessons/rxjs/demo/eslint.config.mjs new file mode 100644 index 000000000..9b67209c0 --- /dev/null +++ b/lessons/rxjs/demo/eslint.config.mjs @@ -0,0 +1,56 @@ +import tsParser from '@typescript-eslint/parser'; +import tsPlugin from '@typescript-eslint/eslint-plugin'; +import angularPlugin from '@angular-eslint/eslint-plugin'; +import angularTemplatePlugin from '@angular-eslint/eslint-plugin-template'; +import angularTemplateParser from '@angular-eslint/template-parser'; + +export default [ + { + ignores: ['dist/**', 'node_modules/**'], + }, + { + files: ['**/*.ts'], + languageOptions: { + parser: tsParser, + parserOptions: { + project: ['./tsconfig.app.json', './tsconfig.spec.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, + plugins: { + '@typescript-eslint': tsPlugin, + '@angular-eslint': angularPlugin, + '@angular-eslint/template': angularTemplatePlugin, + }, + processor: angularTemplatePlugin.processors['extract-inline-html'], + rules: { + ...tsPlugin.configs.recommended.rules, + '@angular-eslint/component-selector': [ + 'error', + { type: 'element', prefix: 'app', style: 'kebab-case' }, + ], + '@angular-eslint/directive-selector': [ + 'error', + { type: 'attribute', prefix: 'app', style: 'camelCase' }, + ], + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/explicit-function-return-type': 'off', + }, + }, + { + files: ['**/*.html'], + languageOptions: { + parser: angularTemplateParser, + }, + plugins: { + '@angular-eslint/template': angularTemplatePlugin, + }, + rules: { + '@angular-eslint/template/alt-text': 'error', + '@angular-eslint/template/banana-in-box': 'error', + '@angular-eslint/template/button-has-type': 'error', + '@angular-eslint/template/click-events-have-key-events': 'error', + '@angular-eslint/template/eqeqeq': 'error', + }, + }, +]; diff --git a/lessons/rxjs/demo/jest.config.ts b/lessons/rxjs/demo/jest.config.ts new file mode 100644 index 000000000..a15e383d3 --- /dev/null +++ b/lessons/rxjs/demo/jest.config.ts @@ -0,0 +1,25 @@ +/* eslint-disable */ +export default { + displayName: 'rxjs-playground', + testEnvironment: 'jest-preset-angular/environments/jest-jsdom-env', + setupFilesAfterEnv: ['/src/test-setup.ts'], + testPathIgnorePatterns: ['/node_modules/', '/dist/'], + transform: { + '^.+\\.(ts|mjs|js|html|svg)$': [ + 'jest-preset-angular', + { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!(.*\\.mjs$|@angular/common/locales/.*\\.js$))'], + moduleNameMapper: { + '^src/(.*)$': '/src/$1', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/lessons/rxjs/demo/package-lock.json b/lessons/rxjs/demo/package-lock.json new file mode 100644 index 000000000..83b7e9987 --- /dev/null +++ b/lessons/rxjs/demo/package-lock.json @@ -0,0 +1,14129 @@ +{ + "name": "rxjs-playground", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "rxjs-playground", + "version": "1.0.0", + "dependencies": { + "@angular/common": "^22.1.0", + "@angular/compiler": "^22.1.0", + "@angular/core": "^22.1.0", + "@angular/forms": "^22.1.0", + "@angular/platform-browser": "^22.1.0", + "@angular/router": "^22.1.0", + "rxjs": "~7.8.0", + "tslib": "^2.8.0", + "zone.js": "~0.16.0" + }, + "devDependencies": { + "@angular-eslint/builder": "^22.1.0", + "@angular-eslint/eslint-plugin": "^22.1.0", + "@angular-eslint/eslint-plugin-template": "^22.1.0", + "@angular-eslint/schematics": "^22.1.0", + "@angular-eslint/template-parser": "^22.1.0", + "@angular/build": "^22.1.0", + "@angular/cli": "^22.1.0", + "@angular/compiler-cli": "^22.1.0", + "@testing-library/angular": "^19.0.0", + "@testing-library/jest-dom": "^7.0.0", + "@types/jest": "^30.0.0", + "@types/node": "^22.0.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "eslint": "^9.0.0", + "jest": "^30.0.0", + "jest-environment-jsdom": "^30.0.0", + "jest-preset-angular": "^17.0.0", + "jsdom": "^26.0.0", + "typescript": "~6.0.3" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.5.0.tgz", + "integrity": "sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.2201.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2201.4.tgz", + "integrity": "sha512-a2J9hdBYFobhMx9G0KwCdo6+LrWIOOyIeijrA/QSZiPOjg8dAprhMh7BEQkF3eT6R1q7wDGP+IElVR9LsBlXQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.4", + "rxjs": "7.8.2" + }, + "bin": { + "architect": "bin/cli.js" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "22.1.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-22.1.4.tgz", + "integrity": "sha512-40jG/6chng9fQuWtpg1kadPO17sRTurNh0aav6Uxebn65PfNpTpvhPIYVIcRgv4tCKdMd++YH95A8SiaIOwqig==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.20.0", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.5", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^5.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "22.1.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-22.1.4.tgz", + "integrity": "sha512-UBJ7jc7B0vRfmrVwlvpmuudo1D7AfpO6ugf1BxvkM4sw5m8cJpZtaIJFKBorv0QZo78CyDOroQfQdXaijjB2ZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.4", + "jsonc-parser": "3.3.1", + "magic-string": "1.0.0", + "ora": "9.4.1", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-eslint/builder": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-22.1.0.tgz", + "integrity": "sha512-gmdk06PK0whNJlapIQjRnhud2/n+oIIDBIoLUHWFFxhHRs+ZstVc6+81gf+sYDOm1Ehmb0V3nZAg3YpT1Mk0Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": ">= 0.2200.0 < 0.2300.0", + "@angular-devkit/core": ">= 22.0.0 < 23.0.0" + }, + "peerDependencies": { + "@angular/cli": ">= 22.0.0 < 23.0.0", + "eslint": "^9.0.0 || ^10.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-22.1.0.tgz", + "integrity": "sha512-iOtOQ2jtrtko1rIQo6i+g3ezxGL0lyYv80j4GccFTK1JGh4K+AqYkmaBvfUfNtqoE/7VcKsOoyxaFt6iIpKhaQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular-eslint/eslint-plugin": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-22.1.0.tgz", + "integrity": "sha512-nRwdbUiW7vF0gbwtxw2hRGPZYZCNWOTLZKw4HM+I37o5YFIA0CFLtbyRKgZWs6JZCIqzTYSwCyKNsW41Qw0FwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "22.1.0", + "@angular-eslint/utils": "22.1.0", + "ts-api-utils": "^2.1.0" + }, + "peerDependencies": { + "@typescript-eslint/utils": "^8.0.0", + "eslint": "^9.0.0 || ^10.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-22.1.0.tgz", + "integrity": "sha512-GK/Mwhwvj+MX6DefD29/IfuYjcai5CsCbYJ6Qb9P6IAzZaQqw+EN+CiXxIwzMnzm2edLcJzAsX8iBk4X7sVi2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "22.1.0", + "@angular-eslint/utils": "22.1.0", + "aria-query": "5.3.2", + "axobject-query": "4.1.0" + }, + "peerDependencies": { + "@angular-eslint/template-parser": "22.1.0", + "@typescript-eslint/types": "^8.0.0", + "@typescript-eslint/utils": "^8.0.0", + "eslint": "^9.0.0 || ^10.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/schematics": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-22.1.0.tgz", + "integrity": "sha512-/Z7MEO9ys9P5w5itM2mpNW4R/QNAVxtDdcU5LVFulSx/lo7zCDx1rZ/tLDuzbN5k5RGQy5ZkdRIs0MoscsGXQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": ">= 22.0.0 < 23.0.0", + "@angular-devkit/schematics": ">= 22.0.0 < 23.0.0", + "@angular-eslint/eslint-plugin": "22.1.0", + "@angular-eslint/eslint-plugin-template": "22.1.0", + "ignore": "7.0.5", + "semver": "7.8.5", + "strip-json-comments": "3.1.1" + }, + "peerDependencies": { + "@angular/cli": ">= 22.0.0 < 23.0.0" + } + }, + "node_modules/@angular-eslint/template-parser": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-22.1.0.tgz", + "integrity": "sha512-gcufZLI/Rl2fOWtBk2MgMRkH1t+OrbJGxIsfT0w3pVjKm0zwi7njM/dtPbVjCHzsGhx7szQMvY0i0UwTBVYkSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "22.1.0", + "eslint-scope": "9.1.2" + }, + "peerDependencies": { + "eslint": "^9.0.0 || ^10.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/utils": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-22.1.0.tgz", + "integrity": "sha512-zDPJqgOxlkG20UJWsVDSvnEtC2MfIP0+yKMaQUBL+2nrEknV/fVLrz7ApnerWiDrGTcAms5si49KV10MarMpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "22.1.0" + }, + "peerDependencies": { + "@typescript-eslint/utils": "^8.0.0", + "eslint": "^9.0.0 || ^10.0.0", + "typescript": "*" + } + }, + "node_modules/@angular/build": { + "version": "22.1.4", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-22.1.4.tgz", + "integrity": "sha512-y5wxiyUu1DjYNG5jiFjjgFp7O5bkyYjWzy2kfyTGq+DjKMEveTzNH3tBkZrE33EJ4wYyfx+rQ01IG9nZbhfdvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2201.4", + "@babel/core": "8.0.1", + "@babel/helper-annotate-as-pure": "8.0.0", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "6.1.1", + "@vitejs/plugin-basic-ssl": "2.3.0", + "beasties": "0.4.3", + "browserslist": "^4.26.0", + "esbuild": "0.28.2", + "https-proxy-agent": "9.1.0", + "jsonc-parser": "3.3.1", + "listr2": "10.2.2", + "magic-string": "1.0.0", + "mrmime": "2.0.1", + "oxc-parser": "0.142.0", + "parse5-html-rewriting-stream": "8.0.1", + "picomatch": "4.0.5", + "piscina": "5.2.0", + "rolldown": "1.2.0", + "sass": "1.101.0", + "semver": "7.8.5", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.17", + "vite": "8.1.5", + "watchpack": "2.5.2" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.5.6" + }, + "peerDependencies": { + "@angular/compiler": "^22.0.0", + "@angular/compiler-cli": "^22.0.0", + "@angular/core": "^22.0.0", + "@angular/localize": "^22.0.0", + "@angular/platform-browser": "^22.0.0", + "@angular/platform-server": "^22.0.0", + "@angular/service-worker": "^22.0.0", + "@angular/ssr": "^22.1.4", + "istanbul-lib-instrument": "^6.0.0", + "karma": "^6.4.0", + "less": "^4.2.0", + "ng-packagr": "^22.0.0", + "postcss": "^8.4.0", + "rollup": "^4.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=6.0 <6.1", + "vitest": "^4.0.8" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + }, + "@angular/localize": { + "optional": true + }, + "@angular/platform-browser": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "istanbul-lib-instrument": { + "optional": true + }, + "karma": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true + }, + "rollup": { + "optional": true + }, + "tailwindcss": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@angular/build/node_modules/@babel/code-frame": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0.tgz", + "integrity": "sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^8.0.0", + "js-tokens": "^10.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/build/node_modules/@babel/compat-data": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-8.0.0.tgz", + "integrity": "sha512-DOjnob/cXOUgDOozCDeq/aK2p5y8dUIVdf6tNhEV1HQRd6I8aQ4f4fbtHRVEvb6lP3BGomrKHiS8ICAASSVQSw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/build/node_modules/@babel/core": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-8.0.1.tgz", + "integrity": "sha512-5FgxM4dLQpMJHSiVATk8foW263dVHQHBVpXYiimNECVWG01f4nFyEbQixeT6Mwvg7TayREJ2gpKl3o2RoMdnqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/generator": "^8.0.0", + "@babel/helper-compilation-targets": "^8.0.0", + "@babel/helpers": "^8.0.0", + "@babel/parser": "^8.0.0", + "@babel/template": "^8.0.0", + "@babel/traverse": "^8.0.0", + "@babel/types": "^8.0.0", + "@types/gensync": "^1.0.5", + "convert-source-map": "^2.0.0", + "empathic": "^2.0.1", + "gensync": "^1.0.0-beta.2", + "import-meta-resolve": "^4.2.0", + "json5": "^2.2.3", + "obug": "^2.1.1", + "semver": "^7.7.3" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/build/node_modules/@babel/generator": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0.tgz", + "integrity": "sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^8.0.0", + "@babel/types": "^8.0.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "@types/jsesc": "^2.5.0", + "jsesc": "^3.0.2" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/build/node_modules/@babel/helper-compilation-targets": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-8.0.0.tgz", + "integrity": "sha512-JwculLABZvyPvyLBpwU/E/IbH2uM3mnxNtIJpxnIfb24y1PrdVxK5Dqjle4DpgqpGRnwgC7G8IkzPdSXZrO1Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^8.0.0", + "@babel/helper-validator-option": "^8.0.0", + "browserslist": "^4.24.0", + "lru-cache": "^11.0.0", + "semver": "^7.7.3" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/build/node_modules/@babel/helper-globals": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-8.0.0.tgz", + "integrity": "sha512-lLozHOM6sWWlxNo8CYqHy4MBZeTvHXNgVPBfPOGsjPKUzHC2Az9QwB6gxdQmpwHl6GlQtbGgS+lj5887guDiLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/build/node_modules/@babel/helper-validator-option": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-8.0.0.tgz", + "integrity": "sha512-U4Dybxh4WESWHt5XhBeExi4DrY0/DNK1aHpQbsrQXCUbFHuMweT0TpLEWKvaraV2Y6fS+ZXunsZ8zIuZIgvF2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/build/node_modules/@babel/helpers": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-8.0.0.tgz", + "integrity": "sha512-wfbi91pM3py96oIiJEz7qIpyXDytgr9zQC1HEWwlGNVRAEmItuU/0a41ZUKu1sJGyhhOIpc4t5vk4PYzt8wpsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^8.0.0", + "@babel/types": "^8.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/build/node_modules/@babel/parser": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.4.tgz", + "integrity": "sha512-srpptsAkEbbNIC/q8nT7o+m6CQe8CJUTV/t7MYc9NnWlgYVtHOb7JH6SorxMhN0kuRJjVqXbKClG6xSbPtzz+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^8.0.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/build/node_modules/@babel/template": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-8.0.0.tgz", + "integrity": "sha512-eAD0QW/AlbamBbw0FeGiwasbCVPq5ncW0HNVyLP3B9czqLyh4gvw+5JTSNt6le9+ziAU7mqDZsKTHf3jTb4chQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/parser": "^8.0.0", + "@babel/types": "^8.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/build/node_modules/@babel/traverse": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-8.0.4.tgz", + "integrity": "sha512-bZnmqzGG8UZneG1lLxBoWIH0G6Gr1D846Yu4/3XnY6FhCndMR49u26nTY08u/dAxWmLWF9vGQOuC+84FfIUoeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/generator": "^8.0.0", + "@babel/helper-globals": "^8.0.0", + "@babel/parser": "^8.0.4", + "@babel/template": "^8.0.0", + "@babel/types": "^8.0.4", + "obug": "^2.1.1" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/build/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@angular/build/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular/build/node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular/build/node_modules/listr2": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.2.tgz", + "integrity": "sha512-JtNtbZj8q5BnDMR7trpwvwk3RIrANtIVzEUm8w7amp6xelLgyuq+4WZoTH913XaQAoH/cNdYhaNzBPA2U3xbDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^5.2.0", + "eventemitter3": "^5.0.4", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^10.0.0" + }, + "engines": { + "node": ">=22.13.0" + } + }, + "node_modules/@angular/build/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@angular/build/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/build/node_modules/wrap-ansi": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", + "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@angular/cli": { + "version": "22.1.4", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-22.1.4.tgz", + "integrity": "sha512-Yt6q7a1vXh0ICFHnRdUOmx/gEXZ87zpkvE1eUWREUqeQ3ARkwqNZVzF3IP+s9NpDDrnc+EB9cqel9SnGZ/0z2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2201.4", + "@angular-devkit/core": "22.1.4", + "@angular-devkit/schematics": "22.1.4", + "@inquirer/prompts": "8.5.2", + "@listr2/prompt-adapter-inquirer": "4.2.4", + "@modelcontextprotocol/sdk": "1.30.0", + "@schematics/angular": "22.1.4", + "jsonc-parser": "3.3.1", + "listr2": "10.2.2", + "npm-package-arg": "14.0.0", + "parse5-html-rewriting-stream": "8.0.1", + "semver": "7.8.5", + "yargs": "18.1.0", + "zod": "4.4.3" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@angular/cli/node_modules/listr2": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.2.tgz", + "integrity": "sha512-JtNtbZj8q5BnDMR7trpwvwk3RIrANtIVzEUm8w7amp6xelLgyuq+4WZoTH913XaQAoH/cNdYhaNzBPA2U3xbDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^5.2.0", + "eventemitter3": "^5.0.4", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^10.0.0" + }, + "engines": { + "node": ">=22.13.0" + } + }, + "node_modules/@angular/cli/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/cli/node_modules/wrap-ansi": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", + "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@angular/common": { + "version": "22.1.2", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-22.1.2.tgz", + "integrity": "sha512-8TzyYPBDvSItV8Vqq8k5u8a9fWaomC9bMEr8z1vVLRZDIPhNQ/UcCyuTYbC7GZkeqrrKGu5m8tjUrA09RCwuaQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/core": "22.1.2", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "22.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-22.1.2.tgz", + "integrity": "sha512-aQv0p5MeXuguCeftUUxK4H8Hbw1hC5Zyu+cFsGbsi025LZ9Ngw+BW+iUHDQZAcqHvWDw2wgGOdKh4e7IkcfRyQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "22.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-22.1.2.tgz", + "integrity": "sha512-GWRtvQQz/LvKejF/Zpls+hGnnJkvaPPtd3TZnxfZQ1fYCs7b7gpi0YM9PP02TJz51vhlsgkPYJwgtJAKDJEHNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "8.0.1", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^5.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^18.0.0" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/compiler": "22.1.2", + "typescript": ">=6.0 <6.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/code-frame": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-8.0.0.tgz", + "integrity": "sha512-dYYg153EyN2Ekbqw2zAsbd6/JR+9N2SEoC7YV2GyyqMM7x9bLDTjBD6XBhSMLH0wtIVyJj03jWNriQhaN+eoCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^8.0.0", + "js-tokens": "^10.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/compat-data": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-8.0.0.tgz", + "integrity": "sha512-DOjnob/cXOUgDOozCDeq/aK2p5y8dUIVdf6tNhEV1HQRd6I8aQ4f4fbtHRVEvb6lP3BGomrKHiS8ICAASSVQSw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-8.0.1.tgz", + "integrity": "sha512-5FgxM4dLQpMJHSiVATk8foW263dVHQHBVpXYiimNECVWG01f4nFyEbQixeT6Mwvg7TayREJ2gpKl3o2RoMdnqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/generator": "^8.0.0", + "@babel/helper-compilation-targets": "^8.0.0", + "@babel/helpers": "^8.0.0", + "@babel/parser": "^8.0.0", + "@babel/template": "^8.0.0", + "@babel/traverse": "^8.0.0", + "@babel/types": "^8.0.0", + "@types/gensync": "^1.0.5", + "convert-source-map": "^2.0.0", + "empathic": "^2.0.1", + "gensync": "^1.0.0-beta.2", + "import-meta-resolve": "^4.2.0", + "json5": "^2.2.3", + "obug": "^2.1.1", + "semver": "^7.7.3" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0.tgz", + "integrity": "sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^8.0.0", + "@babel/types": "^8.0.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "@types/jsesc": "^2.5.0", + "jsesc": "^3.0.2" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/helper-compilation-targets": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-8.0.0.tgz", + "integrity": "sha512-JwculLABZvyPvyLBpwU/E/IbH2uM3mnxNtIJpxnIfb24y1PrdVxK5Dqjle4DpgqpGRnwgC7G8IkzPdSXZrO1Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^8.0.0", + "@babel/helper-validator-option": "^8.0.0", + "browserslist": "^4.24.0", + "lru-cache": "^11.0.0", + "semver": "^7.7.3" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/helper-globals": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-8.0.0.tgz", + "integrity": "sha512-lLozHOM6sWWlxNo8CYqHy4MBZeTvHXNgVPBfPOGsjPKUzHC2Az9QwB6gxdQmpwHl6GlQtbGgS+lj5887guDiLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/helper-validator-option": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-8.0.0.tgz", + "integrity": "sha512-U4Dybxh4WESWHt5XhBeExi4DrY0/DNK1aHpQbsrQXCUbFHuMweT0TpLEWKvaraV2Y6fS+ZXunsZ8zIuZIgvF2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/helpers": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-8.0.0.tgz", + "integrity": "sha512-wfbi91pM3py96oIiJEz7qIpyXDytgr9zQC1HEWwlGNVRAEmItuU/0a41ZUKu1sJGyhhOIpc4t5vk4PYzt8wpsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^8.0.0", + "@babel/types": "^8.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/parser": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-8.0.4.tgz", + "integrity": "sha512-srpptsAkEbbNIC/q8nT7o+m6CQe8CJUTV/t7MYc9NnWlgYVtHOb7JH6SorxMhN0kuRJjVqXbKClG6xSbPtzz+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^8.0.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/template": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-8.0.0.tgz", + "integrity": "sha512-eAD0QW/AlbamBbw0FeGiwasbCVPq5ncW0HNVyLP3B9czqLyh4gvw+5JTSNt6le9+ziAU7mqDZsKTHf3jTb4chQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/parser": "^8.0.0", + "@babel/types": "^8.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/traverse": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-8.0.4.tgz", + "integrity": "sha512-bZnmqzGG8UZneG1lLxBoWIH0G6Gr1D846Yu4/3XnY6FhCndMR49u26nTY08u/dAxWmLWF9vGQOuC+84FfIUoeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^8.0.0", + "@babel/generator": "^8.0.0", + "@babel/helper-globals": "^8.0.0", + "@babel/parser": "^8.0.4", + "@babel/template": "^8.0.0", + "@babel/types": "^8.0.4", + "obug": "^2.1.1" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular/compiler-cli/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@angular/core": { + "version": "22.1.2", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-22.1.2.tgz", + "integrity": "sha512-t7BrgfdeqbdSbFe3CsGX8ySMeKDlZNBPxFMCOanAAqd6W0H1Kh1WFILBs3DIg0NfjpybfSRJAzKcagOFQWNtiw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/compiler": "22.1.2", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0 || ~0.16.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } + } + }, + "node_modules/@angular/forms": { + "version": "22.1.2", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-22.1.2.tgz", + "integrity": "sha512-pKDYSNKje/jox74KzswBdX4sL7kJ8OFkJwLnqng8oc7a/NVl/Vf4/Xq4kyowRAdtPcZfLTUnZG6s0qbegfV5mg==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "tslib": "^2.3.0", + "zod": "^4.0.10" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/common": "22.1.2", + "@angular/core": "22.1.2", + "@angular/platform-browser": "22.1.2", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "22.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-22.1.2.tgz", + "integrity": "sha512-MQO735ve/tk4gLsWbw8NyBD/DxPfbbmf1pM/vp6K7tZz2xyysMXilqF/k8PBdQBZVOofST8S13inZHQ35nHuRA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/animations": "22.1.2", + "@angular/common": "22.1.2", + "@angular/core": "22.1.2" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/router": { + "version": "22.1.2", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-22.1.2.tgz", + "integrity": "sha512-C2c6NJ9HZUfb1L07M554Zpgvi0TvpOBO6Og9L36v/jsv42m7tpOenvqQVPa8R3va7eqLEszCL7wLFcWeJ8naew==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" + }, + "peerDependencies": { + "@angular/common": "22.1.2", + "@angular/core": "22.1.2", + "@angular/platform-browser": "22.1.2", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-8.0.0.tgz", + "integrity": "sha512-NSpMkMsvvZqzThJ0p1B02cbtA2ObEyfBvq950bmNkyxsxvcxwhvvCB036rKhlEnuBBo30bOrk13u3FzlKSoRrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^8.0.0" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-8.0.0.tgz", + "integrity": "sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-8.0.4.tgz", + "integrity": "sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/parser/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", + "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.8", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-8.0.4.tgz", + "integrity": "sha512-eY+Yn3dCqTGmyiq2QRU66lA5FL8lqqqvecHt0fF3uHONIa7ToYsaCiWV8lOKqAs0Rb2SjixiKFROngnulPtt2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^8.0.0", + "@babel/helper-validator-identifier": "^8.0.4" + }, + "engines": { + "node": "^22.18.0 || >=24.11.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.2.tgz", + "integrity": "sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz", + "integrity": "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz", + "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.14.0", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.3.0", + "minimatch": "^3.1.5", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz", + "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@harperfast/extended-iterable": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@harperfast/extended-iterable/-/extended-iterable-1.0.3.tgz", + "integrity": "sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/@hono/node-server": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.1.tgz", + "integrity": "sha512-ELuehkj5VCBdgEw9zs+ivkKwyzzUCSQuE96YmiPvn1ECBoZCczbFXJLeEGMTYjphP6gydh4pHMqEYPVMYUVgQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@inquirer/ansi": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.7.tgz", + "integrity": "sha512-3eTuUO1vH2cZm2ZKHeQxnOqlTi9EfZDGgIe3BL3I4u+rJHocr9Fz86M4fjYABPvFnQG/gGK551HqDiIcETwU6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.2.1.tgz", + "integrity": "sha512-b6xmA/VlTe0ZgDQHDui+Nav470u7u49nRd8/iuhOcQPO9Ch7lGuogydhi2VOmNlZ+zXcM8IcPuNSwQcdJaF/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/core": "^11.2.1", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.1.1.tgz", + "integrity": "sha512-eb8DBZcz/2qHWQda4rk2JiQk5h9QV/cVHi1yjt0f69WFZMRFn0sJTye3EAP8icut8UDMjQPsaH5KbcOogefrFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.2.1.tgz", + "integrity": "sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.2.2.tgz", + "integrity": "sha512-ZRVd/oD+sYsUd5zVm0NflqEzlqfYCyHNsqkHl2oWXEUHs12tCbcSFi+wVFEvD8+LGRaMUsVrE7qeo6lSG/S1Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/external-editor": "^3.0.3", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.1.1.tgz", + "integrity": "sha512-YmQpenjbFSHAK3sOd44puHh3V1KXXr+JiNpUztoSQ4drLh2rTVzTap/YtlAVu/5xavifIlBfNEzJ/neZJ1a/1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-6thf5I8q7lZwzGLAxPaaGEREEkZ3nyePPDQ1oyobblxmEE8mqTLguScP7pDjUTAibiyb4hfXl+qjUEJ+di/aNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.2" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.7.tgz", + "integrity": "sha512-aJ8TBPOGB6f/2qziPfElISTCEd5XOYTFckA2SGjhNmiKzfK/u4ot3v0DUzGVdUnKjN10EqnnEPck36BkyfLnJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/input": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.1.2.tgz", + "integrity": "sha512-9K/DDBSQpOyZSkt6sOVP9Vo0TR7atX2kuILsUu0x3wVcVbe97lJwIJKMLdMw25tDYuXl/qp6erT0Xs1rfmcfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.1.1.tgz", + "integrity": "sha512-XF4IXAbPnGPgw0wsbC/i2tPcyfdZgDpUlhsqU0SfT4IRIGWha6Xm9VRgN5yYxJq+jnyXlfXI/nQ3ulfk0iEICA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.1.1.tgz", + "integrity": "sha512-3XBfF7DAsp5qeDsvN5Rd1HmbNokVvEQoUM0QLrRcybC9nX96w3Pbmu7qUsb3IT3J3jBvs2+mTXaKHOUsgHMLzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.5.2.tgz", + "integrity": "sha512-IYR/3C/paEVVQYQvdDlFZVjRCJVYHHON0XXMH91KO9GSxs0TdKYWlUdvfQl2EfAHDxUaN3IBffkE/BDTh5nJ6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^5.2.1", + "@inquirer/confirm": "^6.1.1", + "@inquirer/editor": "^5.2.2", + "@inquirer/expand": "^5.1.1", + "@inquirer/input": "^5.1.2", + "@inquirer/number": "^4.1.1", + "@inquirer/password": "^5.1.1", + "@inquirer/rawlist": "^5.3.1", + "@inquirer/search": "^4.2.1", + "@inquirer/select": "^5.2.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.3.1.tgz", + "integrity": "sha512-QqdTqQddL3qPX/PPrjobpsO25NZ4dWXgTLenrR445L2ptLEYE6Z+PD5c5CNDJNx4ugRgELAIpSIJxZaO2jJ2Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.2.1.tgz", + "integrity": "sha512-xJj8QWKRSrfKoBIITLZK61dD3zwo0Rz11fgDImku30/Oe81zMdIdGgrLY2h6RkJ+KZ/GhNYIRMKnH/62qBTA5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^11.2.1", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.2.1.tgz", + "integrity": "sha512-FlDndEUww8m7BfukO2nJa25vhD+H5jxxCv4oGioKqzyWz3nPHhhw4LKdYRSlXuAx7DsdWia7iyaBPKKS95Evfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.7", + "@inquirer/core": "^11.2.1", + "@inquirer/figures": "^2.0.7", + "@inquirer/type": "^4.0.7" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.7.tgz", + "integrity": "sha512-t28inv14nMQ1PhKpsJPY+kEs/c00qzeCOS2gTNRyTjG5d6qsVA2fItxW4hkvGZ5lvanGLdtCzVIx5dwdRpN1+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.1.tgz", + "integrity": "sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.4.1.tgz", + "integrity": "sha512-v3bhyxUh9Hgmo5p6hAOXe14/R3ZxZDOsvHleh4B07z3m/x4/ngPUXEm9XwK4sF4u+f+P2ORb0Ge+MgpaqRMVDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/core": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.4.2.tgz", + "integrity": "sha512-TZJA6cPJUFxoWhxaLo8t0VX/MZX2wPWr0uIDvLSHIvN4gu9h02vSzqI2kBADG1ExqQlC+cY09xKMSreivvrChQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.4.1", + "@jest/pattern": "30.4.0", + "@jest/reporters": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.4.1", + "jest-config": "30.4.2", + "jest-haste-map": "30.4.1", + "jest-message-util": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-resolve-dependencies": "30.4.2", + "jest-runner": "30.4.2", + "jest-runtime": "30.4.2", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "jest-watcher": "30.4.1", + "pretty-format": "30.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/diff-sequences": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.4.0.tgz", + "integrity": "sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.4.1.tgz", + "integrity": "sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-mock": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.4.1.tgz", + "integrity": "sha512-dSlKrqug3siYNHVnjwIldShY12wAH3spwRltO/+8VOjg0X+xEq7vOs3DbBs4LRKsu7OH+NUb9kuZUNBF9Ho3TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/jsdom": "^21.1.7", + "@types/node": "*", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/@jest/expect": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.4.1.tgz", + "integrity": "sha512-ginrj6TMgh2GshLUGCjO94Ptx9HhdZA/I6A9iUfyeLKFtdAjnKzHDgzgP9HYQgbxM1lbXScQ2eUBz2lGeVDPWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "30.4.1", + "jest-snapshot": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.4.1.tgz", + "integrity": "sha512-ZBn5CglH8fBsQsvs4VWNzD4aWfUYks+IdOOQU3MEK71ol/BcVm+P+rtb1KpiFBpSWSCE27uOahyyf1vfqOVbcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.4.1.tgz", + "integrity": "sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "@sinonjs/fake-timers": "^15.4.0", + "@types/node": "*", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.4.1.tgz", + "integrity": "sha512-ZbuY4cmXC8DkxYjfvT2DbcHWL2T6vmsMhXCDcmTB2T0y0gaezBI77ufq5ZAIdcRkYZ7NEQEDg1xFeKbxUJ5v5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/expect": "30.4.1", + "@jest/types": "30.4.1", + "jest-mock": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", + "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.4.1.tgz", + "integrity": "sha512-/SnkPCzEQpUaBH81kjdEdDdo2WZl5hxw+BmLDGWjRkm8o7XlhjwsU36cqwe5PGBE5WYpBvDzRSdXx9rbGuJtNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.5.0", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "jest-worker": "30.4.1", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/snapshot-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.4.1.tgz", + "integrity": "sha512-ObY4ljvQ95mt6iwKtVLetR/4yXiAgl3H4nJxhztr0MTjrN97TwDYrnCp/kF60Ec9HdhkWTHSu+Hg05aXfngpOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.4.1.tgz", + "integrity": "sha512-/ZG7pgEiOmmWkN9TplKbOu4id2N5lh7FHwRwlkgBVAzGdRH+OkkQ8wX/kIxg4zmd3ZQvAL1RwL2yWsvNYYECTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.4.1", + "@jest/types": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.4.1.tgz", + "integrity": "sha512-PeYE+4td5rKjoRPxztObrXU+H8hsjZfxKMXOcmrr34JerSyB/ROOxbbicz8B7A5j9R9VayDnVPvBmedqCsFCdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.4.1", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.4.1.tgz", + "integrity": "sha512-Wz0LyktlTvRefoymh+n64hQ84KNXsRGcwdoZ8CSa0Ea+fgYcHZlnk+hDP7v2MS7il2bQ5uTEIxf4/NNfhMN4KQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/types": "30.4.1", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.1", + "chalk": "^4.1.2", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-util": "30.4.1", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/types": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-4.2.4.tgz", + "integrity": "sha512-/KRI2DMD7JGSYaREF0Ygl7AefJ/2ase4Gc5cBiKqT5l4tFjsSJfhFGcc5nSkgl0Sp9LkCQNzl/cqbVJYP2L3dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^4.0.6" + }, + "engines": { + "node": ">=22.13.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 9", + "listr2": "10.2.1" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.5.6.tgz", + "integrity": "sha512-mY5FG4TjPAkY4P0w+OhHaUka5mDh2TX2WKYIwuKzJ1zeW3VvRgxdam/lGJTquI+bthTx5CSHDW+BAQCnNAzkEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.5.6.tgz", + "integrity": "sha512-foa+pwitysO8k+xhs7psBFfTKnVgR69NlZRRTHaFVDqphh7AdGpLeyRzKw/ofatr/sN6TiHRRW6mmop0ZrrppQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.5.6.tgz", + "integrity": "sha512-QR4YRyR5h5Z8eGXrNQjiyo2NNDfqi3tCc9dQG5Is1blCt+qWw1ZoBWhlWAr5d+jshkifMIJjVHzHGKbkKzF8Tw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.5.6.tgz", + "integrity": "sha512-HmiyFFdJa38s1heCMSooSPaBSFTHJ3C+ERPp28xAPlDX1YiALJVOgbry065nXd8Y7KISWjnw05zpG1RX8IfftA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.5.6.tgz", + "integrity": "sha512-ADzCuCF2cTNiX9kDScqcz1fjnAkxPpQNneV3KFTdV3wWtVlI2sTGzySoMTgDpinkMMFj1NTJlxA6XR8fwc4hlA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.5.6.tgz", + "integrity": "sha512-J7A9aEQsQiv0TYtBGL7NDIPp2lOS8nnl+zm4sWZm1xlsTTaQ4PgD096Adzdrk27rw3UxCkDXdCUa4ax41oztBQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.5.6.tgz", + "integrity": "sha512-1g7G0knRX2iV/voDu54yxrGqw5Dk0w2oIYb7dgJq8IkOi+m7wbD8Q3QpPFjh0C01G58S88dqGn03len6UPCXsg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz", + "integrity": "sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9 || ^2.0.5", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz", + "integrity": "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz", + "integrity": "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz", + "integrity": "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz", + "integrity": "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz", + "integrity": "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz", + "integrity": "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.3.tgz", + "integrity": "sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" + } + }, + "node_modules/@oxc-parser/binding-android-arm-eabi": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.142.0.tgz", + "integrity": "sha512-ZiRGDutGsv1G6bL/ozy/koC0Sv39T1DqyoC4KD1DOy9ZoACm1O5UWhEK2c02Qdk+4lfLVkvFa/mQ0fm/4h1BtQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-android-arm64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.142.0.tgz", + "integrity": "sha512-WZkvGRLNQTz8lR9zP5nLjUdlroRCopBu3g9zF1p/laE6DzT1UbQo8Rdz5MWhaJUPYg/6gp+jo7HUgsyKaN1FtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.142.0.tgz", + "integrity": "sha512-l4khS8LQOOVYsGRVARo1gSaCT/aBSceUVXgtovWc2+drnxVuDr082WA3OCHVdVzIz5JIrP/y9CWsSKxBDNmYGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.142.0.tgz", + "integrity": "sha512-QBsNF3nqlXmcH2B1YOPqQYmCJoy4HuIjUxGbBO/k5JAJUl68ghU2psRY2zPk+RyBaWqKP/qfL4oaFgEMCdwskA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.142.0.tgz", + "integrity": "sha512-b7Q7m4Cqc6XqNhri3R+QhU+GVy646Pn+bkdhrDdWym/Fdi0ZUa+d73H9dm5H91JtbtAQ/z1d8XKMW3oOV8a4tQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.142.0.tgz", + "integrity": "sha512-3riVS5IhdH3uCZj1Y9ftDQlR0dvLsIlw/edrRqk8JhgNd5K0XSs+UBtgh50N13CAlW9/TXj6sVGXaKNBocd0Yg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.142.0.tgz", + "integrity": "sha512-NmXUOpgpTSkhl795TiXmWppTwmSJ92RC1qvD6e4XOF+slgmo3e6Ah+kEu+6AN8s7NAOEwqGmir58MgSQSWmBSA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.142.0.tgz", + "integrity": "sha512-gc0EXsKtXgerujmU2Bql3u1L1HsSQ2774R83idq/FoNMPVV/RY/1ErFsvnit7KoiP/sLvzQixeUo4Ut0ic0wmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.142.0.tgz", + "integrity": "sha512-F2XvmWSE0uWpie+jHKKIFgdVOe9ypGhkEZxKx5DuW215K6cbAC274yYaPkcM7EqY4Df3Weyhpcz3lsURyH2LVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-ppc64-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.142.0.tgz", + "integrity": "sha512-wLMbT21U/QxknQsk+VvNF0b9D2/aGWhcaQQQ+VYlE8FwD5+GoWZIPPXNzyHmkYyhm0KB3itL+TBavjMatqNnYA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.142.0.tgz", + "integrity": "sha512-+G8F/4ckwT7FCJV4H2bt09xEzJbjNCfuL4Sp1AYNaFtFMVtgIGMuJlteT82U+K0UIZ/DzAR/LDlMFnEuajG7Kw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-musl": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.142.0.tgz", + "integrity": "sha512-hTsHtTLxMAfCo+rpF5K3qZJKW2NpPN/CHd4mYB3y7XlSdspHkd2gehDIofP64AacA9nWQw2tY3O7wR6UY8IVOA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.142.0.tgz", + "integrity": "sha512-6y7qYY3TCUDYjqswImdTGl92y+KA/80twALegQPN27kfY+bG7Ib1+L3jbmrCZQx6wrVnai9IPsEZp07I0hx7JQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.142.0.tgz", + "integrity": "sha512-i69kAWU+2LgoH5bR+zWiiu+UzAw7Oxkwv7COeJTeY19pn4e70nKQcr9Pm6cL2Z0Z54d+gl9qADlK/0yyuCPiBA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.142.0.tgz", + "integrity": "sha512-4SQs678MmjYVrmhAgCWD4o0vpaFszXw9xLX5p2Z9MMFcltxiLkA88wQjh80YHjPrXtpyZ2CWI5m+1yNKM0m2Pw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-openharmony-arm64": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.142.0.tgz", + "integrity": "sha512-YHpx9N7Ln3a++Tc8rv+H7mrK1zyJQOAwCFg8LZ3lTs1T5afGWeZrLPhPT9HLnIwSjCyJqPWVMIrMxbjcmBr2oQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.142.0.tgz", + "integrity": "sha512-3pLDyY3+oogW73RM5uehNgAiR/Xfb7fvO2Q1Z1gIqZ2+50XDVQmBVlRkHXZTU4gKnQHpwETNsYQVsJ3joVB2iA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.2", + "@emnapi/runtime": "1.11.2", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.142.0.tgz", + "integrity": "sha512-Had/VeVY28Oyb0K+Q4FV8KCzoBycIh93oDK6pCbya9lkzdq+ikMHMgBubsdqqlybjJmQRawCQRrnBRHyQwYvcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-ia32-msvc": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.142.0.tgz", + "integrity": "sha512-GGi3+YphVHavvgs6gum2UXoNCqzHAmPt/nXkn8ZQZstV2Q1qZD1Mn8fz/nWrDkefHQtrG/+1/XrbMxsBTo6Svw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.142.0.tgz", + "integrity": "sha512-Ny/Wv4Us1LGC/ljwNTp+Hx3r/pH15EFfeDF0p+n898gt+TtRd6C9SccHcuUhDiNTb8s5tt7jdeAMDRQZ4Vq6hg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.142.0.tgz", + "integrity": "sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", + "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.6.0", + "@parcel/watcher-darwin-arm64": "2.6.0", + "@parcel/watcher-darwin-x64": "2.6.0", + "@parcel/watcher-freebsd-x64": "2.6.0", + "@parcel/watcher-linux-arm-glibc": "2.6.0", + "@parcel/watcher-linux-arm-musl": "2.6.0", + "@parcel/watcher-linux-arm64-glibc": "2.6.0", + "@parcel/watcher-linux-arm64-musl": "2.6.0", + "@parcel/watcher-linux-x64-glibc": "2.6.0", + "@parcel/watcher-linux-x64-musl": "2.6.0", + "@parcel/watcher-win32-arm64": "2.6.0", + "@parcel/watcher-win32-x64": "2.6.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", + "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", + "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", + "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", + "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", + "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", + "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", + "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", + "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", + "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", + "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", + "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", + "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", + "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.0.tgz", + "integrity": "sha512-9yB1l95IrJuNGDFdOYe79vdApdz6WWBCObE+rQ2LUliYUlcyFwSYIb2xb5/Ifw7dAtMy2ZqNyd8QTSOc7duAKw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.0.tgz", + "integrity": "sha512-pexNaW9ACLUOaBITOpU6qVu4VrsOFIjTv6bzgu0YUATo4eUJx0V605PxwZfndpPOn0ilqGqvGQ0M8UW0IE24jg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.0.tgz", + "integrity": "sha512-NqKYaq0355ZmNMG4QGpxtEDxsc7tGDhjhCm4PpE0cwnBW+5Il95LJyq414niEiaKLVjnVHBEjSo1wngKxJNiFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.0.tgz", + "integrity": "sha512-3vPoHzh6eBTz9IbB0/qZdSr0Qeks2echn+I4cHu2joV74VriPDdldswksEDzrl1mBB+oPRi+67+3Ib59paxIPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.0.tgz", + "integrity": "sha512-E6NNefZ1bUVmKJq2tJkf45J4Zyczj7qm9rUT7NY+Xo2474Y13qWAwc2tvBt0BAVbmtXR1llkxXg0Ou1jbDf2SQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.0.tgz", + "integrity": "sha512-D+TgkdgM1vu+7/Fpf8+v0ARW+RXEP9Ccazgm8zQ4JFFd9Q7SrYQ2TakU5S5ihazQDgpKyAgZDOcIFsvoHmTZ8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.0.tgz", + "integrity": "sha512-wUqdwJBbAv0APN87GecstdMUtLjjNTs0hBALpxETD73mccFxdmt/XeizXDtN5RAlBwNKmI+Tg+blect2G+8IeQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.0.tgz", + "integrity": "sha512-9DtF35qR9/NrfhM4oxLplCzVVjE+KKm8Pjemi0i/sdhAWkUasjmSo8WTTubNJClhSHCfyk2yeyoXDQEDPtDAAw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.0.tgz", + "integrity": "sha512-RzuHrBh8X8Hntd2N4VR02QGEciq/9JhcZoTpR/Cee6otRrlILGCf3cg2ygHuih+ZebUnWmMrDX6ITI85btO6rQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.0.tgz", + "integrity": "sha512-MK7L0018jjh1jR3mh21G2j1zAVcpscJBlPo2z19pRjv2XOYGRhaV4LyiD8HO6nCDdZln9IFgCMIV5yt4E3klGQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.0.tgz", + "integrity": "sha512-gyrxLQ9NfGb/9LoVnC4kb9miUghw1mghnkfYvNHSnVIXriabnfgGPUP4RLcJm87q3KgYz4FYUG8IDiWUT+CpSw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.0.tgz", + "integrity": "sha512-/6VFMQGRmrhP77KXDC+StIxGzcNp5JOIyYtw0CQ8gPlzhpiIRucYfoM5FaFamHd5BJYIdH86yfP46l1p3WdrFA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.2.0.tgz", + "integrity": "sha512-rwdbUL465kisF24WEJLvP3JrEG6E5GRuIHt5wpMwHGERtHe4Wm2CIvtf5gTBgr2tGOHKh5NdKEAFS2VkOPE91g==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.2", + "@emnapi/runtime": "1.11.2", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.0.tgz", + "integrity": "sha512-+5suHwRiKGmhwyUaNT8a5QbrBvLFh2DbO910TEmGRH1aSxwrCezodvGQnulv4uiWEIv1Kq4ypRsJ5+O+ry1DiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.0.tgz", + "integrity": "sha512-WfFv6/qGufotqBSBzBYwgpCkJBk8Nj7697LL9vTz/XWc67e0r3oewu8iMRwQj3AUL45GVD7wVsPjCsAAtW66Wg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@schematics/angular": { + "version": "22.1.4", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-22.1.4.tgz", + "integrity": "sha512-uiYKuiCnkTEbs4eOU1QJlM5NPw6BR1qgpct8VlrhS4n861WCCjTy5cxiAWJ3Doc0R72d44j3uoBfAEp7KEVn2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "22.1.4", + "@angular-devkit/schematics": "22.1.4", + "jsonc-parser": "3.3.1", + "typescript": "6.0.3" + }, + "engines": { + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.34.52", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.52.tgz", + "integrity": "sha512-XiMQh7qqVlxZzcVD+kkGMNGMzcTrDMLWI7S4x7z1MkCkbDPrekpZXEUK0eZqZFMuHQg2a2DZOcDIh9o5v3Gonw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", + "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@testing-library/angular": { + "version": "19.4.2", + "resolved": "https://registry.npmjs.org/@testing-library/angular/-/angular-19.4.2.tgz", + "integrity": "sha512-N8Xg2qb52WmqBMSK59YZ58Hmle3n7rjTc4x5dmSX2YFFuUNjBnFlTSroBPx7JWgtDbDxbnMhgRtATats9LIIJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.3.1" + }, + "peerDependencies": { + "@angular/common": ">= 21.0.0", + "@angular/core": ">= 21.0.0", + "@angular/platform-browser": ">= 21.0.0", + "@angular/router": ">= 21.0.0", + "@testing-library/dom": "^10.0.0" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/@testing-library/dom/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-7.0.1.tgz", + "integrity": "sha512-oMDTC3oA+6CXSO2JZnvOI7CA6oVub6kij5ggk9ohwye5slmkwxYDXcPOVxgMw/RQlticjtO0C1RZkR97HgrWMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=22", + "npm": ">=6", + "yarn": ">=1" + }, + "peerDependencies": { + "@testing-library/dom": ">=10 <11", + "vitest": ">= 0.32" + }, + "peerDependenciesMeta": { + "vitest": { + "optional": true + } + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__core/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__core/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__core/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__generator/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__generator/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__generator/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__template/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__template/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/babel__traverse/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__traverse/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/babel__traverse/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/gensync": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.5.tgz", + "integrity": "sha512-MbsRCT7mTikHwKZ0X+LVUTLRrZZRLipTuXEO9qOYO+zmjMVk81axyClMROf6uoPD9MRVu46bx8zoR0Ad9q3NAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", + "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^30.0.0", + "pretty-format": "^30.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@types/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.20.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.1.tgz", + "integrity": "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.67.0.tgz", + "integrity": "sha512-Un7Heoyj65NREbKAyIrFxeM143NZpExWmy1Nep4DLeQOeLlTeumPjoNKnBrU5D5moWXbPJgRa5Uwcdu0faVNGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/type-utils": "8.67.0", + "@typescript-eslint/utils": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.67.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.67.0.tgz", + "integrity": "sha512-fUBfTuuEulWqX6V8+O3PtScV01tzYYRUDTAirHFKoRAt7nOzoGiPt0M/bB47wWNy0coOOcgEwAMUtBpykMxl6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.67.0.tgz", + "integrity": "sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.67.0", + "@typescript-eslint/types": "^8.67.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.67.0.tgz", + "integrity": "sha512-EgvsleTwS4E+WzzSvem8fAUubLwatMNF1B5hHSLQxcvs7q2dtRhGyujHwLJSYlG41niJ7GP24Aha2+0mb1b2kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz", + "integrity": "sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.67.0.tgz", + "integrity": "sha512-aVWDXbRmdXO9siTfX4ditQI1T9+zVcNazT48EJCD0v40/9RIFoUgZ05CmGEq9H2gixRpjUn/iplwvlcvutJW/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0", + "@typescript-eslint/utils": "8.67.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.67.0.tgz", + "integrity": "sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz", + "integrity": "sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.67.0", + "@typescript-eslint/tsconfig-utils": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/visitor-keys": "8.67.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.67.0.tgz", + "integrity": "sha512-U9D1FdwEWBwok3hxxSdhclMb0twvt9QnjIQ0VfQ1AiX2epnpSgv2ubVDsayOFyY8K6FX+AQ7E0FKWVG3iKsj1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.67.0", + "@typescript-eslint/types": "8.67.0", + "@typescript-eslint/typescript-estree": "8.67.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.67.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz", + "integrity": "sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.67.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", + "dev": true, + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz", + "integrity": "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz", + "integrity": "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz", + "integrity": "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz", + "integrity": "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz", + "integrity": "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz", + "integrity": "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz", + "integrity": "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz", + "integrity": "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz", + "integrity": "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-loong64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz", + "integrity": "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-loong64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz", + "integrity": "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz", + "integrity": "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz", + "integrity": "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz", + "integrity": "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz", + "integrity": "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz", + "integrity": "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz", + "integrity": "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-openharmony-arm64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz", + "integrity": "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz", + "integrity": "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz", + "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz", + "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz", + "integrity": "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.3.0.tgz", + "integrity": "sha512-bdyo8rB3NnQbikdMpHaML9Z1OZPBu6fFOBo+OtxsBlvMJtysWskmBcnbIDhUqgC8tcxNv/a+BcV5U+2nQMm1OQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-9.0.0.tgz", + "integrity": "sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-jest": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.4.1.tgz", + "integrity": "sha512-fATAbM8piYxkiXQp3RBXmZHxZVNJZAVXXfyeyCN2Tida3+qJ8ea9UxhiJ2y4fLO90ZImKt6k9FlcH2+rLkJGhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "30.4.1", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.4.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0 || ^8.0.0-0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", + "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", + "dev": true, + "license": "BSD-3-Clause", + "workspaces": [ + "test/babel-8" + ], + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.4.0.tgz", + "integrity": "sha512-9EdtWM/sSfXLOGLwSn+GS6pIXyBnL07/8gyJlwFXjWy4DxMOyItqyUT29d4lQiS380EZwYlX7/At4PgBS+m2aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/babel__core": "^7.20.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.4.0.tgz", + "integrity": "sha512-lBY4jxsNmCnSiu7kquw8ZC9F4+XLMOKypT3RnNHPvU2Kpd4W0xaPuLr5ZkRyOsvLYAY4yaW1ZwTW4xB7NIiZzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "30.4.0", + "babel-preset-current-node-syntax": "^1.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0 || ^8.0.0-beta.1" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.14", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.14.tgz", + "integrity": "sha512-JyJ954WzuIR8/FFzX0o5krdSTrBAkcCSRfWSleRsIHSWV+cZe2FI1PKggVkFke1hBldRs+LRxUczzE9iPmgZww==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/beasties": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.4.3.tgz", + "integrity": "sha512-fIIeLOcbAB/K1kb1HBVJoiq1alHL4RCYBSo5e7HzrNkkgMggXR1Vqt/Z9JWnkfe/qdCo66Ux3QRwZioAIBdWRA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "css-select": "^6.0.0", + "css-what": "^7.0.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3", + "postcss-safe-parser": "^7.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/browserslist": { + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001809", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", + "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz", + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.1.tgz", + "integrity": "sha512-Ca8swihM+/4yKecYHY52kgJd300hi2lADU/a1RxNTRe+RJ9jvqQlESpbz9DnG9mowez8qwXHB8qYdIUw9e+F5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/dedent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.407", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.407.tgz", + "integrity": "sha512-4R8XgQOdfxexCd/u63lRm6wCHjECwI45MV9wxAs2ggtfWe2hwlo1ql97jKsju2IcJ+jFSTwBssyYoiWhh7mauQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/empathic": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.1.tgz", + "integrity": "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.28.2.tgz", + "integrity": "sha512-GccVwhv3mmOUVQHCQm2Ox/rby8n/EqUwvZxE6Pjfikrq/lWw9g9WX/u9EykWnpot3Ko6j426DgQdea2xWKIAQA==", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz", + "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.6", + "@eslint/js": "9.39.5", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz", + "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.4.1.tgz", + "integrity": "sha512-PMARsyh/JtqC20HoGqlFcIlQAyqUtW4PlI1rup1uhYJtKuwAjbvWi3GQMAn+STdHum/dk8xrKfUM1+5SAwpolA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.4.1", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.2.tgz", + "integrity": "sha512-YH4ru+eOJxQABscKFfRCy9R7x9QFGdezclVMwwgFFndzS2Xnm0uo6B0ABZsLhcpeptGv2qvuJVWlQr9gQZoC3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-uri": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hono": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.2.tgz", + "integrity": "sha512-JydRilDRkYBQMt9qR9U92mXxmbGqsqSn/IKOrh4e7/gEbn+0zSr8igTu0obwJoNGN4sez28DIql7FBHWydoJpA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/hosted-git-info": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-10.1.1.tgz", + "integrity": "sha512-DeOnSPAvOndYKfw075gt8yZzQ7S2hNztw34zBTfhIzLhmBTswIBg5/y+pqu/VD5cYWm5goAFTusDmUEmKZ0PEQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-9.1.0.tgz", + "integrity": "sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "9.0.0", + "debug": "^4.3.4", + "proxy-agent-negotiate": "1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.5.0.tgz", + "integrity": "sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.4.2.tgz", + "integrity": "sha512-Yi1jqNC/Oq0N4hBgNH/YvBpP1P57QqundgytzYqy3yqAa7NZPNjSoi4SGbRAXDMdBzNE6xBCi5U7RgfrvMEUVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "30.4.2", + "@jest/types": "30.4.1", + "import-local": "^3.2.0", + "jest-cli": "30.4.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.4.1.tgz", + "integrity": "sha512-IuctmYrxi21iOSOaIXpJWalHyPAsVv0GeBHKDn8C1CA4W5htHn7INL+wdnL4Bo0+olEndvAFkmb++tIQJG+vvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.1.1", + "jest-util": "30.4.1", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-circus": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.4.2.tgz", + "integrity": "sha512-rvHH7VlY6LgbJXJTQ87GW62g1FntOtbhh0zT+v04kC+pgL6aBKyYINXxWukCpj3dcIBMw5/XUbtDS9dU9JTXeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/expect": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "co": "^4.6.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.4.1", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-runtime": "30.4.2", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", + "p-limit": "^3.1.0", + "pretty-format": "30.4.1", + "pure-rand": "^7.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-cli": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.4.2.tgz", + "integrity": "sha512-jfA2ocvVHMXS2QijrJ0d31ektP+d/W0T5RpcTX2Pq+3sVqHlsXVCM2+FmwpL+bdY8OfHpIg9xMxLF17Zg0U49Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "30.4.2", + "@jest/test-result": "30.4.1", + "@jest/types": "30.4.1", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.4.2", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "yargs": "^17.7.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-cli/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-cli/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-config": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.4.2.tgz", + "integrity": "sha512-rNHAShJQqQwFNoL0hbf3BphSBOWnpOUAKvidLS/AjNVLPfoj5mSf4jQMfW3cYOs6hXeZC7nF7mDHaBnbxELOzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/get-type": "30.1.0", + "@jest/pattern": "30.4.0", + "@jest/test-sequencer": "30.4.1", + "@jest/types": "30.4.1", + "babel-jest": "30.4.1", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.5.0", + "graceful-fs": "^4.2.11", + "jest-circus": "30.4.2", + "jest-docblock": "30.4.0", + "jest-environment-node": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-runner": "30.4.2", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "parse-json": "^5.2.0", + "pretty-format": "30.4.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.4.1.tgz", + "integrity": "sha512-CRpFK0RtLriVDGcPPAnR6HMVI8bSR2jnUIgralhauzYQZIb4RH9AtEInTuQr65LmmGggGcRT6HIASxwqsVsmlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/diff-sequences": "30.4.0", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.4.0.tgz", + "integrity": "sha512-ZPMabUZCx5MpbZ2eBYSvZ0J8fvo3dR9oM+eeUpb3aKNQFuS2tu3Duw1TNlMoP8k3WQgKGJuhcMFvwcVuq6T7oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-each": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.4.1.tgz", + "integrity": "sha512-/8MJbH6fuj48TstjrMf+u/pd06Qezz5xOXvZA6442heNOWr8bdeoGZX2d9fCn028CoMgYmroH9//zky5GfyYmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "@jest/types": "30.4.1", + "chalk": "^4.1.2", + "jest-util": "30.4.1", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-30.4.1.tgz", + "integrity": "sha512-o3nfaN4zej7qgk2X0j8Jhq/S9nAVKs2xK3QeQxeHVvpkEPxaA1yxDGydR+iVI7zPy7Cp62Aq2h3Ja46QvfWHGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/environment-jsdom-abstract": "30.4.1", + "jsdom": "^26.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-node": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.4.1.tgz", + "integrity": "sha512-4FZYVOk85hz2AyT6BbarKy9u37g6DbrDyCdFhsnDdXqyrueYQvB+0zO4f/kqLCRD0BsPRXPMNJeQwihKZV8naw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-mock": "30.4.1", + "jest-util": "30.4.1", + "jest-validate": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.4.1.tgz", + "integrity": "sha512-rFrcONd8jeFsyw+Z9CrScJgglRf2+NFmNam8dKu7n+SoHqNYT47mn0DdEcVUZJpvh7Iz6/si7f7yUH7GJHVgnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.4.0", + "jest-util": "30.4.1", + "jest-worker": "30.4.1", + "picomatch": "^4.0.3", + "walker": "^1.0.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.3" + } + }, + "node_modules/jest-leak-detector": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.4.1.tgz", + "integrity": "sha512-IpmyiioeHxiWDhesHnUFmOxcTzwCwKpgACgWajtAP+nYQXiY7DakTxB6Bx9JFiRMljr0AX1PvnQdaU1KFoz6NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.4.1.tgz", + "integrity": "sha512-zvYfX5CaeEkFrrLS9suWe9rvJrm9J1Iv3ua8kIBv9GEPzcnsfBf0bob37la7s67fs0nlBC3EuvkOLnXQKxtx4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.4.1", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.4.1.tgz", + "integrity": "sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.4.1", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-util": "30.4.1", + "picomatch": "^4.0.3", + "pretty-format": "30.4.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-mock": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", + "integrity": "sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "jest-util": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-preset-angular": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-17.0.0.tgz", + "integrity": "sha512-2yAHkA1c5rSICGJVtLYYqPC5RDsvo4+i4CwWFHVXwv41cHNX7gCWeh074IuZ5mFw7Vwsr+i25EowCnGtKkxNWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment-jsdom-abstract": "^30.4.1", + "bs-logger": "^0.2.6", + "esbuild-wasm": ">=0.28.0", + "jest-util": "^30.4.1", + "pretty-format": "^30.4.1", + "ts-jest": "^29.4.11" + }, + "engines": { + "node": "^20.11.1 || >=22.0.0" + }, + "optionalDependencies": { + "esbuild": ">=0.28.0" + }, + "peerDependencies": { + "@angular/compiler-cli": ">=20.0.0 <23.0.0", + "@angular/core": ">=20.0.0 <23.0.0", + "@angular/platform-browser": ">=20.0.0 <23.0.0", + "jest": "^30.0.0", + "jsdom": ">=26.0.0", + "typescript": ">=5.8" + } + }, + "node_modules/jest-regex-util": { + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", + "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.4.1.tgz", + "integrity": "sha512-Zry8Yq/yJcNAZ7dJ5F2heic8AheXvbFZ7XI5V+h28nrYZ7Qoyy4dItq8OodjnYD270mvX+ZudmrNV9cysqhW5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.4.2.tgz", + "integrity": "sha512-gDiVh1I+GxYzz9oXlyw+1wv6VOYX1WYxMOfjsA3iGKePV2oxmbHhwxfkALxNxYy1ciw6APWwkW2zZONwP97aEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "30.4.0", + "jest-snapshot": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runner": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.4.2.tgz", + "integrity": "sha512-2dw0PslVYXxffXGpLo+Ejad+KcI1Qkjn7f4X4619gf21oCUmL+SPfjqIa/losUem3yEOvfNZe/F1HWUcNpODcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.4.1", + "@jest/environment": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.4.0", + "jest-environment-node": "30.4.1", + "jest-haste-map": "30.4.1", + "jest-leak-detector": "30.4.1", + "jest-message-util": "30.4.1", + "jest-resolve": "30.4.1", + "jest-runtime": "30.4.2", + "jest-util": "30.4.1", + "jest-watcher": "30.4.1", + "jest-worker": "30.4.1", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runtime": { + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.4.2.tgz", + "integrity": "sha512-3/5e8iPz2k/VLqlr8DgTftYyLUv8Su3FkCAO2/Od81UsUTpSxOrS6O5x5KkoQwyUjmpYyDJKeyAvg2T2nvpNkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.4.1", + "@jest/fake-timers": "30.4.1", + "@jest/globals": "30.4.1", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.5.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.4.1", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.4.1.tgz", + "integrity": "sha512-tEOkkfOMppUyeiHwjZswOQ3lcnoTnws/q5FnGIaeIh/jmoU0ZlgMYRR8sTlTj+nNGCoJ0RDq6SfxGxCsyMTPmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.4.1", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", + "babel-preset-current-node-syntax": "^1.2.0", + "chalk": "^4.1.2", + "expect": "30.4.1", + "graceful-fs": "^4.2.11", + "jest-diff": "30.4.1", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "pretty-format": "30.4.1", + "semver": "^7.7.2", + "synckit": "^0.11.8" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-snapshot/node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/jest-util": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.4.1", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.4.1.tgz", + "integrity": "sha512-PDWi4SOwLnwqNDfHZjOcsEFyZ4fc/2W2gVL3DEoyqnB6jCQMLRtfBong8s6omIw3lI0HWOus12xfnFmQtjW3fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "@jest/types": "30.4.1", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.4.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.4.1.tgz", + "integrity": "sha512-/l9UonmvCwjHH7d2h3iAwIloLc1H0S8mJZ/LNK3i86hqwPAz8otUJjP9MfYtz9Tt77Su5FD2xGjZn8d31IZHlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.4.1", + "@jest/types": "30.4.1", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.4.1", + "string-length": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.4.1.tgz", + "integrity": "sha512-SHynN/q/QD++iNyvMdy+WMmbCGk8jIsNcRxycXbWubSOhvo6T+j2afcfUSl+3hYsiBebOTo0cT7c2H7CXugu1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.4.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jose": { + "version": "6.2.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.9.tgz", + "integrity": "sha512-XrchZOFZUl/T3vTwRe8XK+cJrGtMF4th1ARnDfwbBXFKThGhlsxEE4Zu03AD/bjJSt/9jT/mxrOCkJWOg77aPA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.1.tgz", + "integrity": "sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cli-truncate": "^5.2.0", + "eventemitter3": "^5.0.4", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^10.0.0" + }, + "engines": { + "node": ">=22.13.0" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz", + "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lmdb": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.5.6.tgz", + "integrity": "sha512-j3uE8ReKNyUWDjhfEFSJqE/1DLtfTR5Z8yFzVHvBjAk37wNg7HdScjcv8ttPHRvrdgPQMPWxFFI0SsdBzI5lBw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@harperfast/extended-iterable": "^1.0.3", + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.5.6", + "@lmdb/lmdb-darwin-x64": "3.5.6", + "@lmdb/lmdb-linux-arm": "3.5.6", + "@lmdb/lmdb-linux-arm64": "3.5.6", + "@lmdb/lmdb-linux-x64": "3.5.6", + "@lmdb/lmdb-win32-arm64": "3.5.6", + "@lmdb/lmdb-win32-x64": "3.5.6" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.0.0.tgz", + "integrity": "sha512-CGvjzMN08iv6w1mm4/x3Gh1hLb4VnyRUA15FFpl6CsCIGGoe36k7kY5KNz9QDbSBN5I/fWHM6ZlIkUTa5xdUEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.12.1.tgz", + "integrity": "sha512-4EUH9tQHnMmEgzW/MdAP0KIfa1T9AF+htl0ffe2n5vb2EKn9y2co8ccpgWko6S52Jy1PQZKwRnx5/KkYjtd9MQ==", + "dev": true, + "license": "MIT", + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz", + "integrity": "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.4", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.4" + } + }, + "node_modules/mute-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", + "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", + "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-package-arg": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-14.0.0.tgz", + "integrity": "sha512-69XQh3k+dtGa1p+7RaR57IuG3rCko96xr/nUfN4yDYBXbTYICiWcOpsFKLN2GtGE9cyIljE+f1exnaYt9MvM+Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^10.1.0", + "proc-log": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^8.0.0" + }, + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.24", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.24.tgz", + "integrity": "sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.4.1.tgz", + "integrity": "sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.3.2", + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ordered-binary": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz", + "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/oxc-parser": { + "version": "0.142.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.142.0.tgz", + "integrity": "sha512-kKR+jPiRJYJDexVoziIg/FVGvr1fT1FZSSJOk6tVoMKKSlsf1Cso+cgGCJkOEDWOP174vRntCPFKg+AS7InWvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "^0.142.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-parser/binding-android-arm-eabi": "0.142.0", + "@oxc-parser/binding-android-arm64": "0.142.0", + "@oxc-parser/binding-darwin-arm64": "0.142.0", + "@oxc-parser/binding-darwin-x64": "0.142.0", + "@oxc-parser/binding-freebsd-x64": "0.142.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.142.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.142.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.142.0", + "@oxc-parser/binding-linux-arm64-musl": "0.142.0", + "@oxc-parser/binding-linux-ppc64-gnu": "0.142.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.142.0", + "@oxc-parser/binding-linux-riscv64-musl": "0.142.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.142.0", + "@oxc-parser/binding-linux-x64-gnu": "0.142.0", + "@oxc-parser/binding-linux-x64-musl": "0.142.0", + "@oxc-parser/binding-openharmony-arm64": "0.142.0", + "@oxc-parser/binding-wasm32-wasi": "0.142.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.142.0", + "@oxc-parser/binding-win32-ia32-msvc": "0.142.0", + "@oxc-parser/binding-win32-x64-msvc": "0.142.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.1.tgz", + "integrity": "sha512-NaRku2aMpUN1Sh1Gyk1KWUh2A7EJx2c6qYzvwsPtqhoHoaURshdrceYK3LunVCm3WHhm6FS7Vcczbvdh3/UIVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/piscina": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.2.0.tgz", + "integrity": "sha512-DszUCKeVN/5G5QKo6jAVHL8fmKnkJvQ0ACiVgY7YGCq3TUB2oznAOayvZPIAdEThvhczkXR+qm3IHsNXpFCYfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.x" + }, + "optionalDependencies": { + "@napi-rs/nice": "^1.0.4" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", + "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.4.1", + "ansi-styles": "^5.2.0", + "react-is-18": "npm:react-is@^18.3.1", + "react-is-19": "npm:react-is@^19.2.5" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-7.0.0.tgz", + "integrity": "sha512-FYgfaA69XZ93zaXLoMNQ+ViDXGGBgR8aLh03txzcFhV+9xOXx7+8DLCULrKKpR9+GsH9ZfHm82aSUPpozX0Ztg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-agent-negotiate": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-agent-negotiate/-/proxy-agent-negotiate-1.1.0.tgz", + "integrity": "sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "kerberos": "^2.0.0" + }, + "peerDependenciesMeta": { + "kerberos": { + "optional": true + } + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/react-is-18": { + "name": "react-is", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-is-19": { + "name": "react-is", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.8.tgz", + "integrity": "sha512-s5un28nYxKJw5gvUHyW5PCC28CvBqLu9r3cWgzHT4Vo/5fqqkFcdRYsGcKf50WMPpjjFZS5d76fn3YCo2njKwQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rolldown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.0.tgz", + "integrity": "sha512-u7tgm5l4Yw1iTqUL4EcYOAt7fFvCgQMLeidrnD4GALlC6aOznCjezYajgxeyKw27u0Q5N7fwgCzjVyPIWzwuBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.140.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.2.0", + "@rolldown/binding-darwin-arm64": "1.2.0", + "@rolldown/binding-darwin-x64": "1.2.0", + "@rolldown/binding-freebsd-x64": "1.2.0", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.0", + "@rolldown/binding-linux-arm64-gnu": "1.2.0", + "@rolldown/binding-linux-arm64-musl": "1.2.0", + "@rolldown/binding-linux-ppc64-gnu": "1.2.0", + "@rolldown/binding-linux-s390x-gnu": "1.2.0", + "@rolldown/binding-linux-x64-gnu": "1.2.0", + "@rolldown/binding-linux-x64-musl": "1.2.0", + "@rolldown/binding-openharmony-arm64": "1.2.0", + "@rolldown/binding-wasm32-wasi": "1.2.0", + "@rolldown/binding-win32-arm64-msvc": "1.2.0", + "@rolldown/binding-win32-x64-msvc": "1.2.0" + } + }, + "node_modules/rolldown/node_modules/@oxc-project/types": { + "version": "0.140.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.140.0.tgz", + "integrity": "sha512-h5LUOzGArYemnW1NMz/DuuQhBi96J6JL2Bk8zE4kvqxB5Sg3jxmCiH4uyOWHDkiKSt5vWlG4FIwCR/DbstcNRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.101.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.101.0.tgz", + "integrity": "sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=20.19.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.2.tgz", + "integrity": "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-length/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/synckit": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", + "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.3.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-jest": { + "version": "29.4.12", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.12.tgz", + "integrity": "sha512-Ov6ClY53Fflh6BGAnY2DlTq1hYDrTycz2PVTXBWFW2CU+9zrEqAp9fWdGXl42EXO5RLSFAcAZ2JFKbP+zBTFfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.8.5", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <7" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jest-util": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unrs-resolver": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.12.2.tgz", + "integrity": "sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.4" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.12.2", + "@unrs/resolver-binding-android-arm64": "1.12.2", + "@unrs/resolver-binding-darwin-arm64": "1.12.2", + "@unrs/resolver-binding-darwin-x64": "1.12.2", + "@unrs/resolver-binding-freebsd-x64": "1.12.2", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2", + "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-arm64-musl": "1.12.2", + "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-loong64-musl": "1.12.2", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2", + "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2", + "@unrs/resolver-binding-linux-x64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-x64-musl": "1.12.2", + "@unrs/resolver-binding-openharmony-arm64": "1.12.2", + "@unrs/resolver-binding-wasm32-wasi": "1.12.2", + "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2", + "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2", + "@unrs/resolver-binding-win32-x64-msvc": "1.12.2" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz", + "integrity": "sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-name": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-8.0.0.tgz", + "integrity": "sha512-SCv6OOV6Xj2/3cXy3dGmADluJTNcL3o7hZAglNPTe+WYuEuvxgJzxPrSDLZhF+CwyQOubqgecjMmTJGMVLWjYQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.5.tgz", + "integrity": "sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.17", + "rolldown": "~1.1.5", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/vite/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/vite/node_modules/@oxc-project/types": { + "version": "0.139.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz", + "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", + "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz", + "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz", + "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz", + "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz", + "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz", + "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz", + "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz", + "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz", + "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz", + "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz", + "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz", + "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz", + "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz", + "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz", + "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/vite/node_modules/rolldown": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz", + "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.139.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.5", + "@rolldown/binding-darwin-arm64": "1.1.5", + "@rolldown/binding-darwin-x64": "1.1.5", + "@rolldown/binding-freebsd-x64": "1.1.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", + "@rolldown/binding-linux-arm64-gnu": "1.1.5", + "@rolldown/binding-linux-arm64-musl": "1.1.5", + "@rolldown/binding-linux-ppc64-gnu": "1.1.5", + "@rolldown/binding-linux-s390x-gnu": "1.1.5", + "@rolldown/binding-linux-x64-gnu": "1.1.5", + "@rolldown/binding-linux-x64-musl": "1.1.5", + "@rolldown/binding-openharmony-arm64": "1.1.5", + "@rolldown/binding-wasm32-wasi": "1.1.5", + "@rolldown/binding-win32-arm64-msvc": "1.1.5", + "@rolldown/binding-win32-x64-msvc": "1.1.5" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", + "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ws": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", + "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^8.2.1", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", + "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.25.28 || ^4" + } + }, + "node_modules/zone.js": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.16.2.tgz", + "integrity": "sha512-Eky7p2Z1Ig3NnbfodSPoARCjKBSTFMnE/ACsP1L/XJEfY4SdOFce19BsUCWVwL6K5ABZFy5J3bjcMWffX+YM3Q==", + "license": "MIT" + } + } +} diff --git a/lessons/rxjs/demo/package.json b/lessons/rxjs/demo/package.json new file mode 100644 index 000000000..610f5d30c --- /dev/null +++ b/lessons/rxjs/demo/package.json @@ -0,0 +1,46 @@ +{ + "name": "rxjs-playground", + "version": "1.0.0", + "private": true, + "description": "Интерактивное демо-приложение к лекции по RxJS: 8 сценариев с параллельной реализацией «без операторов» vs «с операторами»", + "scripts": { + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "jest", + "lint": "eslint \"src/**/*.{ts,html}\"" + }, + "dependencies": { + "@angular/common": "^22.1.0", + "@angular/compiler": "^22.1.0", + "@angular/core": "^22.1.0", + "@angular/forms": "^22.1.0", + "@angular/platform-browser": "^22.1.0", + "@angular/router": "^22.1.0", + "rxjs": "~7.8.0", + "tslib": "^2.8.0", + "zone.js": "~0.16.0" + }, + "devDependencies": { + "@angular/build": "^22.1.0", + "@angular/cli": "^22.1.0", + "@angular/compiler-cli": "^22.1.0", + "@angular-eslint/builder": "^22.1.0", + "@angular-eslint/eslint-plugin": "^22.1.0", + "@angular-eslint/eslint-plugin-template": "^22.1.0", + "@angular-eslint/schematics": "^22.1.0", + "@angular-eslint/template-parser": "^22.1.0", + "@testing-library/angular": "^19.0.0", + "@testing-library/jest-dom": "^7.0.0", + "@types/jest": "^30.0.0", + "@types/node": "^22.0.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "eslint": "^9.0.0", + "jest": "^30.0.0", + "jest-environment-jsdom": "^30.0.0", + "jest-preset-angular": "^17.0.0", + "jsdom": "^26.0.0", + "typescript": "~6.0.3" + } +} diff --git a/lessons/rxjs/demo/src/app/app.component.ts b/lessons/rxjs/demo/src/app/app.component.ts new file mode 100644 index 000000000..e2cdad930 --- /dev/null +++ b/lessons/rxjs/demo/src/app/app.component.ts @@ -0,0 +1,170 @@ +import { CommonModule, NgComponentOutlet } from '@angular/common'; +import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; +import { SCENARIOS } from './scenarios'; +import { ScenarioShellComponent } from './shared/scenario-shell/scenario-shell.component'; + +@Component({ + selector: 'app-root', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [CommonModule, NgComponentOutlet, ScenarioShellComponent], + template: ` +

    + `, + styles: [ + ` + .app-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px 16px; + background: var(--color-bg-elev); + border-bottom: 1px solid var(--color-border); + } + .app-header__title { + display: flex; + align-items: center; + gap: 12px; + } + .app-header__title h1 { + margin: 0; + font-size: 18px; + font-weight: 700; + } + .sidebar h2 { + margin: 0 0 12px; + font-size: 12px; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--color-text-dim); + } + .sidebar ul { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 6px; + } + .sidebar button { + width: 100%; + text-align: left; + background: transparent; + border: 1px solid transparent; + border-radius: var(--radius-md); + padding: 8px 10px; + display: flex; + flex-direction: column; + gap: 4px; + cursor: pointer; + } + .sidebar button:hover { + background: var(--color-bg-elev-2); + } + .sidebar button.is-active { + border-color: var(--color-cyan); + background: var(--color-bg-elev-2); + } + .sidebar small { + color: var(--color-text-dim); + font-size: 11.5px; + } + .badge-list { + display: flex; + flex-wrap: wrap; + gap: 4px; + } + .scenario-meta { + display: flex; + gap: 16px; + flex-wrap: wrap; + padding: 10px 12px; + background: var(--color-bg-elev); + border: 1px solid var(--color-border); + border-radius: var(--radius-md); + } + .scenario-meta strong { + margin-right: 6px; + color: var(--color-text-dim); + } + `, + ], +}) +export class AppComponent { + protected readonly scenarios = SCENARIOS; + protected readonly currentScenarioId = signal(SCENARIOS[0]?.meta.id ?? ''); + + protected currentScenario() { + return this.scenarios.find((s) => s.meta.id === this.currentScenarioId()); + } + + protected select(id: string): void { + this.currentScenarioId.set(id); + } +} diff --git a/lessons/rxjs/demo/src/app/app.config.ts b/lessons/rxjs/demo/src/app/app.config.ts new file mode 100644 index 000000000..f9a0188ca --- /dev/null +++ b/lessons/rxjs/demo/src/app/app.config.ts @@ -0,0 +1,12 @@ +import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; +import { TRANSPORT } from './core/transport'; +import { FakeTransportService } from './core/transport.service'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideZoneChangeDetection({ eventCoalescing: true }), + // Связываем абстракцию Transport с её фейковой реализацией. + // В тестах сценариев мокаем TRANSPORT прямо в TestBed. + { provide: TRANSPORT, useExisting: FakeTransportService }, + ], +}; diff --git a/lessons/rxjs/demo/src/app/core/event-log.service.ts b/lessons/rxjs/demo/src/app/core/event-log.service.ts new file mode 100644 index 000000000..a19712e33 --- /dev/null +++ b/lessons/rxjs/demo/src/app/core/event-log.service.ts @@ -0,0 +1,29 @@ +import { Injectable, signal } from '@angular/core'; +import { Lane, LogEvent, LogKind } from './log-event.model'; + +let nextId = 1; + +/** + * Локальный лог событий сценария. Один экземпляр на сценарий (scope = компонент сценария). + * UI читает через сигнал, чтобы рендериться реактивно. + */ +@Injectable() +export class EventLogService { + private readonly _events = signal>([]); + readonly events = this._events.asReadonly(); + + push(lane: Lane, kind: LogKind, label: string): void { + const event: LogEvent = { + id: nextId++, + timestamp: Date.now(), + lane, + kind, + label, + }; + this._events.update((list) => [event, ...list].slice(0, 100)); + } + + clear(): void { + this._events.set([]); + } +} diff --git a/lessons/rxjs/demo/src/app/core/log-event.model.ts b/lessons/rxjs/demo/src/app/core/log-event.model.ts new file mode 100644 index 000000000..ab3405601 --- /dev/null +++ b/lessons/rxjs/demo/src/app/core/log-event.model.ts @@ -0,0 +1,17 @@ +export type LogKind = + | 'event' + | 'next' + | 'error' + | 'success' + | 'cancelled' + | 'info'; + +export type Lane = 'imperative' | 'reactive'; + +export interface LogEvent { + readonly id: number; + readonly timestamp: number; + readonly lane: Lane; + readonly kind: LogKind; + readonly label: string; +} diff --git a/lessons/rxjs/demo/src/app/core/transport.service.ts b/lessons/rxjs/demo/src/app/core/transport.service.ts new file mode 100644 index 000000000..f4cf0c4f7 --- /dev/null +++ b/lessons/rxjs/demo/src/app/core/transport.service.ts @@ -0,0 +1,157 @@ +import { Injectable } from '@angular/core'; +import { Observable, defer, timer } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { + AppConfig, + Filters, + ItemPayload, + RequestOptions, + SaveResponse, + SearchQuery, + SearchResult, + Transport, +} from './transport'; + +const TAGS = ['hot', 'new', 'sale', 'limited'] as const; +const CATEGORIES = ['books', 'games', 'music', 'tools'] as const; + +function pick(arr: ReadonlyArray, seed: number): T { + return arr[seed % arr.length]!; +} + +function shouldFail(rate: number | undefined, seed: number): boolean { + if (!rate) return false; + return ((seed * 9301 + 49297) % 233280) / 233280 < rate; +} + +function delayFor(options: RequestOptions | undefined, seed: number): number { + if (options?.delayMs !== undefined) return options.delayMs; + return 400 + ((seed * 37) % 500); +} + +interface Plan { + readonly ok: (seed: number) => T; + readonly fail?: (seed: number) => Error; +} + +/** + * Полностью детерминированный фейковый транспорт. + * Работает офлайн, без реального HTTP. Используется во всех сценариях. + */ +@Injectable({ providedIn: 'root' }) +export class FakeTransportService implements Transport { + private seedCounter = 0; + + search(query: SearchQuery, options?: RequestOptions): Observable { + return this.build( + { + ok: (seed) => { + const items: ReadonlyArray = Array.from( + { length: 3 }, + (_, i) => ({ + id: seed * 10 + i, + name: `${query.term} #${i + 1}`, + tag: pick(TAGS, seed + i), + }), + ); + return { term: query.term, items, echoedAt: Date.now() }; + }, + fail: () => new Error(`search("${query.term}"): 500`), + }, + options, + ); + } + + getItem(id: number, options?: RequestOptions): Observable { + return this.build( + { + ok: (seed) => ({ + id, + name: `Item ${id}`, + tag: pick(TAGS, seed), + }), + fail: () => new Error(`getItem(${id}): 500`), + }, + options, + ); + } + + getConfig(options?: RequestOptions): Observable { + return this.build( + { + ok: (seed) => ({ + id: 'rxjs-playground', + name: 'RxJS Playground Config', + price: seed % 100, + }), + fail: () => new Error('getConfig: 500'), + }, + options, + ); + } + + getFilteredItems( + filters: Filters, + options?: RequestOptions, + ): Observable> { + return this.build>( + { + ok: (seed) => { + const all: ReadonlyArray = Array.from( + { length: 8 }, + (_, i) => ({ + id: seed * 100 + i, + name: `${filters.category} item ${i + 1}`, + tag: pick(CATEGORIES, seed + i), + }), + ); + return all.filter((it) => filters.minPrice <= it.id % 9); + }, + fail: () => new Error('getFilteredItems: 500'), + }, + options, + ); + } + + saveForm( + payload: Readonly>, + options?: RequestOptions, + ): Observable { + return this.build( + { + ok: () => ({ + savedAt: Date.now(), + accepted: Object.keys(payload).length > 0, + }), + fail: () => new Error('saveForm: 500'), + }, + options, + ); + } + + /** + * Универсальный билдер: defer + timer + (success|error). + * Для `neverCompletes` отдаёт Observable, который никогда не эмитит + * (имитация «висящего» HTTP-запроса для switchMap-демо). + */ + private build( + plan: Plan, + options?: RequestOptions, + ): Observable { + return defer(() => { + const seed = ++this.seedCounter; + const delay = delayFor(options, seed); + if (options?.neverCompletes) { + return new Observable(() => () => {}); + } + return timer(delay).pipe( + map(() => { + if (shouldFail(options?.failRate, seed) && plan.fail) { + throw plan.fail(seed); + } + return plan.ok(seed); + }), + ); + }); + } +} diff --git a/lessons/rxjs/demo/src/app/core/transport.ts b/lessons/rxjs/demo/src/app/core/transport.ts new file mode 100644 index 000000000..25c535643 --- /dev/null +++ b/lessons/rxjs/demo/src/app/core/transport.ts @@ -0,0 +1,68 @@ +import { InjectionToken } from '@angular/core'; +import { Observable } from 'rxjs'; + +export interface RequestOptions { + /** Задержка ответа в мс (имитация сети). */ + readonly delayMs?: number; + /** Вероятность ошибки 0..1. */ + readonly failRate?: number; + /** Метка для отладки — попадёт в лог. */ + readonly label?: string; + /** Если true — запрос «висит» до отмены (для switchMap-демо). */ + readonly neverCompletes?: boolean; +} + +export interface SearchQuery { + readonly term: string; +} + +export interface ItemPayload { + readonly id: number; + readonly name: string; + readonly tag: string; +} + +export interface SearchResult { + readonly term: string; + readonly items: ReadonlyArray; + readonly echoedAt: number; +} + +export interface AppConfig { + readonly id: string; + readonly name: string; + readonly price: number; +} + +export interface Filters { + readonly category: string; + readonly minPrice: number; +} + +export interface SaveResponse { + readonly savedAt: number; + readonly accepted: boolean; +} + +/** + * Абстракция «бэкенда» для всех сценариев. + * Реализация — {@link FakeTransportService}, мокается в тестах через DI-токен. + */ +export interface Transport { + search( + query: SearchQuery, + options?: RequestOptions, + ): Observable; + getItem(id: number, options?: RequestOptions): Observable; + getConfig(options?: RequestOptions): Observable; + getFilteredItems( + filters: Filters, + options?: RequestOptions, + ): Observable>; + saveForm( + payload: Readonly>, + options?: RequestOptions, + ): Observable; +} + +export const TRANSPORT = new InjectionToken('TRANSPORT'); diff --git a/lessons/rxjs/demo/src/app/scenarios/config-cache/config-cache.component.spec.ts b/lessons/rxjs/demo/src/app/scenarios/config-cache/config-cache.component.spec.ts new file mode 100644 index 000000000..fe7e982af --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/config-cache/config-cache.component.spec.ts @@ -0,0 +1,47 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { defer, of } from 'rxjs'; +import { EventLogService } from '../../core/event-log.service'; +import { TRANSPORT } from '../../core/transport'; +import { ConfigCacheComponent } from './config-cache.component'; + +describe('ConfigCacheComponent', () => { + let fixture: ComponentFixture; + let component: ConfigCacheComponent; + let networkRequests: number; + const fakeTransport = { getConfig: jest.fn() }; + + beforeEach(async () => { + jest.clearAllMocks(); + networkRequests = 0; + fakeTransport.getConfig.mockImplementation(() => + defer(() => { + networkRequests += 1; + return of({ id: 'x', name: 'X', price: 1 }); + }), + ); + await TestBed.configureTestingModule({ + imports: [ConfigCacheComponent], + providers: [{ provide: TRANSPORT, useValue: fakeTransport }, EventLogService], + }) + .overrideComponent(ConfigCacheComponent, { set: { template: '
    ' } }) + .compileComponents(); + fixture = TestBed.createComponent(ConfigCacheComponent); + component = fixture.componentInstance; + }); + + it('imp: 2 подписчика → 2 сетевых запроса', () => { + component.impSubscribe(); + component.impSubscribe(); + + expect(fakeTransport.getConfig).toHaveBeenCalledTimes(2); + expect(networkRequests).toBe(2); + }); + + it('rea: 2 подписчика → 1 сетевой запрос (shareReplay)', () => { + component.reaSubscribe(); + component.reaSubscribe(); + + expect(fakeTransport.getConfig).toHaveBeenCalledTimes(1); + expect(networkRequests).toBe(1); + }); +}); diff --git a/lessons/rxjs/demo/src/app/scenarios/config-cache/config-cache.component.ts b/lessons/rxjs/demo/src/app/scenarios/config-cache/config-cache.component.ts new file mode 100644 index 000000000..0627d243b --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/config-cache/config-cache.component.ts @@ -0,0 +1,107 @@ +import { CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + inject, + signal, +} from '@angular/core'; +import { Observable, Subscription, shareReplay } from 'rxjs'; + +import { EventLogService } from '../../core/event-log.service'; +import { AppConfig, TRANSPORT } from '../../core/transport'; +import { SplitViewComponent } from '../../shared/split-view/split-view.component'; +import { ScenarioMeta } from '../scenario.model'; + +export const CONFIG_CACHE_META: ScenarioMeta = { + id: 'config-cache', + name: 'Кэш конфига', + lectureRefs: ['6 (shareReplay)'], + operators: ['shareReplay'], + summary: + 'Конфиг запрашивается из разных мест. Без shareReplay — N подписчиков = N HTTP. С shareReplay(1) — один запрос, ответ для всех.', +}; + +/** + * Демо: «все хотят конфиг». Без shareReplay каждый subscribe вызывает transport.getConfig. + * С shareReplay(1) — один запрос, все получают кэшированный ответ. + */ +@Component({ + selector: 'app-config-cache', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [CommonModule, SplitViewComponent], + template: ` + +
    +

    imp запросов отправлено: {{ impRequests() }}

    + +

    imp подписчиков: {{ impSubs() }}

    + @if (impConfigs().length) { +
      + @for (c of impConfigs(); track $index) { +
    • sub#{{ $index }}: {{ c.name }} (price {{ c.price }})
    • + } +
    + } +
    +
    +

    rea запросов отправлено: {{ reaRequests() }}

    + +

    rea подписчиков: {{ reaSubs() }}

    + @if (reaConfigs().length) { +
      + @for (c of reaConfigs(); track $index) { +
    • sub#{{ $index }}: {{ c.name }} (price {{ c.price }})
    • + } +
    + } +
    +
    + `, +}) +export class ConfigCacheComponent { + private readonly transport = inject(TRANSPORT); + private readonly log = inject(EventLogService); + + protected readonly impRequests = signal(0); + protected readonly impSubs = signal(0); + protected readonly impConfigs = signal>([]); + private readonly impSubsList: Subscription[] = []; + + protected readonly reaRequests = signal(0); + protected readonly reaSubs = signal(0); + protected readonly reaConfigs = signal>([]); + + private reaCached: Observable | null = null; + private readonly reaSubsList: Subscription[] = []; + + protected impSubscribe(): void { + this.impRequests.update((n) => n + 1); + this.log.push('imperative', 'event', `imp +1 sub (#${this.impSubs() + 1})`); + const sub = this.transport.getConfig({ delayMs: 200 }).subscribe((c) => { + this.impConfigs.update((list) => [...list, c]); + this.log.push('imperative', 'next', `imp sub got ${c.name}`); + }); + this.impSubs.update((n) => n + 1); + this.impSubsList.push(sub); + } + + protected reaSubscribe(): void { + if (!this.reaCached) { + this.reaRequests.update((n) => n + 1); + this.reaCached = this.transport + .getConfig({ delayMs: 200 }) + .pipe(shareReplay({ bufferSize: 1, refCount: false })); + } + this.reaSubs.update((n) => n + 1); + this.log.push('reactive', 'event', `rea +1 sub (#${this.reaSubs()})`); + const sub = this.reaCached.subscribe((c) => { + this.reaConfigs.update((list) => [...list, c]); + this.log.push('reactive', 'next', `rea sub got ${c.name}`); + }); + this.reaSubsList.push(sub); + } +} diff --git a/lessons/rxjs/demo/src/app/scenarios/fast-navigation/fast-navigation.component.spec.ts b/lessons/rxjs/demo/src/app/scenarios/fast-navigation/fast-navigation.component.spec.ts new file mode 100644 index 000000000..18a57ad6a --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/fast-navigation/fast-navigation.component.spec.ts @@ -0,0 +1,35 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Subject } from 'rxjs'; +import { EventLogService } from '../../core/event-log.service'; +import { TRANSPORT } from '../../core/transport'; +import { FastNavigationComponent } from './fast-navigation.component'; + +describe('FastNavigationComponent', () => { + let fixture: ComponentFixture; + let component: FastNavigationComponent; + let item$: Subject<{ id: number; name: string; tag: string }>; + + beforeEach(async () => { + jest.clearAllMocks(); + item$ = new Subject(); + const fakeTransport = { getItem: jest.fn().mockReturnValue(item$) }; + + await TestBed.configureTestingModule({ + imports: [FastNavigationComponent], + providers: [{ provide: TRANSPORT, useValue: fakeTransport }, EventLogService], + }) + .overrideComponent(FastNavigationComponent, { set: { template: '
    ' } }) + .compileComponents(); + + fixture = TestBed.createComponent(FastNavigationComponent); + component = fixture.componentInstance; + }); + + it('switchMap оставляет только последний эмит', () => { + component.reaId$.next(1); + component.reaId$.next(2); + component.reaId$.next(3); + item$.next({ id: 3, name: 'C', tag: 'new' }); + expect(component.reaItem()?.id).toBe(3); + }); +}); diff --git a/lessons/rxjs/demo/src/app/scenarios/fast-navigation/fast-navigation.component.ts b/lessons/rxjs/demo/src/app/scenarios/fast-navigation/fast-navigation.component.ts new file mode 100644 index 000000000..290f9c63e --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/fast-navigation/fast-navigation.component.ts @@ -0,0 +1,121 @@ +import { CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + DestroyRef, + inject, + signal, +} from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { Subject, finalize, switchMap } from 'rxjs'; + +import { EventLogService } from '../../core/event-log.service'; +import { ItemPayload, TRANSPORT } from '../../core/transport'; +import { SplitViewComponent } from '../../shared/split-view/split-view.component'; +import { ScenarioMeta } from '../scenario.model'; + +export const FAST_NAVIGATION_META: ScenarioMeta = { + id: 'fast-navigation', + name: 'Быстрая навигация', + lectureRefs: ['8.2', '5 (switchMap)'], + operators: ['switchMap'], + summary: + 'Переключение между «страницами» — старый запрос должен отмениться, чтобы UI не показывал чужие данные.', +}; + +const IDS = [1, 2, 3, 4, 5, 6] as const; + +/** + * Демо: пользователь быстро жмёт «Перейти к id» — нужно, чтобы отображался + * только последний результат. Императивный путь — ручной флаг, как в Live Search. + * Реактивный — switchMap. + */ +@Component({ + selector: 'app-fast-navigation', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [CommonModule, SplitViewComponent], + template: ` + +
    +
    + @for (id of ids; track id) { + + } +
    + @if (impItem(); as it) { +

    imperative item: #{{ it.id }} — {{ it.name }} [{{ it.tag }}]

    + } +
    +
    +
    + @for (id of ids; track id) { + + } +
    + @if (reaItem(); as it) { +

    reactive item: #{{ it.id }} — {{ it.name }} [{{ it.tag }}]

    + } +
    +
    + `, + styles: [ + ` + .row { + display: flex; + gap: 6px; + flex-wrap: wrap; + } + `, + ], +}) +export class FastNavigationComponent { + private readonly transport = inject(TRANSPORT); + private readonly log = inject(EventLogService); + private readonly destroyRef = inject(DestroyRef); + + protected readonly ids = IDS; + protected readonly impItem = signal(null); + protected readonly reaItem = signal(null); + protected readonly reaId$ = new Subject(); + + // Императивный seq. + private impSeq = 0; + // neverCompletes = true заставляет «висящий» запрос никогда не эмитить — + // если бы не было отмены, UI застрял бы на первом ответе. + constructor() { + this.reaId$ + .pipe( + switchMap((id) => { + this.log.push('reactive', 'event', `navigate → ${id}`); + return this.transport + .getItem(id, { neverCompletes: true, delayMs: 1500 }) + .pipe(finalize(() => this.log.push('reactive', 'info', `inner teardown #${id}`))); + }), + takeUntilDestroyed(this.destroyRef), + ) + .subscribe((item) => { + this.log.push('reactive', 'next', `#${item.id} ${item.name}`); + this.reaItem.set(item); + }); + } + + protected impGoTo(id: number): void { + const mySeq = ++this.impSeq; + this.log.push('imperative', 'event', `imp navigate → ${id} (#${mySeq})`); + + this.transport + .getItem(id, { neverCompletes: true, delayMs: 1500 }) + .subscribe((item) => { + if (mySeq !== this.impSeq) { + this.log.push('imperative', 'cancelled', `ответ #${mySeq} устарел`); + return; + } + this.log.push('imperative', 'next', `#${item.id} ${item.name}`); + this.impItem.set(item); + }); + } +} diff --git a/lessons/rxjs/demo/src/app/scenarios/filters-url/filters-url.component.spec.ts b/lessons/rxjs/demo/src/app/scenarios/filters-url/filters-url.component.spec.ts new file mode 100644 index 000000000..682440293 --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/filters-url/filters-url.component.spec.ts @@ -0,0 +1,27 @@ +import { TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { EventLogService } from '../../core/event-log.service'; +import { TRANSPORT } from '../../core/transport'; +import { FiltersUrlComponent } from './filters-url.component'; + +describe('FiltersUrlComponent', () => { + const fakeTransport = { getFilteredItems: jest.fn() }; + + beforeEach(async () => { + jest.clearAllMocks(); + fakeTransport.getFilteredItems.mockReturnValue(of([])); + await TestBed.configureTestingModule({ + imports: [FiltersUrlComponent], + providers: [{ provide: TRANSPORT, useValue: fakeTransport }, EventLogService], + }) + .overrideComponent(FiltersUrlComponent, { set: { template: '
    ' } }) + .compileComponents(); + TestBed.createComponent(FiltersUrlComponent); + }); + + it('startWith на всех трёх потоках гарантирует первый эмит без ожидания', () => { + // До любых .next() combineLatest должен сработать благодаря startWith. + // transport вызывается минимум один раз. + expect(fakeTransport.getFilteredItems).toHaveBeenCalled(); + }); +}); diff --git a/lessons/rxjs/demo/src/app/scenarios/filters-url/filters-url.component.ts b/lessons/rxjs/demo/src/app/scenarios/filters-url/filters-url.component.ts new file mode 100644 index 000000000..0ec370f28 --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/filters-url/filters-url.component.ts @@ -0,0 +1,194 @@ +import { CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + DestroyRef, + inject, + signal, +} from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { + BehaviorSubject, + Subject, + combineLatest, + startWith, + switchMap, +} from 'rxjs'; + +import { EventLogService } from '../../core/event-log.service'; +import { Filters, TRANSPORT } from '../../core/transport'; +import { SplitViewComponent } from '../../shared/split-view/split-view.component'; +import { ScenarioMeta } from '../scenario.model'; + +export const FILTERS_URL_META: ScenarioMeta = { + id: 'filters-url', + name: 'Фильтры + URL', + lectureRefs: ['8.4', '6 (combineLatest)'], + operators: ['combineLatest', 'switchMap', 'startWith'], + summary: + 'Два источника (форма и URL) → один поток запросов. Императивный путь — две подписки, легко получить race condition.', +}; + +const CATEGORIES = ['books', 'games', 'music', 'tools'] as const; + +/** + * Демо: фильтр (category, minPrice) + «URL» (поток page$). Императивный путь — + * две отдельные подписки, и при изменении каждой надо аккуратно отменять прошлый + * запрос. Реактивный — combineLatest двух потоков + switchMap. + */ +@Component({ + selector: 'app-filters-url', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [CommonModule, SplitViewComponent], + template: ` + +
    + + + +

    imp items: {{ impCount() }}

    +
    +
    + + + +

    rea items: {{ reaCount() }}

    +
    +
    + `, +}) +export class FiltersUrlComponent { + private readonly transport = inject(TRANSPORT); + private readonly log = inject(EventLogService); + private readonly destroyRef = inject(DestroyRef); + + protected readonly categories = CATEGORIES; + + // Императивный state. + protected readonly impCategory = signal('books'); + protected readonly impMinPrice = signal(0); + protected readonly impPage = signal(0); + protected readonly impCount = signal(0); + protected readonly impPage$ = new Subject(); + private impSeq = 0; + + // Реактивный state. + protected readonly reaCategory$ = new BehaviorSubject('books'); + protected readonly reaMinPrice$ = new BehaviorSubject(0); + protected readonly reaPage$ = new Subject(); + protected readonly reaCategory = signal('books'); + protected readonly reaMinPrice = signal(0); + protected readonly reaPage = signal(0); + protected readonly reaCount = signal(0); + + constructor() { + // ============ REACTIVE: combineLatest + switchMap ============ + combineLatest([ + this.reaCategory$.pipe(startWith('books')), + this.reaMinPrice$.pipe(startWith(0)), + this.reaPage$.pipe(startWith(0)), + ]) + .pipe( + switchMap(([category, minPrice, page]) => { + this.log.push( + 'reactive', + 'event', + `filters: ${category}/${minPrice} page=${page}`, + ); + const filters: Filters = { category, minPrice }; + return this.transport.getFilteredItems(filters, { delayMs: 400 }); + }), + takeUntilDestroyed(this.destroyRef), + ) + .subscribe((items) => { + this.reaCount.set(items.length); + this.log.push('reactive', 'next', `${items.length} items`); + }); + } + + // Императивный обработчик: на изменение ЛЮБОГО источника — новый запрос с флагом seq. + protected onImpCategoryChange(event: Event): void { + this.impCategory.set((event.target as HTMLSelectElement).value); + this.onImpChange(); + } + protected onImpMinPriceChange(event: Event): void { + this.impMinPrice.set(+(event.target as HTMLInputElement).value); + this.onImpChange(); + } + protected onImpPageNext(): void { + this.impPage.update((n) => n + 1); + this.onImpChange(); + } + protected onReaCategoryChange(event: Event): void { + this.reaCategory.set((event.target as HTMLSelectElement).value); + this.reaCategory$.next((event.target as HTMLSelectElement).value); + } + protected onReaMinPriceChange(event: Event): void { + const v = +(event.target as HTMLInputElement).value; + this.reaMinPrice.set(v); + this.reaMinPrice$.next(v); + } + protected onReaPageNext(): void { + const n = this.reaPage() + 1; + this.reaPage.set(n); + this.reaPage$.next(n); + } + + protected onImpChange(): void { + const mySeq = ++this.impSeq; + this.log.push( + 'imperative', + 'event', + `imp filters: ${this.impCategory()}/${this.impMinPrice()} page=${this.impPage()}`, + ); + this.transport + .getFilteredItems( + { category: this.impCategory(), minPrice: this.impMinPrice() }, + { delayMs: 400 }, + ) + .subscribe((items) => { + if (mySeq !== this.impSeq) { + this.log.push('imperative', 'cancelled', `imp ответ #${mySeq} устарел`); + return; + } + this.impCount.set(items.length); + this.log.push('imperative', 'next', `${items.length} items`); + }); + } +} diff --git a/lessons/rxjs/demo/src/app/scenarios/form-submit/form-submit.component.spec.ts b/lessons/rxjs/demo/src/app/scenarios/form-submit/form-submit.component.spec.ts new file mode 100644 index 000000000..dbc4f524b --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/form-submit/form-submit.component.spec.ts @@ -0,0 +1,44 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Subject } from 'rxjs'; +import { EventLogService } from '../../core/event-log.service'; +import { TRANSPORT } from '../../core/transport'; +import { FormSubmitComponent } from './form-submit.component'; + +describe('FormSubmitComponent', () => { + let fixture: ComponentFixture; + let component: FormSubmitComponent; + let save$: Subject<{ savedAt: number; accepted: boolean }>; + let fakeTransport: { saveForm: jest.Mock }; + + beforeEach(async () => { + jest.clearAllMocks(); + save$ = new Subject(); + fakeTransport = { saveForm: jest.fn().mockReturnValue(save$) }; + + await TestBed.configureTestingModule({ + imports: [FormSubmitComponent], + providers: [{ provide: TRANSPORT, useValue: fakeTransport }, EventLogService], + }) + .overrideComponent(FormSubmitComponent, { set: { template: '
    ' } }) + .compileComponents(); + + fixture = TestBed.createComponent(FormSubmitComponent); + component = fixture.componentInstance; + }); + + it('exhaustMap пропускает только первый клик, пока ответ не пришёл', () => { + component.reaClick$.next(); + component.reaClick$.next(); + component.reaClick$.next(); + + // Пока ответ не пришёл, transport.saveForm вызван ровно один раз. + expect(fakeTransport.saveForm).toHaveBeenCalledTimes(1); + + save$.next({ savedAt: 1, accepted: true }); + save$.complete(); + + // После complete — следующий клик снова проходит. + component.reaClick$.next(); + expect(fakeTransport.saveForm).toHaveBeenCalledTimes(2); + }); +}); diff --git a/lessons/rxjs/demo/src/app/scenarios/form-submit/form-submit.component.ts b/lessons/rxjs/demo/src/app/scenarios/form-submit/form-submit.component.ts new file mode 100644 index 000000000..f396c447a --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/form-submit/form-submit.component.ts @@ -0,0 +1,104 @@ +import { CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + DestroyRef, + inject, + signal, +} from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { Subject, exhaustMap } from 'rxjs'; + +import { EventLogService } from '../../core/event-log.service'; +import { TRANSPORT } from '../../core/transport'; +import { SplitViewComponent } from '../../shared/split-view/split-view.component'; +import { ScenarioMeta } from '../scenario.model'; + +export const FORM_SUBMIT_META: ScenarioMeta = { + id: 'form-submit', + name: 'Submit формы', + lectureRefs: ['8.3', '5 (exhaustMap)'], + operators: ['exhaustMap'], + summary: 'Защита от двойного клика «Сохранить»: пока запрос идёт — игнорируем повторы.', +}; + +/** + * Демо submit: пользователь жмёт «Сохранить» несколько раз подряд. + * Императивный путь — блокируем кнопку, пока запрос летит. + * Реактивный — exhaustMap отбрасывает клики, пока внутренний Observable не завершился. + */ +@Component({ + selector: 'app-form-submit', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [CommonModule, SplitViewComponent], + template: ` + +
    + + нажатий: {{ impCount() }}, сохранений: {{ impOk() }} +
    +
    + + нажатий: {{ reaCount() }}, сохранений: {{ reaOk() }} +
    +
    + `, +}) +export class FormSubmitComponent { + private readonly transport = inject(TRANSPORT); + private readonly log = inject(EventLogService); + private readonly destroyRef = inject(DestroyRef); + + protected readonly impBusy = signal(false); + protected readonly impCount = signal(0); + protected readonly impOk = signal(0); + protected readonly reaCount = signal(0); + protected readonly reaOk = signal(0); + + protected readonly reaClick$ = new Subject(); + + constructor() { + this.reaClick$ + .pipe( + exhaustMap(() => { + this.reaCount.update((n) => n + 1); + this.log.push('reactive', 'event', 'click'); + return this.transport.saveForm({ name: 'demo' }, { delayMs: 800, failRate: 0.2 }); + }), + takeUntilDestroyed(this.destroyRef), + ) + .subscribe({ + next: (res) => { + this.reaOk.update((n) => n + 1); + this.log.push('reactive', 'success', `saved @${res.savedAt}`); + }, + error: (err: Error) => this.log.push('reactive', 'error', err.message), + }); + } + + protected impSubmit(): void { + if (this.impBusy()) return; // имитация disabled — в шаблоне кнопка и так disabled + this.impBusy.set(true); + this.impCount.update((n) => n + 1); + this.log.push('imperative', 'event', 'click (busy)'); + + this.transport + .saveForm({ name: 'demo' }, { delayMs: 800, failRate: 0.2 }) + .subscribe({ + next: () => { + this.impOk.update((n) => n + 1); + this.impBusy.set(false); + }, + error: (err: Error) => { + this.impBusy.set(false); + this.log.push('imperative', 'error', err.message); + }, + }); + } +} diff --git a/lessons/rxjs/demo/src/app/scenarios/index.ts b/lessons/rxjs/demo/src/app/scenarios/index.ts new file mode 100644 index 000000000..e2ce17fe0 --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/index.ts @@ -0,0 +1,36 @@ +import { LiveSearchComponent, LIVE_SEARCH_META } from './live-search/live-search.component'; +import { FastNavigationComponent, FAST_NAVIGATION_META } from './fast-navigation/fast-navigation.component'; +import { FormSubmitComponent, FORM_SUBMIT_META } from './form-submit/form-submit.component'; +import { + ParallelRequestsComponent, + PARALLEL_REQUESTS_META, +} from './parallel-requests/parallel-requests.component'; +import { + LoadingDataErrorComponent, + LOADING_DATA_ERROR_META, +} from './loading-data-error/loading-data-error.component'; +import { FiltersUrlComponent, FILTERS_URL_META } from './filters-url/filters-url.component'; +import { + SubscriptionLeakComponent, + SUBSCRIPTION_LEAK_META, +} from './subscription-leak/subscription-leak.component'; +import { ConfigCacheComponent, CONFIG_CACHE_META } from './config-cache/config-cache.component'; +import { ScenarioDescriptor } from './scenario.model'; + +/** + * Реестр всех сценариев. Порядок — порядок в сайдбаре. + * Чтобы добавить новый сценарий: + * 1) создать папку в `scenarios/` + * 2) экспортировать META + Component + * 3) дописать сюда + */ +export const SCENARIOS: ReadonlyArray = [ + { meta: LIVE_SEARCH_META, component: LiveSearchComponent }, + { meta: FAST_NAVIGATION_META, component: FastNavigationComponent }, + { meta: FORM_SUBMIT_META, component: FormSubmitComponent }, + { meta: PARALLEL_REQUESTS_META, component: ParallelRequestsComponent }, + { meta: LOADING_DATA_ERROR_META, component: LoadingDataErrorComponent }, + { meta: FILTERS_URL_META, component: FiltersUrlComponent }, + { meta: SUBSCRIPTION_LEAK_META, component: SubscriptionLeakComponent }, + { meta: CONFIG_CACHE_META, component: ConfigCacheComponent }, +]; diff --git a/lessons/rxjs/demo/src/app/scenarios/live-search/live-search.component.spec.ts b/lessons/rxjs/demo/src/app/scenarios/live-search/live-search.component.spec.ts new file mode 100644 index 000000000..3c2b8272d --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/live-search/live-search.component.spec.ts @@ -0,0 +1,82 @@ +import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { Subject, throwError } from 'rxjs'; +import { EventLogService } from '../../core/event-log.service'; +import { TRANSPORT, SearchResult } from '../../core/transport'; +import { LiveSearchComponent } from './live-search.component'; + +describe('LiveSearchComponent', () => { + let fixture: ComponentFixture; + let component: LiveSearchComponent; + let search$: Subject; + + const fakeTransport = { + search: jest.fn(), + }; + + beforeEach(async () => { + jest.clearAllMocks(); + search$ = new Subject(); + fakeTransport.search.mockReturnValue(search$); + + await TestBed.configureTestingModule({ + imports: [LiveSearchComponent], + providers: [{ provide: TRANSPORT, useValue: fakeTransport }, EventLogService], + }) + // Не рендерим шаблон — нам важна только логика подписки. + .overrideComponent(LiveSearchComponent, { set: { template: '
    ' } }) + .compileComponents(); + + fixture = TestBed.createComponent(LiveSearchComponent); + component = fixture.componentInstance; + }); + + it('switchMap отменяет предыдущий запрос, если транспорт эмитит после нового', fakeAsync(() => { + // Эмулируем два вызова transport.search, второй перебивает первый. + const firstCall = new Subject(); + const secondCall = new Subject(); + fakeTransport.search + .mockReturnValueOnce(firstCall) + .mockReturnValueOnce(secondCall); + + // Создаём input элементы руками, чтобы дёрнуть pipe. + const inputEl = document.createElement('input'); + component['reaRef'] = { nativeElement: inputEl } as never; + component.ngAfterViewInit(); + + // Первый «ввод» — debounce 300мс. + inputEl.value = 'rx'; + inputEl.dispatchEvent(new Event('input')); + tick(300); + expect(fakeTransport.search).toHaveBeenCalledTimes(1); + expect(fakeTransport.search.mock.calls[0]?.[0]).toEqual({ term: 'rx' }); + + // Второй «ввод» ДО ответа первого — должен перебить (switchMap отписывается от первого). + inputEl.value = 'rxjs'; + inputEl.dispatchEvent(new Event('input')); + tick(300); + expect(fakeTransport.search).toHaveBeenCalledTimes(2); + expect(fakeTransport.search.mock.calls[1]?.[0]).toEqual({ term: 'rxjs' }); + + // Ответ на ПЕРВЫЙ (отменённый) приходит после второго — не должен попасть в результат. + firstCall.next({ term: 'rx', items: [], echoedAt: 0 }); + firstCall.complete(); + tick(); + + // Ответ на второй — должен попасть. + secondCall.next({ term: 'rxjs', items: [{ id: 1, name: 'a', tag: 'hot' }], echoedAt: 1 }); + secondCall.complete(); + tick(); + + expect(component.reaResult()?.term).toBe('rxjs'); + })); + + it('error из transport попадает в impResult = null', () => { + // Императивный путь — без afterViewInit, сразу дёргаем обработчик. + const err = new Error('boom'); + fakeTransport.search.mockReturnValue(throwError(() => err)); + + component.onImpInput('fail'); + + expect(component.impResult()).toBeNull(); + }); +}); diff --git a/lessons/rxjs/demo/src/app/scenarios/live-search/live-search.component.ts b/lessons/rxjs/demo/src/app/scenarios/live-search/live-search.component.ts new file mode 100644 index 000000000..1fa6a6ea8 --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/live-search/live-search.component.ts @@ -0,0 +1,148 @@ +import { CommonModule } from '@angular/common'; +import { + AfterViewInit, + ChangeDetectionStrategy, + Component, + DestroyRef, + ElementRef, + ViewChild, + inject, + signal, +} from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { + fromEvent, + of, + debounceTime, + distinctUntilChanged, + finalize, + map, + switchMap, +} from 'rxjs'; +import { catchError } from 'rxjs/operators'; + +import { EventLogService } from '../../core/event-log.service'; +import { SearchResult, TRANSPORT } from '../../core/transport'; +import { SplitViewComponent } from '../../shared/split-view/split-view.component'; +import { ScenarioMeta } from '../scenario.model'; + +export const LIVE_SEARCH_META: ScenarioMeta = { + id: 'live-search', + name: 'Live search', + lectureRefs: ['8.1', '5 (switchMap)'], + operators: ['debounceTime', 'distinctUntilChanged', 'switchMap'], + summary: + 'Поиск по вводу: ждём паузу, убираем дубли, отменяем устаревшие запросы.', +}; + +/** + * Live search: два подхода. + * - imperative: на каждый input — подписка на transport.search, ручной флаг + * актуального запроса. Если пришёл устаревший ответ — игнорируем. + * - reactive: fromEvent(input) → debounceTime → distinctUntilChanged → switchMap. + * switchMap сам отменяет старый inner Observable — никаких ручных флагов. + */ +@Component({ + selector: 'app-live-search', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [CommonModule, SplitViewComponent], + template: ` + +
    + + @if (impResult(); as r) { +

    imperative: {{ r.term }} → {{ r.items.length }} items

    + } +
    +
    + + @if (reaResult(); as r) { +

    reactive: {{ r.term }} → {{ r.items.length }} items

    + } +
    +
    + `, +}) +export class LiveSearchComponent implements AfterViewInit { + private readonly transport = inject(TRANSPORT); + private readonly log = inject(EventLogService); + private readonly destroyRef = inject(DestroyRef); + + @ViewChild('imp', { static: true }) private impRef!: ElementRef; + @ViewChild('rea', { static: true }) private reaRef!: ElementRef; + + protected readonly impResult = signal(null); + protected readonly reaResult = signal(null); + + // Императивный «seq» — имитация AbortController: помнит, какой запрос актуален. + private impSeq = 0; + + ngAfterViewInit(): void { + // ============ REACTIVE ============ + fromEvent(this.reaRef.nativeElement, 'input') + .pipe( + map((event) => (event.target as HTMLInputElement).value), + debounceTime(300), + distinctUntilChanged(), + switchMap((term) => { + this.log.push('reactive', 'event', `valueChanges "${term}"`); + return this.transport.search({ term }, { failRate: 0.3 }).pipe( + finalize(() => this.log.push('reactive', 'info', `inner teardown "${term}"`)), + ); + }), + takeUntilDestroyed(this.destroyRef), + ) + .subscribe({ + next: (result) => { + this.log.push('reactive', 'next', `${result.term}: ${result.items.length} items`); + this.reaResult.set(result); + }, + error: (err: Error) => { + this.log.push('reactive', 'error', err.message); + this.reaResult.set(null); + }, + }); + } + + /** + * Императивный обработчик: руками запускаем запрос и помним его seq. + * Если ввод успел измениться — старый ответ просто игнорируем. + */ + protected onImpInput(value: string): void { + const mySeq = ++this.impSeq; + this.log.push('imperative', 'event', `input "${value}" (#${mySeq})`); + + this.transport + .search({ term: value }, { failRate: 0.3 }) + .pipe( + catchError((err: Error) => { + if (mySeq === this.impSeq) { + this.log.push('imperative', 'error', err.message); + this.impResult.set(null); + } else { + this.log.push('imperative', 'cancelled', `ошибка устаревшего #${mySeq}`); + } + return of(null); + }), + ) + .subscribe((result) => { + if (mySeq !== this.impSeq) { + this.log.push('imperative', 'cancelled', `ответ #${mySeq} устарел`); + return; + } + if (result) { + this.log.push('imperative', 'next', `${result.term}: ${result.items.length} items`); + this.impResult.set(result); + } + }); + } +} \ No newline at end of file diff --git a/lessons/rxjs/demo/src/app/scenarios/loading-data-error/loading-data-error.component.spec.ts b/lessons/rxjs/demo/src/app/scenarios/loading-data-error/loading-data-error.component.spec.ts new file mode 100644 index 000000000..57970a797 --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/loading-data-error/loading-data-error.component.spec.ts @@ -0,0 +1,49 @@ +import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { defer, of, throwError } from 'rxjs'; +import { EventLogService } from '../../core/event-log.service'; +import { TRANSPORT } from '../../core/transport'; +import { LoadingDataErrorComponent } from './loading-data-error.component'; + +describe('LoadingDataErrorComponent', () => { + let fixture: ComponentFixture; + let component: LoadingDataErrorComponent; + const fakeTransport = { getItem: jest.fn() }; + + beforeEach(async () => { + jest.clearAllMocks(); + await TestBed.configureTestingModule({ + imports: [LoadingDataErrorComponent], + providers: [{ provide: TRANSPORT, useValue: fakeTransport }, EventLogService], + }) + .overrideComponent(LoadingDataErrorComponent, { set: { template: '
    ' } }) + .compileComponents(); + fixture = TestBed.createComponent(LoadingDataErrorComponent); + component = fixture.componentInstance; + }); + + it('reactive: успех после 2 retry → state.data', fakeAsync(() => { + let attempts = 0; + fakeTransport.getItem.mockReturnValue( + defer(() => { + attempts += 1; + return attempts < 3 + ? throwError(() => new Error(`e${attempts}`)) + : of({ id: 7, name: 'OK', tag: 'hot' }); + }), + ); + + component.reaClick$.next(); + tick(1000); + + expect(component.reaState().kind).toBe('data'); + })); + + it('reactive: 3 ошибки подряд → state.error', fakeAsync(() => { + fakeTransport.getItem.mockReturnValue(throwError(() => new Error('boom'))); + + component.reaClick$.next(); + tick(1000); + + expect(component.reaState().kind).toBe('error'); + })); +}); diff --git a/lessons/rxjs/demo/src/app/scenarios/loading-data-error/loading-data-error.component.ts b/lessons/rxjs/demo/src/app/scenarios/loading-data-error/loading-data-error.component.ts new file mode 100644 index 000000000..8bf346684 --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/loading-data-error/loading-data-error.component.ts @@ -0,0 +1,138 @@ +import { CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + DestroyRef, + inject, + signal, +} from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { + Subject, + catchError, + map, + mergeMap, + of, + retry, + startWith, +} from 'rxjs'; + +import { EventLogService } from '../../core/event-log.service'; +import { ItemPayload, TRANSPORT } from '../../core/transport'; +import { SplitViewComponent } from '../../shared/split-view/split-view.component'; +import { ScenarioMeta } from '../scenario.model'; + +export const LOADING_DATA_ERROR_META: ScenarioMeta = { + id: 'loading-data-error', + name: 'Loading / data / error', + lectureRefs: ['8.5', '4', '6'], + operators: ['startWith', 'catchError', 'retry'], + summary: + 'Состояния loading/data/error. retry + catchError не дают потоку умереть, startWith показывает loading сразу.', +}; + +interface ViewState { + kind: 'loading' | 'data' | 'error'; + item?: ItemPayload; + message?: string; +} + +/** + * Демо: одна и та же задача — загрузить item. Императивный путь — три состояния + * вручную (set + subscribe + set + subscribe). Реактивный — поток ViewState: + * при каждом клике эмитим loading, дальше retry → catchError → data/error. + */ +@Component({ + selector: 'app-loading-data-error', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [CommonModule, SplitViewComponent], + template: ` + +
    + + @let imp = impState(); + @if (imp.kind === 'loading') { + loading… + } @else if (imp.kind === 'data' && imp.item; as it) { + imp data: {{ it.name }} + } @else if (imp.kind === 'error') { + imp error: {{ imp.message }} + } +
    +
    + + @let rea = reaState(); + @if (rea.kind === 'loading') { + loading… + } @else if (rea.kind === 'data' && rea.item; as it) { + rea data: {{ it.name }} + } @else if (rea.kind === 'error') { + rea error: {{ rea.message }} + } +
    +
    + `, +}) +export class LoadingDataErrorComponent { + private readonly transport = inject(TRANSPORT); + private readonly log = inject(EventLogService); + private readonly destroyRef = inject(DestroyRef); + + protected readonly impState = signal({ kind: 'loading' }); + protected readonly reaState = signal({ kind: 'loading' }); + protected readonly reaClick$ = new Subject(); + + constructor() { + this.reaClick$ + .pipe( + mergeMap(() => + this.transport.getItem(7, { failRate: 0.7, delayMs: 300 }).pipe( + // retry/catchError — ВНУТРИ getItem, чтобы не уронить outer stream. + retry({ count: 2, delay: 500 }), + catchError((err: Error) => of({ kind: 'error', message: err.message })), + // data case: + map((value) => + isItem(value) + ? ({ kind: 'data', item: value } as ViewState) + : value, + ), + startWith({ kind: 'loading' }), + ), + ), + takeUntilDestroyed(this.destroyRef), + ) + .subscribe((state) => { + this.reaState.set(state); + this.log.push( + 'reactive', + state.kind === 'error' ? 'error' : 'next', + state.kind, + ); + }); + } + + protected impLoad(): void { + this.impState.set({ kind: 'loading' }); + this.log.push('imperative', 'event', 'imp load'); + this.transport + .getItem(7, { failRate: 0.7, delayMs: 300 }) + .subscribe({ + next: (item) => { + this.impState.set({ kind: 'data', item }); + this.log.push('imperative', 'next', item.name); + }, + error: (err: Error) => { + this.impState.set({ kind: 'error', message: err.message }); + this.log.push('imperative', 'error', err.message); + }, + }); + } +} + +function isItem(v: ItemPayload | ViewState): v is ItemPayload { + return (v as ItemPayload).id !== undefined && (v as ItemPayload).name !== undefined; +} diff --git a/lessons/rxjs/demo/src/app/scenarios/parallel-requests/parallel-requests.component.spec.ts b/lessons/rxjs/demo/src/app/scenarios/parallel-requests/parallel-requests.component.spec.ts new file mode 100644 index 000000000..dcd29ad4b --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/parallel-requests/parallel-requests.component.spec.ts @@ -0,0 +1,40 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { EventLogService } from '../../core/event-log.service'; +import { TRANSPORT } from '../../core/transport'; +import { ParallelRequestsComponent } from './parallel-requests.component'; + +describe('ParallelRequestsComponent', () => { + let fixture: ComponentFixture; + let component: ParallelRequestsComponent; + const fakeTransport = { + getItem: jest.fn(), + }; + + beforeEach(async () => { + jest.clearAllMocks(); + fakeTransport.getItem.mockImplementation((id: number) => + of({ id, name: `Item ${id}`, tag: 'hot' }), + ); + await TestBed.configureTestingModule({ + imports: [ParallelRequestsComponent], + providers: [{ provide: TRANSPORT, useValue: fakeTransport }, EventLogService], + }) + .overrideComponent(ParallelRequestsComponent, { set: { template: '
    ' } }) + .compileComponents(); + fixture = TestBed.createComponent(ParallelRequestsComponent); + component = fixture.componentInstance; + }); + + it('forkJoin вызывает transport для каждого id и дожидается всех', () => { + component.reaFork(); + expect(fakeTransport.getItem).toHaveBeenCalledTimes(4); + expect(component.reaCount()).toBe(4); + }); + + it('mergeMap вызывает transport для каждого id', () => { + component.reaMerge(); + expect(fakeTransport.getItem).toHaveBeenCalledTimes(4); + expect(component.reaCount()).toBe(4); + }); +}); diff --git a/lessons/rxjs/demo/src/app/scenarios/parallel-requests/parallel-requests.component.ts b/lessons/rxjs/demo/src/app/scenarios/parallel-requests/parallel-requests.component.ts new file mode 100644 index 000000000..12318c6d5 --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/parallel-requests/parallel-requests.component.ts @@ -0,0 +1,120 @@ +import { CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + DestroyRef, + inject, + signal, +} from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { from, mergeMap, forkJoin } from 'rxjs'; + +import { EventLogService } from '../../core/event-log.service'; +import { ItemPayload, TRANSPORT } from '../../core/transport'; +import { SplitViewComponent } from '../../shared/split-view/split-view.component'; +import { ScenarioMeta } from '../scenario.model'; + +export const PARALLEL_REQUESTS_META: ScenarioMeta = { + id: 'parallel-requests', + name: 'Параллельные запросы', + lectureRefs: ['5', '6 (mergeMap/forkJoin)'], + operators: ['mergeMap', 'forkJoin'], + summary: + 'Загрузить N ресурсов параллельно. mergeMap — поток по мере готовности, forkJoin — дождаться всех.', +}; + +const IDS = [1, 2, 3, 4] as const; + +/** + * Демо: императивный путь — Promise.all на массиве промисов (либо серия вложенных + * подписок). Реактивный — forkJoin для «все сразу и дождаться» и mergeMap для + * «поток результатов по мере готовности». + */ +@Component({ + selector: 'app-parallel-requests', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [CommonModule, SplitViewComponent], + template: ` + +
    + +

    imp items: {{ impCount() }}

    +
    +
    + + +

    rea items: {{ reaCount() }}

    +
    +
    + `, +}) +export class ParallelRequestsComponent { + private readonly transport = inject(TRANSPORT); + private readonly log = inject(EventLogService); + private readonly destroyRef = inject(DestroyRef); + + protected readonly impCount = signal(0); + protected readonly reaCount = signal(0); + + constructor() { + // mergeMap — обработать поток «по мере готовности», без ожидания всех. + // Показываем, что mergeMap умеет работать с cold Observable. + // (pipe ниже — пример; запускается по кнопке) + } + + /** + * Императивно: Promise.all — оборачиваем каждый Observable в Promise через + * «firstValueFrom-эквивалент». Здесь показан явный «промис-стиль». + */ + protected impRun(): void { + this.impCount.set(0); + this.log.push('imperative', 'event', 'Promise.all start'); + const promises = IDS.map((id) => { + return new Promise((resolve, reject) => { + this.transport.getItem(id, { delayMs: 100 + id * 200 }).subscribe({ + next: (item) => { + this.impCount.update((n) => n + 1); + this.log.push('imperative', 'next', `#${item.id} ready`); + resolve(item); + }, + error: (err: Error) => { + this.log.push('imperative', 'error', err.message); + reject(err); + }, + }); + }); + }); + Promise.all(promises) + .then(() => this.log.push('imperative', 'success', 'Promise.all resolved')) + .catch((err) => this.log.push('imperative', 'error', err.message)); + } + + protected reaFork(): void { + this.reaCount.set(0); + this.log.push('reactive', 'event', 'forkJoin start'); + forkJoin(IDS.map((id) => this.transport.getItem(id, { delayMs: 100 + id * 200 }))) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe((items) => { + this.reaCount.set(items.length); + this.log.push('reactive', 'success', `forkJoin: ${items.length} items`); + }); + } + + protected reaMerge(): void { + this.reaCount.set(0); + this.log.push('reactive', 'event', 'mergeMap start'); + from(IDS) + .pipe( + mergeMap((id) => this.transport.getItem(id, { delayMs: 100 + id * 200 })), + takeUntilDestroyed(this.destroyRef), + ) + .subscribe((item) => { + this.reaCount.update((n) => n + 1); + this.log.push('reactive', 'next', `#${item.id} ready`); + }); + } +} diff --git a/lessons/rxjs/demo/src/app/scenarios/scenario.model.ts b/lessons/rxjs/demo/src/app/scenarios/scenario.model.ts new file mode 100644 index 000000000..3f6f7d1c8 --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/scenario.model.ts @@ -0,0 +1,22 @@ +import { Type } from '@angular/core'; + +export type LaneKind = 'imperative' | 'reactive'; + +/** + * Метаданные сценария: описание + связь с разделами лекции. + */ +export interface ScenarioMeta { + readonly id: string; + readonly name: string; + readonly lectureRefs: ReadonlyArray; + readonly operators: ReadonlyArray; + readonly summary: string; +} + +/** + * Контракт сценария: standalone-компонент + метаданные для сайдбара. + */ +export interface ScenarioDescriptor { + readonly meta: ScenarioMeta; + readonly component: Type; +} diff --git a/lessons/rxjs/demo/src/app/scenarios/subscription-leak/subscription-leak.component.spec.ts b/lessons/rxjs/demo/src/app/scenarios/subscription-leak/subscription-leak.component.spec.ts new file mode 100644 index 000000000..132b31590 --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/subscription-leak/subscription-leak.component.spec.ts @@ -0,0 +1,43 @@ +import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { EventLogService } from '../../core/event-log.service'; +import { SubscriptionLeakComponent } from './subscription-leak.component'; + +describe('SubscriptionLeakComponent', () => { + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SubscriptionLeakComponent], + providers: [EventLogService], + }) + .overrideComponent(SubscriptionLeakComponent, { set: { template: '
    ' } }) + .compileComponents(); + }); + + afterEach(() => { + if (!fixture) return; + const component = fixture.componentInstance; + fixture.destroy(); + (component as unknown as { impSub?: { unsubscribe: () => void } }).impSub?.unsubscribe(); + }); + + it('создаётся без ошибок', () => { + fixture = TestBed.createComponent(SubscriptionLeakComponent); + expect(fixture.componentInstance).toBeTruthy(); + }); + + it('после destroy имплементарный поток продолжает тикать, а reactive — нет', fakeAsync(() => { + fixture = TestBed.createComponent(SubscriptionLeakComponent); + const component = fixture.componentInstance; + fixture.detectChanges(); + tick(500); + + const reactiveTicksBeforeDestroy = component.reaTicks(); + expect(component.impTicks()).toBeGreaterThan(0); + fixture.destroy(); + tick(501); + + expect(component.impLeaks()).toBeGreaterThan(0); + expect(component.reaTicks()).toBe(reactiveTicksBeforeDestroy); + })); +}); diff --git a/lessons/rxjs/demo/src/app/scenarios/subscription-leak/subscription-leak.component.ts b/lessons/rxjs/demo/src/app/scenarios/subscription-leak/subscription-leak.component.ts new file mode 100644 index 000000000..98c3e9501 --- /dev/null +++ b/lessons/rxjs/demo/src/app/scenarios/subscription-leak/subscription-leak.component.ts @@ -0,0 +1,105 @@ +import { CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + DestroyRef, + OnDestroy, + inject, + signal, +} from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; +import { Subscription, interval, map } from 'rxjs'; + +import { EventLogService } from '../../core/event-log.service'; +import { SplitViewComponent } from '../../shared/split-view/split-view.component'; +import { ScenarioMeta } from '../scenario.model'; + +export const SUBSCRIPTION_LEAK_META: ScenarioMeta = { + id: 'subscription-leak', + name: 'Утечка подписок', + lectureRefs: ['2', '7 (takeUntilDestroyed)'], + operators: ['takeUntilDestroyed', 'AsyncPipe'], + summary: + 'Долгоживущий поток interval. Без очистки — тик продолжается после уничтожения компонента. takeUntilDestroyed — гарантированная отписка.', +}; + +/** + * Демо: показывает, что interval без отписки продолжает «тикать» после ngOnDestroy. + * Реактивная колонка использует takeUntilDestroyed(inject(DestroyRef)) — best practice Angular 16+. + * + * Чтобы реально увидеть «утечку», в императивной колонке мы переживаем жизненный + * цикл: при destroy копим счётчик «лишних» тиков. Для UI используем сигнал + * leakTicks. Это синхронный счётчик, который обновляется через setTimeout (для + * наглядности — но в реальном приложении leak — это setInterval в window). + */ +@Component({ + selector: 'app-subscription-leak', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [CommonModule, SplitViewComponent], + template: ` + +
    +

    imp тиков: {{ impTicks() }}

    +

    imp «утекших» тиков: {{ impLeaks() }}

    + + Императивный путь: сохраняем Subscription, отписываемся вручную. Здесь — нарочно + «забываем», чтобы было видно, что тики продолжаются после destroy. + +
    +
    +

    rea тиков: {{ reaTicks() }}

    +

    rea «утечек» после destroy: 0

    + + takeUntilDestroyed(destroyRef) автоматически отписывается при уничтожении компонента. + +
    +
    + `, +}) +export class SubscriptionLeakComponent implements OnDestroy { + private readonly log = inject(EventLogService); + + protected readonly impTicks = signal(0); + protected readonly impLeaks = signal(0); + protected readonly reaTicks = signal(0); + + // Намеренно НЕ отписываемся вручную — для демо «утечки». + // private readonly impSub: Subscription; + private readonly impSub: Subscription; + private destroyed = false; + + constructor() { + // ============ IMPERATIVE: ручной Subscription, НЕ отписываемся ============ + this.impSub = interval(500) + .pipe(map((n) => `imp tick #${n}`)) + .subscribe((label) => { + this.impTicks.update((n) => n + 1); + if (this.destroyed) { + this.impLeaks.update((n) => n + 1); + this.log.push('imperative', 'error', `${label} (ПОСЛЕ destroy — УТЕЧКА)`); + } else { + this.log.push('imperative', 'next', label); + } + }); + + // ============ REACTIVE: takeUntilDestroyed ============ + interval(500) + .pipe( + map((n) => `rea tick #${n}`), + takeUntilDestroyed(inject(DestroyRef)), + ) + .subscribe((label) => { + this.reaTicks.update((n) => n + 1); + this.log.push('reactive', 'next', label); + }); + } + + ngOnDestroy(): void { + this.destroyed = true; + // В императивной колонке НЕ вызываем this.impSub.unsubscribe() — для демо. + } +} diff --git a/lessons/rxjs/demo/src/app/shared/event-log/event-log.component.ts b/lessons/rxjs/demo/src/app/shared/event-log/event-log.component.ts new file mode 100644 index 000000000..df61284c1 --- /dev/null +++ b/lessons/rxjs/demo/src/app/shared/event-log/event-log.component.ts @@ -0,0 +1,56 @@ +import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; +import { EventLogService } from '../../core/event-log.service'; + +@Component({ + selector: 'app-event-log', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` +
    +
    + Event log + +
    +
    + @if (log.events().length === 0) { +
    Пока тихо. Подёргайте сценарий.
    + } @else { + @for (event of log.events(); track event.id) { +
    + {{ formatTime(event.timestamp) }} + + {{ event.lane }} + + {{ event.kind }} + {{ event.label }} +
    + } + } +
    +
    + `, +}) +export class EventLogComponent { + protected readonly log = inject(EventLogService); + + protected formatTime(ts: number): string { + const d = new Date(ts); + return `${pad2(d.getHours())}:${pad2(d.getMinutes())}:${pad2(d.getSeconds())}.${pad3(d.getMilliseconds())}`; + } +} + +function pad2(n: number): string { + return n < 10 ? `0${n}` : `${n}`; +} + +function pad3(n: number): string { + if (n < 10) return `00${n}`; + if (n < 100) return `0${n}`; + return `${n}`; +} diff --git a/lessons/rxjs/demo/src/app/shared/scenario-shell/scenario-shell.component.ts b/lessons/rxjs/demo/src/app/shared/scenario-shell/scenario-shell.component.ts new file mode 100644 index 000000000..b7e6a2900 --- /dev/null +++ b/lessons/rxjs/demo/src/app/shared/scenario-shell/scenario-shell.component.ts @@ -0,0 +1,23 @@ +import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; +import { EventLogService } from '../../core/event-log.service'; +import { EventLogComponent } from '../event-log/event-log.component'; + +/** + * Хост-компонент сценария: предоставляет локальный EventLogService (scope = сценарий) + * и рендерит его внизу. Конкретный сценарий передаёт свой контент через ng-content. + */ +@Component({ + selector: 'app-scenario-shell', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + providers: [EventLogService], + imports: [EventLogComponent], + template: ` + + + `, +}) +export class ScenarioShellComponent { + // EventLogService провайдится локально — каждый сценарий получает свой экземпляр. + protected readonly log = inject(EventLogService); +} diff --git a/lessons/rxjs/demo/src/app/shared/split-view/split-view.component.ts b/lessons/rxjs/demo/src/app/shared/split-view/split-view.component.ts new file mode 100644 index 000000000..97902e61a --- /dev/null +++ b/lessons/rxjs/demo/src/app/shared/split-view/split-view.component.ts @@ -0,0 +1,35 @@ +import { ChangeDetectionStrategy, Component, input } from '@angular/core'; + +/** + * Двухколоночный layout: слева «без операторов», справа «с операторами». + * Контент передаётся через content projection в слоты `#imperative` и `#reactive`. + */ +@Component({ + selector: 'app-split-view', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + template: ` +
    +
    +
    + {{ imperativeTitle() }} +
    +
    + +
    +
    +
    +
    + {{ reactiveTitle() }} +
    +
    + +
    +
    +
    + `, +}) +export class SplitViewComponent { + readonly imperativeTitle = input('Без операторов'); + readonly reactiveTitle = input('С операторами'); +} diff --git a/lessons/rxjs/demo/src/assets/.gitkeep b/lessons/rxjs/demo/src/assets/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/lessons/rxjs/demo/src/index.html b/lessons/rxjs/demo/src/index.html new file mode 100644 index 000000000..e4adc23bc --- /dev/null +++ b/lessons/rxjs/demo/src/index.html @@ -0,0 +1,13 @@ + + + + + RxJS Playground + + + + + + + + diff --git a/lessons/rxjs/demo/src/main.ts b/lessons/rxjs/demo/src/main.ts new file mode 100644 index 000000000..f3a7223da --- /dev/null +++ b/lessons/rxjs/demo/src/main.ts @@ -0,0 +1,7 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { AppComponent } from './app/app.component'; +import { appConfig } from './app/app.config'; + +bootstrapApplication(AppComponent, appConfig).catch((err) => + console.error(err), +); diff --git a/lessons/rxjs/demo/src/styles.scss b/lessons/rxjs/demo/src/styles.scss new file mode 100644 index 000000000..445e2f242 --- /dev/null +++ b/lessons/rxjs/demo/src/styles.scss @@ -0,0 +1,262 @@ +/* Палитра из лекции: + cyan #22D3EE — Observable / поток + violet #A78BFA — оператор + green #34D399 — событие пользователя + coral #FB7185 — ошибка + amber #FBBF24 — успех +*/ + +:root { + --color-bg: #0b1020; + --color-bg-elev: #131a33; + --color-bg-elev-2: #1b2347; + --color-border: #2a335c; + --color-text: #e5e7f0; + --color-text-dim: #8a93b8; + --color-cyan: #22d3ee; + --color-violet: #a78bfa; + --color-green: #34d399; + --color-coral: #fb7185; + --color-amber: #fbbf24; + --color-imperative: #fb7185; + --color-reactive: #22d3ee; + + --radius-sm: 4px; + --radius-md: 8px; + --radius-lg: 12px; + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.25); + --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.35); + + font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, + sans-serif; + font-size: 14px; + line-height: 1.5; + color-scheme: dark; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html, +body { + height: 100%; + margin: 0; + background: var(--color-bg); + color: var(--color-text); +} + +button { + font: inherit; + color: inherit; + background: var(--color-bg-elev-2); + border: 1px solid var(--color-border); + border-radius: var(--radius-sm); + padding: 6px 12px; + cursor: pointer; + transition: background 0.15s, border-color 0.15s; + + &:hover:not(:disabled) { + background: var(--color-border); + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } +} + +input, +select { + font: inherit; + color: inherit; + background: var(--color-bg); + border: 1px solid var(--color-border); + border-radius: var(--radius-sm); + padding: 6px 10px; + outline: none; + + &:focus { + border-color: var(--color-cyan); + } +} + +code, +pre { + font-family: 'JetBrains Mono', 'SF Mono', Menlo, Consolas, monospace; + font-size: 12.5px; +} + +pre { + background: var(--color-bg); + border: 1px solid var(--color-border); + border-radius: var(--radius-sm); + padding: 10px 12px; + overflow: auto; + margin: 0; +} + +.app-shell { + display: grid; + grid-template-rows: auto 1fr; + height: 100vh; +} + +.scenario-grid { + display: grid; + grid-template-columns: 280px 1fr; + min-height: 0; +} + +.sidebar { + background: var(--color-bg-elev); + border-right: 1px solid var(--color-border); + padding: 16px; + overflow-y: auto; +} + +.main-area { + display: grid; + grid-template-rows: auto 1fr auto; + min-height: 0; + padding: 16px; + gap: 16px; +} + +.split-view { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; + min-height: 0; + + @media (max-width: 960px) { + grid-template-columns: 1fr; + } +} + +.lane { + background: var(--color-bg-elev); + border: 1px solid var(--color-border); + border-radius: var(--radius-md); + display: flex; + flex-direction: column; + min-height: 0; + overflow: hidden; + + &--imperative { + border-top: 2px solid var(--color-imperative); + } + + &--reactive { + border-top: 2px solid var(--color-reactive); + } + + &__header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 8px 12px; + background: var(--color-bg-elev-2); + border-bottom: 1px solid var(--color-border); + font-weight: 600; + } + + &__body { + padding: 12px; + overflow: auto; + flex: 1; + min-height: 0; + } +} + +.badge { + display: inline-flex; + align-items: center; + gap: 4px; + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.04em; + padding: 2px 8px; + border-radius: 999px; + + &--cyan { + background: rgba(34, 211, 238, 0.15); + color: var(--color-cyan); + } + &--violet { + background: rgba(167, 139, 250, 0.15); + color: var(--color-violet); + } + &--green { + background: rgba(52, 211, 153, 0.15); + color: var(--color-green); + } + &--coral { + background: rgba(251, 113, 133, 0.15); + color: var(--color-coral); + } + &--amber { + background: rgba(251, 191, 36, 0.15); + color: var(--color-amber); + } +} + +.event-log { + background: var(--color-bg-elev); + border: 1px solid var(--color-border); + border-radius: var(--radius-md); + height: 200px; + display: flex; + flex-direction: column; + min-height: 0; + + &__header { + padding: 8px 12px; + border-bottom: 1px solid var(--color-border); + display: flex; + align-items: center; + justify-content: space-between; + background: var(--color-bg-elev-2); + border-top-left-radius: var(--radius-md); + border-top-right-radius: var(--radius-md); + } + + &__list { + flex: 1; + overflow-y: auto; + padding: 8px 12px; + font-family: 'JetBrains Mono', 'SF Mono', Menlo, Consolas, monospace; + font-size: 12px; + line-height: 1.6; + } + + &__empty { + color: var(--color-text-dim); + font-style: italic; + } +} + +.event-row { + display: grid; + grid-template-columns: 80px 80px 90px 1fr; + gap: 8px; + align-items: baseline; + + &__time { + color: var(--color-text-dim); + } + + &__lane { + font-weight: 600; + } + + &__lane--imperative { + color: var(--color-imperative); + } + &__lane--reactive { + color: var(--color-reactive); + } +} diff --git a/lessons/rxjs/demo/src/test-setup.ts b/lessons/rxjs/demo/src/test-setup.ts new file mode 100644 index 000000000..c646a73f5 --- /dev/null +++ b/lessons/rxjs/demo/src/test-setup.ts @@ -0,0 +1,4 @@ +import '@testing-library/jest-dom'; +import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; + +setupZoneTestEnv(); \ No newline at end of file diff --git a/lessons/rxjs/demo/tsconfig.app.json b/lessons/rxjs/demo/tsconfig.app.json new file mode 100644 index 000000000..5b9d3c5ec --- /dev/null +++ b/lessons/rxjs/demo/tsconfig.app.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"] +} diff --git a/lessons/rxjs/demo/tsconfig.json b/lessons/rxjs/demo/tsconfig.json new file mode 100644 index 000000000..60af11028 --- /dev/null +++ b/lessons/rxjs/demo/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "experimentalDecorators": true, + "moduleResolution": "bundler", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": ["ES2022", "dom"] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/lessons/rxjs/demo/tsconfig.spec.json b/lessons/rxjs/demo/tsconfig.spec.json new file mode 100644 index 000000000..992fd72aa --- /dev/null +++ b/lessons/rxjs/demo/tsconfig.spec.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "module": "commonjs", + "types": ["jest", "node", "@testing-library/jest-dom"], + "esModuleInterop": true + }, + "include": [ + "jest.config.ts", + "src/test-setup.ts", + "src/**/*.spec.ts", + "src/**/*.test.ts", + "src/**/*.d.ts" + ] +} diff --git "a/lessons/rxjs/lecture/RxJS \342\200\224 \320\233\320\265\320\272\321\206\320\270\321\217 (Markdown).md" "b/lessons/rxjs/lecture/RxJS \342\200\224 \320\233\320\265\320\272\321\206\320\270\321\217 (Markdown).md" index fd0cedb37..5cf1cc89e 100644 --- "a/lessons/rxjs/lecture/RxJS \342\200\224 \320\233\320\265\320\272\321\206\320\270\321\217 (Markdown).md" +++ "b/lessons/rxjs/lecture/RxJS \342\200\224 \320\233\320\265\320\272\321\206\320\270\321\217 (Markdown).md" @@ -48,11 +48,11 @@ UI — это множество событий во времени, а не о | | Promise | Observable | |---|---------|------------| | Количество значений | одно | много | -| Отмена | нет | есть | -| Выполнение | сразу (eager) | ленивое (lazy) | -| Композиция | ограничена | pipe + operators | +| Отмена | сам Promise не отменяется; для операции можно использовать `AbortController` | есть через `unsubscribe()` | +| Выполнение | уже созданный Promise начинает работу сразу | cold Observable обычно начинает работу при `subscribe()` | +| Композиция | ограничена | `pipe` + operators | -> Запомни: Promise стартует сразу. Observable стартует только при `subscribe()`. +> Запомни: подписка запускает cold Observable, но не делает ленивым уже созданный Promise. Для отложенного создания Promise используй `defer(() => from(...))`. --- @@ -92,9 +92,9 @@ Observable, Observer, Subscription, pipe, operators --- -## Observable — ленивый поток +## Observable — описание потока -Observable — это рецепт. Он ничего не делает, пока вы не подпишетесь. +Cold Observable обычно является рецептом: он создаёт работу для каждого подписчика и ничего не делает до `subscribe()`. Но это не свойство любого источника — `from(promise)` получает уже запущенный Promise, а `Subject` может быть горячим источником. ``` 1. Создание: const stream$ = of(1, 2, 3); — ничего не произошло @@ -137,14 +137,38 @@ stream$.subscribe({ --- +## Subject и BehaviorSubject + +`Subject` одновременно является Observable и Observer: компонент может отправить в него событие через `next()`, а подписчики получат это событие. + +```typescript +import { BehaviorSubject, Subject } from 'rxjs'; + +const submit$ = new Subject(); +submit$.subscribe(() => console.log('submitted')); +submit$.next(); +``` + +`BehaviorSubject` дополнительно хранит последнее значение и сразу отдаёт его новому подписчику: + +```typescript +const page$ = new BehaviorSubject(1); +page$.subscribe(page => console.log(page)); // 1 +page$.next(2); +``` + +`Subject` и `BehaviorSubject` — горячие источники: значение получает только активный подписчик. Для состояния в новых Angular-компонентах часто удобнее использовать `signal`, но Subject полезен как мост событий и для `takeUntil`. + +--- + ## Subscription и очистка -Подписка — это ресурс. Незакрытая подписка = утечка памяти. +Подписка — это ресурс. Особенно опасна подписка на долгоживущий Observable (`interval`, `fromEvent`, WebSocket, `valueChanges`), если её жизненный цикл не связан с компонентом. ``` subscribe() → Начинается приём значений unsubscribe() → Приём останавливается, ресурсы освобождаются -забыли отписаться → Утечка памяти, зомби-коллбэки +нет очистки → Возможны утечки памяти и вызовы после уничтожения компонента ``` ```typescript @@ -282,10 +306,11 @@ subscribe #2 → factory() вызывается снова → новый Observ ```typescript import { defer, of } from 'rxjs'; -const time$ = defer(() => of(Date.now())); +let requestNumber = 0; +const request$ = defer(() => of(++requestNumber)); -time$.subscribe(v => log(v)); // 1698765432000 -time$.subscribe(v => log(v)); // 1698765432100 (другое!) +request$.subscribe(v => log(v)); // 1 +request$.subscribe(v => log(v)); // 2 — фабрика вызвана снова ``` Angular: HTTP-запрос, который нужно повторять с актуальными параметрами при каждой подписке. @@ -305,8 +330,8 @@ Angular: HTTP-запрос, который нужно повторять с ак ```typescript import { throwError } from 'rxjs'; -throwError(() => 'Boom').subscribe({ - error: e => console.log(e) // 'Boom' +throwError(() => new Error('Boom')).subscribe({ + error: e => console.log(e.message) // 'Boom' }); ``` @@ -525,7 +550,15 @@ from(['a', 'a', 'b', 'b', 'a']).pipe( Angular: Фильтр `form.valueChanges`: не запускать логику, если значение не изменилось. -> Запомни: `distinctUntilChanged` сравнивает с предыдущим. Для объектов нужен компаратор. +По умолчанию значения сравниваются через `===`. Для объектов сравнивайте нужное поле: + +```typescript +results$.pipe( + distinctUntilChanged((previous, current) => previous.id === current.id) +); +``` + +> Запомни: `distinctUntilChanged` сравнивает с предыдущим значением. Для объектов нужен явный компаратор или `distinctUntilKeyChanged`. --- @@ -542,12 +575,15 @@ output: ----------------(rxjs)------------| ``` ```typescript -import { fromEvent, debounceTime } from 'rxjs'; +import { fromEvent, debounceTime, distinctUntilChanged, map } from 'rxjs'; -fromEvent(input, 'input').pipe( - debounceTime(300) +fromEvent(input, 'input').pipe( + map(event => (event.target as HTMLInputElement).value), + debounceTime(300), + distinctUntilChanged(), ).subscribe(term => search(term)); // запрос только после паузы 300мс +// В компоненте Angular добавьте takeUntilDestroyed() или используйте valueChanges. ``` Angular: Живой поиск: не отправлять запрос на каждый символ, ждать окончания ввода. @@ -836,7 +872,10 @@ ngOnInit() { ).subscribe(data => this.data = data); } -ngOnDestroy() { this.destroy$.next(); } +ngOnDestroy() { + this.destroy$.next(); + this.destroy$.complete(); +} ``` Angular: Классический паттерн Angular: `takeUntil(destroy$)` + `ngOnDestroy` для безопасной отписки. @@ -847,13 +886,16 @@ Angular: Классический паттерн Angular: `takeUntil(destroy$)` ## shareReplay() -Кэширует и переотправляет последние N значений новым подписчикам. Превращает cold Observable в warm. +Разделяет одну подписку на источник и переотправляет последние N значений новым подписчикам. Для cold Observable это позволяет не создавать отдельную работу для каждого подписчика. | | Поведение | |---|---| | Без shareReplay | Каждый subscribe → новый HTTP-запрос. N подписчиков = N запросов. | -| С shareReplay(1) | Первый subscribe → запрос. Остальные получают кэшированный результат. | -| Warm Observable | После первого подписчика — данные готовы для всех остальных мгновенно. | +| С `shareReplay({ bufferSize: 1, ... })` | Один результат сохраняется и отдаётся новым подписчикам. | +| `refCount: true` | Источник отключается, когда подписчиков не осталось. Для завершившегося HTTP результат обычно остаётся в replay-кэше. | +| `refCount: false` | Источник продолжает работать без подписчиков. Для бесконечных потоков это может удерживать ресурсы. | + +`shareReplay` — не универсальный «вечный кэш». Для live-источников заранее решите, когда кэш должен сбрасываться и кто владеет подпиской. ```typescript import { shareReplay } from 'rxjs'; @@ -1009,9 +1051,24 @@ export class MyComponent { } ``` -Angular: `takeUntilDestroyed()` — самый короткий путь к безопасной подписке в Angular 16+. +Angular: `takeUntilDestroyed()` — короткий путь к безопасной подписке в Angular 16+. -> Запомни: Если можно AsyncPipe — используйте AsyncPipe. Если нельзя — `takeUntilDestroyed()`. +Вызов без аргумента требует injection context: например, инициализации поля или конструктора. В `ngOnInit` и других обычных методах передайте `DestroyRef` явно: + +```typescript +import { DestroyRef, inject } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; + +private readonly destroyRef = inject(DestroyRef); + +ngOnInit() { + this.api.getData().pipe( + takeUntilDestroyed(this.destroyRef), + ).subscribe(); +} +``` + +> Запомни: Если можно AsyncPipe — используйте AsyncPipe. Если нельзя — `takeUntilDestroyed()` с подходящим injection context. --- @@ -1139,11 +1196,18 @@ Angular: Загрузка страницы: параллельные HTTP-зап > Запомни: `combineLatest` — для живых потоков. `forkJoin` — для завершающихся (HTTP). +Особые случаи: + +- `combineLatest` не эмитит, пока каждый источник не отправит хотя бы одно значение; +- если источник бесконечный, комбинация обычно не завершится сама — используйте `takeUntil` или `take`; +- `forkJoin` ждёт `complete` всех источников и не подходит для `interval` или WebSocket; +- ошибка одного источника завершает весь `forkJoin`, а источник без единого значения может привести к завершению без результата. + --- ## Обработка ошибок без поломки UI -`catchError` — перехват ошибки и возврат альтернативного потока. Поток не умирает. +`catchError` перехватывает ошибку и должен вернуть новый Observable. Он заменяет текущий поток, а не «оживляет» уже завершившийся источник. Положение оператора особенно важно внутри higher-order оператора. ``` http$: --------(data)----X @@ -1152,15 +1216,37 @@ safe$: ---------([])-----| ``` ```typescript +import { catchError, finalize, of, retry, startWith, throwError } from 'rxjs'; + this.http.get('/api/users').pipe( - catchError(() => of([])), // запасное значение — пустой массив - startWith([]) // начальное состояние + catchError(() => of([])), // fallback — пустой массив + startWith([]), // начальное состояние ).subscribe(users => this.users = users); ``` -Angular: HTTP-запрос упал — показать пустой список вместо красного экрана ошибки. +Если ошибку нужно передать дальше после логирования, верните `throwError`: + +```typescript +this.http.get('/api/users').pipe( + catchError(error => { + console.error('Cannot load users', error); + return throwError(() => error); + }), +); +``` + +`retry` повторяет подписку на источник, а `finalize` выполняется при успехе, ошибке или отмене: + +```typescript +this.http.get('/api/data').pipe( + retry({ count: 2, delay: 1000 }), + finalize(() => this.loading = false), +); +``` + +Angular: HTTP-запрос упал — показать fallback или передать ошибку в слой UI. Для долгоживущего внешнего потока помещайте `catchError` внутрь `switchMap`/`concatMap`, если после ошибки нужно принимать следующие события. -> Запомни: `catchError` должен вернуть Observable. `of([])` — безопасное запасное значение. +> Запомни: `catchError` должен вернуть Observable. `of([])` заменяет ошибку значением, `throwError` пробрасывает её дальше. --- @@ -1256,6 +1342,30 @@ this.api.getLive().pipe( --- +## Тестирование RxJS-потоков + +Для тестов используйте детерминированные Observable, а не реальные задержки и случайные ответы сервера. Проверяйте не только финальное значение, но и количество подписок, отмену и продолжение внешнего потока после ошибки. + +```typescript +import { map } from 'rxjs'; +import { TestScheduler } from 'rxjs/testing'; + +const scheduler = new TestScheduler((actual, expected) => { + expect(actual).toEqual(expected); +}); + +scheduler.run(({ cold, expectObservable }) => { + const source$ = cold('-a-b|'); + + expectObservable(source$.pipe(map(value => value.toUpperCase()))) + .toBe('-x-y|', { x: 'A', y: 'B' }); +}); +``` + +Для Angular-компонентов дополнительно используйте mock-сервисы и `fakeAsync`/`tick`, а не реальные HTTP-запросы. + +--- + # Раздел 9. Итоги Памятка и алгоритм выбора оператора diff --git a/lessons/rxjs/tasks/catch-error/.eslintrc.json b/lessons/rxjs/tasks/catch-error/.eslintrc.json index bf8df1428..d8dfc867e 100644 --- a/lessons/rxjs/tasks/catch-error/.eslintrc.json +++ b/lessons/rxjs/tasks/catch-error/.eslintrc.json @@ -1,35 +1,32 @@ { - "extends": ["../../../.eslintrc.json"], + "root": true, "ignorePatterns": ["!**/*"], "overrides": [ { "files": ["*.ts"], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], "rules": { "@angular-eslint/directive-selector": [ "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } + { "type": "attribute", "prefix": "app", "style": "camelCase" } ], "@angular-eslint/component-selector": [ "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } + { "type": "element", "prefix": "app", "style": "kebab-case" } ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] + } }, { "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], + "extends": [ + "plugin:@angular-eslint/template/recommended", + "plugin:@angular-eslint/template/accessibility" + ], "rules": {} } ] diff --git a/lessons/rxjs/tasks/catch-error/README.md b/lessons/rxjs/tasks/catch-error/README.md index 757ac1d15..24d7aa9b6 100644 --- a/lessons/rxjs/tasks/catch-error/README.md +++ b/lessons/rxjs/tasks/catch-error/README.md @@ -1,21 +1,25 @@ -# catchError +# Обработка ошибок: `catchError` -В этом задании мы научимся правильно обрабатывать ошибки в RxJS-потоках с помощью оператора `catchError`. +В этом задании нужно обработать ошибку внутреннего потока так, чтобы внешний поток +событий продолжил принимать новые значения. -## 0. Запуск приложения +## Запуск -Перейди в папку задачи и выполни команду: +Команды выполняй из корня репозитория: ```bash npm install npm run serve:rxjs-catch-error ``` -После запуска откроется приложение — форма с полем ввода и кнопкой **Получить**. По нажатию на кнопку приложение отправляет запрос к бесплатному API https://jsonplaceholder.typicode.com/ и показывает ответ на экране. +Если зависимости уже установлены, достаточно выполнить вторую команду. -## 1. Посмотри, как работает приложение +После запуска откроется форма с полем ввода и кнопкой **Получить**. Приложение +обращается к API `https://jsonplaceholder.typicode.com/`. -В поле ввода можно ввести одну из строк: +## Что проверить + +Введи одно из значений: - `posts` - `comments` @@ -24,21 +28,16 @@ npm run serve:rxjs-catch-error - `todos` - `users` -Нажми кнопку **Получить** — внизу появится JSON-ответ от API. - -Посмотри на код в `src/app/app.component.ts`. Видно, что в `ngOnInit` создаётся подписка на поток `submit$`, и каждое нажатие кнопки порождает HTTP-запрос через `concatMap`. - -## 2. Воспроизведи баг - -Введи в поле что-нибудь некорректное — например, `foo` или просто случайный набор символов — и нажми **Получить**. В ответе придёт ошибка `404 Not Found`. Это ожидаемо. +Нажми **Получить** и посмотри ответ. Затем введи `foo` и снова отправь форму. +Запрос завершится ошибкой `404`, это ожидаемо. -А теперь попробуй снова ввести корректное значение (например, `posts`) и нажать **Получить**. +После этого введи `posts` и отправь форму ещё раз. -🚫 Ничего не происходит. Запрос не отправляется, поле ответа не обновляется. +Из-за ошибки внешний поток `submit$` завершился, поэтому новый запрос не выполняется. -## 3. Найди причину +## Где искать причину -Открой `src/app/app.component.ts` и посмотри на `ngOnInit`: +Открой `src/app/app.component.ts`: ```ts this.submit$ @@ -52,31 +51,27 @@ this.submit$ .subscribe({...}); ``` -Когда внутренний Observable внутри `concatMap` завершается с ошибкой, ошибка пробрасывается наверх по цепочке. В итоге завершается вся подписка `submit$`, и новые события просто никто не слушает. +Ошибка внутреннего `Observable` передаётся наружу и завершает подписку на `submit$`. +После этого новые нажатия никто не обрабатывает. -Подробнее про оператор можно почитать в [официальной документации catchError](https://rxjs.dev/api/operators/catchError). +Подробнее: [документация `catchError`](https://rxjs.dev/api/operators/catchError). -## 4. Почини приложение - -Твоя задача — обработать ошибку **внутри** внутреннего Observable так, чтобы внешний поток `submit$` продолжал жить и принимать новые значения. +## Задание 1. Открой `src/app/app.component.ts`. -2. В цепочке операторов найди место, где создаётся запрос `this.http.get(...)`. -3. Добавь оператор `catchError` так, чтобы он обрабатывал ошибку только этого запроса и возвращал какой-нибудь fallback-observable (например, `of(null)`). -4. Убедись, что теперь после ошибочного запроса можно ввести новое значение, нажать **Получить**, и приложение продолжит работать. - -Подсказка: `catchError` нужно ставить **внутри** `concatMap`, а не снаружи. - -## 5. Проверь решение +2. Найди место, где внутри `concatMap` создаётся HTTP-запрос. +3. Добавь `catchError` внутрь функции `concatMap`. +4. В обработчике запиши ошибку в консоль и верни резервный поток. + Чтобы ошибка осталась видимой в текущем интерфейсе, можно вернуть `of(error)`. +5. Не создавай новую подписку на `submit$`. -Сценарий проверки: +Важно: `catchError` должен находиться внутри `concatMap`, а не после него. -1. Введи `posts` → нажми **Получить** → видишь в ответе JSON. -2. Введи `foo` → нажми **Получить** → видишь в ответе ошибку. -3. Введи `comments` → нажми **Получить** → снова видишь JSON, а не «мёртвый» интерфейс. -4. Повтори шаги 2–3 несколько раз. Каждое нажатие должно по-прежнему логировать значение или ошибку в консоль. +## Проверка решения -## Ограничения +1. `posts` — отображается ответ. +2. `foo` — отображается ошибка или предусмотренное резервное состояние. +3. `comments` — снова отображается ответ. +4. Повтори шаги 2–3 несколько раз. Поток должен продолжать работать. -- Нельзя создавать новые подписки на `submit$` — обработка ошибки должна остаться в рамках одного потока. -- Каждое нажатие кнопки **Получить** должно по-прежнему логировать результат (значение или ошибку) в консоль. \ No newline at end of file +Каждое нажатие должно оставаться видимым в консоли. diff --git a/lessons/rxjs/tasks/high-order-operator-bug/.eslintrc.json b/lessons/rxjs/tasks/high-order-operator-bug/.eslintrc.json index 8ebcbfd59..d8dfc867e 100644 --- a/lessons/rxjs/tasks/high-order-operator-bug/.eslintrc.json +++ b/lessons/rxjs/tasks/high-order-operator-bug/.eslintrc.json @@ -1,35 +1,32 @@ { - "extends": ["../../../.eslintrc.json"], + "root": true, "ignorePatterns": ["!**/*"], "overrides": [ { "files": ["*.ts"], "extends": [ - "plugin:@nx/angular", + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@angular-eslint/recommended", "plugin:@angular-eslint/template/process-inline-templates" ], "rules": { "@angular-eslint/directive-selector": [ "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } + { "type": "attribute", "prefix": "app", "style": "camelCase" } ], "@angular-eslint/component-selector": [ "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } + { "type": "element", "prefix": "app", "style": "kebab-case" } ] } }, { "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], + "extends": [ + "plugin:@angular-eslint/template/recommended", + "plugin:@angular-eslint/template/accessibility" + ], "rules": {} } ] diff --git a/lessons/rxjs/tasks/high-order-operator-bug/README.md b/lessons/rxjs/tasks/high-order-operator-bug/README.md index 32b7dec51..0ce631cbd 100644 --- a/lessons/rxjs/tasks/high-order-operator-bug/README.md +++ b/lessons/rxjs/tasks/high-order-operator-bug/README.md @@ -1,57 +1,55 @@ -# Ошибка в операторе высшего порядка +# Ошибка при объединении потоков -В этом задании мы найдём и исправим баг, связанный с операторами высшего порядка в RxJS (`merge`, `concat`, `switchMap`, `mergeMap` и т.д.). +В этом задании нужно исправить ошибочный результат при удалении нескольких записей +с помощью операторов RxJS. -## 0. Запуск приложения +## Запуск -Перейди в папку задачи и выполни команду: +Команды выполняй из корня репозитория: ```bash npm install npm run serve:rxjs-high-order-operator-bug ``` -После запуска откроется приложение. На экране — список сущностей (id и тема: `book`, `food`, `sport`) и три кнопки: +Если зависимости уже установлены, достаточно выполнить вторую команду. -- **Delete Food** — удалить все записи с темой `food` -- **Delete Sport** — удалить все записи с темой `sport` -- **Delete Book** — удалить все записи с темой `book` +После запуска появится список записей и три кнопки: -Удаление идёт через фейковую локальную БД, которая для каждой записи случайно возвращает `true` (успех) или `false` (ошибка). +- **Удалить food** — удалить записи с темой `food`; +- **Удалить sport** — удалить записи с темой `sport`; +- **Удалить book** — удалить записи с темой `book`. -## 1. Посмотри, что есть +Фейковая локальная база работает предсказуемо: запись с `id = 6` возвращает +`false`, остальные записи возвращают `true`. Значение `false` означает неуспешное +удаление, но не является уведомлением RxJS `error`. -Открой файлы: - -- `src/app/app.component.ts` — корневой компонент и кнопка удаления -- `src/app/app.service.ts` — сервис, который собирает удаление нескольких записей в один поток -- `src/app/localDB.service.ts` — фейковая БД +## Что посмотреть -В `app.service.ts` есть метод `deleteOldTopics(type)`, который: - -1. Ищет все записи нужного типа через `dbService.searchByType(type)`. -2. Для каждой записи вызывает `dbService.deleteOneTopic(id)`, который возвращает `Observable`. -3. Объединяет все эти Observable в один поток. +Открой файлы: -После нажатия на кнопку `ButtonDeleteComponent` подписывается на результат и показывает сообщение: +- `src/app/app.component.ts` — компонент с кнопками; +- `src/app/app.service.ts` — объединение потоков удаления; +- `src/app/localDB.service.ts` — фейковая база данных. -- `All have been deleted` — если результат `true` -- `Error: deletion of some failed` — если результат `false` +Метод `deleteOldTopics(type)`: -## 2. Воспроизведи баг +1. находит записи выбранной темы; +2. создаёт для каждой записи `Observable`; +3. объединяет эти потоки и возвращает результат. -1. Перезагрузи страницу, чтобы восстановить начальные данные. -2. Нажми **Delete Food** несколько раз подряд. -3. В какой-то момент под кнопкой появится сообщение **Error: deletion of some food failed** — значит, в `LocalDBService` хотя бы одна запись вернула `false`. -4. Снова нажми **Delete Food**. +## Воспроизведение ошибки -🚫 Снова появится сообщение **All food have been deleted**, хотя мы только что видели ошибку. +1. Перезагрузи страницу. +2. Убедись, что у темы `food` есть записи `id = 5` и `id = 6`. +3. Нажми **Удалить food**. -Тестировщики говорят, что интерфейс всегда показывает успех, даже если часть удалений не удалась. Это и есть наш баг. +Интерфейс ошибочно покажет сообщение об успехе, хотя удаление записи `id = 6` +вернуло `false`. Запись `id = 6` останется в списке. -## 3. Найди причину +## Причина -Открой `src/app/app.service.ts` и посмотри на `deleteOldTopics`: +Открой `src/app/app.service.ts`: ```ts return infoByType.length > 0 @@ -61,42 +59,25 @@ return infoByType.length > 0 : of(true); ``` -Здесь несколько Observable объединяются через `merge`. Семантика `merge`: - -- эмитит значения из всех входных потоков по мере их появления -- завершается, когда завершатся **все** входные потоки -- ошибку пробрасывает наверх, если она случится в любом из потоков - -Сейчас же в начальное значение `acc` передаётся `of(true)`. Этот Observable сразу эмитит `true` и завершается. Получается, что подписчик **всегда** видит первое значение `true`, и дальнейшие результаты уже не важны — сообщение об ошибке мы просто игнорируем. +`merge` передаёт значения всех входных потоков по мере их появления. Начальный +поток `of(true)` сразу выдаёт `true`, а компонент получает только первое значение +из-за `take(1)`. Поэтому результаты отдельных удалений не учитываются. -## 4. Почини баг +## Задание -Нужно сделать так, чтобы финальный результат потока отражал **все** результаты удаления, а не только первый. +Измени только логику в `app.service.ts`, чтобы итоговый поток выдавал: -Существует несколько подходов. Подумай, какой из них подходит лучше: +- `true`, если все удаления успешны; +- `false`, если хотя бы одно удаление вернуло `false`. -- использовать оператор, который «сворачивает» поток в одно финальное значение, например `reduce`/`scan` или комбинацию `combineLatest`/`forkJoin`; -- применить `switchMap`/`mergeMap` к источнику данных и собрать результат уже на уровне сервиса. +Можно использовать `reduce`, `scan`, `forkJoin` или другой подход, который +сначала получает все результаты, а затем сворачивает их в одно значение. -Требования к решению: - -1. Если **все** удаления вернули `true`, в итоге должно прийти `true`. -2. Если хотя бы одно удаление вернуло `false`, в итоге должно прийти `false`. -3. Внешний интерфейс (`AppComponent`, `ButtonDeleteComponent`) менять не нужно — он остаётся прежним. - -Подсказки: - -- Помни, что `merge` всегда эмитит каждое значение из входных потоков, а нам нужно «схлопнуть» поток в один boolean. -- Удобно сначала собрать поток `Observable` для всех удаляемых записей (например, через `mergeMap`), а потом применить оператор, дающий одно финальное значение. - -## 5. Проверь решение - -1. Перезагрузи страницу. -2. Нажимай **Delete Food** подряд. Сообщения теперь должны соответствовать реальному результату: если хотя бы одна запись вернёт `false` — должно появиться **Error: deletion of some food failed**. -3. Проверь то же самое для **Delete Sport** и **Delete Book**. -4. Нажми любую кнопку несколько раз, чтобы убедиться, что сценарий воспроизводится стабильно. +Публичный интерфейс компонентов менять нельзя. -## Ограничения +## Проверка решения -- Нельзя менять поведение `LocalDBService` — фейковая БД специально возвращает ошибки. -- Менять можно только логику в `app.service.ts` (и, при необходимости, архитектуру сервиса), но не публичный интерфейс компонента. \ No newline at end of file +1. **Удалить food** — должно появиться сообщение об ошибке. +2. **Удалить sport** — должно появиться сообщение об успехе. +3. **Удалить book** — должно появиться сообщение об успехе. +4. Перезагрузи страницу и повтори проверку: результат должен оставаться тем же. diff --git a/lessons/rxjs/tasks/high-order-operator-bug/src/app/localDB.service.ts b/lessons/rxjs/tasks/high-order-operator-bug/src/app/localDB.service.ts index 5a035e087..47e3cd909 100644 --- a/lessons/rxjs/tasks/high-order-operator-bug/src/app/localDB.service.ts +++ b/lessons/rxjs/tasks/high-order-operator-bug/src/app/localDB.service.ts @@ -1,5 +1,4 @@ /* eslint-disable @typescript-eslint/member-ordering */ -import { randomError } from '@angular-challenges/shared/utils'; import { computed, Injectable, signal } from '@angular/core'; import { of } from 'rxjs'; @@ -42,12 +41,12 @@ export class LocalDBService { this.state.set({ infos: this.state().infos.filter((i) => i.id !== id) }); }; - deleteOneTopic = (id: number) => - randomError({ - success: () => { - this.deleteOne(id); - return of(true); - }, - error: () => of(false), - }); + deleteOneTopic = (id: number) => { + if (id === 6) { + return of(false); + } + + this.deleteOne(id); + return of(true); + }; } diff --git a/lessons/rxjs/tasks/hold-to-save-button/.eslintrc.json b/lessons/rxjs/tasks/hold-to-save-button/.eslintrc.json index 8ebcbfd59..d8dfc867e 100644 --- a/lessons/rxjs/tasks/hold-to-save-button/.eslintrc.json +++ b/lessons/rxjs/tasks/hold-to-save-button/.eslintrc.json @@ -1,35 +1,32 @@ { - "extends": ["../../../.eslintrc.json"], + "root": true, "ignorePatterns": ["!**/*"], "overrides": [ { "files": ["*.ts"], "extends": [ - "plugin:@nx/angular", + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@angular-eslint/recommended", "plugin:@angular-eslint/template/process-inline-templates" ], "rules": { "@angular-eslint/directive-selector": [ "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } + { "type": "attribute", "prefix": "app", "style": "camelCase" } ], "@angular-eslint/component-selector": [ "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } + { "type": "element", "prefix": "app", "style": "kebab-case" } ] } }, { "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], + "extends": [ + "plugin:@angular-eslint/template/recommended", + "plugin:@angular-eslint/template/accessibility" + ], "rules": {} } ] diff --git a/lessons/rxjs/tasks/hold-to-save-button/README.md b/lessons/rxjs/tasks/hold-to-save-button/README.md index 8e2cb8881..b8b1b817d 100644 --- a/lessons/rxjs/tasks/hold-to-save-button/README.md +++ b/lessons/rxjs/tasks/hold-to-save-button/README.md @@ -1,107 +1,79 @@ -# Hold to save button +# Удержание кнопки для сохранения -В этом задании мы реализуем кнопку, которая «срабатывает» только если её удерживать заданное время. Это типичный UX-паттерн для критичных действий (например, «Удалить аккаунт»): случайный клик не должен приводить к действию. +В этом задании нужно сделать кнопку, которая срабатывает только после удержания +в течение заданного времени. Такой приём подходит для важных действий, например +для удаления аккаунта: случайное нажатие не должно запускать действие. -## 0. Запуск приложения +## Запуск -Перейди в папку задачи и выполни команду: +Команды выполняй из корня репозитория: ```bash npm install npm run serve:rxjs-hold-to-save-button ``` -После запуска откроется приложение с кнопкой **Hold me** и прогресс-баром под ней. +Если зависимости уже установлены, достаточно выполнить вторую команду. -## 1. Посмотри на заготовку +После запуска откроется приложение с кнопкой **Hold me** и полосой прогресса. + +## Начальная заготовка Открой `src/app/app.component.ts`. Сейчас там: - кнопка без обработчиков событий; -- `` — статичная полоска прогресса; -- метод `onSend()`, который просто пишет в консоль `'Save it!'`. - -Никакой реактивной логики пока нет. Наша цель — реализовать её с помощью RxJS. - -## 2. Пойми требования - -UX-дизайнер Люси прислала такой прототип поведения: - -> «Как пользователь, я хочу сохранять что-то, удерживая кнопку в течение определённого времени». - -Acceptance criteria: - -1. Должна быть возможность задать длительность удержания в миллисекундах. -2. По событию `mousedown` на кнопке начинается отсчёт. -3. По событиям `mouseleave` или `mouseup` прогресс-бар сбрасывается в 0. -4. Прогресс-бар отражает оставшееся время (от полного до 0). -5. Когда удержание завершено (прошло заданное время), имитируется «сохранение» — например, `console.log` или `alert`. -6. Логика должна быть максимально декларативной и построенной на RxJS-операторах. - -## 3. Сделай директиву - -Создай новый файл `src/app/holdable.directive.ts` и опиши в нём директиву `HoldableDirective`: - -1. Пометь класс декоратором `@Directive` с селектором по атрибуту, например `[appHoldable]`. -2. Через DI получи `ElementRef` (или используй `@HostListener`, если тебе так удобнее). -3. Сделай `input()` (или сеттер) для длительности удержания — например, `holdTime`. -4. Сделай `output()` (или `EventEmitter`) с результатом — например, `holdTimeEnd`, который срабатывает, когда удержание успешно завершилось. +- статичная полоса прогресса ``; +- метод `onSend()`, который пишет в консоль `'Save it!'`. -События, которые нужно слушать: +Реактивной логики пока нет. -- `mousedown` — начало удержания -- `mouseup` — отмена -- `mouseleave` — отмена +## Требования -Собери из них поток `hold$` с помощью `fromEvent` и подходящих операторов (`switchMap`, `takeUntil`, `interval`, `takeWhile`, `startWith` и т.д.). +1. Длительность удержания должна задаваться в миллисекундах. +2. При `pointerdown` на кнопке начинается отсчёт. +3. При `pointerup`, `pointerleave` или `pointercancel` отсчёт отменяется. +4. При отмене полоса прогресса возвращается к нулю. +5. Полоса прогресса постепенно уменьшается от полного значения до нуля. +6. После полного удержания вызывается `holdTimeEnd.emit()` или аналогичное событие. +7. Логика строится на потоках RxJS, без прямого использования `setTimeout` и `setInterval`. -## 4. Запусти обратный отсчёт +События `pointer*` поддерживают мышь, сенсорный экран и перо. Если используешь +только мышь, допустимы `mousedown`, `mouseup` и `mouseleave`. -Когда начинается удержание, нужно: +## Задание -1. Сразу же поставить прогресс-бар в максимальное значение. -2. Тикать таймером (например, каждые 10–50 мс). -3. Каждый тик уменьшать значение прогресс-бара. -4. Когда время вышло — вызвать `holdTimeEnd.emit()` (или эквивалент). +Создай `src/app/holdable.directive.ts` и опиши директиву `HoldableDirective`: -В шаблоне (`app.component.html` или прямо в `template` у `AppComponent`) свяжи `progress` с текущим значением из потока. +1. Используй селектор-атрибут, например `[appHoldable]`. +2. Получи элемент кнопки через `ElementRef` или `@HostListener`. +3. Добавь `input()` для длительности удержания, например `holdTime`. +4. Добавь `output()` для успешного завершения, например `holdTimeEnd`. +5. Собери потоки событий через `fromEvent`. +6. Для отсчёта используй подходящие операторы (`switchMap`, `takeUntil`, + `interval`, `takeWhile`, `startWith`, `map`, `scan`). -## 5. Сделай сброс +`TemplateRef` для этой задачи не нужен: директива работает с уже существующей +кнопкой. -Если пользователь отпустил кнопку раньше времени (`mouseup` или `mouseleave`): +Пример использования: -1. Обнули прогресс-бар. -2. Отмени отсчёт (`takeUntil` отлично подходит). - -## 6. Завяжи всё на кнопку - -В шаблоне: - -- Добавь на кнопку свою директиву с нужной длительностью: - - ```html - - ``` - -- Привяжи `` к значению из потока (например, через `signal` или `toSignal`). - -## 7. Проверь решение - -Сценарий проверки: - -1. Зажми кнопку мышкой и держи. -2. Прогресс-бар должен начать уменьшаться. -3. Когда дойдёт до 0 — в консоли должно появиться `'Save it!'`. -4. Отпусти кнопку раньше времени — прогресс-бар должен вернуться к 0, сообщения в консоли быть не должно. -5. Уведи курсор с кнопки во время удержания — то же самое: отмена и сброс. - -## 8. Подсказки 🤫 +```html + +``` -- Сделай `HoldableDirective` отдельной директивой. -- Используй `TemplateRef` и `fromEvent` из RxJS или `@HostListener` — что тебе ближе. -- Возможно пригодятся операторы: `interval`, `takeUntil`, `switchMap`, `takeWhile`, `startWith`, `map`, `scan`. +Свяжи значение прогресса с `` через `signal` или `toSignal`. -## Ограничения +## Проверка решения -- Не используй `setTimeout`/`setInterval` напрямую в логике удержания — всё должно быть через RxJS-потоки. -- Код должен быть максимально декларативным: операторы RxJS вместо ручного управления состоянием. \ No newline at end of file +1. Начни удерживать кнопку — полоса должна уменьшаться. +2. Держи кнопку до нуля — в консоли должно появиться `'Save it!'`. +3. Отпусти кнопку раньше времени — отсчёт должен отмениться, полоса вернуться + к нулю, сообщение появляться не должно. +4. Уведи указатель с кнопки — результат должен быть таким же. +5. Повтори удержание после отмены — отсчёт должен начаться заново. diff --git a/lessons/rxjs/tasks/race-condition/.eslintrc.json b/lessons/rxjs/tasks/race-condition/.eslintrc.json index bf8df1428..d8dfc867e 100644 --- a/lessons/rxjs/tasks/race-condition/.eslintrc.json +++ b/lessons/rxjs/tasks/race-condition/.eslintrc.json @@ -1,35 +1,32 @@ { - "extends": ["../../../.eslintrc.json"], + "root": true, "ignorePatterns": ["!**/*"], "overrides": [ { "files": ["*.ts"], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], "rules": { "@angular-eslint/directive-selector": [ "error", - { - "type": "attribute", - "prefix": "app", - "style": "camelCase" - } + { "type": "attribute", "prefix": "app", "style": "camelCase" } ], "@angular-eslint/component-selector": [ "error", - { - "type": "element", - "prefix": "app", - "style": "kebab-case" - } + { "type": "element", "prefix": "app", "style": "kebab-case" } ] - }, - "extends": [ - "plugin:@nx/angular", - "plugin:@angular-eslint/template/process-inline-templates" - ] + } }, { "files": ["*.html"], - "extends": ["plugin:@nx/angular-template"], + "extends": [ + "plugin:@angular-eslint/template/recommended", + "plugin:@angular-eslint/template/accessibility" + ], "rules": {} } ] diff --git a/lessons/rxjs/tasks/race-condition/README.md b/lessons/rxjs/tasks/race-condition/README.md index d74be6c12..0cc9a9b84 100644 --- a/lessons/rxjs/tasks/race-condition/README.md +++ b/lessons/rxjs/tasks/race-condition/README.md @@ -1,117 +1,94 @@ -# Race condition +# Гонка при загрузке данных -В этом задании мы столкнёмся с классической race condition в RxJS — «гонкой» между отложенным HTTP-запросом и открытием модального окна. +В этом задании нужно исправить ситуацию, когда пользователь открывает диалоговое +окно раньше, чем завершился запрос за данными. -## 0. Запуск приложения +Связь с лекцией: разделы 6–7, операторы `shareReplay`, `take` и работа с HTTP в Angular. -Перейди в папку задачи и выполни команду: +## Запуск + +Команды выполняй из корня репозитория: ```bash npm install npm run serve:rxjs-race-condition ``` -После запуска откроется приложение с одной кнопкой **Open Topic**. По нажатию на кнопку должно открыться модальное окно со списком тем (Politic, Culture, Nature и т.п.). +Если зависимости уже установлены, достаточно выполнить вторую команду. + +После запуска появится кнопка **Открыть тему**. Она должна открывать диалоговое +окно с тремя темами: `Politic`, `Culture`, `Nature`. -## 1. Посмотри, как работает код +## Устройство заготовки Открой файлы: -- `src/app/app.component.ts` — корневой компонент с кнопкой и логикой открытия модалки. -- `src/app/topic.service.ts` — сервис, который «получает» темы с сервера. -- `src/app/topic-dialog.component.ts` — модалка, которая показывает список тем. -- `src/app/app.component.cy.ts` — Cypress-тест, который нужно починить. +- `src/app/app.component.ts` — кнопка и открытие диалога; +- `src/app/topic.service.ts` — получение тем с задержкой; +- `src/app/topic-dialog.component.ts` — содержимое диалога; +- `src/app/app.component.cy.ts` — проверка правильного поведения. -В `TopicService` метод `fakeGetHttpTopic` возвращает `Observable` с задержкой 1 секунда (имитация медленной сети): +Метод `fakeGetHttpTopic` возвращает темы через одну секунду: ```ts fakeGetHttpTopic = () => timer(1000).pipe(map((): TopicType[] => ['Politic', 'Culture', 'Nature'])); ``` -В `AppComponent`: +Сейчас компонент загружает темы в `ngOnInit`, а при нажатии сразу передаёт в диалог +текущее значение `this.topics`. -```ts -ngOnInit(): void { - this.topicService - .fakeGetHttpTopic() - .pipe(take(1)) - .subscribe((topics) => (this.topics = topics)); -} +## Воспроизведение ошибки -openTopicModal() { - this.dialog.open(TopicModalComponent, { - data: { topics: this.topics }, - }); -} -``` - -То есть: +1. Запусти приложение. +2. Сразу нажми **Открыть тему**, не дожидаясь загрузки. +3. Диалог откроется с пустым списком. -1. В `ngOnInit` мы подписываемся на получение тем. -2. Когда темы пришли, сохраняем их в `this.topics`. -3. По клику открываем модалку и передаём ей `this.topics`. +Запрос ещё не завершился, поэтому `this.topics` содержит пустой массив. Это и есть +гонка: открытие диалога происходит раньше получения данных. -## 2. Запусти Cypress-тест +## Проверка -В отдельном терминале выполни: +Из корня репозитория выполни: ```bash -npx nx component-test rxjs-race-condition +npx cypress run --component \ + --config-file lessons/rxjs/tasks/race-condition/cypress.config.ts \ + --spec lessons/rxjs/tasks/race-condition/src/app/app.component.cy.ts ``` -или в watch-режиме: +До исправления тест должен завершиться ошибкой. После исправления он должен пройти. + +Для интерактивного запуска: ```bash -npx nx component-test rxjs-race-condition --watch +npx cypress open --component \ + --config-file lessons/rxjs/tasks/race-condition/cypress.config.ts ``` -🚫 Тест падает. Cypress жалуется на то, что в модалке не три `
  • `, а ноль. - -## 3. Пойми проблему - -Пройди сценарий руками: - -1. Открой приложение в браузере. -2. Сразу же (не дожидаясь загрузки) нажми **Open Topic**. +## Задание -Что происходит: +К моменту открытия диалога темы уже должны быть загружены. При этом: -- `ngOnInit` запустил запрос, но ответ ещё не пришёл (1 секунда задержка). -- `this.topics` всё ещё `[]`. -- Модалка открывается с пустым списком. +- нельзя менять `fakeGetHttpTopic`; +- нельзя менять Cypress-тест; +- первый клик не должен открывать пустой диалог; +- повторное открытие не должно выполнять новый запрос после успешной загрузки. -Это и есть race condition: открытие модалки «обгоняет» приход данных. +Рекомендуемый вариант — создать общий поток и сохранить последнее полученное значение: -## 4. Почини приложение - -Цель — к моменту открытия модалки темы уже должны быть загружены. При этом: - -- Изменять `fakeGetHttpTopic` **нельзя** (он моделирует медленную сеть). -- Изменять Cypress-тест **нельзя** (он проверяет корректное поведение). - -Возможные подходы: - -1. Открывать модалку **только после** того, как пришли темы: вместо подписки в `ngOnInit` сразу вызывай `fakeGetHttpTopic()` в обработчике клика и открывай диалог в коллбэке `subscribe` (или в операторе типа `tap`). -2. Кэшировать результат: сохранять результат первого запроса и переиспользовать его при повторных открытиях модалки. -3. Использовать `shareReplay` / `cache` / `toSignal`, чтобы загрузка и отрисовка шли согласованно. - -Подумай, какой вариант лучше подходит под существующую структуру. - -## 5. Проверь решение - -1. Перезапусти Cypress-тест — теперь он должен проходить: - - ```bash - npx nx component-test rxjs-race-condition - ``` +```ts +import { shareReplay, take } from 'rxjs'; -2. Проверь поведение руками: - - Открой приложение. - - Сразу нажми **Open Topic** — в модалке должны быть все три темы (Politic, Culture, Nature). - - Закрой модалку, открой ещё раз — темы должны появляться мгновенно (без повторной задержки), если ты выбрал подход с кэшированием. +readonly topics$ = this.topicService.fakeGetHttpTopic().pipe( + shareReplay({ bufferSize: 1, refCount: true }), +); -## Ограничения +openTopicModal() { + this.topics$.pipe(take(1)).subscribe((topics) => { + this.dialog.open(TopicModalComponent, { data: { topics } }); + }); +} +``` -- Нельзя менять `TopicService.fakeGetHttpTopic` — задержка должна остаться как имитация медленной сети. -- Нельзя менять Cypress-тест в `app.component.cy.ts`. \ No newline at end of file +Можно использовать другой эквивалентный подход, если он сохраняет те же условия. diff --git a/lessons/rxjs/tasks/race-condition/cypress.config.ts b/lessons/rxjs/tasks/race-condition/cypress.config.ts index 3738464ee..7fcf08714 100644 --- a/lessons/rxjs/tasks/race-condition/cypress.config.ts +++ b/lessons/rxjs/tasks/race-condition/cypress.config.ts @@ -1,8 +1,28 @@ -import { nxComponentTestingPreset } from '@nx/angular/plugins/component-testing'; import { defineConfig } from 'cypress'; export default defineConfig({ component: { - ...nxComponentTestingPreset(__filename), + devServer: { + framework: 'angular', + bundler: 'webpack', + options: { + projectConfig: { + root: 'lessons/rxjs/tasks/race-condition', + sourceRoot: 'lessons/rxjs/tasks/race-condition/src', + buildOptions: { + tsConfig: 'lessons/rxjs/tasks/race-condition/tsconfig.cypress.json', + main: 'lessons/rxjs/tasks/race-condition/src/main.ts', + polyfills: ['zone.js'], + index: 'lessons/rxjs/tasks/race-condition/src/index.html', + assets: [], + styles: [], + scripts: [], + }, + }, + }, + }, + supportFile: 'lessons/rxjs/tasks/race-condition/cypress/support/component.ts', + indexHtmlFile: + 'lessons/rxjs/tasks/race-condition/cypress/support/component-index.html', }, }); diff --git a/lessons/rxjs/tasks/race-condition/src/app/app.component.cy.ts b/lessons/rxjs/tasks/race-condition/src/app/app.component.cy.ts index 9b8850e62..64bd8a056 100644 --- a/lessons/rxjs/tasks/race-condition/src/app/app.component.cy.ts +++ b/lessons/rxjs/tasks/race-condition/src/app/app.component.cy.ts @@ -16,6 +16,6 @@ describe(AppComponent.name, () => { cy.mount(AppComponent); cy.get('button').click(); - cy.get('ul li').should('have.length', '3'); + cy.get('ul li', { timeout: 2000 }).should('have.length', 3); }); }); diff --git a/lessons/rxjs/tasks/race-condition/tsconfig.cypress.json b/lessons/rxjs/tasks/race-condition/tsconfig.cypress.json new file mode 100644 index 000000000..6c4ef2b97 --- /dev/null +++ b/lessons/rxjs/tasks/race-condition/tsconfig.cypress.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.app.json", + "compilerOptions": { + "types": ["cypress", "node"], + "sourceMap": false + }, + "files": [ + "src/main.ts", + "cypress/support/component.ts", + "src/app/app.component.cy.ts" + ], + "include": ["cypress/**/*.d.ts", "src/**/*.d.ts"] +} diff --git a/package-lock.json b/package-lock.json index c85056e50..dc9f3fbf6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,6 +47,7 @@ "@angular/language-service": "20.0.6", "@commitlint/cli": "^17.2.0", "@commitlint/config-conventional": "^17.2.0", + "@cypress/angular": "^4.1.0", "@cypress/webpack-dev-server": "3.8.0", "@hirez_io/observer-spy": "^2.2.0", "@ngrx/schematics": "19.0.1", @@ -406,7 +407,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", @@ -573,7 +573,6 @@ "integrity": "sha512-giIMYORf8P8MbBxh6EUfiR/7Y+omxJtK2C7a8lYTtLSOIGO0D8c8hXx9hTlPcdupVX+xZXDuZ85c9JDen+JSSA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@angular-eslint/bundled-angular-compiler": "20.1.1", "eslint-scope": "^8.0.2" @@ -603,7 +602,6 @@ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.0.6.tgz", "integrity": "sha512-OS37BTq9mhD6EuO7Pogl8e0eKGGuedWbcEDO23SdgCf0PL3rLgcubHWilOusfoLmGX+hTYHDq2AQhVgik9Z1Hg==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -719,7 +717,6 @@ "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-20.0.5.tgz", "integrity": "sha512-WhJ1I/ib/Za0qjWkSzMYV0gM8NOWrtOcZ2TYZ4aYFsjd8E13rGhxOez0DWt2sN3vfjAc1iWMmGGbNZrkp98adg==", "license": "MIT", - "peer": true, "dependencies": { "parse5": "^7.1.2", "tslib": "^2.3.0" @@ -785,7 +782,6 @@ "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.0.6.tgz", "integrity": "sha512-NRsq2gI4CH8nEy8yEZFySEmZ4U+1Y1yGzdIFubrKmtE2NXxR4KFGvQCkBLCLh6hNQXQx+Soe126bqByA6oIaFw==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -815,7 +811,6 @@ "integrity": "sha512-A1H/Haq3O7SlMuH14Clj6Z6YhA9FtYQXpKnW1FrFbWOaTp1MpYFIVunL4duDOyRhrr3M9+AtEabbJu3fS7/XyA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "7.27.7", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -1041,7 +1036,6 @@ "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.0.6.tgz", "integrity": "sha512-PLSRl8vM8I+HOlAJFiTcRMNbRj2Clb7lpQqUfkeBSk8bBWOy9fLlscoY3JOk0tXoUTnW6lbRB1LmAFuYAQZzAA==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1067,7 +1061,6 @@ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.0.6.tgz", "integrity": "sha512-/SZB2g0Nd4zRHTXEnhG9Xnr0BcSPIbKwpanvkiOyyQlh8ab/DxGVoX/y8ovVw7lhxIXS0+cvloKpIbGCVmQHdw==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1113,7 +1106,6 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.0.6.tgz", "integrity": "sha512-EZC6ILD0nXOddNuwqQqwTzvRgXs/1kZoRGzdG8zpHhRREBf6VFMZ+g7IN3EKnYN4hDL5EMxIKIsIcQjmCDsu2A==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1136,7 +1128,6 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.0.6.tgz", "integrity": "sha512-Bolskz1hGGxgmKMR0YRSJvrnrvvSr7WfgikwglkWsSYXRi8kG2vjl2PC/F+OFCjhstw+XlE4qqkoE32LjV1s8A==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1155,7 +1146,6 @@ "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.0.6.tgz", "integrity": "sha512-GAOoYkS2/kdzdfWhO7K7gophGwo8cNqX5WoMfce4GEphtNZsUTXUQkWK9czG/DbWYSmjmkW8t14uzIqcmMKuZg==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0", "xhr2": "^0.2.0" @@ -1176,7 +1166,6 @@ "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.0.6.tgz", "integrity": "sha512-qmG08dm/uUUe70tjcy0hTLFa7hc8hIDpXovKl2olB+ziGqTuGUTJBC0A6tPc344m9EHknCHHmaC+03U+i1BtLw==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1195,7 +1184,6 @@ "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.0.5.tgz", "integrity": "sha512-JwAFHkIgddVYwiQDTHalpCUAonEpi5qf4wLCm88KeB3vXoTfCCgwj3mMN8ykYCVS7RLupBHI/hYYh9Hqf30P5Q==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1242,7 +1230,6 @@ "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -3618,7 +3605,6 @@ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3721,6 +3707,20 @@ "postcss": "^8.2" } }, + "node_modules/@cypress/angular": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@cypress/angular/-/angular-4.1.0.tgz", + "integrity": "sha512-79NnWjV3kxHeR3ltJ/4Epo0DZdA1asWB8Hss+uijNLuJBPCCDqiKYKQpxeYo0OPRIlYojBxvgWD72ipZcyToew==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@angular/common": ">=18.0.0", + "@angular/core": ">=18.0.0", + "@angular/platform-browser-dynamic": ">=18.0.0", + "rxjs": ">=7.5.0", + "zone.js": ">=0.14.0" + } + }, "node_modules/@cypress/request": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.10.tgz", @@ -5007,7 +5007,6 @@ "integrity": "sha512-5AOrZPf2/GxZ+SDRZ5WFplCA2TAQgK3OYrXCYmJL5NaTu4ECcoWFlfUZuw7Es++6Njv7iu/8vpYJhuzxUH76Vg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@inquirer/checkbox": "^4.1.6", "@inquirer/confirm": "^5.1.10", @@ -5649,7 +5648,6 @@ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -5684,7 +5682,6 @@ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -7128,7 +7125,6 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "license": "MIT", - "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -8262,10 +8258,9 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.0.tgz", "integrity": "sha512-+CuuTCmQFfzaNGg1JmcZvdUVITQXJk9sMnl1C2TiDLzOSVOJRwVD4dNo5dljX/qxpMAN+2BIYlwjlSkoGi6grg==", - "dev": true, + "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.17" @@ -8305,7 +8300,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8322,7 +8316,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8339,7 +8332,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -8356,7 +8348,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8373,7 +8364,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8390,7 +8380,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8407,7 +8396,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8424,7 +8412,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8441,7 +8428,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8458,7 +8444,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8472,7 +8457,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true, + "devOptional": true, "license": "Apache-2.0" }, "node_modules/@swc/helpers": { @@ -8480,7 +8465,6 @@ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz", "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==", "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -8489,9 +8473,8 @@ "version": "0.1.26", "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.26.tgz", "integrity": "sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@swc/counter": "^0.1.3" } @@ -8602,7 +8585,6 @@ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -8900,7 +8882,6 @@ "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -9073,8 +9054,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.9.tgz", "integrity": "sha512-IeB32oIV4oGArLrd7znD2rkHQ6EDCM+2Sr76dJnrHwv9OHBTTM6nuDLK9bmikXzPa0ZlWMWtRGo/Uw4mrzQedA==", "devOptional": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/node-forge": { "version": "1.3.14", @@ -9394,7 +9374,6 @@ "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "7.16.1", "@typescript-eslint/types": "7.16.1", @@ -9619,7 +9598,6 @@ "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.18.0", @@ -10157,7 +10135,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "devOptional": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -10258,7 +10235,6 @@ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -10873,7 +10849,6 @@ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -11076,7 +11051,6 @@ "integrity": "sha512-HdUm8EMQBLaJvGUdidNNbqpA1kYkwNcb+MYxkxCLAPJGQzlv9J0C24h8V65Z4c5GLd/JEALDvpFCQgpLJqc0zw==", "dev": true, "license": "Apache-2.0", - "peer": true, "peerDependencies": { "bare-abort-controller": "*" }, @@ -11430,7 +11404,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -12464,7 +12437,6 @@ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", @@ -12765,7 +12737,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "@cypress/request": "^3.0.6", "@cypress/xvfb": "^1.2.4", @@ -13857,7 +13828,6 @@ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -14203,7 +14173,6 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -16128,7 +16097,6 @@ "integrity": "sha512-md+vXtdCAe60s1k6AU3dUyMJnDxUyQAwfwPKoLisvgUF1IXjtlLsk2se54+qfL9Mdm26bbwvjJybpNx48NKRLw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -17804,7 +17772,6 @@ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -18161,7 +18128,6 @@ "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -18791,7 +18757,6 @@ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -19321,7 +19286,6 @@ "integrity": "sha512-X9RyH9fvemArzfdP8Pi3irr7lor2Ok4rOttDXBhlwDg+wKQsXOXgHWduAJE1EsF7JJx0w0bcO6BC6tCKKYnXKA==", "dev": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -21241,7 +21205,6 @@ "integrity": "sha512-MDqUwAg5tXpbOmt7DJH+qvycgNgxEPchwWUy7//1p6lOl2VvbF/XxrC4kAt948YQIkn1UhPxLXHIIcpZt5rt9g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@ampproject/remapping": "^2.3.0", "@rollup/plugin-json": "^6.1.0", @@ -22662,7 +22625,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -23392,7 +23354,6 @@ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -23713,7 +23674,6 @@ "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -23730,7 +23690,6 @@ "integrity": "sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "@volar/vue-language-plugin-pug": "^1.0.4", "@volar/vue-typescript": "^1.0.4", @@ -24815,7 +24774,6 @@ "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.7" }, @@ -24951,7 +24909,6 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -25043,7 +25000,6 @@ "integrity": "sha512-sF6TWQqjFvr4JILXzG4ucGOLELkESHL+I5QJhh7CNaE+Yge0SI+ehCatsXhJ7ymU1hAFcIS3/PBpjdIbXoyVbg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -26457,7 +26413,6 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", "license": "MIT", - "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -27178,7 +27133,6 @@ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -27228,8 +27182,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/tuf-js": { "version": "3.1.0", @@ -27415,7 +27368,6 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -27773,7 +27725,6 @@ "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -27914,7 +27865,6 @@ "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", @@ -28524,7 +28474,6 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "license": "ISC", - "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -28628,8 +28577,7 @@ "version": "0.15.0", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.0.tgz", "integrity": "sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==", - "license": "MIT", - "peer": true + "license": "MIT" } } } diff --git a/package.json b/package.json index 385553d8c..7e720c70d 100644 --- a/package.json +++ b/package.json @@ -81,6 +81,7 @@ "@angular/language-service": "20.0.6", "@commitlint/cli": "^17.2.0", "@commitlint/config-conventional": "^17.2.0", + "@cypress/angular": "^4.1.0", "@cypress/webpack-dev-server": "3.8.0", "@hirez_io/observer-spy": "^2.2.0", "@ngrx/schematics": "19.0.1",
  • 4s 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�-FtD- z==I-N^pd&wAP9SvIiEL++LJb(^SL)AI}TErTtDq zSLz|bIl~A6kTxf9I5%-%Re!#=d`6G6(QdbT?ce>Y@zJnzhy5{3$Dcr`mHqvE&-OK9 z74WjM310=l=KW{DGSd?oDR^o0nRF2T!WSb`{S1?01c^3NJ^LcS{OIv}m#Hwdjola;KW0u64 z++m*LP<9E|d+{c4XniqJ(g-bs5Qc(AlCT1fd@kh&0ho4}KN`s=q4VhGBA|`BIRn{V z0TvAF<@o6kD>|eySKuH&DntETj74uo#GD$wu31Dcvj~~LS01IxIeG!>n^K_DqnsD3 z@Q1~W?JwJ3vS<_N2^k=rm%3bKPAhmcKb8+LK|zXV^`Kz zhdK!9G`QL%BQb9(n-ZDFyX{*R8^~4*z#PmTslz=%?3+ADFW1)(*3K}?`2fxMs7#Sh z0ENvDsTqdrEtRP1wa!XCtA0BOUu%nMas=k@7f(jB)TGN_V?*-}Px1z#4dvOSEWA*c z9R`suzgT44b(wduT6qoG33K1KDx+lV$!aDp6~Glr7&cPVK`IkWlH$fP#L-oQ^Oo}$ zHUV*(f~Cy?;^3rV$1el_n#bS?0{V27bOXL(if{)3;~wOG=o1LDCl@ zn~|Lr=8OoTTaZQz$iTGEWp0t41bsrRah0+W$XTBm4qV2O@ zDrU=;xFdlE5n6EXJo6EB5%7in-#|a@0NAG;;aor@;R_@Af0LGu+5(5&! zQm9?8vNUz@)L>o!>ea-67&XIy=RmE1Sk%bD&gy62P@wH*m1hv0%*%nRDwqZ8sd@}s zu)_^IGm%ArZQOpawHlu-J?ia-Xx7PxrVrGf!Z*LujQ~=q!-1)EYRx`bjhh3a7uy2s zq$5voDQ;?VzHgSbr)_-Z^KHs^oNVTFM6@1@8aqVUH91n-Upg)D^SF391iRum4%iI} zB0E?)86rP8IWo(A9#HqejIQyRtB$`msXS-^p!#^Ut-WT!Di|G zVgQ#CaLrk$pb+x)u_8%!{LOyJ>7`Kxkd3Rb)FtXk+y)2)5_gFQX=awxlM)A{BWOdj z0a$JudW}$r1#VTz@hh~QybP~fHRPtU;7i%;bnJMNX(>0fCR2jo5Rl(*%Sprd&;7-x31|%95+*oyo za~EJK!ek_o11XJAZsj%E_an!yY?%o6?BX*);0nV6p#E#AEhJmr0#X^Qp=P3Cy9D1TtcDweO9=a{f}mNMqxAK^HSb%I!V?8ySpIf~ z=U}unCUAn04PuW8y5l2t#ITo{^0r|K9&elGDYGlE5{?T+ko>)mL8Yc=bKgl7>*!GJ zcuzgdA@C#A%sng7G5y`1X9_W2*{_*h^tTGN0OTPf+&hr`k-G0%Pm^5wz`m{KLZNNu) z5!7Bn#u{Rrs5KX*TuIC#0A@2Lq7E}&Lf*AVu?W4{+(`iIfu+C`3&1G!Co7XP`%Z8J z@EG3hP#9-6pr-clAkYrFppvdV%{;~Le0rk}DN~$w<-d*XdT9}F7HGNb&d5z~{!}A} zAXnL}4Kxt8Sz`6ZT9N=PLfIfJaJSk&I2P=vCkov&@Oi(`_^+I+K$2fRaq)d5HsHCU z*ogxE{pQ9OAIdFoLd52AVhQyAHa*%mij_o#6r5{A2LFi6R>=VPm;?9|xRLUa5lQ|} z(l3d_Nv`CjS?*g8R#~mk`$1<;S*?-#L0R^kP|GY#$zN{oo}CSn<|JcvdIfc9$)xJ? zbFP8na=B!^kSq%pwulXay+I-&01ai|OSlrVYv}KNqsE|sr1CD|$`f-<^68>?Ymj4Yn;s4G&vIIUl-EBE+RUo8T+gmAa1ui zgpWZ<7mvY2K?{%5`xdT`YB{9R@ffV;ZKlMVI57@L+EXb#YcdSJ{2-C=|fs zRBI>EJaM%Ojp%iT%)T<9r}G7{>zd|5)Gl8*Mz_JQyx(P(-iF$h6%GI&_RyI`NE_yumobMO|6e#lI>5(@S{E#kpYdmje^L&7( zm*;?7gmuICVsz+g-vEfxg)__))0U)KPgnpRmBmtPe=83aWzIokGbz2UKy^Rjb$EDz zhv(`li|p&FmK^_N3Pa_7Mfu78QA82~lkDmZ1f!k-uGYYeA_u92d1Fbzv$Men$0tNj z)H`Kt=T|pQ&xZ5$FrR44-n07=a*sXrZ-y^EyKkgmsv&RDCuNzUr8cj1DD9to)2AfH zL~P-Ym>;s2TQcSzQB9u0d8_`*7)j(T3mF9Dh#5G!xP3&>lQC-|+cXOc;<`h;U7a%r z7dAlj7fe9tthl*WGc_X2NW~TmVqgNOOpR zNCYAHrqP~q3WdmtsE8_Zgv@6f&$)$STdeZEr9x&2dL!RkB2;*J@%TdLOgkI-@R{M& z8>+pT7^!H{2;%7~ECAJcYV1nCLi$PMGXi`>iz()OOlYwn)~U`=vap73KtS=?=kDk} zv{)3lhRT+``23o9s?J~{fyVuJc^rM5dw7FH!`H`PfJ{Hf7B+A{Qn9Kaj}bp1vnNU* zB^q~Eostzf@WUa%ys`Lz>I#LDT?Ln-loq&?btJw|N9>M!9(?%>)J1%JinkxYRXuH| z#veoUU-j1ksRQxz*n2ovZ1ybk1AFBqWFaGtsnK3(Q@F1z`~aBecK(EEy+8?AH-Sjb zSpuuFLV~#Izrn{2Zo$nq2NjklgIjY4{U&p-pa=S>(Ut-M`IP{QoAKqQG1{{FSw|f3YBLT^^cKentfyPF(CrM`*pE{?1Y&t+%-caW+S&^@U<;%+^<{Sh zb#*BX0OX!lfb$H>aQVg*WC8HxjQq-qZUIck83A5;LjVX_MvdxO0LW*MH>8G4v~^~bZ98y9U#hzb*o35zWfw+-~Nc!+GNid*^FwAg&N ztCPq`3sT;O-l`W(yQYbHs8_NW#5k>xzhqH-LbMgFnXC~}Xt5kdcU%?L(D+gbZLU+= zl(JGi$sAjOMYL6$7rZpf<;3F=`u)@xvz6!k0QWk})y2X&C6XMg*pAYKeCFTW)UeXH zzMcAp9zDDWvdT*+wpi1NKPz!o^Fc7%^dKZFS_nQx(M&F@3fQDVM1CvPikxZy6gbiN$@d4$ko(EEqxF(&L+d4FqxPD0gQ7s` zB@r4;QCt?$b#NkGvwNAGJcpam;-xY>eziWR1S?6{!q?IoYDQ@CmDenkgPBQvo&UvXIcnDtoWNm@k&~ z9;om@OF1rfhCOAV&o&)>UxWMi`MM)&Tj~fcXP`$vtp>2ri5y) zI*~dkbtl61bRMgV#&5S84{Kx@!gN}5)E>KYRVPh6yOr()R3?+q>PIn%>F2Z$8V>^I zZHhiB4?wShnYteJu@4`MJ9n>;`r1W>-pVU%=1T?O#8 z<_y|ww0u67vnl}YWRvp4&u0p1w)l5N5(s6Fgp3|m1$z_bETy4;oAHM}{TCJ}{j(+e zod&=_7_h1%ji37t~2yc zZ4UH_05q;2f$elFU=3>)UCU(A;;L+wr<`3YWT{y`OJeQ$4&uv>IX)&LRiY> zF=Hzksiaed=4L^S!27zre%8cX=hRZ-^i&56z958_T2p(lKax(z;EwS;%qHJmDZ_C= zo-Vd?hE1nEZaVoOML3m06dc|p-m(QheEn(+2zppseoQ%j4ruHk=jp2VeqMaRVah48 z-+|ktCg}R(wQ=g$F;Ma0`6!d>21Z$?w+$tA%lXv@YXo_ZfX=BnGq@-SEy-bc3{uj% zGT_aSa^vGrs1%N4f3!@uJi!5>s8fRE9rmguBR{rb?(ijPS!-@Orp%eziEHNkHAuXk zXE1tO_gIn*q>|wIxRkSai2NGmz^8uko?r0AHb@5^IULXO3Zp&!+>PU-c<_0djCX{9 zhG}_nkm4EsyGQg&k;ib70*zh3l!a1w$%fpXVtxN!IX4zdeoD>2f2)LT213VG?DS$G zESJXOEw!4itK+6VrP>su3fgKMIs9dE#B`r-K3&49ms2~MJ`c-we$`PzPqM)B{P8;v z*rv(>&uknk1lP$%6nm`GZ!d{@Qnx zpzHkUdVIu^6o})J0)zwd)>mod*}9S(u6Z`?(Ya1;^UYTG3tQL0;QB8T_^f}&dGfDP z?*GK4{q(V1%A|gK2Mm#gBZ& z5TL9LjxkvLGu3zFc7+fl{60wm_?-Z~M|tg9Qs3255p{HY z1gAQ7x!lFocT&$oK~kXGNZOwkCwG7Prfd5+Qu zvs7>S#YUZ27FcoNPcX}5v?*Be=-+>w6uW=s=#ZYGuMu>+>(jFMn252khW zSHtw*!N>p0J^w!^jl;mkg3rjx_Mgsy#`F(RWNl^1YHSXejc1D1ANV+^f4KWJWvlfL z8r;;09ewq3Q#NVfJLAh~!gI>^t_3mon9XK1yyF>8Bv}PcZqG4}OKR{M(R_Vye0{@a zV|`=kkyKIVU?@v|ZpU1Y`~)}q>h_t@s08MP2jIZdaP|2SNSwfn-br)Zk~3Y4k|ooV z%_YAtQ8MjlyQxi#l@$O&ac(!EClt9UN=zZz${#ogW|^DuBlH#_)*>#AULnuuVyiTs zxOgK1$sy&YTnWh$ZqmgAXX@9UHL|n{lboG-Q?@VlRV|uCb*%__IQ$bs)DKbn$I>T4 z``tVpaSU$mddHN+$$?~mrMUmW-aE$F8tv)6Wv{Yr+qKHJZQHhO+qS*RcGW7|wyj&; zd*`P6-hEEahdzCClADY<^33G@Fq1d)`49dc_{sTUi~{~x;C=*S6aKwEA}C>c+{MBU zaW3@*K088q0C|f^n7+pB~WpgkVw)oy-Mtcx;rp#SOgI&LUEvr z-D2YLOLEl&c-+n3z(+7R&Gh$A>W<=1%)wb^`4i$9)@4cYLDM=jxS`X0`s3{`iKs^x zIPzowY7OC{R<3|c)R-i;GeEGoDl0%BT5TdyC0gkKHWzXCAIVHReE}646~Jx|<~^wh zTUDn9*C?VeHc^w+91!}-X&2f;Cq-#rwfhkJI?n4W2z}_vUGos}FwIDv5a2>nIkFE0 zr0`RM3YR4};l*pcSgZcnR;fPp-L4{-<<#&UW)h@3*eVT_e zjgIYBJNGMatj~MXPXf1U*z19iDZ(SBthK$Xq>kB7$iapRo!jFKZKdcI$@j_}lhd&k zjn1{0L>wu-EiU*an(jje3yYlS?}}}jnfXzr!)!7DTC#%d*KP<9f!^sO!%ZgHw1!=c z4Qi!$uM+zPb`3J;5$VH2k9wXO8>EpG=cgf&OQ}IwBh1r{Cv?>q@8)&&6LaXLXml!C zh$=PnEv9v;lgWZI(z&#CF0qCjgKOTnt)A2eE@|)M>yb~(w#$EjyEZRnPFng}H|Pd7 z#+@+ERc6)$w=I0vAD2qkSDs^Z1b4bVmwQ**9As0XReqL8_jkB!Y`V7;FNH5wj<*$o z?PX>x6?7a{$<8EIYga985jRR6ikGZ2bSt)wzxQ9OWskg{{~f`~1#N@T$n z-`9E)flT&q?Mga&2ycvF_}@OwK0fbH{L6dKu}?o~>7OsP>CoYoP^SCJAOCb7lE-xfBd@Wbw>&DJv(K-N3`d zIk=2ai!iTtjr=5NU@eGMHG(yqm<`k7s^c^0!vrTdJ_|hY8;lo=5ga4ra3l?835s&y z(5!^GtwzDBF#XkAq>d)8KY*gjH~K~8mf&W3y?J6bq`^HAF&Nz80V`nojLt%uWrbS< zViyv`C%)kpWcGJ9FG`FF8WHX)UM!&A^syq{sjkc)9)@8CAe>C{f#>M8k0CX&-C*oQ zBrP(BgX07S4Tm_JN;H)!MJKN?+%AbQg18qq2MLf>^iN`tU9AEMWXfNjo{&2C*Fmj> zclzM0S)t-YWK~shB1mt0ZdFm>Nwu2Iq+rnJh;UmeJ1e^%V`&GV!o{SpT?T@6k+cE@ zs;T0ZS>2=q+-MgZe_{j1<&ra9W&7<%R=HH=*#}WeF&(}Y!wzJ1(w-Qo-rR3(il7gJ z^9H^TVcKE0zJSm-%d~A2gpO@tdV_!s&%u#9E1JQF+yN6$qObR$t}~LkGGn*;Fn0$^ z-^(gx#q<|LiUrG72RMX&oRlt>W+qRj1@GA=f8wCFkjaT+-w`y$?&%@6|49LtA?H

    %>^)BzrudAWvI3DPX$dYOwRyreO|Kf3R~uxwUrRPSyXf({ zl{Wba~U%r*!7?t_26;N<|Q`QH$I^Tsacm=+6mxeyM8z;9N&riOB zd74X$ zBQ|x}p~hSkUyg3{(O&T!Gj1fiWH&h}DEg!IS7bZm*&oRQYY&wdRg+Xl;`ZVXe1!gC z6qLeaEbWG&z4s0i#wN}C`9q1mj|-MWkk}R&4sKG(ND8TQW-)R}PdO%WX4%Bc9I69@ zP!U9NY-a}9!fm*K7OMaZM1pM3)EHCe2Ktjnw!=&7-=sWt-a}zW5&L z-|myKih!vrR!iAHRISvI2J+S}jaCzIDlkcuAaQgRIAk9XxwsO*5VA55dJh5=KWK3k znNx|bTqALS8x3;B!)-JOz~7`f*E(V#0-z^UZ%kIwzg3{Mgqvn+NgkdnWSTZATwH;a z`A<~B(BxxFJGGa~3}pyqfinlPOU;J)VjSt>S+{%RN0z;=e*#C;3Urlr)<|d2S2O%L zPlGZKy+4e)(X#KqwETj|nr%c51{QECUuO~Rrm5$+t-4ZL%#f_3NbY5AY65K|APiff zox=om+;Dc?IkmRXSoS;Ge%A%I$E&W8TkdC=J6TISO|5nd7=3q$>kD543(v}|jVyU9 zRe6pVB{Ky#a*`K+vuu$iioKLW@8~%4TJeoKCa5;o6X$)C%b^yHBM*43mEa)pg4le%eUoy}e%Lx>U;M*>?-o-aK?P zq@C4P?5++wf5V2h>)Co`+I7#})!HF+cLVt4Gj&T*4GFjA-Q4wj!A$w|l78V*Y-<;z z48X>Dem#|b*qi-?u*d4qjsCE2|MK)J^za%zi_x|1s{4k$;mGOpeqd6byh-2_@9rPQ zj!tkZ@!p!X#QClNl5Xe4yD{PW01Mbl>Z<1Y(Zd2_MPvG$A_~W zxjxinz~6*Y0pADuoBH(6??FCy+qI~B-7ju0d8os0+5T7Gkka4gyK~>8@@4Qd;jyzm z?{6rT^+8dWC@EWI^kw{e4}G2T-#$=e@A7^QevvKFv*VL3IPV`}?>)~ijZ5De6N}?W zQXbuM)(>|TzSHV_VNXsTS`(aU_X}m?Rub$QqNg=LyfsgDkr0e;<%A_KkCF}*(2t9U zIo;y`c}WQ%kI@1%AdioTr<9L&-ULJ^$dzYnxw2R0yElC-WUhhJhgV+@S|iVRYB4cP`&5>_f;#77PYO$$pd?eJ^Y5O`9#MM;p43=uQl>xml;K?v zurxP>qMkoDUkC@b1@ogd-76;_mZJsl$KyAKpbhLm@>RT7)huySRh&AkX*o?k-mA&2 z>}B=}M2Ou%PDCC1nBRFk5e^5o9D=xhz`a2(X5B_{U21ID;U3g}pyoi2aPy$^sI=Lb zB(-2GH0M}VvJo!{wOKz1pl;QKgwdxxgkvt14vM1<_6}e3)3`GEOr&Ypd$_}G^KWtDT^K= z3&w9@E@|`FvwvB=o)sGEAx}NLyP{61wY`aGO_j^Lx1SqekKEH1Dz{(4vvbOB5G-?- zMlJKYYqa3r`BDKNyTxN#1SiNxb=ysNE-cV_c9sl3I%ufL$xK&in(xjAUcq_|^C~;d zEYYt|{u;*rR?K1lQk>qvlG~8@0$+8!ia5xU=}^OJ*!d11?VDDDP&Zr3;t5FrogW!C zOW808YinQK9;XVxuxse{`5cAsSA}yQ3RXS-gfk>sFdf|bvwdn)u$ltstvonc++ELFU*^^gnMSZfXP7y(8B__iehM-RNZsS z7GB2{4c{h0+GufbKeX_Eq<3Zst89-%?T~Uo08M9UNPH1#YzJd6YwNVGrv9`cCxY`g zKcbv{GjmEE#tu8=o_1`PcR}gGjpBpO&o;%R9aR6^Jqs^v;tVahn#N9YPPP&l25Otp z^;v8nWz7Yf)0M5&;aJugeoWFAxWG|#j=Nw_&4E~ZkQSLM{hol56P_|rw63F8&wll$ zFPq5Ap)z4B?HQ-2J?$q1%)&)2DlrL`pgw1!Awz*fg~ri2qecrzj2WsIKG!=Dfth63 zZ$7>zdKYfuA=FQSq-lDGBV2e->Mo0QDUE6diz+;RZuAHUl#E8|C8|(`%j;B7oezO= zH8Ip*o_dI?sH+kO+2NbQQ>t)YsZN5(s^VirfSzP}f>UfX*(prgK&o0N64XZ8VJfVb}-r)RJCZn z{#6AV0lq-0lv^B7I5nM&o{9jpM&H$qnnF30htmv@{DgOWzKSKyFGJc4V*eOzX>$=M zq{9g~Nx{BiuHx7yLHi_zIL4~A-qGHGL{8URR>|rbtr8F>1FJmI0VBCD_q*E*pktkWEf!{l>lyko%OMPX zdEyBRSF9j1sM0wr1nwBCpeoDHED(l~F~SN<7F?p7kuAyh1qfag)|f-#qJ?yRO20|i zL8($qlk^3a6`54_DXBrRvNdar2bLMut}-skXH19oKa37=>Q=}!bC=EwGCZ43lY2`c zag<*VXDbUc7Ke?2ip%EcE0*LM$kaR8)!+$|BzwNdvjDWOfx4GK+^!J1?tu;vKEM=8cq$uN0` z<85x~(K5%t&`S@U!UJ;FdI~#y4UqDZS-Bo~A}LyJgbx!`CjF z&8h(^#NZi^D>#*=^eT5tb0v}AX)MVSSRx#VnVE|z-!#fIUdg7|kQk?#h^7u9iDu?W zrY=(=S;)sW+%JSPtl?=<87S%BZFY-a)w&Fpxb)R#RLLaMFDWdOjMFlB0UK4X8kbCBQ4gv?twU%D8peh7GaF}G71=6O zm|w$fh%B_~BpAER&~QCCWnG!6QN9)%hp zjGaLjJ0$>UTA~fUW9fEWHB_8$m@*h==c)Nwj#2!P{UQ8K0L%b<|C&vLwL+fly6{Ih z+^B7aq>{RmvUy=mfrCLTe)r-cLweH?zxMwD7I43@+;##Dp~1T!n6N>5)}c|V+=sCy z=j{dc!!TqXi(A6zq%?ZPa^iUbAebTT<(a(ec-P)g`6TlV-52I8^O;@|Uf6ZO17mG? zP)XlKP~vTE3o2@JUd}>3RSSQbDMlZ7CH{ga<_Dq#tdPYt^!=WC1xtGjgzeeUnz};-cn3kj_h(V3;RB>p z=P7x%We+TSzFDpN8_7-LhQo37U`|8nH(+Az%lb8=krp)nc?k;ILd2?g)VNuO$-7vM z;i&0cDf>zw!b=U7ve+wHLCN7h*C=F~U*gVM6N*v)d_in+4b45ks1$;{C<^ijpq2Pr z22Z3ua8gD`&}cY!wG2f_l(?j|Hb~M+|FB62xM(O5&ivVgQbRk#zj07|U|9jZU^VIR zz2X&t3iz^U70wz^6vOLlQU#5%F{Hu=m9$t#J0=%YSX*l>U#VY)3(eAzqPWt0sFkMJ zMw|jVJ)t}>f*6IhB(tpTJ%hHL`WIV|D#MCuayGBEZgsd^66Rb5FY#kY!Lx(Vt&!l> zrp>@^0Qaf{gMyJJO3s*UxEZ`GNDBR+iGeH-gCezq-w-q zV-jgdMfD_(olS0O?J7HktsMz6>^CmEJxl^-IIsehp5URC}=? zx57+bvD#H8w<)=q8=c&N(DIhCflDgHly=O~W4f4E@mk*;EH4m*y(M$)GUMc$*;-b~ zYg-p$%BVn#&c-#gF<+i6DB_6*?bBjnJuAG?BBqjD(rjXkVTx!5vHMU16MuY+@fBs* z0_UAs)``xDI;WM!p)oKmmq|$aOXeubk_JC+X4?P#t}f}v8tc@HLDv+%5qnH(rNc^tq=3{%umUr0$EhcrYZ|gJI^Oe@CA#3?S2!&TKIDu~9 zie*ic*kw$Z{Z%S$0cdPvTGz~c^fYxSSB8YFz5nE`zhC|0kvS}1ddaJE1Af}i9d5Sr zjx0p&^R+p9=EH%v=cOI5^Gk#BJcmRlmYvV&qDk5Fi0*`!DSU-a>ef@=klWYyZgc>ttce_<1 z<@0WFp9T6kxmK6bgXfTE(Xj(>P}kEojp^!WWvjWyIUm1WbByt3oHez58`Glu+9cZq zCx7IJ=fazdi+yeTm<{q^=}htIPBx!&Bx4TgWAf_2n|B=W!%lp@>51_>3Z3 zrI)Ybd_paMGi$p3R=tAYxmNge=GETfE3p)g&gS$)^x@7V)qRVqY?~8GPU$?!ez}{& zp<(!A!aQZ5W-XY2M9-P9p2rImRn< zA2r#S-w6P5Wt0di^QWFIF|9&P_!HfUB+v7KOjr04+G&#}5 zZersadPpV@O@uo2a+7lJ8$upfw8^^oF>0M9qSq|@d*=!}l)H>cRkKnn7EckAyKM@M zG)fO~$JEer745Cwu%*_;G?%wUmkpXAPSdO>v0kdHnU$<98~PO{eN9ASfIfMoa3FQ> z$hqkLgtvsNbDE;h-99B+IB~y;RPxn(F-&km$93g>wQ)9tsC(HK(^j>?ZhzP7Na?M- zIf$Jub%V%vO!&FscHQ=o=^QcIbxN{c_{j^|?udL(hE3u)EXB6f%)Qv|=z+iY#;Yd$ zCiVM!+#Wnwdc8eLu9TX8@mG@E@s)bp^+!v{7M<)9gkF-md+{gGjg6{lbN?V$ESeJY3p7&yX{h=QKK+M?3|5x^8|KB83Ff(%ezvPG? z@3c`^pS-%$6978&F(X|7Vt>-Bcg_fZ@84vu2oivopZo~*l~oeY)nZK-vIyig;Fg&S zF2;9`?wFv(%ilH*Q5)?2JdTkY3nvpZ=urNfKgMbDdGv&2fwV)>rpR3OexHUvHNp1_ zM;rJSA7^>!nBW=*Y7BOLpHKG(NAPKR+^oYG>>}5P{NHvTqfJ%5K^3>wX>_o4>V8k} zH3aqrOX-IAw9KO+sczxUb z=oL7IO36LO%<>blvCkNv<`e=CrotN9!Z!Pkuqscs*6sbnwE>9MfrKW$wqu+1eLD|P z+^aM$o;`fc*7<5?Fv<^Qa~-QGAt8nKltNOe9Rme}hPrvj+Od!m5sVFplF_wgAurSz zTV~7e$Tr1+Y=XoxB*2^`FsYu{ttndkyEQpVfPz97Ehabxf;r4+3JhqNxWba(m$^`h z1G_bm|FkN@fi~D^ihwP+Q%{&DH!wjnq8B)pQ!dl4_$MIU=9j2QSb#DfvsoY*r_RwD zM3&@nl_;dIr)pCaV&x<{+GzhIsqMEfD7Zd2Q!+NAh^A1HLDeX&LxGg4V1m_%QEB%B zP@W70rBaWNg9`6uf{jYhMYIVynujN~rm*ny>N4$nzmmWc5~n#yMVPV!2PB(7 z#Go}(03qL@R?Qd!NHF7^O*M*u#L6e5Bv{DWNK{1~vJ@+hvCG%5b2ZHx7IVSuq?%}W zSG|r_Wu)VM(>#jsh(&EDZh=6gb}gq%@K5sjbjw&lD4^i=#;-;f#@g7En8S0+z6KBO z7$M6|Hm@jJP@3#bpEeYz!`{|}=n=s7T{F^h2ZQVR!p3EeMK$-dMamRfa2ZH8>K}+Q@OIuVQIF>6jg6J>WFidO?jfxvebBea&MxHj{odafR`PoPK0fu~>VKC_ zT+dRYZ4ZPW@gBwdQ??7bjD=D?q|75T+*p`GUd!D)T3&!%nt{e!(|5>2@5Cj8UYSThr_3m>kpJ(-j{T(&zOQs$*J;`tuNGIrCsS z138^mg+4VndBd~voS~o0Ud@(X&X!rO&LG-5)4;)!WYrcE7G4+$dqt)z97)xhsw0t* zsd1#iyDues`67^soK-^Rn)}CyBNm7r+pBq0(OcXo3Ys%Aj4%uzvy&buj^#*4B7&C8 z6opw9u8S!&aJEvsgJzrG3_2`hs0J>d(~z0m;kUT|l%$ReA@p#@a0xp28mHR{Jl>|$ zHG^R&6fev!)9g?rs#as+9IYv{DY+WiEhDT!^_D7Glj85y zp^{b`xy6VK_doqyJOmvj9iKgWqlq3 z1Oa6S=Wc{&B4#4gvN;;sPX#mtB!HvIG2yO6%9d+?9Lb?}$;hAme+SNFhdS>wE}x17 z&hMzyTpSuV&qa{Y=FeD9q1vRE!Rc=XBk#2jqr!B=$Za0RvfQO`_X;tNRz|GjD3f;{fxm6(RZ~-cyoCli%sgbKOU;ZL0cL+mXiAc*akTxQPKR91v65A} zSyTW9C~IU^`<2-SB?aNs0^VAQ<;B@~UWEf{|1 z#s;A{Q!W_psSqQSTGb*L{%!&*bgnut@b!7I5KFGYQ7{0BDp&qXCt>)T^!D)QU180vg-DNz0x1rwrbH=k zhKzuGzJ*Bwm7Pfeh1yKaVArilf%v+AbZmZ>f1U@3|1)s>p98_p|8bF^#mW?n5HB0E zvzEOXM&7eo=-qB6CfHcA{EBnwtQ8s?=~|1Za;L61qo|&fg)*GpC8MdaX(3uVZC49Q z4SEr&b&mk8-A2_iQ#({h>V&FubG==NjPxy4tX8FZ!%|@{>aFURy6h|&;1Y%{d3|L` z40vVmdS1P=%Oia_R-GBxoc+qAz~A4`Q%VN##bd|yR*yt6-Il@IphQ)2QYD;t7iD8_v0*Zxg zSL?aW3!Y>Zc4|ag{A%ERBAK!mo1^)}qO^#upx0O*W$DLIR_Sd~zAHp{L=g?m+_Ny1}yMKH~y5K_I zZnLgZ5;m11>N?DAF5JFIQ1+8Q-6 zfH7twjb{4;*V|m{6S_gjojG0#Cw;E*{qp3)j*^3*0gF|5!0YAjXY=697)<(o zHnqsPAB=#xcR$gcZhzcjic194WPgUQzdOTU;f7T!4zs3Md) zu5E~V)zjo16+?jue-4p(a`h>KdG61)CKxv$R<_u-O~l_OWUx!7gHpIX#;b10=py%>gyY*>(AS1X5RdUbG8RyMpdCAARYD?rl-`Eo~@ToU9dw@Mdp!o{RMWb6&|Bdd+&n<5_k8 zoVm3&$6>i0sjqYo#BUt~ove>cQSdjKY&*xeV{+e_bPavw1_mc5`uYle%Pk{!!Cz+#QU-rr0SFhulM39xkaz=+39WlP|MdQP7^0#RIyg8 zF@5G~c}vhf&vW_(W8Eok_;Z<>Uhd7=oN=iuD($0oO7F*j%e3JU{P*Zz_3|{yyZHS~ z%Fg+dY<`>@6)&-+!Ew{ltIw^Q*2%u4^Cln6lroCawig+nA*Z+<_KdBh_qhY!IrKF; zeSo^F(dVnUE5GRCf18oR@xOj%{?q>m6FWQSztq-hYun?sA^Lp#g62U7=Te(PfPm6y zK07G`Uv;gwQ(U4reDf>7jOjY6r%6Oc1BAf-(aP0zG@I6GKUB(SZ}o#jD#pK`R|#l(x>6eI-gt>H1sVe`xp1uc;CCb$3rd!V@Vvp zetl9*g+%2*BA;)^r^fEg*+CyYN*mu_;x7vJni!UK`<)lIxMx+rzsCop#LQ)vCWL&o z!dcwAEAqmyvZroK47OJ7c*6`YY_YAbE$7SKeA{H_S5r{;2VaF*%ev?uBIrqTXPpz? z54r9G6Ihx8TH{fM)m zBKPx^aZxYAx8G4NueFQap9wiVKDOBI@}wg*WxhNg4p4Fxl{eWTd`aJQYcDBtQit(N z%JxL^^SR$z%J(SReU~(KM|+z#<=pPAlZqpW=1ieh94}N-R#UWbI>-H$rJR6tp8(XX zl2R>O2^FTrHE(B~>S)u;%~l6*vcj#yY$~gol39-Jy?zk;!s{D{tDsCf3yyF2&|W&j zN*&Z$2BXJen!LVqB)7UEpGH*BUQ|YZ&>3Dl^TBG~npmj%TNJ3!hEXm-CtIc7m_l^H z_R$GpAApe>dN^oF^bc^54k!uglt{D+_lPJ5mvw63^c~5H%{7L6W+aAdGzdjXA|k?i z_~jY|t!EmIkrgnhK{UB8!=l-Qm`Q~O8Tpxfi*;nLLz*h>Y+_DT+58B?Vr&Eo++=wE zVys{dsV93+wdPa-{gO)N-$g{oFzqH~LxaVZ))9&B?d5@f6zRs1Y--oZ09wtW_Hfr~ zj!+Zp>G)|4r$jPqKH~LylSbVwz4&~anwgpuXoodMl6sjyrBp=h({Xo{SdiS3@QFfl zq(z8kEwmsk4UMkct}6+M41_3J7S`G3fpIbf7^4Ff1+T zl`}Vz!|3yzWke!a71DXqM6A=LIL5HxM9Jg{q+D2)R;^SHyL?SXzF;0CE3nH+o3%NC zYAtWcA}}T`KS%j?Fz6LE#nw%m-Ne2oTJ5xir@R$4I+ox#K-@tR9w_+P6xTgrMe;vL zxf-&L12F5Xt5fjx3?Cyq`Qs5xu!UeHfGyE_t8V+ZwKm(>u~4g(i_M*jl1v%n{a=7s zsf51psN_@SVwSL#0IL1)fEfAe3$%ga^;{`3MCr@*a0+X;@j!sq=&D%y)L+|o!k&TwX9yRCrZ}o?RLyVc==L0jNyw-Q#Fn3GUA?3 zb&hKghbBH-MLw92uOk@ACwT)#Cda-1w3xzeFF5A)Xdh2^d_LdTP0XZ4i_(B9vYM7s z`9L4Qw8ElNH5A={+3tR9{C;T*xUmP`*#YbAgZ1{qe)aRje!U37H=Cz_2?F^-hJ`XF zlht<}>KT=?mwq~&UV}+jGMLt5=nxhw+m8@nMs<<4BgIa`T5QR$j!xd>P#!+TxsK6s z3zAW)DgMJkSIp|spc4-zW`3w+?IMN8lG#WiG(phch(4~0!J=4?5eRKIyqee1gWymr z6FLTM@{2y1!YIdR#IYtr7TKk$?f5E$Hqf3ZkKRU1vwA+ZL32z&N;lN3DYNCSm7@PR zx$3=;I?EcPBuduiniFc?ibp%Y9(@zOl+3jnbSWi32(L9`vM4%A0SrbS{(8EwHOd^#I^@QrFyaiC$wlL1r!7oTlc$o&R=1(doAEp1y& zk{}4r$b9>5H=5TqrRHFiyi<@`C45-9iMC?NP~26K5f~2ofhq>E_fXwgrQ-<)b>n_- z5MDtEYy(=HVQhD2Mr2EUv26=Z6yj90N&8oEc0!lYTMEvZHB_hye=t zvR-wVp-_Nd?cfJqylCZTdm+goKdQ=7^pftjG4&rrEvoc&SH8C#ddB8i0}QQ5+Yfo) zJD8+%`CIg*&NDMmIU4NOrQ?%M^nd?C6@9(cyy>+BDyU{9qGAs<>yax5-0ccj`I`mc zU$4&|RsJ&PKzrl$o#y1V!ZmDD<0|JOEQ9>=j4FA!HxQCiW%%X-@@c;y=~?JhW+Bs$ z%`0eIWI2l+m>JI>Zq#;38(0dt^BY`nvuCW1gOhc{KU zMX0vH94U(xhZ`8O%4>P`B7B=QZJx_(tN|7IL&*jJC*CAteCOqeqV=V66ixjiGPk6% z1)R}K1|5YPj?N6%ItqTPZUf7LZKH6RdGyR5*4SwhYX|x`-v$pGp`>AgcX(_X#oUYb#bu8pED$Sn0h_jV> z84k6vNGTH-S!E1BC<+Q>>HXe88!xO;(TWKSc7Z}D|FVCOB@cn6C}t`|5SefY3kmxw zNLHvk!}wJ42WYjdP%yjKjjP_hs;+;d548o zT=s1nxZAf+^FSbf>-)B;TEHU#lLDT>m+eB4Th47MugLufol@`0vU3xM0?!=e0@%Uj zar7*D_rP`bE&p1ko)+~GrS)L*qjZu(wU3e+PQ`A@q14xDW$F$iA0L)8hDXkE+~LqN zp>GKI4))*|#H+~Lf`ze9!pEEUZ;zKXN(Fhi+R?7ErsT3&&djH3=j1PVIWvUe?mPal zNw0t73CrXipy|#W|dZoECSS&6+ zb`Kv7i1kq3ILAjE-(MUzgt7a#9(;_T@9qD<)61H!VpT##B26a)$;6zi;^iwxLXk5d zn-#17wpONbSWz%QJA^?66=rN)yvyM@uws}bQ?oW;t2VI;Z}C9 zU*@|1V_~dM_qeY)=XL#X$rvjpZ5>Hly=J1w6uW&4=F1D2>Jx_llXC@~`UhKz;Qzv$ ztBbqtuK(Wh!hYvq{%0txwzNHN2U72B-7aVU{JjZUfGCi3s<)gGVF!&SWI*=- z*C)ZZ$Z5Mq?aT&N8VU@$-TSL^@~YoekOZ>k`|BUl@r3WmWu?%?VGLzEa@h&Zyaavt zz1iQt8BZwuRNBq_cw^!P@AKvBdHs2I>nAsdFiwOe`0^6B@MUbt@wF}o5+I(3_`F9r zTQM*B7%u-&V*z$mwqK`~k8L@zB)I>j#RDjI6?Tso&bD|JjimB?Irj$HN{OL>Rp-CF zF?mOS;?5TO&ngil{eR9wXop95awcOY_Gi5)Fd#-h`IP#z;FQn#nvR;XoChj0t?q*_o_90e$eG3etZ z1?8{Wa`*j#ztb)78t57GU@9Xa-R3E_M&Z({m&+de9+xt33Oy~rYoEXjBBQnzMfz`XoRj>oqai0pLRwL<&aBJWSw}&|CaCuGJ zW>$M7Sb!#tKiuvGgPB_MwVKfnoBB%_WPp`S4Y4hzT<3!#yQdPzDwF*6txuzg`d1tG! zac|Itiq9IF-C6DqD!ye!ix}T+Iy}A^N3{d|LoiH0*GoqRyGkGxd7NLnED)<@XzCgC9eSOrA*gcwFH^c#<(Z}IB9hwk%UOGS^Nm= zVerbx-ndzTp3Z9EUWg_sC{RYgAfLj~DF=mQKKgo#2o6<=5tdfy%ozry+MZ7%#KfvD zPl@a9;I@+2qJQXere{vLS#a|BvOCW-nVFAYt?0&2r>)GzbnDI1TOBy|+v5pN2PWzZ zv5l`?ve1)4-VS5>tE|i83InHG9$OhECh~MT@8bxI2$qU2No%M{vrnD@TOuC$5Z>hz zNhhf&kH9TQi_C~NoAV^LTRzqkDBsD01|ExXz8Z9Vxlf*V#|e#Lr7JaMv&zQoSKI+t z8BwyCifwdUdzjcZ@Ue}+1KWY?)?Ih)AKi2udd<5}lWPoCXDcUyfkzwIf0O2H!#)v( zC3H(k+~&*%QURReKF(p$_yh>wSdO4V*@2Ti3{q2gxX>idbNg{(KPXfDR%j{)rq|v|s3XE}c!2WOxIDwFyH; zJSo+ms$*@oAQH7?eY-b|KEM$_#&K3gt7bX0T5UpEA}8FWIlbu@noX;ESFv=m018>NMWvY1be8qVy6B`P~pfc9<-2Wu+7f{OOd%nr{E1z zI4@hl9*C>r=kUAn;RIA}F0l`psTiIt4n1Y1#}CXk?q|E==ffjomvHQbN->Hd zuljm-ui9d3Lywo|k5#JPeZNQZYc~Q_W3M|D!TCf+zBOZAJEX(!Gh=CSpG*@dS3fWa z#nyJf{arbCC(q1*I=~fx6d)8p6u=cW;N$vUZw9a=2Qyk)wHl>@$fx4Pz07Zx{0dvs->NXA&pVLs&jHjm*Fp!(vWM->`4M)z|dxfZ_mY1N!h*|LD`f z6aDUwn-;yvjS@!Q?AFq87^e)|8$!HJpF#IMI$nxqiaZ*f%hV&Xbnu!gPiU&K#cQG> zwbSp*=4kc^qGuV2;xtgNzt z9!(fs(_qBHG;3H-lWQRhPA#HZ-)KqWB5UaP78%Y7aAH)mA`K^Q8FQ=A9AZOqID`*7 zFecP@n#TyIo$5MK)ikByh6y|TSgy1XNDN_oAaMwlKx$e#K&^EVomE;|k4oPPK|wm+ zH)=JoT`1bPY<=x z#3pcL*q2*^!QpGdTYF+c#T**2$5|@HuCa)Uzi=9i^@2>g`2sCrxeM*o42Dk>T%z_3 z=e|9z-6dcK6(}`w$*$z&^;oqHQvl1irmE$IVKrr;{~{4t>&W9Yk%hX1=PGUmzd7>(^$_ zHDA<85G*9=8H_!dLmq@WOdWoLtAnwP|BL79e^~SWzeB+P)3*BmUcj?da*}3=_C9ia z+C|dBgMp2mMIjDg+^dAHoP_Qz``gX<>zZ6Wsy{6~-M&7Ys8c4%%|Lw zq3T~O*E<5{Dk=W~!fYt!3Es^%g6swdZYDURpvZ_yB8|5b@prsjF1Z1j6HPap_|nV+ z(6PWD>>U9kIC=v)mOA91ej|8fh~vQ@C1&on5rTlDgAI+;-*6!_1v&7v!GOZWU#HZ? zDgA@12>__N7^to9jo2DsU5j4OV?Ur$uGOl^NkGwQqa0YGsp;~-LQSR;plM^(3M~6$ zrF2A+2;+m=;W)nVawn93;pLM4!prgf54;>Gj$|~86DW}k8ZYk#og;EMAvxfr2Znxa) zucZ*vtsI!yFRp5u-C_wwrJ-hiO-NJnwNlu8&C;WD-~O7VQ|}3yt;9|-d$jJvTp5a)nyw)IBVSIi-4r=;aZbdCw7u-FS^6t!?K85Oxyd7F$Y`}No-1ii zKGhUQ@S)&}f)QZ_J0c7+6-1+hNM1Tz@~Y{@Kx>h@IphutCeB(xwAa=6-)HHfU$b<@ zjjs)Vs~p}zZxQ`qRcCy-ooCN^Ee54m4{uvXJpNX3TKLH#$}e!{@X5>X+Wa;--h1A_ zFTNboUwk>GFTR|}7hkUAFTPxk?{TBV3v<8t$BH6D);{n^i?VabY=*DPJm=ciNM4twTS*2~^O&m6`&{U?y#MjT*+VB_=RWL!TjOHB9!=+)FE_uX#ARl!Lc__a6pAIf&&IY$6r2)N5HLy67FNmlRorI-hyKgB*){MJ8Q zofi3#(0tE-AzF9ie@vsq2X=#3FrD?G*@CDKa|U$j)ARd?Y<_Fg_w5llV6)*o8MX)jQPJm4UM_Vyg$V*-?G+@-589y@WTO|-v=#i%1ryb zv@TsSR^~)gC#63<&&Hm8dHKBG+grWcw%>ok*d>)bkzDUzr%8W#NQ6cT6IW&{zo`%J z_?=@5;4E6hAsQ_BzxG0}s;`YcpOKXMZq3ZRj`=_UdfzsE98QpT>K?~>XL71ER&Fy^ z6z83a4)0Psj&jC2X32ak?arQ!KiX$UVrOzXnSN~ z59|7M=#uNFZzkMp!k^rpqr2U|uh6FMw^v^$ue5L%?JwE5lJo95y0bKPbrmHD`oefc zJR*hXoty-`>ne|(718?uT*a@w2arpTaOut|b5}HcklkUL5)W0eJ}|pZ-b&Y;X6&(R zx+NRh2QgTRq^&6D=XwahVZshxgNX6$Kiv^!ePubyuj!(uQ|z_JA6=C~^cvc~4=umT zfD`{IAP{t%1cPth@$34s)qsX8wava0N>y%@c_@IOZQn7DW!h{e3-9Tqq<2T8S46<84Li<1RgkwK4!9ViOrexE5B#iO!1 zsXMZc+Jb{9SHk9K82{Z@lao&K`{^%V4K`>+<)J$bYPrd<;HDHdK^{HU0mnu5ea^{bm}6 z1@-EH3bs+$=}~N{@goaxN+OV3BSuQ#;H=$H%L1^#?=ntpLdo$GFB)AV)QTdB?6%2< zkATK4GVjjzOBzuZBPaGy%EmeynZfWBqQ|a#D9~X{CAJIz4QM!GVJPt!7>QZoddDgj z1R|4xvATJ6!qiL-A`o##dKYR}f3yzi_^}8KqH_P>cvS!r%nuyDa#(>wplnO02~!cX zg`$FRv1+AuYe#i0|8&q&uqOoyc9sFRXb+R%ci6-u0(rogXUGMBhI+AdMX9 zT~B-w5R;rjeVQwulE&AJmiZV|DknH6mrvv^gNz)_HZdyKL=`zn6uPuDK}>^e9O*63 ztCbHX$t`$!J776AC>#9Q!9i>amw7y-;8#s*I@wKNZ3r+keVujvO;#-U)>A?ok?;R- z8ZR&?M9P7#A7TEX@?G3yg-E@bi_T0bz}?aGxI+auQ%!OVf6l zwse7zX-8m{Viizof{RsB4QU0i;WTEv{V7dp-{|YJX^(UX-&5Um&i-^@cAK%%FMaR* z5o>!A(b2jGiuam5q~i|Au1bn@8j|y$G50c*fBds(gaDS@4FOOTR_3g;V;hfVkA-eA?X+#eykt0ToX2;Zd4)CxDZbz{h>uBp4wt=tsZ+?l`V z6>Dqu)K~10xifF>T|D*=zc#SYhD#DBpvR*PZ;PI`yCMn0h6}Ssbsa-iz`B&G^^LGN zvst2QDG8yzH9qxKcoP0F} zsjYe~ha;TKim&)k>cEx^>$uKuRW$Xrngz#>eVQxBBpB?fmgvj0aj7XY|=uN+NRBLFW}>y=D{ zNqHK-+%OcM8N7y)eb~mRG{40>5j@C9C0XXlU!6%y76;uXO3`}92Z9@V)WpS+gV3y6 z5{OLi7pt5ng_Z-yazAJw2kGUP#u6s@0~5t3PzZ-f51|ryjD8MzpGIN2$`eVjXi=i{=FOGz z6e##zI)iGWBbB5)CWBxS5ia`x4TR0g8f)lsR))DfxGo@Gz_|Xt`fp0gAnEE`3&m6(7IiG5l7bW}i6S zX~$;WLHK=LP>653uiO()HsN_a@a3Z?poR}L^*mADZW41jGFD&^Dm>^ipR!ikp{hOK z?|xRU97EN3PUpE7w4or-c~)g|6u0$5X?l9yKb5xqfeQ6x|0TF^ObIb;rDtMLJu`XX zf8i_!-XuJS=S zJ>EqO8?tF8{m@_;y^rhHAA@D2bDk-#!u?=P@i!fVWh`sFDXyZ%Ax&{0{jbyc*C{D5 zqNS5`e_B`DoY;|^_{Xh)QJ$;S+I^E#VPHRCs$@(zq81qj3t2_f_C6tEt#7Y=H)hii7=_i-g z+I2K1!wlThj|KI|h_9sh5J#ur4!KZ9_MbIer)g{XoN=$2+%>G6t7*zZ-Z!Y|We`xQ zqLs&bSSdZiA2M)esAc3bZ9nu!Axs05c}J}`(;D`A4^=a+u^&xY7G*tnZG?SV_ItZE zkc@|HqMF!4$(ilbDzl*xrkzl@Gau7W=W(YGdY$x89=A?r;UBj!w9q%*%p*89-5O^C ztdk~T5ZS@^6}qT6A+KbKyl8(|1r5PfxUJagHSE}d zQ+a{4WJL+Kf!b`*MX4LOVi$lql(m4^Lcp*m<*i;e`?;+-qfH_%RJEVUJRXqq;Vyx^ z!G|3i?3_K}9+bxEr1SJtp!~e+lyhDX^rAwL|8r;P>0QRj%t5Qgb`ZYs6Um-@mHQxZ z%+nk!OW`uw8Raa8X%4i9*;7t>YFkBn%EuaE1*>5;+(+z!*(eX`HG0*2_(NR$qVCRg z>jUuF8>6|-CGle^RrQblBAbg>C<8->g=A$*yz)6;jWk6Ea>kN*mz-nd=smGD1*a$q zqRNh>+#IRonp>hWOFQ`AudJSFl_5PP zX*zxVQ1zWx@LV7!bo0|J0ud9B%lUlYA%2bEqM(xLnNsG{EyMZdpT|0qJ=m%F5o~hn zuP|MAR^TE|Sy9o^1T1@bX*jc}_a8o^)V)rmxED3x3e<8>rdY_qrv22btkj{C7(k$k?9@LNj1+{YcA@&>z&WJqJtcDj_X9QcTS~vFPXu|*S$^w zOWk_?sXkZBd31oQagxa!Xn&qY9j!4rX0)5*i*SI=)QmPRx%{2ut*`B07VkZDm0V^| zpF60JoluthRC`pR)H~$yduJViH)Y99UcSZkd5SSW`1RS2!TPgG(ds}niEasWkoH>h2%_;K@ z{a2CVp3J%4T;mvE2e5M|g)nP!{A2m#A0I?eAfFqhkXw5>N#zPOa zDN)T{idifS> zS&||3`h&a&zg>*avP8H|U0c$XAnja&L9DhSwz>1DaYV1WSCVfoLG9bL_0Kdl=KI$L zK`nEs>{F;ER>TY-T#nJu|c}=4Z{LnpdbDoCnlGP1N zc};y!ZSw8D2}h8qDDzx&a5Tn&JxYecFFI~N&!b^caFD2 zFoCwpXbFOk7Qw3=t{AAUvSk3P{nXjEeXQ`UWshVWM-m`0VI|vQOuzkyT4%!?&_2y` zwz=6JaU15--bw!5*oZz33+9KVj6PMhrp$rlL;Lh$4gzG*wDkoh@^ye&_{>-_(Gi(1 zoXb^%-DwO$lNP-Q00j}pK{Sjh%LR^y;yo}A(vO; z=r1iTx&25wADdU@whz9(8{Xm~*BSP7&iA*IySIE4Qr*tNeCylSCzlIATAmR+>VCZc*gD#YnB?1a*f3qG&l+kRbC+>ni{n{t zz0h-w)_CATsHJ-?g!D?&U6ezg%snS+H}!jnzi!Ohpc-y`^s<<3l=m*r*io^gj<{~0 z^!t6;sP0q#(%7`MHqwaTi#gY5?z_6tIJCWX+(_Vud9&Kum-R~8yrcPAz!fP!Sy0+= zPXAdPE&U@sNQvekeTeU%So3;`{?i2O$|0>!iFxnq8ccJc-6g9J8K#LASu#@Oe8U8O z<1Ixm_^YBUJ^)0Sl0B`n{6IPyruj7!X~JwjqyXHL7%p;{8*F!?_bHw|)A|){tGkK{o#AMD0T&-S9Nn!$RRt-**RL$H z*VQ?%p>09RnWOUkgokmQb6?H$D~n>5Avg>}n?)Uv*)oOQd2(!LKI2G={a;EN1)hFw zkey$b?BYudpdO{af8#`wki`2pSQA#{%goR6uKoMHTNQ0TT*z_@oEuJqV=G%PL}*h` z7+Ld>DR9Z9{Z3-Nxfki03}u=><3FSnreLO}Eh@(A&&r~>fNLDI)eFI>LU%Q@YMAh> zp%N7mghB?Ly{kDH>v`#669N%4Y3gu|YPi$^3BwkyYgdJEk_~YlZ_WjY07Z$QyECB@ z0}0U|$Q8-BMl<`D@+A@m7LQp@1%(3X`=CzqDwRv`YYcHxs?GV;+4+S}G7a=s1FY09 zk>M6SM?rlmq#>b-9-8G*@bNYJ&OfKaTZ%;ob2v~7^sQ0PD);D7TfkAbH@_9O!h*k< zfKeH+z5cjG4@od?sd@y5mZGe-F%2ebH2wh ziFvl2oey0NZ=R&{^=;gB1V^Iv9^Ao%4gtmQ*uES$x$pHt{Bi$8OAcd;eRZsO2Ty0v zb+1V98PI4pAN{rA13LpBj-8ARQf7*o<8OEqgaZv9=3LQcpg21Ni6tbjXZ$q z`yEuJuHWLgHw<$vK)Z|L&D$9k=X|J(PRnm59bJdvrT0DLOs;;h8N3mV6d=)%`cC2i zt5&CLNY_Pf{91KUEPhYZ^<19NIook=`t`&V`7VDXT#QVD)-W3*2H@BcuYAFJc{a%- zIeoO|*2jO*w{`XKW`B?AL^DrIWl?37jku&}*rJ$C*j_uQ08A!4bQ}8m_3?K%YWKf# z$@#oUe&^puzw*uXdpf#o1p)vHo#XpopM7mzxavrt*y{s7bawEUu?7 zA4^E{;e@l9TJcKPrN%eu>fDbhvjS_8swhEA;z?Ic7cTRQzUr^hFY&eyE?=tO9|d;C zU=tl?I(L;e@2IHZ0`dUj7d*{_B5)>`_!lhHsyliT`*u<#R;uH^&#`kA78um)BpVNw zmFX(>$3{Op{a*5o=Tw>_kZa-`%;jld43NgesFj3K>GHWkl`ZX^O(?L7@I)k*B%jab z5vse%HCV3{Bk*rr4a__({N365{(axL^c zdCQuh0CND(@k4T5OAsNTU*w83{|(J}ewo?itn{%2Y*aZb8>{ zHOf(tGiOZ;;k(J@^beZ#A{~*my|LB`k7%CS-k)xd z{-djWC^t7qSm$GcuIe8{(o4PFiMz$$r-aWtK~c_^$8OYc z!(b$94Xq3;3}!9?QZDjLfjq?(4M9nVVxFhjZJ|nSx29x-aSV+NEWp(KeK^DS|FNu| z^lz5c9sk9$x}!pWtc|?8t;}g^!csr+YRR_K57;z?44VcHt=}c(lGocH z_ur#uv|dZ}VnHw0weF=%(%i=k!y~PPHz5DUWM1aktz<6{?LiUj!Kz_Vn=fz6e=zWy zi=rt1sp_cQ5R21nq<$rEwiNl_BdQQR?0vdJ` zyxVGqb7Cpu0b^pAE=fc|@wN!9L^0;XXv6EFP5!W*F+v+&4;S}S>cH?%c=Jv6yvV;Z zndiTl%x%-!AqUHA##3W|r0XMR4)(hAgl z9x6_};|h2mHKy!)ZuXPq-O!bLy4*W1*DprO2z1b;{eZkL{6ai4P!XtVGYV;ZW}b(x zDc&l~H)@OF!?Iz#2EBH3j6g?upn9Q?_;yjN}K1pl56$HH7C_V}Q$Ykce=^p+U z_nCi)r}%fiaTZ1<=6~{y>#W7u#z$j)O!bM zle3PWb$bVXy73^vai2)Oa&9$KMX-A0r=~uaruau~1akM%RdIC}@^h0eDt;@OCwi&t z69=zd%Ukbb(jsQ?4GL@=7fl6DWMBUg9tM(jrJhtROw=^&h}XlT{5p1H#W>Z?C)F}P zv8TGIrL}I1)cW;h8Zxn9&-}sM#x$}P3UdkOM`JRz2AA!j4`?&QX{20Cc@P)ka;U!6Q#qWbg z+-nFud!PB!)Rg_x?*Yyem`71uJ|NuEybGIyjbs0MEO4z{z$i?>s2R4K~d?NZAA zvE@XDosPnLubHg}?6UZcbo-OiOW4yHW|BwDpZE+M@z7l0YB=%%jQIUr`{UWp?nEa- z2sH(}FtX78M18O!hXnl4M=G4HEV?&OnM4umV6kQu&lCOff%wAqv9{P|b=lu?1+?)@ zvFh9*&WnSENbD32a@gL`sVi2KOAwlSJoP&4HQWwPUZs6hmIi!ShK}cAhM8h=)_)&3 z{&pK}hj+P&56lrJ52|6fnh0q$k(E(wKK`PQBsKP1cFS?Hx1ID{7RK<}cA>RQqA=+$ zHnDOFI)82mzAlNDyDZ|j!L+E5N3gxyBYTpoQd+anBbuc6JB0MXlgZ08eSO3xqdm5C zzxebEeJG87{$l}71G$Iu1#o7uRzG@K7h40edaeqHMYWirIgqti!B(y&w#q!HNh`4Ug_FdEb$v*N%cC#cow`Qh!bM$0-f>ChDh7=`7b^2^QstMm~ii{(=$ zs@6ya`-8|d7;us#Uwi)aha#g>#fr%2b}mj+WCcsp)QJr+5j0`R#2`YKtRpf8^odHS z4scoN{=a^s3$FB)YZ8Selb|K)$&;WxMkgDSt4-6VYP6@uN7i@+u7?mu$fidSF3|^T zCAlb&Kpn;cja91%S2AURvLuj}6A2%ZLJLbA;^z{n0T)F_j0eDA6*Z!c(9;rfnnY4k zMYtMLn;e)&YDPH&jnkG9HDM)MKntfnUoU_I1{_iOy_m@NoxddziX$gCyPnS%MpNKL zt0*R-YNCk+S~*u+=445uSgX5(1Oy|F52m8ArkU0J=%1t?k>GR-lo0VRg*2LCbHyFPORwOh| z)LXXYPCD7rW~P#tBT{kmBj~lW6uFX-M}4CfTO6$!=SZt$v6J=fY+fu5I>?y@OCg3* z*2uV2GA)^w*U6OSer!2Y1xq0z^cXq|pdXoNe6Etl;>Hhi>)LeNalx{f|J{TwnkAU3 z`Q)vsmZ9mV85^6MR${Gcta%KdlLmgBzTN0vt1)Hz;BTuLix8Yv;>9}FI7QH^%@#Z~ zHF@0NXk^C>>5~dLHCS(SscF_}?Fbs24CQF=waKZ{rro&M6CU&RcGuqN%y3)L`QpXL z#SsqV_(WiN_P++2gG=!b#u6Bg#nm5(uU?Z}JR!NhedG2G#;b$n#+OSB?%P2}Zgz$` zHhG;$6ZWqF@X7Al1!)=0pm(R&*E7VIV>c)i3gjmwqHB+#86T_2(v{hoY6mMw6-QDI zyb&pD2aX)8p=kg4xvbuDuRuvI59Qmr%B5g^|DI`Gtr-Dg7)wZ}w})G$P!sU2@aZYL zu+Yq24woj$UaT5Pibj4TsFVG?onrVQrfkm``?#d|NCO6md39m8>kO6aEF z_+gfFr5x_3D8@|dtd(ZUvCiUg+4&tu8uCVJJK;db`XE_z;pmzU`rG@|aGFy}`r5Uw zjbW6t$W8}BS4X|c8trCC(zl)(X~(kBdB!r-h{{mY;A|_}bah?FV~KIlNKso*Mx3y; zXDna%Km7yo2ZE>8KTTin4 zGQVN55@*vw#G3X7+c^74j|+be?pE9g-E%gL(4fPjL;hBv^JN3Zqp!fZi+Y5|q0{4& z_0Ynx3AiQ`uDZpi3;AQOR?I=a?t7ndBo_F#`Affo=kb0tOJ4=RbVd<~PFDq14d_>q z89VPyRd3U)4K8EpTA%4SS{axX^yzqmCAj;t!LWUhin60kO`u zojRVnL$Cc0BSjJk>T^n^R~;LB|R-P(nGyg^k!% zD}oy&;UzE&E7lCg()|$op*aVaSA4^R!5M}FSZ&*nStPq}o zH-$6?%pgq~9vCwCps_b@S+| z%)Gsqj)0p*3{oJ%x6F{^_16faf_;aX#aZu79?5Orjd!pdKNxtoGEVFcJ{~xeLP-B? znI+RQUNeuMaBYsq zDw(uOmKHKXiN;MIM!eQTn@vc0ajufkg(W58>}wWbpwMKXyHvXyilX>3GO-C=5u2vU zzS1;Zkd2b`uVzv#(qcYOnRruD2UVrnTFvhrM-WsXhl`DUxCJE^)$B;KE*Z&WCkfRw zu2RJjC~3JvC51i$v8+q9E>g{2L z2(p}k-n^t#P}1-GtV7%dF5BN>prU;fQZpr`QEO92jYM*22|iiq|V;M^%;}>Lgkv zBvQ#Y%~Vi{8f927)1y^N|M<4&UtVdN`^z~`LQT3}L6fKssxT8C{+Uru7E@Yj!C`%t zmTt-LR?ut4+;HF|0Vptcj48=}ag}=3N90`)RMJctUtQWqM%YKbZlzVp zX)ROc4I{vI9H!^`xVmlH?kbnhghue|Pe4yVy{UEW;@bz1C$=#l#VWqm6wS%^%`*3u z03wz8@;Ru}-d$%aPJFYXA9Ld(QtAY7mDln1oC8io3HP6m_a;@SK+k+TT=Yh^E;q6% zHyPIX1g`EZu0^tw*so~ZO)hhCiIw^Q4?wKj0P5H-yP$J>x9^)~TS1!~x`v(!J{LA$ z8wqX?zJ)!sYbJ!ad%+v$;IGjN_M3t_? z)2?H#q)``Z-RRtlhq80VqZepQsl*St?IY10;}<1VXK!y6VbMM9yuL1L*#0qcD+;!; zy`j#+(_}a2Ntz_X#`D&+oV%LFGr$MfIr#o{h8K*}NPqCj?>K&FbU;Sr0G~6b=K-k7 zn}^51mJW=yzI;3EASTlOTK?IoKpBX&ASOcX@bORspeDLsmtGSMwFs+F*J8mk;rK-7 z$V6>-+V}2T;v*lZVoe5N@DP%*zacYX?GTo0pmE=LRB~wf%$$Gu>d4v&R=o5s&f1FB_hCW1V{@SbM)yiJ^cEXM26 ze9Kk$&q9>5rhN}T2*%9n!SD4hzU}zCit(MToq2cE%SZbYf&$E;+|Il%kFBZK-Q5)Y zkq48<4|e?Dwx_dZRc+Cpwh_Gp`l6KPs-FZ*53vNG$HC9agdu{zWDw$A2)f|Jx*t|K420jQF>ilm-(_H+w&BfoN|H??i`45RZ z|F*gK{rf+q8v}SYVolm&F7MG!JbtDAcY-!CJ>mR?2G@W>o zE@zdQjvyq)`MhNKc-L|f$$d0mJma)SI?*WUA)A@lh?YoI!MS12d8{g zwxG#}G=etcU3-24zPHo1yw6XAFDmLP$iTzK4m>~JhxZe!FcuIS@%ZlNM;zd5zWA|Q zkKng| zmA7&7$s5o6{;&vwL7w)Ue2IL+R7H2c`{_sjsye*)z55a4?rv!YO=^!LoP-HEI z+wb$bw}(CMW__&edL^lXchIy$_>7g-!JAi6+d-SpEy%n_RCwfg>Z5~f=Tu^ZrdGUI z=6bHo(aVgmim}S6vTHZtIb>2Ygx^s;{sI1DYSoyRH+#-p3-FF(InpC+N3!f!qvV$*tnI>z?qrJCQSatX-a z*I;^?XKzPDtFcEs_D7T8dy!otB3x8l0+$(pP#DXmqBQ^^J;%XfekVj18!8=8B&~fP zRveDzZ#U==|7qYlSJrOn43?`%9k1B~42on?DIg(f>wg$dqypuR5jQ6KGB0)SbfiMG&9M5A?;a&;q zPoRL%kKl5{G|f1V)iS11- zz!yI2dNmDgl8+aonE5rg1PRpArWOD6opoBI)pF4y&{)HQ(E@dmO{<6_kc)mDt33)4 zSAxhSEktnXb@gzK6oZJX($V@mo5n#64XM!g8m9%zh1>z*{bt$BSTir8u&x1mSZoDq zq%Jg3kuW72>o$%cXpD_@z(PJ#1q+P*GOjHT{qGIHcK&{oA*`O!FT~=j?@uZsm-+3d zyM7QO!@dt{L7vq&nBE(^7sd|&-ft!rQrd8+%PjC9kE3Zrn8sS4OqeMNK{5eV@d=t( zK{{m~uwfy*QQpF*w2cPz4sD^U#B2q&up_#I#;f>?OrcM;T@K$*t?(&g2go0&O0#A; zzS1@SANJldHj*ye(l#@cnVFfX%*@PAGcz+YGrP>pE<>4_nVH!xGjrJ!wivk63IhGO^teVt}K&0Q*+r>*U59jU+Q6*JSDB76Lk?l9Z{$?<8r#aQ40(|Av`a z$h35&weTK?p{qq`sga*aZlg)%NS&PFv*yJ+!MCL0IoTe-9?lszYrfpi`l($0UAW#* z2b`p90eoOCc|V43e4s`pkq!i+5EHZ$Igu}fQTOG=9=*e75B1rl`ofF@qAZesAdYe) zHd)k;FNY1#KhtgtVxSk{RZPOSZ!t4MzjNHAvYQL%g-*q7e4MxB+9~$DY0&o*>6WKzwf?_h?YL+Z4o4Ok+k) z1+>K-Go8FiG85$YolaTtpfopC`np~a83e4v`b`puiN_r-(^iR>QnA$iq#SXEwTS7; zr!l@il!jDuh+vt<4O7F=w-L%g1_+Ea@$+!bZC8RRB*mduP%T-EY~FX!$|K@(HbF4Y zB>q7D?m$F9NIC4LhLr zTJ&I=h3=FadO_@90L_B*cX7FN%4heUbI8VURC^or-V2D|QidT-S6tsGi2--%l%KqppGlK|~?(&CXE zXz&`EL09_l@y61P=a}}os4ntnaRkbH#E%vyy7!e_VT>i@Xs&y+=CR7N8KvHGd)1*b z!>LUt@(i@tuq6vv4A|W!-c!!=4N;ww`@S?{KkZim1*IDQ0aM?EA+Mnn*~*%>W;C3@ zjPu7c;;HBUb+7KkRFW@3?ME(Q3?u_&UX}}dUEVY~I#GfO1PrErpKJHmfq=Tv*_;i7|R>zdY9z+8b(*IH;m%CH`(wZ*>~p& z=dv?pGq0f2vC1YC?j>%?@u%22aRt1*NgAOXJOwE#br~vo>p6m`JOY?ez}k`^-cWw6 zU9kcbGQf_S%n*zs|C|*wnJDe)8y=<7;ANHN;@ErNkF#2cxcKQuA})W03ZE_RZwTOH z6CR(vc{yyq>TRRL(W>~CEcr#tp*p33sZ~U!;TIxVqC0uuRZin`bb6F_O`ZO%Y2q5@ zfvApZ8ihtacNxX6q**pK?+I6y8_BpByU>2c6d%nAQnRKQDp4&^(6T}fi!{#QuSETv z5$Uo87Ez;Yiz@yAgh^;WlELLfvNNd*OQ~*B4CkLu7#m(Ro#eBjuEh#o{oDzb((%Cr z%+~mngdmGjB)&EYmI6j)ieZZC%-Mnv&Tkd2dL~LQcvw%$n^p2pi>0+zfl=FW?hBe6 z4q8u&t!6DNkxnsXch$0DgrZ!^R<62o7i=UKb*sFTCeK;rkvdk&EKAB(&6~|tE6;A& z0o@Q`Oc*!fdb2y;)*yI1(m_e-72Pfjzvh~=VRC%bf}&{i?RZ%c)hiiHv7!Td@=VqV zmk4j!#gZ93wqGBKnXS`3fw9=5L5ek~`>%d`FXaJyhyNZh%wo&-Y@*iwmDp^G*=7v> zqJ0i4H~Oet;7)^cKuoeyrBCQeB@z@rAIZQeA6z_SF3LJFbD$#KszO(TjZSvVmZq=l z9B&;qEED8YsX%_bIDpIcUCxkgFuDHD8WZ$;3@$qX%Xo25rXK}?R=}?ZIXL=)9roxS zE9aTw_YuNWa!sCA8jf*)W3rCVf z1B*g#YO;!c7evmkJed7BN*+v2SUTO&2iMao|7JNjt-_Zvw9x9t4U#<74VQZVusxm_ zi+7SXI@I;ywW?v#dBHC;^*Fw-rqz`-SWZLH?eTuZfTJDPtPR7ZwVle9=Zgb0HhO$8 z&_xaWUiLID$@r4AH_!o^C5#zSLhw`7-Jdjz3L7o0RB=2Q672iCYm<)lBe0l zR2qd+mgUHw#2ZJ$^J>nw?BXrrybpa-8E$Fqt?D;2o*$=UY<8t~_7E`Jq*pB)TL`6_ z258sTVrT7~9Q;$VezTg+ouVI}?J^y{(h}F$^6NW&M}}&Z-{kxxcC-arEvmeX4b84D z(;^PbmPMZ0DWi_B26XNov66I*TSD7j*#cQ^4s+r={Yv)n`Oe=o)J3~8E{hu`mQ}3; zxG3@q&pfV@%4fPE?`(mum9}KQ2~TH2pZ~Vxy8)m-P+>=F-&&ioN_iT2*-*9i6yONT z+1;MM~@*0KM-q!ryiS;sG6YkE9l3I>cpz-2;S`Ai0fmqF-LySIU$tf=et@`=2{jE zI2wBijLi&F`R|qCgTe%^1Im;PrnJ=z{DvIz942l{L)^PEogJgTMU@5$({>oAp}Ak$ z^BI=FMveZ2hcdCDGO>TXK_ElTMW{?Q!P2J86Qz&@7pla5i&f?l8Y$0$E62@0+-JY1 zcNOAE_^RZaiIBLdlMo$g)2C|FbBwokY}E#-OiDanwliJyU#f8+*RCJSSvK!w7jABd zFS!k`g#6;3p`X}X6sxtwN&@i>K*yryAq&R_TI_0@ruDrZVnw`;8^`9upDIfC-W`jEA`i*xz=Bby*`&)-_ zmy9C@xu2e($}PIs-LW*NTqOEDDT~^Y(t3~EV$#}tnT=H}Q&6*|I1&w`R$BVFK7k2o znU5A9q|1&ezAqbtCsB{Xmk$zg`R-iZzQ-uwW_(X>n$bC1DeEqJl;IfQPjq^eJ70~B zLKeN?c3NXyeo2p`N{qC@A!k$gPlVeKGL8`Ck+f6XCbs+2x$Odn*w>sPjFc|#j-q1K zPiM(b`39-9{3%QKDWVVHi-w*4|6L%(#r)qwOmVo$H`HkO@T0E(st_|>k%ZAiUtRlHtLH;yPRMQ_uFkiC-Elv8Ujn62eX!kie);a4569Qe z0uZ1837S96{2|-;n-3JgAy&;|)F<9=mEe?O*oLEoAD=R+{w($wJCAoKo8kpMsC=KE zeM9V_q`+7jeaAmbbLYeO!=^v^^1+~Tzf_oNWk!K~a?Kat?e<;qqzN*cUdrQk_itWT z-{XEh9r$t(#O<%MfA$|Mef93(O}VeQx0yk3$x~uE@=PvWaqQf*^LZx1 zD?Jv?c6nKE%EDLAedsIXeJGpV*)33HOdCAgfj)Eg97jphOgo91KVHYs2vcek!>Zq< zsi!PV^RaN?^^K^NagV9x*?ZxZp=h1B&!9i#lylFr>ljdc4d6tk7C$6_F1i96V(!=% zH?_4H1ics)4N?`uwo4^{1vuqa7l@s>`Rb(Xjxx9R6cgjh?z%Tz4 zeTcouGOFBG&8FN{wNWwQ33N~T!eaviH+3mSRn+)LTANaYM5Yn-J7}{KC1i5{>*}(& zHJX90l6{)5!}uW(raC`UqvY%{;hAX@R?SR`!?&<6jVOm?!$4iTg8}zr8Vm((oJ5*y#|?3 zKb*qjQNqHN)>xJTecl|Ukl6?;6`$MSgO%M^AhB1Kt_=cdm6#%qAf*%2nalMd6;=8> zw|@x!NjETv9h2c}G)5XjE7E8&m%xr#d9fp;FznVVB%RneGW?Y_bNsh(VooOsDq_NW zRU&NkJ8&h`a%A>&pwVN~UTS_cL}S=dVv|JnIH{s&7r!X6DoeB}CZ|!NLy4ZiHNk`d z1ZUe>RAb0;-gFDOSH4>-Zx5Z(I?55D8Jve$3&bJx;OxROs?~p^BRI zhL9}r;DzCdiRO^X3x7+qPA;ThATbDt&@rJSy$mE9Y|&(^ban*6kcCJGjJeIwSm^BY(4m|Nm*K(4lF9Su?P#h^^jqL98V0?>5n;`5+*6eJruHV%8+**QsNntz z%k!G@JwWUVtAYIFs9g=o=A7hgNAlKjF}-2OS$@4 zt>r|F7P%~Bi6@|KN4QJ-^4GH1Dexcfzf)$;+Z(B0$Jb|4Id=L;T}|4i_j`YXLzxa6 zIzW88Vb(U|3k^-16kj?>yt`rFaN~n&&z%-OLPfs2`MziNJxsjlfh6+Lqib*>S&m!<~j>Yb@p;h8W2>U#zVt zyXOms_&lGt!9Y|t?@i!QHJ>uzy%P;)ah5z(+zIWZLgVmsNzec>sULKCoPex)X;t2) z+EPOYy2x(DTLs3748e)cJW>Swge-~o7}@&tQ;N&Cq*8yS$hQQ}(h}N$8Dfb;ZRA1X zE?^{)@;8d;NXrM;J&l#_@O;wnc&FP8^pu`LrC%cK@CRZ3m-}xhncPQUyjd&J1seHy z#to=M#mq}TH6qr`tqVwNU`-=M@5otFkXP#4Jil8Fr#e+xSd#}piynOdZ53BfWYv(S*?g`tly%oPCrtlm|=;XQo~TJUo%w* zmrBw0%*GHyYBsN){hr3ROuDd?Me)zhMh>AW*ll62fp)GV@P=>HVfxv@e{e;L>d;5(a+P?!;b!gbFnK{ z4_B+fcKM1A|F68_8Pso$z8z)R^i1W+-&9e(f+Bx9LeRfcca7EQfrA*mGXoR4?QAmU z!R3MF!Q`>);`6r)9z|palUS8w8LuOGmm+>VrT9?zQq#Y4U<)ecxG93huh+z#xqu3^ z#&O8#$;ul?sl*bu6hP~$DlVK4Uj)cgC5c^oVw*&@`crIc61AMPZ-R_?0m;JmBmOKQ z4O98xS7UwX!Ef)k`E*)#rT`+`@W_(|v1B?(pBDAz4Kk~dbT=afHi!6T(@n-k&J&B5 z^vBXV{ve&TI{Nnw?3U3gIMF11KmC#=E0A}$9^jZbx%}eH1-7meKU_|c&m;LEPdlB*cm>o z;eQ&TcWPBo%_`7;Q0lvzUW<;dn{lMIj21qai}?PM{N75TKgw0H=tley!MT{(fPuvI z%)*89eCIrhJeUc(b_VSzoqUe?{Gc|W7^#&V&SZAe25mHExWvdnWXUz>yKHDnuyo5K z{y5!)GjtT!`H|zImrVCos9Fs)d}+OENbF}!U|5f4zr2=WK!d8h?MykT)}bbx{oCS@ zNi)OTnC1h2LXTJ`xFH3Zt6Z+6e8o^`Dk^mFFj8J?As3!LdvhA zQFWV}0q?ko9T`HqQm_CMH)8v1a2`@MKZVN=sNQjds$XvG(D@>d#cpfRNCj=*Ql4xH zg$B}fHa4S!B^0&kY}+5dFLdT1c0g@s8RvF!&v%_)x-e!>Gpcg`m9@7l&vu23cb~-w_kneQg(b!$FT>IrvJEyk#8Oc9*arS81QGK{CM(+|yn@vgJ35t%#{oq?wDVj!} zT)a%7qcSY^`Reen)y>l8wM77a1)u)nen%-sZyWI}0=r-$>EH~+@Se84dePA;v9wiS zM4`-wfZ@fEgmL#t1aV>G=?HHHb~vKtyAdeuv}|Jcn>Qg7>*=G@Y$a$;)mO^mqzAWt z1DDsyV&jZ1MxOPOPRBBh%&z5YNZvrl?>cTQk=-S949p>(0>9(h!p!S+)fPQ4X5 z&i1l+`-VF+?aY#3DK~Dr@ouFN>p-OMCp{9d# z35)hBMANz~{U5!S4eaq6L9pp4la&L6wdp~@0j-SM54pl2*NT7T3fH|=WE66nsrM@B2%iYsOH=%f z(JNu^2A@f)@+7DIPBt+$atZmBE8LIgnkZ-fH%9MoY)QC8&mfI>38s-Ruca}&f?;!A zn2q?)DTFQ)MyC3Htf$FRL%8bExf1)dUvN~zHg{^fEiR9kcXe;bRRwqM&o#@+OP&#H z)5FW;%lrS+YdQ9p*HZ6acr9JNyq1+;UQ4YnuVro*ZR!W>b=_y<;&_pJUW;jD&2!dW z*goE0UP~2v7Mo+Y?seu*xdpQ~W@>pw8Jnw&*YIQfZae07iig5suL6d89be#%CW7^5 z{-#gh3!r}~hx!Lk_rKlZbFr}fn=QVfDv}0RtuCLL(SPOwc@@=>S~(>K)cw%o81?j4 zHD0!7cCh(GCY9hnEY}2^dtaWvqL`8>-Xu`}+U;WnGnpvVqq<9WdrKYfG&7VU=5qSH zTv5FeagmZpY=3yXKHR6xU%{gRNr)8p`n@T?Ud(FxA=lrol_xAtm-;mVEtVB&Vw~mm<1}L{RyBJOoEIGL@4W(mAx8 zC;sU1j_PkvUxTw2g!$Zn?Jnm`Cn3Lqqej+DzhCUOnx!X(`xS@8sWnn-yX=jRmb(BQ z+n@MOYt27XF9|Ls+7!+@l$N+FTh7v#-QK9WN%{nHt@!Tg#i5%31?>Sfc5a|9_0}J! z&3625G-=XmVmg}|-VBH*`E*`UROjp7GvY6|?ph4|ensVa7mJC~mI-Og8bPNe+2_Sv z^EKzh_vh>#0vhO^F}1W!Zj&r#G>;Wu@n-cD-Ks9%MU+~*&fVzWTw68Q4l_DDkq|{V z;{uO2ZM&$5Mexuj9U7|YBejDjzcGJ@=;zS~F-PZFS?i7rcaVVsE*B=C=Y9KQ(6 zc3IuSLU<%ZQa^J_PuI`(Ru5Y{r&c4pk8dK@&PnJMX5AP(noT{n-5UZtUvztxzuL6M zb8&C}{IPDPuW9jB3jIb4esAQ^v1QT>HK>WeaZ8+Msjz_bFw^@zFM((N8LUUrQW`%XeQ!0_&*ZmtqFU0QoLWp8Vx-mhPFaAPhZL}cAXJSF zx*!A6q>&fAqmmR#EQgm!7!We1qz_IN+{TY}K>h8fByiZSMq&ujAgt@m7yNfcTU82j zk?E-UI!>BH|4v(S30Lx0z^HM12R~7O?PS=}gj5x%2*@}o<#)t&1%_xytoWXWvX%)D z5E0RKy|(v_4!0paQbK!it(Lje>L^;s>2ukSH|ObKNNdS z=(ix$7inm)J)7GLTMI^U)m*G4PuHiAR8U=%S<+zh8IXyY2n*1e6?+K%QGUZmA75+S zV_U)&jvd)pHhr_CAa*uwTeoVz+g6mv7LW5i>ATT(F++s;Cp3=O48^Eff>D_47oJHs`Q&h4#2Hz;*kt7W!8Az6?-u{Vg+ql5` zrWG$$E8;p~UY75|#EuW0C?+q(a{To#Ut{y(A1qBwJdPU(MWdlhGTz|nHp-ZYi}TSJ z6VPn{+R%w+J!ET5nAVg_UvJ?yl>6U@(6`|+n$Wia#2PbN^NF-tEUb*H*odW6)7I1S z&=%1=WIr{dsb=9bN|QMkGUtx1qv&Q48f2k8G~A`O8n{bD_`Nykp!+B1Z<(A70p<`s zCEyl}Hd-Cu=>S!-u$y_;zeo|9cOBO|73tvPR>dqkQSKHYax3#<#N()7g~gY;a`)E5l51B^GfTJ1fb9ktLxwAC#={4YV?2k*kmF)Fe}eOVj~*mUE5BM{_w}OunH2t{n&wDcB4D#vGDiDO<8I zXRmB!ZI>0QWFd9kfboDj!wO9%)4<4LqOXj(6{uCrGKSdrUavDm+lpNMfHiBa zhfovK{Dv1sfYE$c%!)S)!mR{9$asE*2FFbaZcPpu(O14AMqwqxKxESNCla8)$_h2L z6H=^4ZVNks_vL|>M8wddyr5y5TTr88Rs5H6alL8sUH`Y?SO@aGRlNznXBDXqqIZ$_ zKDIi}dJ`Y8mV(rS2lBVak{P?Ux;`se-NM$U>M+J5C!W>QvNr} zVH6f0w4BP!H8hN?_Lw8OpCFbx~9_e{lVGN*~8g=k*!13)I^9)N|X`Q}q zb`?1FCKX$^fpHl{7ug~Q8^nrlS0LS^H>#jj6hN&2vvntF{= z1a$fBO2lFwOiBk_+}0ZSGI5RRshsZ82|bhc;WiGgof3uApc4^dEM5ebJ)!Rhk=I=^ zYFyfeZh#?{aP)=sqq$|9ZGq-Eqtl7 z(!MhAoE}`Qpo}T>wm?5tSkKsS#+5z)m=~!{x?I68Gy{kPme34GeBU<+efoC}K=(^l zj61>EAs%V;+reG+u3Ky!OyL3hHN&TwtCR?Hsr-y9_KH3-$m8k`Kvd(6zw1Xtz#tw| z7Z$Bsa`9?X4`~~J)&Kq#rRLv;F;9WpuP>tO;`poC;MsOJUBy5)v1*V6I1SmptAhz&^qO$fsu4Q*Au zT4YY#qaCpKUZEC49QUBk#JYe?X*P(>prZ(L?VeGC=4itZrk_z*n_Sy=jBL{ITc^SD z?EFVz2S%|xdw9Kx%P8`TeL1LdvR0)yUZcxk83?)+qT!=N!NQ*S1Ul{3QknJg#i0i) zfQ}RXnUrAy?Yup&l?*X8##d5W&Xc z%UU&6p_LIxtbRCQDxth{gRp!)qU7i$E2T}D;BTT()}~iWf9DpNQizO@1)IBGArOm9 z;O`-DAQOvPaMEs@idvfF=?mJ4oEVXfx_ifeaf>uKU>TpeL^d^eSh1aRRS5!^qFF)A zF`a_ftRIn*`vsk@YhtqueX3pmY&oGcW%gc_0R;MeUy@U!6g8i(pS0#CzZgSi#6PJ` zMO%=4JS|ga{&th1Nl3MkoR(;yLE2KDEZvW-ik_+EBOu&abMu%}I z=((rxV8RxE0zHdhsk5+e-~22M=H{NV)75(8Y9_MQPB8 z_tKm!o9Pmg{r=H&2rU}B6(s$k*u|Q>B#n5s>n6iMOqHfSh@Ey^ck9TB=eux=CwbPI zMgsUmG!(GI`WKY~&i_yX{JY0@7G@T%e|mh^o{S}JhVOb(Uf}XKiQq2)!vyAO=jNi& zBt)!@zyoUsKJVcFrl6WA;Zkbm>FP*BV2#o4OBspU9d}?0RCSR{XY24rlrCM;;`8GA zauG-b+`N7K`89@4V6-7Jjh8*_ct4b1Z@hleW8nXQZr1yBnmtBNZh;=Sc=FTsZT<6d z3rJFmb^zTW|5ztz^4tD%ia6l8z0Q{%zV~pvT_u3FL$`n|`KgmfWlxp`!{gKS=Q(RE zwASb2FwxbjlrD*y{Fl#%>kHN1F!Bx7XN%9rGB_C&a-{Fm-F9;>v9G5szxQiLH{8zF zxCThFj+IZF+S9p@D091+YH@h3l2^Tlm?NZ)9&d8K^=n@XrsP?%NQ~ArNS7I?jA)6=n{Z3Ss}#0Ivdf6DXD|8snxceaez=3gu}5Ea*qYL&^E5< z1f}FWe=;T%2}5bvk8>5J@7;VYo)y1g9SJS5FAc+?@3(}?PY}7FNLTCIzRfu3spXn) zrxE&3%njheEY%+(6B3j01&d&*QUWn83u9VMz6N6Z7o4L5!SpFKYX_MRoD+}L*&>6Q z?yZCX<(*2yr4$UMN7iB4CZS@M+kX!xE3gJ3Qk)tHV@xaB#(?SzK>#(}$#O?ohylaw zOJ_gHHD8Bdtm!&c9q~7`oAw8$tn>N_16!%?f|s|NN0(@X_nK&}X*0mqno`b4a#h1t z9q%Hng!~I#Io}@KK6Q}}o$8FfOnAXtqv|TXE!Oznt5PmC*!TvtjL3n*;|Z%Q0E>}p zI}lrn4h@5U0MkFc=fxT}!V$B?i(`l|(If^;hKSr0gB9C6#mQkegi1dVDTf!C3B0e( z&q|~k#;V%5A7?)N{k_hY*1NOi%?TRI+=;>VG6$W^5k4fJh6yzllhSDOe2g??L>Afz zOp=HswLh|79|YLd3BI4*ZhFuzP#?(PyQ_nBx_*2`ZZm)eRp18+Hpe%Zf}9!#MtTxl zWDb7jDKgyj9|Tz9s0hWTd^{eU)dxUD+@_lVM}6b#d_u19ied&v0}^CIAr}!8ePSY2 zQi5n=;CTa3losNA6L^eW>MBbN&Kebme21Hdy{Wi;SGSq_r#4}W(;bA`nxEXKuVWi^ z=2eV{GX@M^GYI2r!mHtJx8 zf~zR6!B8pkIDrSDDdhwlKq65Tvi$piBfE7G78C^BzjE~Yq*FZ;dr~7SGm{^MQq|-= z`xLL;U0N$To2?@@t&}Z&ds;i2uXTMT#Vx>}t`_za`5UEA(g-$w0$tSOre$nSz68<0 zEw)G6`yGe9NAdHOy7LGOGl1zX-kvAFjL2nBe=NW6dTZmm6#F{ez-n&&`PCiyC-XQG zeeo^u3c#oMiOs*w{Bkyt%G`Of-@3826Ya*)@~YR+uAQTks+xnZfxe^gdvx_9Ulrsb z(11@H()K6p$j_)ty5LGbbbJkrAxAeIj*gtTSM!dG5rU4{+{a~do*KW$8ZT}!{E7nf zVb91y-a~BM6Fja+aYdCiu6Cu|0*c!lGV&)XPuId@K9z^8IGq(F0@X<<$kU78@fAl1 z=Y4qMj&M{%W3WdDWn2+$?!%?HY;O7D^;uduXMM4rTo!Uga?Y;76L}Q;p0tyBb`>VQ zn^pQGrjWB(Y#s!8%|RaIviIsexsrkb&O&ubV5T96%qPJ@gj4XA&T`H(1ZXt0Sk5K0 zsHu3}8hk7n6OV_9J2M^>0-oj1lxBA#fs{YKQ?0vkSQyA8g|Q(d6Q&Aez`$3dX$w^m zIhL=|*GjV7?vnLmLo2D|r4Rn7kqohNMr9F{f)OBl!Lx8Ik3^VwB$Ke84Edp=c)f=X zjZAIK_h;`qpWFn({&K0PI5i}dLZYY^ui;^z+$4Fec=9k)WfbW3St4E|A_%dByp#B= z(kJ=oWfsr=f<|Yl1h{1kyg3|=JU0QA|ER_@@W3O-y~B1pKT=;-%xNAB4&HL)_Pl4m zWSqAd2`=(|`tJL{y_sM06crKKiQxiu!CO;kbCrwo!^`fHbIZ#&><^zDIrp{VVtH^} z&(wGC4!Ov^!uC5Xzi+q`r3C1Z%40!VjcXCSR^J=y!{+kzAAwk$C-Gf_)>e%i;sv~d zu`7(@)&)~1T6tO$dHdki>xbWWq}Z9@YK)V@ccs{O;hKz<=k=x8W3avkTVDe%eCyE? z#qm^`v25#6(qqXqQ~YM@(V{=2sbelg1Nsro7zXk@j(Z6xaaryM10)pqTsI>T;#-Ju z9pdmDSH<^k40}hs?4C#%SLhCDeOWtCDmI&GSh|{Nck&N=Xt$k~`|ooHN-5)A8&M1@ zIN5wuH&G@n#Z!+?+Lk>pbfFS03;ufL45Lx6_%KJ}6`^tR%IH;2&w`teXB|D2yJ5(? zp3j0I%l(LCC1+npMr9g*u7hCg;Q1Fkjh^$>@FI0X2`bn-_ZF{(7faIcr5oH-4~MRW zQ!@Jz*|sr#%U-??CON_gsP*9aRl1n|C@f;0SU%@h?Al}bmN|djLJ6|9hC*|Fimo4# znn#Ra?K5^Z%(XF^k2T{g_tC9Q_v}yC*|@8Y4rKGsF&D2=aBZ^|!1zOan5s?p>bd`g zY}{tO&UxL>rhOal9@pWp?iIe*YnpW@4nFg@yM8?z0zdbrlb3bM^nG9!{R!M&e61Zb zgh$FEmurK#m2*e}F>``Kgj0K`Yr!}${%3{S3i+1aFrl`w7D_=T)Gd!()%3Z=9buvt zd~b!_n6EP}2z+Jc{1Fr6s7m%p%e|0j(qvzkg}b>MZ3=`W-hO{ppbQ%TvAq@ynV3c7 zE2~w}gd~8WN-jQtAW#`8v(*<84B>zvfJr&~x>OgQuk3ng=c|(nK`<7ZAKM!?H#5)l zT&wro8|K^2Yy9|R%Kuz@Hsk#j1tP5HH4&4tN;0cufSWU~dla9Y$_81#3GU=RjmI+l zX9JLgTtyIlz{ER5nsEXkC(`6+9kqI`l62Z^wh{VTos*8gR%a7&8xp*OkUjeYT%23yh=Hd6sP( z`FwsBc1j$Nt$BODqqB40tk;*x;`>F5DXQCYHWU{Fv)$M$+#d36yPg)Tt$O?n;`K%22I&9&%jgxBM!L8JepSDH*9D3^P5M9qH zrCHNkYJr5M%he_st2Q;1w42f(%4Se+VWuf!gQExPvyQ&nbJCP;%Ghbs3IE3~(>aK0 zB{atXt?7jWGu#FRp~esp8M>T)xt}M{B+E6DXk&qGXtJIg6uc^Sl4sRaZdsOX(}RF* z&fUlj$l{ru2*y2_YYxnud5V7X@(J^x-hG?ZG1_jwjJnIdw1D2mxH7%ty|*>kcF1kt zeY^8H^JeJ2s=xXppLXp8vg!9nM$nCo!=G_;PM*e@;L!-?;%N$T1cv4*yn6z?In8EbFlzSow1)R<{!Y<U*((UAB^#f$?vRs}8(vVSMS&+J~LFTB4tkw^ig(Ajr5!tp(nFZ3JDG?i( z#;;G-zfKwEs5l?l|8*)?=9e}`23+j(7W5)YRF=lU05JtRSKUa2s2r`MVZzlQ@fAn* z>&M`Yk5(PV@Xr$Ev~qbpJRM)3Wsv51n(oKAi}unY^~shEz#uGIb^BebRcp&uJD1<> zkk3inYWpCmhYh^F$GHnzkBQro-ahCLA_hs2{?ad08TBmv;Z+e%iLEHcPc87`azv|v*`6oeQwd%U%2IDuM zW%UUsqA_h&5@;d(`V|jbrhCvt)BM^H>kooRW3T2^l%yZ${d+9UEKa7;ywWxN0s<{J zp91hu@)S>}11MGxdbv4rQ%2uF;)akSb#{kIs$z}{+kH?uyIK>)v%V3NWcjsXJZ*NW zSqX^fFIj%Pz<+d%d!iUZuZqh`b(Cyx0!2VQ4=DB?-)duPVEu$Q2Av}W0d~Y(^@-I6 zK?%LhZCTR5nihXzY+27?rtH7oGuK7~hE6MB>bG}vOT9FBz90qayM}XGX1 zKp!Ky^^2sjpNI)c;Y%$W+j2-*@?{R2o&Jh{nJW;lD&%*o7hsdH$XX`3@ z{CiR3?iXpCV}=+WPFiywA&(04)`4NRiY5S-`aiw3Hcn#je60O3h6mG@pD9}QbG-dd zC1h{MD_;WB0AP8j7~DC97Gfp&pCsVZ_}kVmf| zzd*YNgPs}>$fWblR^@307{{#srM{joQkKK^+T7E|A$lBS^^1vD#ezeZCy_G90?UGSX&rP~! zY_Kvr(u|pRmpCs+0vW%63E^445__gBtgk;?`A5($Q42V<=&5-DAIwIXK~nH(>_7;E zfvcD+zl!<9_YDKHImsV=(ftzmt}&#ciJmBRgb9X}IK!7o4FSmQF}xeD_owGO00-q0`5F4JG2UF9#(uFMx`_wX;!ZmzGrCha@$S3?}_)I^D= z=&y$OJ=ZbfF!y4P;zO-t#urWGsh#fbs_4~PPwbE?^5lY7nc!w)|4G*LsmS-aEV_&FGDQYv5mL-kBKxi=uZn7Ix-;Dyiwn#*sDKZf@%-o&lwjMJ7}BKK=Re8}oma)OZA)Uid+QB zF!siWH-)9?m(oU`KRoj|5NR!!rrsK6*Rnx2UJOtShzL83Oc#f}Sy@g{Rj;WTU{hCE zc-Q#R;0!u87eS4!ojecsyN;~GwLY7_9Yda?>6c%}S~+7MpSj*|A*`5&pERN}a&8VC zY`ZMqnUEQz2O7fCn&DEJyUc2n-K>BRhf03R4AzDA0IF#nD}2+i98vB7umddykwi-)9{SKNqc>C#c@R~MVM;7#ZgqoM zkWlFYy;_c-;8r_X3;xMM6Df24NJ{Hq6C*8t9EO+r7R9LGQGc=pF3nlp*jA*zA0N?zuT`)>k1O_R9C1o(751cw{rCzZpiY z&jed47+I;8wWMx3y+8$toud(keeQ0WkrK&r#9?R_3M(XPpa_;8955@96QDtC@1Nx$ zatoyuLKQ24zgw+8ndL)Gxsq4wT5Bd7F(V`emMP5u9x#>|31d1&Qup*r71M-~zMFf+ z80d}bzIHWk3AB>n(T9e$#)w8L3Q4Uet5@xGW5!dnN}NFh+6BMC@XVVV#wq8{pOczf zh`wVYBgKoOT?}5D6f>r!jH%Dz#^m5vZ~;;VETE7FV@E7bnjSN$t>Y$(n`PpzVO-4U zHlsP`#w?UO;`-%g`)he%4s8PuZ?z#3?ysSb&7+4ENN@=Nm~Jrdr(!ivw3rOhvDjuf zj7O`FL~n1^=3KcEAY0eZ?kq{w9t&3ZyzPqXknFlh+ST}dbg-|_iD+kbu<}nePQ>H% zpetnIK~a?-QrK@tC|uE!E30ge6ilZLBPP^!xEO>vI!0PGsW@m_B^!aq?<=){cgz4l z#y2SBp+N8-&`oCiscA-`yypNQQt9Z^+8|OAcNNW)X3%~IlHuhxAf^W$jHUh9y> z52^kXon$)_R?~OMCsoa0wC$?GJPPz$>SNTbV0@!=V-K{=V98@m(m#lrDep9Gp(zg? zr79>v&E;$r*=`<4>F9=6{koSLHVVeH_U~9hyzHvH9+m8Vhp+@LK;Sn4gaUb;-; zSm0c7*qRwvygyfIvB29-SnHjYuOb#hA`)t0DGRMIymbv*1=z55gx0`Lw&X*qs~@fW(|YU=*((UI5=2oLZUEC z7o8CrZcnwXidSf8)tfexH3Qs|tc+{H0+GUCu?sOVbc13MV5~}O$V_AQwViPY=p*zO zP7;Tb&SesECxBONM8K)Soj{#68Yiu}2x+e7k>xkzC-_v}Aa!=$1(H+SF zIid9e;~C2Vu_yETn)V!!m#Vynf zPfqR${!zGP1@aCIVX)yVBdJ7rymV0KwU8UJ5#Iz=I6>VR6(LywR zYQky+W#HCVgY9Oa{qH$!7InR2X${LT**F%sf4GUCV!Sd6!g|`zNf+ zp?A2+9;Tu<|7s~7q@%O7aFC7yXl=~xVOiWX7N;ccK1kE>`!y7&%rRuV;z-l5nU?yQ zNm%vVj)GwT>a2Ke6@kr(UI2YQPj?1=g2dh|- zLzbvb0;@p%NgCfn0j)xn{g@2at{{-I)A9977V=+w$3y{;T+(>|Qr=>zvJJ>E0Ya6W z3F(<{Fol637*G;IUC}J4f^ihP7TSfW61Sks&*U)hEqG1=k<=mYa~`rd)YMd|_XWhK zMyCb5XysX?@rL5iqN280roHJ6qservv2xouzb1RI>gHFJt&wvY^w-mrg$zZ@IkV_4 z^K2zzTI1Jbd&-M8Sk2Y=pPp-v2c#grbuD5o*DV$eLRIQb=~p`2nyaBeW~%jyYb> z(9g-#q4&hk^{|rCCv8rGxYE&WJshNCu=Q{lj{@j!-0r1fGU!Hm6qEbDBabs| zTSpY5zqU)$p4)ZhRM!Nw=qyOSz$`s53jo7bz-dM@ob}mvhd82JUUI|)F#MLiV!*+* zZR|c7bJnV{Mg0cAO>Sb5n&;lI%sH5MQJ8PvWv2UHcH-mYQT(gqX(a|8q_BJGY8a4S z|A6ykzPnJu@$!|C{L*{^A0Ps&&e7>oOaFwtyky711LePTB@rx2`^)!guYwv|XDrXv z;jYo20&C&V&>7Tik=PY&4U=qQ_6MAhWBKfX{?Q+d)3)lC87q#UR{D4hTb{z z%>zA(-Uai`3bO|5x44UtAc(y>v^p@jC)p@f&@X%+%2Rf{Du}~2izeB(vyU;!uVK{a zq6u7_EKaVbcjxGU4^8;28SP)Us2?8~|J%*zbgl-S(;ZL+`}gWMFit~F4>wwS(|nJa z3!#s-Nl?2sOdVNFSr3nvpe6?cDEKj0#FD)mCs~Pa+~FDYtXW!rv&(JI_c(QrW6VR- zH^?YP(?*8@a-O0eghCja(%n}Lu~U521=P4?fE%OMYjn7@P~%hROZ}@xxWHM@c8UF~ zoWFw`i!M{Ak<`^?ahOuSiZ>Qp%d^olzJE)P+ zF-lDAUY<_`Zzj;46entosd2Fnm%l9NL9168{@1&#b1Uc&HJy#G9dv}I-UiS<8b))E zi@csk`*GVJk5i|-et#{Vjs`75hahme?w4@FAAan z*!!{cXz^8N6!?(XU2RL})@dyl&iXOKBD|5<5)7h1LgC) z{vKEK;j8w5>6uAp1qBK6f;23_7uM2;i->LRBP67s1wfQUs{sH3* z=Bvn!(>h!gNKA(N3o%YAC10beC5UwIUBUh)lPgL<5ujR(m@>V7Ytp36rAMmp2D5isanPNpaWj*S!& zF5wNb$i(JL!{BV6Zm8H`gasxmN*q%vS*moOYLNIwc=^{F2r@*&{m%*)nU3b@q^yP? z2w(xn>#K4@k%ioRXI!hzUIQVMcH$^{wC2$y2=92=!WS1*5wk*7^ z@zeFYJ(K%W;dtuq_(sDj`T#qZE>|XP#fVJvs{t4H1$1*dobJK#hAT(P{6%U1U_k5y z44$kA;~bY=Ys~{OtKiD~ZiJI;CJi&!LC{C0R|GVH3B)`EVzpyb?#9YN1@$%UDeA1PEKJ!IFK+=tLs4|A=&gC;vLb(+vhyQ5nrlL12Ec(A6LeK`{c}85@kG0^v8+4F`ULk2T@%Gg$>||%_S(b!zwRB*@ zX^he2w23tRl4Y-z8#r6O9!{AUd_r+BXH6jzz}iVgc1|H0+v0(>c?>Yh&epb#lRuJ$ zQuX95bIjuSRn~535`j^bC(gVnwPJ|RS>5h>QFI2y;IzOvj@+CIT-N=fJv22*t(}Zz zKL%7zhUKf|KKdw4Cn?Mf71v~5L4tiX5YLK`niJ<4Rr>*7MQeYs}i=% zU}_@MrtafOYPVq?OY*S;5Bws(LoRQHZj7Y1EQ#JMRa%>h{!g5@fK47Yt z7nvux{8mm<+(ysFo2C5rv%Mmcem#}oF?F$*wa(A9BY(sIJ1cd$I7`P%Kp83}Hj-QhM;RH%=*Lmsx*x zC^XwUO8jLqsIJj`3IcKQ#B8BEg@pw*FNKp_w{14%&pa+2_(G9lIW?zG)Oh>C!s_qJ z0e$I2Ae=g$YdyWzv3&w#>tT*b<*eM*Rg)}k)v8>d53v*zlhuv*lyv{mI!N^)@#CC& zn-l@U<1Cp$xpW7^DrqnG@oBW<8!b)fR)p44`3t(h)J-aHuZSbLfG;03;PImhN0?gu z5X9b80C}1?1lkJ;frvnq{EL$^NJF`pysJ4ARu8dQfil5(SXTZpfll#Fo(^&gE~C@6 z4LI>DKm?+NYePT$LKL-$M)Lq-+LsvpL$9S?S0vDUf`D%DP|r=j(YD5tdoVSRv{J?} zYaz5NuahKhoZtX=XR1p=@{89PeSdg>%ZT}C7j~C2`gw@QDL9^%az~y6K|j1 zBgW^v-`Cr&%CFcquuLq;cQraT(|#k3;tB+oZlXV(g?Q z`*&Y}s?&K+(!m$uig<>c-s;>qZ7%k1(u#iM9_Kgnb{u?spnXG*Q{R72P*&?YnUcC` z%i;3yw4L;8QrQM8b%|9szQ@Wg-EQ$;)N5s7x_QmQxs$YYN1vhs^LZp!AKF(~ntE|= z6MA?4?ObXOHsGE_(D?9%p60arXE&OEHExla^*<)Si7M<>|37XtEk*yO!+q!A|9me| z4({v!*FfZd-)Lqt>&x{{t8yRy6>l_S|NKVtKS?bzvatQ99>ArRWHfHG{Z_VauOon> z@}L_c9gvv_R<#2W{_6P<3(zF&#fLXO8Bg0P_i=hnut{pHJP%C&33X5%{04 zy2-k<-%hXjxiA2sVptz|-*I1dj!W4f(mI^XWhe8ey3%~iaS7$X!{3=$fU-TAKJBu} z&hSE|a&HgkpzRIxg9zibIhonv45K0-zs+uhx27DDu9%zA62NC(8PND?$(g-`{P-L$$IJx!1-9|uG} z3AHHX91^K!-F>FBy_=|#i){#sY>okAY{Lb;?A$&$%OMBSIJ{l@3&8X)Fej)z@Q z6pySG+e0e`rV_Wn?{7nFE?x-LRhqpRb2^v!JG^krLx-rsUDIAdd zJu%FlQBiO>v;3L#lIEG^jPa~6_SDR!MtOcp;3^G5rlS=ng`MgaEX^+S0jq!Xl(_JT67`!AAY>w_AXt0j5Mt^X(qbb5W~W|XcCk8A9b?QC4&mz} zh+lh9sQPtsDM;383|n4aUHCtIAZ=x8V%QZvk{T(T^;JI0OyN!}0P)QP)~-b{Dx?L5 z=3-zem_;oA`2ijz0dn3NVHsGOk{U_a4O0QZ!?%fDR&XfwAId87j#ek{NE4SU=s{M4RGe38e0y88NOue3jPW}eiPh# z*d`bVMltS?9A6Eiu|FZ>K4cRFm44PcdX{HBJ`!sE3%hcv{*@XUsFr*iTiTI1zCngQ zlR7YB3}Ho!byyhXYZm^n4`=fs!JSw!CI&L)#;kG%AA`_XW-J-@_ZYx+Fe_Xp_myA< z)Zn~Udc8KF?b9qN>6n*Yn>|Nq?)&$HE|wmxRKA9Kk}j)Y+CZ}m-$->V3du7~w+$e@ zfuGcBHuf3WbUeh)=OBuTb!T6tf2Z`O`0Rz~WAEQT5?>4R5Ej^_0<#-D3a zuIi^~<+@7)ll)JG4h{viLrL~Gt;Wn-8xFc->Cm*4@BcpSNsF0C9av*A7D(|teZ#m? z22vnT`Vx!tAqM9~49*+pk2l&IeXt{HfAh`8{_>oj4u6Wb%#IcIGE7@&yX zqxIr5#xS+HEaeF@CfrnBP{)klWXxw_E;!S|C~0C2lx0=WWEyBD1=EiYZ9=Ugfo70^ z!3c6pJ#C`RELOPApXFAH1V7xE0!BMdQFmldoq20zF>K>u>=)tL8lD`4k=jVm&ofjS z9yTVeQw`S+bBbK7MYv&Iay^FREe1LFS7dA!g$n6C-HNUyMV)|SIf&df%KmdjSgjffzpFeD%;gpK7c^GKlcu6^f_uv5taR%XSM~ufcd@&~lCADJrvjA^g z=5r<|v}SH02wdi8_pawF9vC%6M1Ghgpid;;(7lbycO|CCK#B(oCfNT`$?(h}=% zvmURPE;mEV#+Cj;g?HdT@OfW_5wE1YBpdmOp`?SRvXVKj# zet{-*D8+Qw(_w2pzold&1i;6kJnq@)PsjQ#qM{+03Cby z$xIsAVeXtxm;_}9ko1+_NK2xB?%SDLsX56tQ0su9QEgh;owQGhmE(~Whc|@u^mU0c zDUZSl<+Oj{bz-L*KANFO6A3Hwz_N+_Cw;0qC1mOluk;%d(CI$Yj!Pw6QB(E)D+)Nu z(>u>H$9)S?oxu}#P@;IH0RwhPXYxsq2pUp7m_cZ@RC!I!?MF;cj*9|{No0(YX3Sml zqIXUA*oJRJANWesPlo147`a;SH+j}jV}V&CcquFfaPCOev{3{blL`%AQ!_nQz`4iQ zh#o9SnoOU3SO%;#t21Lb9cZ4U;_GG}$&H<)qfV_bT+Tdvtre}g>Y_v~k?BnP+MbHF5e!tai|Bi3{Cs95l zN_LOOVsry~BXUSR&IWd0ePc_96)s+E*q55e^FSy-n7USmki{=wPcH*5Bh@5zg%qS- zWj-DBj-0OkWlTzRG|lwHq`|D0i_tb6CVgn4etl*|sdBL?+pYnq{8pJ0`XGIf%_v76 zI=ko)VL!WKhM-)EXai;`zl@V&H{G1mo8zIvR6v$S|_l8L=SnO{u24mduH?^)O(adCb&% zRszF3>+77x6kDpPMDeBzVOb?yBN`csJ|h zasuRw^ez9{d479u@nTm9PZWizWP>E4SzWwvn+-HqM1p}~|1&SH zA)aa+G42fue9x=H`P3(L`dl}oy-nc0li}Z&GI1|_z>BlCGOAUQfx5&=ZPI5I+f%T8 zk(}_fX*kd8K*j05ev@R%9A`KBfoF1aXMO`o6nMeoX;dM*L8S#a{dsh`G4ueJl;L)M&!Q=hV_)t-9&^C$e7dqsLwm2>9d_U~eO2k%x^ z8*iQ5;R+X=lPRl~O-lq59a{t!QSjuy1$$CyT*SxDoO6;&Dp zooddAki{a~lD^?MD(wD*QY8uHQW}IodLt^dMWB|vAv#M_KuP3D)?mr?%TmP}NBa?5 zJ2IZ-Abu2~^6^A%*u%UQimut>zM9f`SXOITBRakN0y}wBG28I5@#TBdrPAWdrz^2$ zzU#{!=1N?pl|N1BB+q*sfVI(8=$w(sXbDuY=i>EGmIi@y%8EQlk3_-d5jD#R`?MAdrD2FQcW ziQmuvVefAKcYF7l$sng_duw&YbyO|1xpR(oO8d`Z;C80H>daY(Vr+Qzv>~i_gkI>S z{)*E<=}b-cXWUyfH>KxuHbflH$Mo|-Pc=so!Y+TdNuSW?R@!CYw{5xXFkt4r&M?DO z2ReuUa|=30|Gg8n(h%L_+Z>@`3N|{?qdMUecIabD8W+xTpJ5#fk_cy2f)_Vlj45Qv z7ginO2?zP1i|4)2s%s#xoukB&>}jw0N$UD;Wa&l9B~OQrP{XG3QvOl5xKYDrIEcNH zBRg~TQ3-8S&Hzi-j`Z0XV zzV?Mf0SDx1I!3vs5Zl4gH#n#p9Q!{@#r^}M``@XZU|<^D?dfZ<`mB12BOU zD))cey#Cc}ULhSFlmG0y=0B{c{+B)g7KZ;6U0-U6SO1S-j2Rsg1CU9}H4`0hREM?+ zQS9HV%Q8Fn1j>QwT&o|m!EX~Ku(K0n3VB7KRn*|hcLz0@9&p~ zr<-B=QW!8?p|s|=y~Lk;dA-{^-vZ}tzum*_#6aVa3wXcJpUyA0ZM>P30Pqpb{lE8h z=Xif%%_T2%jDr2t(K0B(pW1FTwH;o>?=D62M*EPe^OrOp*jel^wUM!3& zE)cC?JU!XqJrU2lXjk$KQR%GNW}DbVd<*PlW(#*Do9jEb2Wp3OORSw8zAE1(-@bX- zzAw{>inQyWJGhV(Z%&X_zde~#F1qdFe)~Od!d3NG&+BFyg&dt+3qG`s@0jTdbB??+ z%t9p}k0=Be)5n(F`=%DqadU}y+C zV0y}6y8{iO5+)e?!#F8MM50CCT78%$s-Qqk*~-;$5m{BlVPE-(rU;)I(}lRqHM4QT zDjs>Ds4U@{*vhO-wp3FJ;(S%6wUsBiMQjUpvl^Db95^W2+Dv>T7gGLO<0UXO;|)kYzqrAI5dli1g_cmePT0}K1!5p(nFBEiwiqYrh>+5fuA3pHNT5RrRA=K*|plU z=!?#Glymx)-DILBxJK#-2V9)#0}%epLE1nYKRoi0RFftp_xurs-)D%!m~HS-Kp);5 z*~+KNc-|NKcqB3yuDA{8smxrlBD|q19TDW@#M5tHPm9SAeb-zAux!sJ05B*Po-zyU z+#r=up{fWsXXv9G8|1`4aL`zbOK_lKu@z`wtepsKWQANUgJlN|MdjE=?{dd%XpBa5 zf8IJ0xBeT;@Myr2iNjoNf9a>pXd7S6jFd&lMs$?0h^1OAxBTM%Gpn_rsB9^e&7p1h zUHat^o#Iq?MLeIg#C_cGLvW<2v|Sm@XDokSHGDXlX2{f8<;zCAF!h}{A2T2=kaG|hS zUA4HGfoWh+pqNUf7}}Aud-1dzAzq{oT&|5>QktkIXq>_PrDJJDLjrO-76-xYACM6) zU)7fr3Q;%EhbShmx$%2XD-}nPenc)zp75>$_rl}LCkXUK!jS|K3=x5a4aX83z~i6D-RC)MFYkN# z^{U+^L(r45AmmRrO5$qoy@qZ*`BL#M}*H~*e+ zeF=|NXO!FDZwpd4mWyl!a{v?sSm;FH9*lUMIN;b{s^&rR;C0d8f~qwgjZZW_u7oY(924x1K_jCrJD9}be4 zP9*+G|J+Pr;+t}{s3t)00~nJ;d^uOHY#-{6lD zbD_D-bQbZ~dIH^*-WK&^1p?@c?U#blT~bPQPhcZ=>BSEQVw9o6>H3656)afW9<4i+ zyR8+vSkeFxdbh3ZN@s06569|Qrs95}!U^g-SKggIeCdJ;xpN#fnTQqc@Zy&ib+kvn z=v`gU9cIKOq>W=>WdW&eIK1*5wm$?!u1)nNc;qGEYrvc^99Q$gl`5e>=>D3XmF!gC^0xqA<3VsDE1RgEa+c= zu8UcOHPQ8zF9a3DqBI50J_e#N;o1ReRP_ezK!=}n&}895)W^h^OeNV>KmcDG>$$~} z5gyjaDu*reu(fNI05BD6Wac?#xeA{lYewQuZ@pu^W!MfYp6GI?#{;6yqB-2s;lI zp-H7%LB}_59x$&5T*(lHUu2Hn6H$0!gP=!CYE6TD!=;tpg{nqbSLubJhsYU45;P5_ zH8_8?3VTruWh@jJZ5i^iAXC)cb%7&)L&YvAFsR~Y397o8PU4`r(X#?=5_uCC#_SOK z#^D}n?<%H1K7g%Z*(f+IVt0|Zu+`dtN=snisF$%%!3i$1`Zk9WBzDm0REi0KtyPzE zTT!5p62@RMpuyD>mph~%QztaJC`!^~(iGEfpRr?Bowant2FV-+pjJUjBMoDRHA_)j zX|5-V>I7F?BmpWpet-t9OOY8b9ul~m%dDs#!eSM)1w9teO*Em=k|+W%ua>|(YAi)p zU}BVtgH06d5-9<;jiRr_7_NRAmLkCzWQ74bA>2HPQP4zarRl1IqpJAIbRIn;89Gl` zMcNR}?zSx&h1h*<^8A{;aq-JxXxq8|<73(~Nf2(BVDzf8yIV_P==0aKSRGrf=lwB@ zZkLUu{-qAo`g{|Ej>r4sT^ciwqn~Sb>NYn7GA~3l=lL_~X(4iVPc&7l(tab!*HEH@ z*1?I^7O-iYPIYsKJiC$K=TNWSgMDYW$7s&}J)!rFVN{*&?eizi%j|`1@*@@>bBZT;9#eCa{Dd3cj8~JqfXb@=`W@8<$4@Z@#$mC z$C=0rsd2@&R;M6sfrm#cgc;Tv{^4aU^tM+_5upd^f|=Y6)^?=>@^ZHoqz}Ypmnfg^ zQPz@^{(_TDMzK=I--nCt0rY>c?lY}{$lMQH=81+ss7^P(9wj#Sp>((&9&HGhOP{Ze zboLb$yXX1858jc`vP%NE9=rHwuGl<&MYbv%%IaBc=mCx;4(_Y6L}3vxY1D^n%MWgrN^JMM}!zY5uZU0z)6S zqo&k>SS7ehT_jXDNIp}2B-;YA4CS=7CQG7H?sOc`%CnLPSPg4&uGr+8*?%66orpYo zGGVSE!R8>4Hn6(SpO33-IN=5p}7(g^PRD~^)-TI(Jh^nfkh}he+ zhyKdAYivsNm}mbk4Mxqz$vo<+^WqpHFPQh0(a)-C3j6#!rpRA@FC$FT#dBT$K`-#T zDOi6!7F@9Z=gxn|J5}+#=uMdLaOK@aGVHbV84m&P#5*5VCihXUykm)_lXm7WjU1xvExtG9(5u)veZ&2zxF)(HjJ0rP6@<%OW zH~F5;!^jdZ+CT(dq!3a2_hMrKhQ+XI=dsA{APo1dv!{{v=|jcGZnX|B+gp22+J4c6 zy7?pcxHl@?J43wHZ(;n{*Cl!d3vZ#Y_Qsz?`DR>m@co!lh|hT*r}gq1FmD`-;Gev6 z($oJB2i?C!zQxS;zufvFP8aTaUir2Oqk;ng89oh1=tZZM4_ZDB+FkOonex##x_MT8 zS$w&Fe>zqrfBD)*1JlX{o1oDH;{9IjviAPeDaw+M@K;C@_N~ z3d7EO5#_yf>1vg}t2J@0s5;$s1!lLpzaL=ux^fdmm;tntHs zVePidJIMXP(@l5diN?FfFncGHO?M+*f^if72bvFBg1(z$K&{dVGWu|-aaLF&e!B(q z$Ph85@m{DC#kkejc$PRqbITJ9_=DzKWrvok=D+3~Vg5r^kFbzFD`5y4=>}~veL?GT zi-FoIVMDfL=dW@B)uliF-VW2>uIf?VoIev)9|+yf-syN4=>~4UhTZR!|7ydv;z9x; z)!34X?ewCu#yJeXUkGAqc1VJPw~oxRd4MY->y=tX$D4SAUvDXTl=_3_^Zh3@pYGq# z{E#lUqm!vs<(j|Ca&Pz>4F5p$kv0_jNg)?Kk(NCm>ly3beFY4ca^X1RWM)uIa0Kph zEXn9&7O+D=Ls5WN+45v3z$7jhp7hpd%j^AZu_7WbGR~#_WhvwLDwGK=9TEBpIkp^eiYt15nAw}d;(=M)!q-9uR5byob~pL-~FmK zWZUgfm^}N6D$mXNR$;qwHC%?*L7n&$bBE~ryd+ur)@N^xyshtegBRyo&Ru2Ef6Tb} z@@4b7>7pC?47safEFNWk-MyISpmq5gd-6*9^X7Kz1ll^8)@S+2@cn7{iI;uppVq$U z|APbMzf89n*#BR(FU_CY7pxa=x4<+g;XSE5h#$~aBkQy@Y{Rw9ex6!!$osdiU)zLO zefzL`)N-i&3f~2yDEi&LFiJFO?8;d-0AL@yodv1y&DZ{EGqPxb()P9NHE$LngkeaG zxc|K3%WLsX%*$#2>7pzS&&Tt@ehd@{2}JgfuKw^xS8tn00e}#qK=OSlySpr^`bl7X zZNE9E<`KDnr^=`&K`umz|K*%J)&smZ)ic>XU(We6Nw@WB-xtIZL^YKn;qrX@VCZ&# zd~>z^`^owG3(@OfeNE*2Qp+N}rg_q${ox2(y&X^ITpF9(M7FY1`l~52X$y^$YO9T? zy1v_US*YJ$hKb4_dZ)PqhASGIL1r-K+&(fMN)7izu%PW8bx%{gQaVu;u8Gc)Az`J z%c%*renbQ%kGK{gp14AD5qNK{r>0ySt7Lt>+OOaS#@a~g^L1w78b_1F!qwFjVockyHquRQ z#kgT~jLG(P2V2L(MHO%tq52qLG(WJWiZYI}*GI#!1yn(8dXK%zgI-n19LQYbkyM50 z#Pw}=8eBjLd1?iJh=5k@U`3UReeTvFDl9@k%@8S4YIaT}OZ&)^Rc6<_Up!eYCbzp^ z56iL6?xIxpl*Mva@M{0q0h6J>u3BJl(Y*(}oez$ORzWX^XE*s)1VU;Qg){=Jec`>9 z4Z&IcJ`fpl4QVcM>hoE9lTQiKD`V8ZlX(Y{dHT}=Z_d?eo2T`M&Em#$pYXF$WA&Ep zX~wFGBc31-!sv5>(_PhwqDv0s!9n+t-m^XZt5D_B3L3izdZ|GHk0k_hEuZ5JWFgT2 zx3vsebHNN(+&cweOGK~iUMcaSUbRdbn1gp2Yn7F13eQ+?u>$SB?HzY=yyd(f&&d;` zVYna?3h^NY{ROn5A7Y@)$5OyL|F|9rZYxp&ER)yyx*K zkpet5Qb4IsE7hIP3hMMpnM?6a4G-h2=mQkA+0?X`kuCbLcuPZ>%fY;}l@3_A+!Q(v%*^dQV!ppnG!o)xWh>VR4slR}ifx9+lg+ra!{~u- z20M;v<2n*Yo!Ny^5V5oYg&DQ@P(Zw9UT&keegH^7D-;R2-noHLpm2^2D>+7y*x;eF zY>q7-UPhh)&4!!YLVQaxKE$9H@i@joi0_2aKbo+pxU)KB1m z3KA@G1YISBbVt6o6suBBE+Vv$_@V&_CxK96DvpC19X?T_3d-CkbSQzIOms=AVb*W# z>4e;f8@Tbv(|SlM!OFo2j)dmZrmg;D<&4pbYCznp}1gEBX}=1f~aUd;zU$BkPtFw zB$=pIQK1t2v-pQ}JjzE&U%Q6iMxvT$p`sJ<3o`zio$FncB(HIY6Q>jjv+)^+Ms>6g zjK$TIWQv9h@h=S4ly^7NCQcuNxkwc8`I`)-_>hwSas(2|^Q~an#k9C8NJdI3cmQx^ z#LrKK!_Z==c9}FN=HjG&$se=vQ44Y^w@EcZ@@keHp+TNr8=7Ca^oKPVDzNJY<%k@$ zYFH{@zIe+dm0`wkjps`&Mtt|S^n zE~HJhjV(8_k5=g4rs++jxJ2_agV}9hosM5v4$_Er;d+13gR3}b;pR*sx(s_qEea|- zh~aT$`hQn_dB$TnG1!vy=Nw6!Hg~$ZW2tc18un)#!`e1~xLV@KFkI&Jr@pC-cf4$N zkUPU~vOb&*%ztgkLZYLDk-4k9a0|a=5qiiXb`?WxD+XMX_dTQRe)9;swC$mIdH(G1 z6;m-4q*yezAqPl!wpHr+WA!kj1JgQggnMmAgmqg<<-TAy|NvxMhD!FRQ=G-MFQE5;30p1R*-_5eVW6Q` z_fyY#wW@@!^{HrDQ0%5ffk?P+WRYjZK`cqZE;fULiaU!-;aPWhal1X+9rJckmi(3e z2;9CJI%HJ3Slh%gO;*#qaP~;UWl|(*k9r|JSqCgw2w?tl#Pl0!)?{ipl{@Tr6*}M$ z)SvokodCgvH$xdLUJ@>R9&S$kiL1c%4Kmsx_C&LQ@rys;03QY$(5jEu6UFF;Jp2=S zAE>F*quyTWt<$taoeIR`y2x*Pt78N0T^QFxiP6;~oNgu^STe5c-j5$r@Fw2SJ}uOC ztAVG%yYGA`vTx?T)(d6+x1(Ygk(BUbtn)9cs6JHQP<+y0n`x8uqt956>J6{@s+QpsLA6quL zLJEWhI#rPKUN-r4uK?{dtGEmZ`}z$^KaT+noX&Bv8;gO1ol+~`?*xEeQgz%Bd$D5- zxoLA#vu!76y8(p_Z~egsCayxvj((>ekbp*jJ^qSRfASk)Ys@it0uHsCP@CpLl9uGQ z$9jQWndZV;rKAI_Oi1Y{JIJ53rFz}jJI3xl6O2Xeh%pt;bHOkxl)Ed-N2R4$%2mr# zn_ELPyj|gEMn|u1(%}4FNHg-TI-clMhXx;%G;NwygC08QUc88}L!*6I=s#`Zu$)a9 z9S_7#uK=sndByIl!5Z8^-wZHe<`pqW+cE$B>^5rYAG;_4a({OS!d9++kTF+~Cc#+} zGhT4`T)aia0R_4aa8J!4zw(=uE)+lj85*SMGK2>T{?P)p$ z>_pb_uYV}QM?nj%|**7_J-fxt(elN|-#qCa@`y*amd%>$Y=p1G(HJam#wO@e7vqKL z;c(|iffp9rT~S`lwX5aI?VHoLChuB<=;+CsA{bN5QCSbGzgeFiFGm-ymZ!V%b*j#D z@6o3=*J!;u&G)Csw(p%?o{PV`&NyhHY$(Leof$vV7hvz5*lpjbqLwJ5Q)vPED3!)p zJ?_}`bXYTshJ9Pr(`~IzJzBnBg5YYnZ`Jd@^PFYCu%A(KFSh%+1YOp6P}~*P($i7T z>&o_?uJC=e^IhVk8=aGDvhS`3zg$6IKF`Wgde)OCwtxDw$FA>5PYCaDIvicfI5Wq8 zA?Xf7ZFPA2H8DGI^PcGaaH_!Y@|?cYo^KM5?%B|nEZNX|f3r;=vt1{5v-1BzHR_bx zWX_2;w0CiTiTUoBF@N92x?nBjc7MSO*(|*NXMqgUzgQsiziB>@WF+jrEF3kr{mT}P zj(tJ@dp_`AdOnc-pObj>{{i{^FC!UNrvJ3@d8wuTZzSGNB;z*?s8y8+{RfecG43Nn zi0_Uk)EZ>&A0Qshrct)=@kE5Ky)oa??y_{96I!`Apk(PcC=7;|U#WT6?&11rbUZ-q z;_-WRvh8m^R4AWV#XlQ;-CsykKaC^K&yVnc?XTy9&k)9-0gSJY>iOzoZ}v}ldEtQ` zE7Y%NZz%6>wsYAeSY1wLlCSTHL?6aKzjsc@PmiZ3_}M&OABCjX zQ1UqRh5M6ji@OJ9zj3-goX;R*QWR7#J~L2b&~sYPvqgF_wQtp+7ujE)=PbN-%7hKZ18= za}R-sD6cX-e7JF!N69xx%cO(P3y*GzYmHUsk&Y*>PVWr|uT3rgN(K*Mo^`&#Q0$aF z7hOt$-}?5LrHGo{<=G-Ebl#ba_vLvl4oqfTgSV*lN6Ut*uFmfaoo}e-o?eHd31s(4 zO9ChoaRlWB9)^;^If+rH^OYQ$N6;OpluuDnwkC|Syx(8*&}o@P5=$PXI^t{98#k;; z{gYqT#a8fkdQW)3W20l7p_(RA@1d0znrwpSN@&A1T5j-qpE-aFlSk>n^f(VZkSLp+ zCYXW#S5(7MwFRQ{-p8(a-2Z50V!yDB!-ZAUGFj_Uba`|YWQY6>%U z@E#lz0CV&8Bj6vjuvl$hcDG`8-K^!J`wA9#n!OW~zFb9$K>aV32}@yAtcJ^N6lP+f z9}sC5n80XR2IY_(aj;nr)j**k(kLgkSpn6hv|qyHwp3ACiQz>j5dzW^A|ev%H7-B1 zIu;qxYr1-AoHZztVhAK#eN%Gs4tU9W7OcpRyu+D z5-DxCUaSC83`#0174fE5S4IfE&17{WWGu-QK0T@4qf1S+Mz56sCE!2`f4)hk8OhMz zlFHtI5@^0!vEz-b6oeGYJaHKmDJ7d^LJ9<1p$UZc1F95>MCxB5DVU7BiLna3yoCwJ zc}{xBm_wQs6GBub!=}+ViWEs5>!=hIHR(O0EL0|OV;`GgR4H;&b*Zcrn3y)LHfN<6 z3F&4Q*0LPAGh4Xe@*0U=hF23%Q}8SwHV)Y3?>44QtUd-ZQ{ZW<<5%4AA;S`W%3}yD z_wQcRV~~?9X33sjG6o^Gg2C0yssQ0CIHxKW)IT&ks8v;cxzxdmu{9@&&_KV{t$TWf zJbgBGS`cE))u_h#WrxtQ|I(pji*Q{eLIYC<57yx_)haqUHxDh(<8TbUJA_~YPxqP?>%(dKZ?Jd3b{+Ax zgzLel2&y=!;R(A2!VCT zN^al0I}WsC8*T7{Gd+W@9NBZekK5q>t2FL{X3_Gyrn_{U^lN)%LBxc zIXyqQ-kTVL7byS_vM(BBSJdx@i2o%P|ASW+;p_4&`0nO;9N+NWNQRt2?WGA=0VFP6 zO0Y~{oS#o5s<)SFH5u0KR{%8~)}Mw997D2JYWzi^@Rn9d3O$LDURYkcM^ACY29*4r zs^77mt}(|52cLX#3E zSL;JL#n}a6RqAnwQQ@V>>L-X>o%6g4R|+Xh$%sqmGMRP(G05C5HWO58GycxnfICy3 zcv3D<9iE$?r5b=7&52qv7O3GXrkRV2`+RcB;@ZSq-btn~OMSGy#7W!#=@plehDq=F zK(BLKCRkC*q#9BOH_ zHAzM$hzGPKmJRB%V|g7Q_8;|ZDAy-!GD+Sjg?51Q=<0mhe zh=-dcs-y-V+$pCMf+%em)dZ9ryS5`u$@w&>4UhLBXC?N75o1d~ zmsa{B5%V6m-&UD#(6n_S_}M1RiAIY{=RI9`jYZ48;^8v(!Ly4T(hyD!`_p)xM!BAO zv%3v(G3>v>D-59*)?tFKZE@|?hNp&6&oMB(JeFI8Q~1XufXE3u@!|(yCJ~%Sv%AaH z`d*d?+O+H6Q5H8D@-*JHwP!UD{$Akv>rv!LV<892W{zJ9-eb$qH2c{g3o{0zrZVKO zSa9a8mUndWZ0d^%#&24oYG+S+W>&f3GB>gMrUgXu zD4^4jqTvlH|I3){K*R43Q)~l8g4$^{7Q!Qg3e)${7GHg3gmS}`F@=^y_5R@;cw`RC znG0yVW6g+89OZ(Tbk4-(Vu8V2FGEiS4GXvf_2|Qwu;rP~u0bcd5syl|_+Qni`Z;xrp&vy-`jlZS51j6`HB5X8q;%05TLENe>z5afm1^{Ud!Ws2 z<+2E?$CCJ$(EbH`?Z#zhz9$-Hi;zz9BaKM99*VjQ zdbjr0Pe@r23POOPGzU10X0;jsjn{-KWsUzWE)_Id69hXFN?d+Piw`rZ@o_srw1(1llUYk}w@0ThVvT*sWZoM~-&yJ;fKZ@{d zhO2pX0@P{xJ_Aly@h_{?IC@lz8X68KRpR%_0{y)uthKUyiEN)V?$a96Tcj-3y6D}! z=wLH##)4&(^?^8tfU;26!Uhn2S>^2 z@4P}G|6lCARd8J4mS$;@CD~$&nVFeoF*7qWGcz+Yq|jn!wwRfjC5xG<)3>T?s;2MU z=!ux8sgB4v8JTfjbD#KEuJ79iNDI%jsJC-_)U(k{JCApplaQx012{1&xPV=fM&ACf zd-r_{k9WN57t7?DvOEC1rfx$kTH8FSecEtbD4raDpDvQizU0i;mQhvO=Z&ES7tjvC zWS7Ck!?FEn(B^K#>%l;vt#+5aU5C5pfGpn4?h<Cm7SY!8;LVzM}{!P$J+RIW$ z?IgYOIyx3fxVRZgh?0bUalAR_kpjvmj{GSd>DutSzr>`T5At5o;Q_old#BMrg&%}MQ61+&cC2!KNxJOKTGxpb#_L-h#CPFs{CWX-I zyhzK`yQI~5e=Jb*HB)!9u8l-h?rhD5#-CMR4mQBIYi>yWwgGUJW};kTpC9tp16@ek z!VP~HeIS#I^mZN9=C8kn6PD@X?JD}5A%Y2Rl6}~V*s>`6DOpgUJ>x*Fi^u%Yo z0_cAiu_$-&yz%*p>q3ExyBn-6VFL)9)tU9J_*FHuRw{Jcf~RT0sglv5v*3lhBv={i zKyn_=Mz&+Aev{F;Ho<>4s@=Dyc-efv_-a(Ab70cdI$LdS*R9}TP3MH}L5$+W!NA_( z-E!wS&Tt0e?`{RGTBjP>um+iR8T!Guj{Hqq!uO&e=~}svL1$)(KWx$EreAe4MO3U& zHJxBBx$^p&_O?e2ca#C1)Td?9Ba?3B10#EKDTU!N^P_q;ZV8_5at(ga(G$>`vAC1* z#vcH=aa62H=t2JlCtwR#Gt@38M@6!oEu(4#XgEFEeSi38K#lFc8Bk+k{eNvZQM;gQ z^?tZ28rkFHv#aO^L3ITc{>xq~g#7;oyGPdizyv8hQ;^c;4_H}{)_9Hv6390vzpj_$ zBQ`-2O?aUPmFAn8v?=#fPw&!}>_ldv*woC`37Jv1?4BR9-`3VF*9kvEx@3ou zm$x>1#s8%feb|=)sdZ1HK#;ZOrCpV zpiGh#6q>Hh#WZD+H7IBx8;zi5qe{NN;=|S}ijkbGJ#+PS2?4Wp8Me8Fy~4rBe#aPNDOo zo5qpGw`JUVcEZ>KtwtjTz-eWB;3n^V)+Iy35pLvjrK(QW&GDo`nJXIIqjqNJ(_P@0 z!7;pF?0dBwUE(gm0E?ni(G-U-`)27wR9R^9nAF;H`<8XOFWG|WDyp-)_`b*dm zZnrICJK24~kY_$!op#q3oweBWHN3UYvzLzce>P|SQ&RX}!ZcQPhX4En1*Z36aX1{h zx^;W%{eKydK{J0Xp%nLiQ1kOn-Pk}^ik>9lG8&z>|b94My-kKBfK* zrd^L6_n89irmi=SUQ%lqQjo~}AUe8Y!1*!V&e)br8fXyRCx%axY$Z+S#JfAj6rN^g z^}TH4#9pg`bt=^cibZB_GahgC9ADEBpeu`z(J?GNq5iZx`<3ZxYKwCXlU`R(v$2lG zT4$c0wV4&J?PitK;+(%YrO~?OLAHaJOcRg^*M-^W5V@N0T2d@~T9V04XvMj^Hm>$O zcnjv(XRqEM5H+>cgMILtMit1BxHez6=~E?Z zo11b#YoT5(@5vl>0dcTusHW`vkhS?cYUp^t>mGMgXpq`0RP4b?^X772soGEl<6=if zz1q%^q^mOlQ_@vF(QH`82CMh_neFTZJ*)d**VbV1jJB_?!J5YMjdRT%*TT~ZS~T=% zNbpgRnY%^F^xnCGWTd?IrD;5vTu7dRpp1Oc`WXg$jZxvJ4%%D7)uL}68gr>h!d_l*w`H;dNRMN7aAZZnha4Vesh5l?o-7};}4?>lTYt793f1i z`dVuT{VP5!USeo@8PXEDZ@iH#CC%X`M_d@mC5kvr7(9rT;4rNOu8BN>88*qU(-gHr z$*}C5T6mPWGnH+6Xfd>`G@qATEt_ACi#R`qgs^6|mUCV_V4i(Y!it`ZM^Ut&p4e0# z`Kw6sK6ovZo5F<|ilP`T^GF2FSS~@U(}WP0iMp55LZFj*YY08@QYxagnpoZYn}-1C zTEGogECBH~q2}Mdn zFNGY*pfITogLy`k9%Ya57z&y~ficHPy*8+H<>Z$$@qSoFyH=*Z5-)yyt zoFtZS)o!gK#gXja3ad&_BH59~g=7JKrf{4i&rfaP?vVG5@z4Ecz{pR134iMCUAV*5730vqX zY%y%BjjtZz9)o8u4Hyn#R5VSZmwXd`Nk zn1Ft*B_xlrhS%?&dG)lnqMs3d3%V{-4hU4biD;a|%bj+QYN3`wX*_E^Z6BLY9ujpd zIkJw+X3N-GgN2Uht4jc|MSN#CtH5Fo@Qbs{JcnU(xDvr!$L$SczR*8;zc>=$y(bxb zRo}bVV6f6%Zixc``sx;zW6uVawNi6O9Pq+>>dpy!rP4L*#2!%gDWD2r+D-?F&H1>uY5>> zpT*%l-P%0HKynX*)No6RJSc{#!%BQ)LRU#c5}L*F3tXzFc6^0?9|n<09S$6Ggt<5_ zaiCu%E7&44I9@;oyEGTx1-5q3Fgh~=KeFyJJ*5TglMwcI#ojnr!hI{`Fa;%083N1jEM~bq59aP1_SX0F;oES< zeDc!i5PJ#Ko(d^NM+p*(t8ycZs}Ig2&X%WL@c#U!4?CLUg$vH!H$Z=YkYg8Z3}T!K zAVdbCP|U1Xj3&es&iwt=lRTjSRLP_bUk;hbp^Ud75=J=NVTQ7vR0DY-t*6W_1WArr z*ubB3B##bxVrJa)%tE--Bl(QbV)Ziad!goV2sglmDnsPrkhPNGtWL47RjB~?E4O@? z=1c$X1#%?2%V#=q^Xm%n-cCZ>iQ(g>xNCc+tOlw;-Jo{#+fQW^j%pcu;elJ?wagJFxwlzLSs&?a=B_ZGvAovC_cNMSX2I&$#K z4S4RCT$o(&+;6$&RMTBAaUY`+z449nPmC(yy2pv1-beaw6N8HijUotRx0I8SNv?Z+ z+I9vzx9thK?5GDPz`CnLi!TTmlpx!oRkTBRThT1@XYJ4FF)*9S;^PQ3c|!#g4-%%6 z=Wv_R1XH3c#{0>5Zhy*oK!=A&4Ti4f+OLOuM)?Lm=!MNm>ngv*M*F<1tN!?6KR0}C z>-$yqOW37p32HgrrIrJm_$OC4UUOls`hNepgO)RI2pF*1$wzc+ECaAD;i1AyOB(XbB7z? znJnT<=>i6M^el=nqW&?yByMs+79y8LrOQx!-9w`SH8hr)Mdh{tN8L2JH%Q|w<+=5Ym7GbKi{nx$bQeyU_g-VF~YvB_r!Qe=X(^EPcYn7M;O11F)s@7FG;Fi0}_J}n>H8K@h znfsqX7L}5&z|N`#!a|)&?5tAZZmx!J{MwDi<$7@b<~NUiH4!R~;KPtCW-)}Bn5@a> zF&y{b4yP+q#M0qSatC~4za5$|>Tu@TIP^8aczpz7UnzW=>xC8e>S*(Xl?(`tS z5TRk`G;l;OQAp6~*<2W-pK?9#Muf~n$`$x=tS{1|it9VuKuXd`9O9yPP0H`K;_7yG zN*wq*R?GQcqTNe(E}A-7n^dc$!0sh6l!?+SQODP-?y(!wRke~Qm-#u;u@su^Luin= zLeFcQeu2M?v6o8n$0;zgHiy>@CvQ{;6~V8tiwPJkxDv3T9z{o#lz}^h0;1N@U6PFX z?`$M>t?S91i{+Ke3T3C@O8(^3DxgP{Uw4+jsWzJH2%QUOGW3^GqEJgEW~L4+W0D0T zICcw`8%Knj^;w)$elRaH@l_3LQBh=)kC)>o70ON*nc&v{P!VCh#yo&Bmk*K;r#5M& zFd&~m&(B-pBHd6ij8m{=bv}^KO_M%wPoe^L`G*K&OPc{#i1UgzA$C`rJl@FKxGZH| zKQ2(~ez;H6jp>({R&Bn#z8)B_!@YXu4EUe7^YOXAx3Qcy)>kxJ)6DA1t#vLUE%3ej zpYxs$Mbcjjx9IBfWELjx&4P5*?JIT6y@KHjp^vZrt{0M8v|ckF*3cg zgJthFnQl?afoDs8l|Jm)Jd_3|VHf{am?F2+#lAIR$BlY>g!eSY?ORnB7f$v zyWm!<0;|vVlY8^W=0ZP=XPy|%I(1(CyeIgdcP=W{t#G@N;*+b{O5vVI4-WbuK2*ig z@7u*@q@f(blg=q<9WGUe*#s#hO*z+lI5Ljma=fY90j8_Gx9nk`W*=UW(bws# zhpq>3ytB#GraD8Shg74pTw)ZE@j7-B*PWw!&xYz+JJVho_fes-$hfMyJS{fjW7~mb zkI62Ja9th+CHAMC{<*l;U3Y`a4z(nN1MpS;2KwS3RG6=jf@%`s;`5*&gP=;QYf*sN zVxOQ8=*mtL(c9Q1sJG>cMN|oYwdpq{8sP^^5FatX`*}n5cCwiYq-mrNO5fJm@@YO? zxN6Cp)b!<{oVV_z&sY)M0CtgCr)DCYd4?g}nM$5rt#^!mj1^7!d7h)L9D<@gizE=_*hr_y`+gw9tRsn>?~ zg$eMpht|Y4_3OzQn+vAXcEdA)RU9+4!wZZ0W!K_$6lShVx&8gqy|kBDT%1~7r?m$! zRLX}XU4hqH(`vjAFoxjR&v%~I8||SuXh9CG1m$9=x(^pM5&AKgWk5E}h?s`T@Ta#M@Uv2PmaBpgJ;0u#yRTE4eXACm6aF@<(NzUV79)c>g zd_0CNZGK!}P2vR2JzT=9%Y?xv;d0_Z72lU`B>DGfwoqptaBtXhz^svtoh$u$dcIFV z+LIoIHyKI=f8y-wX!3?98dSZjN6Oh0lH>)?=Fu9Z413>lK!+~FYuMQ?~eD5;1mqmj6n`)FX{K9DKTgiN6q)fwH(< zjNzg(01s`=*4TwjNCm^j$ETja7{_d@4KeXmg4*`O!B+Dk)-CPmF z;{+y*OVOV$%Gv(DAB)a~Ah!@W=_)wJIzv0O3;d9`8Zr(~oBIKQvI&h@+gI6e2Tp%< zApy}It-?G4ClfimRTDOh(Q9Vfl9|vrX*@`oqdTwhPlBHBPPHG|9cqIL+zt-r*% zlK?iBRn6V8ZW3>#yNX?et4!^^k@;P*oSPY)5uAfg(kWgumKTL0qnRc0ts)a;PgMD< z<#?4Zyl6D4%!buF+Vh*e?Zj;puh|8r9&>-(HS1#Pck~~)BV+(@^SDd7eUE!*86N7@ z_n&fO&om}!F--o|ELvd#$jM0g5eC|plfP>h@geq|zcl>(ZRA{g9BHD{iZhV3xO=PN zrQt?lT0t*-Uz>EIhIc*rf?{rg+ePyFe&OR6Dj1Klxo@Cgo~;qbpi>>KxAA||0A zE}Pc3B##h(Rfoo2r+#G+K&`+K@oS|vNgRSJB!4H8Z5+QJrN3lcr`8B@6eUoNJ+$y2 zM2tO;ZIK+BX(>Z1-}pY`7hwnvk!?01sK9BwBQy0Tr!b--R!OxU#Q?S1h)JXfdct2O zmV$ON{1LBQnZHR+eCZF-C`fpchR9Ee6PVCxA5N?nZSLYhL0rtMC@LgLf207!V*6lN z{e;``wFR^k-wquTE0$|vu*V^?63m7aNNu&13AFX9h+z&XC55n1rJ4Y`GGcK}yOK16 zLRmmAMxBsbSi1B-xfqFfO1KI!xs45pw3IS^t&0Zarx;W`LZWnjS+2RidcIg#{CFD) z%#P}^#4h78G&Ds5NzR=*gP`Ttc5_^4j{HN~6%%3 zYn(EsX}oZ@YAcxAFdIk%$V;2?v`BiPEXu*LrN#w=1U16{lCj~1p2>w@0Ycc`Bgd53 zs}9TGLWQfti4(3Zz~C?+;9MNV3lUj@2WqgD1{R=joQN*}=D*}4h>=m}TxyQ(9Kawa zGN4FP#f=cB4|q6I1J#~0fVKXEzotgaaZ)UV6CJtKvOVd%IMS_xQ|GuHnXPhkMT&2w z8e;jT)C1?;ZLqi}>bEC9cs1cTCLB)?{&2ru)B%o;^M1K=;=N>%eQ4jmf-+bc>4=0d zOnjfTalM^orgqZl4WXEd+_1U7tz*YF(%=atx;IX7zixHszu0W0J6!NDZhZfTq*WXy zP7Rc_!lZ;(eLkTU=V3^uCf=aneS#qQdIRxxdSb7(McuB5xSxD+aNpJzm;iqzEq<OEvC^8?DsgN=!4;;BsjCz`w<1RR#IjDARdlzyuz6`ilcZ=+(k zJ?5piW9W!pg|Q!x(Z!uCn3{8onEVPkqVcot_Bq=dPZZdZ4$h6y0NKmY?;hLxRGpY&Rf{}X?M z(T@8H6yBRSb>DH$&+zGbz~ z07Z>kM^xgl*J|0tw(sq0y31~uTs=?wcuIZ!cLO*dWy88`*Q_7Z5}D2q1Rt?7-_q>H z;}Y3%H&D9>_^$4~nB8>y_*eFuVdW1}GGSjYDcR2JW?dUespRWwCi>dN8ki*szTm&% zMslcv$#cUUqi!oka(4il2I}$3_1GqJ+HfCR6R0J_v{n%MwL-bTns;s>eux`-h**4f zdQ4*8qt6-w%}0!7gyojx4ev9>p-SJmk8{LjT#szB?Xv^xx{sK(aGI%&hRh5jRHFzq zMOioFn|)V0F$<2F4&?lV1m}_>i$apF#6l<*I`9G4{Z-F!T>FO(gf!b{Oesnly22E_ zd6YjZq+(*;`)R*LTog%2fC#OWA>zv-5`n=?Xk~6#jZ+*+^t{Ss7|y+uigdL6B5%ro z0Z)56b7NH8{;&WM8|1tL)2_IzRVl~fY#RUxTZpl++ zf{3IXZE8IrLo=6DLak_^986K0GwU72p~4y4Rd9^TKdX$~Z!@%SX&~0wU}<8`cSuUX ztRRN#TnHE$j<#9gNx*!bsWiM@PKOstJIWu$Hz-(g&02)U^-_=EtdRykjM!MU-DQki z9n1i?iC27YQnk3kq0JW$6dq{4-+ACg84 z53GG>ZMTqAljbt)H^E56GK#V`?P!x4WQT)h-5N!ghO^8Xyj5GV;J(vDo2D>3d{&JqQ*%GC-@=8zhV<=o#I1tawr zR@G*J)uxpYhi;(BSt5P);;@SnLQr8B?dc~X60#xvOV5C! zTu{O||MhzOeUw6YmKU4?p9-S2dagn?Y3?^6eQ^>u_5ngW$b=-Cu$Olbw>0)cOe zM0tM$1n9tKu5N9rmQT8iA6Z5n>Mk5sBby7FzP{aVQES>kxVrY+cN^787kJGgBgfPdHszzs zElrV=BxT(Q0q2Wnx58;pgzL770O#4JXcxa~7!G5U#tRxGv~NBp8!g;mL%g}zwx#(F z6JQO3bCZ8|TpYWKXIc{0AG?Rv_SOy-ntn9i)1InWJ?71M@OZQ(zFKqM*(rbakp*qq z#63+nq3go7_PLfJ2`0J)9R)hP0Gn{`N)cqF5=B?#7wo4wS7Kh0NmF;BMY zmf-7pQ2nlHtkykC!^GPi;RCsFJSrIa>ekd(o;`z6z53_z6EaU!S37-wXsNzuO)>Zb zdB-yPKkPF> zqBpWKhjA{{)}Lgtmu1kY5rk~HIYkhzz(jLjh4K8+ZPeYUoM{lFFmE9o#qk~TW{pYx zjZ@S7Xw>J}^6g{R@L5NTbrB~sV5f49!e&zxuzMOk&I5-xE(P-1e}}wgyPM7ml8IjY z-b;LCZdqGuvK4qnS#kX|?GU@z4l(X&9stTvFxy~CK)(A-m?4HwzE~wN&V@QvBI?9& zCIyUvo;fV9kby^=z2{4z{UCVqhMG5T7Wjjuc=?yTnYw0$xi<^^Pxf{z31n~b@h2Ne z9{1HKZ>WPn`1WEW<=Ond58qY?@VrBMUS_P>dN`OU=@AFcZ~MU?KJ4U_fkkD80ACGbr_#5}m0y?b?MU~tLs@h*9q)D0zE6EdwY+2C9IyfX!#pAf&^G7kS4jbr-n=BNFa^6LMsy^H^A16Qipzi!~_o&0aw zz_qDA``1syBAQtL38g43JLM9Y1x`3T$mE$KAYaakAPgUUwNb)B-V$3a%>x*Ub%$y2 zPAZn>`C<9BlUR95Bz*r7bUxBft`@aiC&1{%h2~yizR=Cq-vdL$wDMhnZV2OYRpVa5 zDAf(n_XTC)YtvN!eEE!*+%1f1Cp66o4%EqnSy63(NGC+2=>uAaTU3M=2^;ch3qO?$ z#8%D0yLQOV236O>n!MT2N^kH+)@Iv{NGBM_d9;4}j29cORRdQCut3haE0I^4y!wi> zkS>p-)6p5FTAL-gH-b%i5TP@(JRbB#seWS632(S%SI`Q^%KOhehEusv9C0$UZ%l9m z?$azu=wc_Z{Q*J|{#MvCWF}xFE*PFQ=YJMfde~qGMO?`DaJ?7@r!%OnF&q zsGDSzWk2pT>RK&YkKYffgdHm(`#Bsp1r&M+}u^vqBMao-NxZl2ZxHXK%kLBmjpLQ)u z@y=))I`klnjQFm%RJ5kgaFN`?F8^VuQT{d5&hLi8i4qo%UTt-|v;P)w=_Lj1VSc~*&{P6A8kPfce1o&(Y&SeaOA z>ET;(HQm#KZ!}nO92zzcR4y4C+}|3S+9(o7(Iw&PDj6-4OLRmY!9y9$lvlheY(^>We!G9lc=6$Fn9Cb+}0dB-?I~Adn|*{ z=BR%0?4jr|-+RvSihMeL$oJaNAmg)^mE|01>_<)HBm5|Top5qEoi0JI{} z*`fPCL^gdaamo^j!XK%Bft~u_zNRE=LNkbDMT}gg)&L6i-QYX162zLdq9IX;+L8l` zILhHP4`8_u3M#F&&hduo9=rQ*Yw<@viiPAA@_?oa zb%1($+hLN#yhXD(luWw84EM+=MLAVbqD&SL*Rf5EI#Ti?LQ9+MDzP)Boh|Mw5tCLe zu1{PjS_@4npTm`@$uM%&8TPGp=79wwOci(Hd}|*bpg#l4wTrQUHco&LCI?l}=08&? z2osqxsmc2Xu2W98`HSnaEMU$_1?5w<8dfXPQH5DdYAkYgz>$65>wnhoU!g@DnjNyZ zH0LXIOSt@CxpWAK_QRt+!S{ljDR%ej6iUJ z>6@7V*ir^chvu|IViu#ra&=Usi*_>YjwIcgb7W7EN-ga;uNU8S=AhO?{_2U zOvd}lcu&iso?qg~zBGpH6uZvNphbMT)oH}Yg*U*$!Do{%n}Xmm!+v9Hq~raB`VtFN z+C*+q{JE>S+nCWkH@=4T_P6^Jo5H`%KH(8U2>qx zyUabc0R)pg8f2g=oqfS=oi3|CK`lScz6^g{;*c5RCf*bd?YU~f@XpyJZ>6r)wYp*T znxf#)HXUjJAlEBnItw%v!xM^3lw4r(G>DhXMX(aHmiHAAx`MZlF0RnjiWl;Ij9Z)< zJKwH+kcUg@UTi7fmbE*l&XVeahLySa$DOyC?6BB%_2Q#bp%q>sVY1MdasB7O>}~*f z{&R}H52dL;>?VJYShVtZE}twOLA!Q5Jht9vE8cG5%KRRA^}sCa+zGOj9AGnTF42uQ z=dh$9Bm0>HxP<1cPidTxB%q`yf@`!&XjtdY6fP;HBF~|p-jwW*@4Qt`y%fWeqIran zPwXk7n*L#+2jqKZaUx$;2BNsKG#_FJe_FU>O8$fI&3m^6Qo9>%If$HotuGG^M1xixQ}ypCj+Ej1b2@kD)lXHCIk(x-@@;^TD~6n+%yC-{jjC}%Ua zAq^EQP6G`jH~Ohre9i^VI_ghVyJ#@T)@`UlL?$@PV~%Y^ZMemxLF{n2!<->N{^E`T z1=~QAEI7|ik+<6_S=iAF?9~A@FTn6|9~WGyLOdp8b+$2$XGW7XN^!7+*FDc5Jc}oO zgu+v2woiG)dX2Z(|FPn+?TnzH*YT0W#pX=t{_ZA`QvT5Sh@@XEk zUAbno^IwGP&*j|tIDLY`>3ZMquGGnB>=WRwk_n2LBNt&q?DMwq#xqk)x0gYa_S`j; zTr%}u8`e-ZVn&GWUK|h{*Rw1J>>YO!X=Ei&HlpOGVs-%cpM|L&=;w?yvH-JIB*n#I zyo1p{iz3|)B0O7$dECqwWD9J7YRHAlI+s=lo?}{myLP0$a^iQ^;T@^hL00Vn9h#+T zRcp3bI|@=A0Pa^#E_|O*q+^<{-%c%?hN+Eh)&YUfaH%X83V~spxnIvAKc5pEbx0$$ zTEXlAp^>_wU)Vzy zSF%I6h~uL};B9lf)$V!Wv5B_N^G-Z>*r0T(g4X;^hl)cDT1)pep0|(t>6X-~JNZrd zS{>q*o5fvL66q2=yC0f7Us%>u13cJwH0h#}@tW@Kt_#S1*0K+bu)UtGI8zt(6I=Lu z6~OL)KT;TN zo|xRM8Gl@h6mP)i**bNeZk+j)Qv=SndqAEWad zIs3ilBGuB+#^}+(@g8RnU*(UtK99uOOXHi>Tm7BJ_xFefY6{#J9B&OQ-=_-g%sy7D z21)ni$15jo#5L)$toQ36s>}C}6e`sm-pUAU3%m=zQ|s`XrnA=8FRw8=2fUpyHl3Ze zl5Mu&I>eaPzMK18`8yg~=F81;OQgpqcqk6!=>omwmx&Ci^&eXV}sYb_07RPguMYU z}rI>Gpnec5b1&;&>WY(H^_Vv;3i3cd>I3G9&kGFy)z^4K}n+kxcV(d+j(WDg)5& z?etjt&TN!;{}zpiRo8*xFlil9+TY|>e!c{to5`$UI7n!s+rz(kaL1Ly65xqq_1v;r zEJP@$F@eizi}qUPUHDOde^$nT{3ELzk9x&(aw0|A-o0G%cT9^@W~7oV+@R>F&8HC~ zMd-^2a)<1^_1P|J0fA(bE<=V;Q4UV@BL#77UD3Zr}TSXwzz+@np7ELou*eIjrv|byo%NM z{oqK(u61;Yg|Q-|ZMc*jFXTy+)key4TfDGujz$YQvF_W|Rk>t_CE(Iffm4O?u2?CoJ zg3jo4yTEV`K}%V|4J{D5jOV0!C?4yk<0x-mn~-O%?BuS9uRzr%f|F9qVu{u)jKMl5Mxy zBrh35Y6MRgY_Hm?*7OMNJ?)|HT8mDh5e;1V@EvP@M8)R>;dI+7 zOqWWfa_U#zQ%$7GHDs%jgE6uqCqXL|MIn!+{`+Ua2SLN;*TPOv*=U}H`-fwJ_0TrS z8xJ){?<^66%rYq8rm?js4)$4H=rC(m-j_4|n*JtqEDQ5&*@dW?;EQjJApJ(=b>Yy5 zWf+R&sNH)AKa?Aj#H4+hijlPalL<+67ToKVD}OEJq-iBPdtbYXhOQY*S4 zkrJ!(XNB!%O<-tI7*uR+1}T-Y9lQ*_DbJRnn-41gVk; z;KYH~JYGWESn%)qoJRDh&~_*(Ml#Pg(JMn|(Ij-6?}%XRB}v1Ss7x8AX{^d0OM;gI zDP9+D$Z?=X3?79p_ECbPQc!GdGE+eLs@PE$hnQU+APHXkt-mx|c{*ZTrKhv}8uufA z!!S+Y{T9MeRP`lJfAA4xSomrJq;Byk24uzB3(cP!Y8Qv`Fz%A67VaJn1AU%r|0Hjd zpa}jRZUk?hD=9p0D=!P?9WEI1jw`7I_#p}Q9Znej{*^jbv0D%W2h?X#bNW&)O}P7L zZ^^pkk=skgQuX?CkzDDAKn`FLR^+8^ zGPldPkc=zva_h2-$a<{8^uBKy;I{YChIA`*KF}Jz8o38%K^Fs8(z!a!6}>7cXjv%d zx#RHje8ENNyoj(KqEQuVsXjhlNw4Xo#WC9S5MXQMskcMCdfDV)H39_*+` z8OOYcX}F5c8eKKd#wR)ESc6X}OS-cYC5lBI>y@t)y~{kktL4td=Mzo!5AT59)kmU< zRo6@d&-a7~(3ngro#oKd76V^wVf>*$DwUODF$U>$u|fbg3{9c8E~fPA5E7wlc4Tyr z$~vfc6+1lRmd6m7#TJf2!NX3=aAt8NSXzqO7atyjuVQTAX!zHNA%2shEiNrOSy?3d zRq~$U&wi_tjwU>QYEp1M{O2SqU>34YLg(SQg6H9}C7m3%0jrA2()z;ZBRKM&H=^@7 z9pcC;^Em-|+bkBcJ>a?x^+i|c7P8l2tBUKINPqrN@P@1^a^^oI#gy=n>U6EA9hzG8wMCDyM?0^Ne2g0}PWjgPpUWDrm3o+JLQL!OnsZzmW^!5jG;khiQnUF)lF5q0P8KnF@U;9851m^pE`` z2`-o~h)5tk5K$xEKtoun4I+EaW#0s4BHfW8pIGaoER5EF2T+nmYIj&1uaz{FCVLIANZ?r1QJlIU&4_jJRUmgBHkH-607&zSbW4o(TQ!01bJ7|X8wbL{vt4? zl1k{I({3U!Nk1R0Q%M_i*XA-%=&dJ4bxx-pY(913ApN>6=d!BX4mF>%v5+4VKtSc( z?*vh1ST3oI6DqiHl6DTNHsqo@iu9?iK9tuF&#jrnPKqIamKO7?X{euM3zWWRq!~gg zSW&}p7TF%QRk?wMbf>hEK|8W(uz_|J^ZW1lMKwwxZ9{QH=jZ{`GD~X3{Hofl@V3ET z$P-M7eYqt$iO`N57PNU5WK;R2=cizFiw{fJp6s@rdDvnbcIUoQESU|vlMucX8@Kjs zJKL?SwMU%j!>omg*2aQgzNgN|B{c6%MTtwz7M&Kp8h9q7Q)d>X^^APw?@io$t3GqE zwZ^U*pTf$78;G8piVN8VbZ*oUvwM<~r%u3CXSmf^=VuG|?u!qNyu^oVtgF#;T^k}? zt;QZ61sk*CUIpGRG;iHeV5g8arj{EKYb&cF76{F3nw3Ap)>brD*;r&>elKb$X6+(R z9Oi44OA~vVKq1({GF5m+%^Jc7yvqaSm6eLyE4W+;ClUWx;s4VHM8-`aU z**m6xt>WsR58&yTDO#U?w=O$JT-14sZ&cMZJwFEoHZ~UoH?n0000+%CFyNrk0}h(s zz(EuIchIN-2Ms@P(DVZscf!Pt^%066?gcM6(J-MaTfh^v?6Hly<_6;6BAEzjxit;b*J3Y3$ef~39m5%eq>L{ZR~hN?)k53hEdJy&`?>Jo}LG+W*%R0Vm0NU z&QC7hMyzI@`>n2cH0M8POX+-TDm5Gt)wii zFt33$*58{81BYb?@EZlZ=P;-y-s+Oh71a4nt5Dz#r#GCLCa2Z)$Df=0o_un-ooo1} zQIY~K{+WWfn0-NBEVz)2SiCJpzd87sWFNxs(qvzgOruwhcE`ba(CmLXXxWHA&(WCZ zr(G~fLUFEAv(Ay2%4bwX9$0d6pmIV(mV_cP|EM=~(+@wlXCGzKdq5qnUek3&eXHLF zKzvd^nfCB~|4_g3WrO&vd|0s04yvxHj-k1v>A`loG`F@q)*XStv-z{%*)z$3Ve(D( zLGvZ#_lgkJnC8SFU{J_%&E5ZXJz-4r!&*$>YUfYW!cFNZ~IWGY^L;Nb*H1O z&B)tb!X^ZZ>=KuSx2=xXTVJVb$-&dcg0=7E+xN$3*v6b>ttn9g`uHzqF8YuXb@0Pq zGQ59>l`4}q{ge;%6WoUnK!_I)llqk_&_X!-oghk#xt~RGoM8F54E{MbOpsWZkPw7C zd{O9vI0G4aL8*GUPUz@=u=kEZwnXW+Xt{RT-eudiciFaW+qP}*vTfV8ZTnVtpLe5A zyp9{^{l4!<&K#L*uFQ@o%KuIO7~j7~c0nbJ;ag9m2&fam=o(@-p^IRhLP}_6XCr zbuTf$yDG?KTnHs4uBx(3*(rC4FMYC+y!MBll-Ma+EYWv5cs2f$dj6Bky*$t5Gb3;cz-XfWjxar0mWFBZC4L3a8YQEK2ZD5CWUQXGvZ5RW?!h@OVGPzVxwrW838{ zNP#xfeRlz>M4RoguMF)A&wY3D>Cr3bNO$A2n-%?Vd^yfVE zSp``&n?`!_Rj0N3S%`WQZg2?JkQhs+VJ?$*_aSXG_#pV<%^>VZS)>jp}yZm5lt<0ouSAyi*)NPvd~UZBsm zGPQ2HlGP<%@nM$RH__7-5_O%_dCL&AqZ%n^FFomcYM;cax!ir+A`9imzTZvs)wC04 zO~5lISP7%=8oxAw40mfZV6^S5HN&5|`YJ#ucIWiQ^>_z`6AGC_IkO2n=po#O%)Fc24dxNGHx<(8P zJt0;F-6Lg}@Yf{tBJkjQQ*5jdd0R|86lahp&<^8?UHG3pE;KU8qJ>rXbKF)q=i_qc(+Tozh^dYEh;uu*bW3% z_7g)-)|ePkG)$yaC*U=y{blNZ4+*K>{y9p#E<5Solsk6SsPSF#dF!xC&d@esox(&aZDyniITslfHFFVhajTfl`Vu~DWNi7^jqrZ@ zsrSVE6p6lp6IM>S{!{Jif9h(){@-#HI~CW>`{|&)o>flVWS5gY!}6fx7cTEbba87c zgZRNOzi>q^TC$QDL@*`=Z)W3)2(#eBkmrCQk*N;gOr!jl1K1$rF|GD!OO^v-$6~?C ze!HXZqh>eL!DT<`w-T@TgxzKjiTH_vmbla+$?T=(i;#ncvIObi?A)6#2SIIZtzpL5 zZhaX8rib#eoKTO@Ws3sV?+EkR`ksXL@X@ulL*on&h@{i(sN%6`hn8n7<_Rt?l6 zb!-w3Ao(5f2GGx6(clrdD;Nt7+K*LHA+4GLks)>Dw5v3v`XYN@C4mlQ%}Ao;>YQ_o zmE(3l{Dyzuworc_D3wb0SmC3ve4ILMLzuyOO$aNn)?g(H$nU;DgYk2!C|TdLa0DEB zjM}DFI}9r6fY!Q^4s_05r{V}J!1MLWvSk6Qp~*n3 zr-&U3i1UrQnaV1&Y;W*EPc!aC#I_NlI!~G~H~Scfl{x*7PsUX8t2EIkUXpOZH&Jh3 zpmb@x|8Q3s|4o_qe}@A2zZGWxN1Vg|w=qJKILqCb5enLOt zp3pj7{r|x^MENhyVZ(oM4!i%sIXqs?590pe9G?A?b10?fG2;n`W8MMz56f?z4cznq9@|Kc3V{%{U$L$bt3&3-tC zgl;R$@#x}bQvcu_=2`x3mznwr{bYHv{a5HGhGgW0?U2`f8M>fFU4z*MF}2{B-Fk-- zn{^iVkmp4gNcjmDPS^QkVxxBclf&!Ufx5S4jN0$GVYw>xy42~%rA>aD9QUbb^fiZ= z!H*?MTIp9u6Z*yWh?MuLNo~)!UZdIv@Sfo>mC_Wk+t|Hy^0v9-%%9LtMGuk1{xPHC z%a5PX&x!7YvwAO#q!O~?=4VN-0f(4v*0jxpx7mH}S+rFe9f0b~;it=(OP|oD|0n@w z{2zvXGO@EW{<{QtP*W?0nB3m0yPE*lNn>oK`m(EPjMG3($>7?R z`t?`?5CJ~6*?O_kZ2fbl4Fi&xA< zi!BH5_tdc}Z1VnX$TqIYZZ)qC&j(I)&i8%ar$EIQ*(`4N*Wum#VGfOt)!acRul@kZ z*FNv>Zq3f~Yw-i;>vkuQoT+A?XOL1MuHQ;IFW;E!Akuy8elpuMxLv{Sd|X|hju4w` zyCbKe@B$oN+&bPjH%0C*ki0nCUzb3GD1T&My0*U#UwZrdm!CpHY`kjFZD4{22iHs{ zJHwK@nn~mBPRAAQZs57NJk1M;^a^`(IXg9MsxIDMomYrTc-RE&|S*%25TL1t; z%4=<*?`&X46KbPMS$k6QHY zB@4KmqT+X3UB$BlZX3L)?sK%l=@9+_$EFiABxR^KwR#>>)qY5Ch8vXuSHx0-0q>RIf$xs`I!g*;`Xn`xE1oY%Uy zf!x8|XZiwRaR>pkgcWF~YSpkB0wkxY{hIhRiH(2lEu_)QFT;+w z_nXCtvB-s7;$hD4xpXV4mblkKuVwjIrH90Z7_xgyFOuWWkk(M?Z4uB2=e|eA_>QD66h$PtUz%;0WKgaRz9K-PdG$WMYLpvJ^R*AB{o^D5@s6SXf+YI z!c3}W@~U_ppRNP+b*8)9if#*zY#Mg3;TV%icofa2(-C?OIFvtz^n3|Hz6j}5ZJ77B zu4eN3s@HRg0u~TBhB&#Skf^2Us)QwZ*i4fIH35`_I~&zPq4B&B=e7$gyv90=T&MYaoI5wj0ymS^dRN8`Qe zKmIu(h)OFRg3y}U3TTuXoAS_=d4LU7;qXC5Vx;(tjvv~>w&aX~xEf-94o^wN z>l85Ww6AXMlKY-QNi+>AVYH|4b;Vw>>Wxdx{@v`$SO#~TEfHHZs}mmut!~S9A~Ia? zA}a(;@%LccnfRixyjF-(Xsy3P!7~jB1T+i~ zsy>%xMNR1eN51&G{N$WkAMM*t{y>!o`FL*7L8M8t9%MWW<}1}?JWM)1Rk`mY{C;q&~UvAc!I-(K|b1sDev1-+pUNn%X*)N~^zmPMWY5qVu12z$)arSCStAr-ehkWEGR_64ysfpB6{BfJM%m?ngFxBW2$wtj+;oHRW5RWtMa6g=rWY?EiVR8Mk#84 zWi0As5^FGmv|o%uy#srE>`3*% zFj9_K8%%C=@Jk2deEJD$VD(b4u#T*5Yv_FAdU}u;qzZIy+iPiSbVCeE0~?DA8T7mg zDZx1Pz8FDLMOel3D0Zo~%F_Kvl401|^hK&!Cgx9$b<|gwFsL9*=2V)IH+40A^rm^D z`wRXH(56r(m~W_0Ov2DS(&@T>iV3i2UpxS>?FfOIX#RNXKOv>R3XKlbd|dqbRL0;A zMf`h`$;T{%Yq&3K9Cd_sp)R=m?wGUr(z25BE88rk!e@C}<@AQ1O@`D4%IHjE1^BKt z*%F5gbOJyremlr51A_3CX1f6`GRo|rul;jv3fOuJlFukZww2=wH13?;Q}=^21F>Xu z(+(kwKHNJJWx-^~@~F7{s$H^W1v>kXRNL-Bk}tXPK-&I^0}(&NNNX-8{o-;>VzeKlIWxuz)4s zuZ5KsIiWfP7B~MWVNiCgddOgwHd4zqE?LjU*L*fhMhk+bN&Z3SjFQN2?hsBHvH%n= zEz7ND=VF$~T1gao7v@LfiRp!+UL<2cMy_7Pwq7Jj;on?(|8)bodK2{zA&QMIUuu~a-2_6CMv`y79Lz1$A(&!1qaMeh!dd~Y zwG&H*N%SYvM1vsB=C{;LF#^8F!}+7;&8^K)`Vi(L10Cdg^VqY>qRh_FBXr=r42BE< z)81%Qx}eT5q`}QlI0_a#M1|eKFPQ*H+6|9%gbL`@UxCq%53{oYj8IZzS>YRc&v4LM z!mu$Rzv(sWtD9yyXS!1JXLK35X2S0}Bo+`cHApCuL|bhrvYIMxQvNVF9f%4EvMg;* zsE^r1x>ixG%vdJ@g2z1B7@~5kL|mI!E4gU|ifT@0SV%jx_wi~(f<^ACYFe_FUy@ig7~%`USyU#IwL`etomhCCYxMlQ8d5y3;5!&opni57BwZ|F)|I*j_j)QP1lA;oijnD2^Mz7+ZaiioB{gprrq7zutpVWEMT zVlu*XNAt-b<@j~Uc>KqlGdUu|k-YTKW=bF7y(VPhi2>!RtS7mfetr>CIJp%JHj7Sp zrK<_~*k+i-k3Djek#?Uxe*g|Qlw~BD#*OfvT`xX_29zpc7nBlP&AxX!FhKK{iRFR+hd9kh z&M0V*#esicnx-sU0@TlJX2#G0E3JPcOmCWI>?$nAf&WBT7)OvUO-AYc$VI;->-+c+p{) zR~^*4@@f#a!fH_GyCIr!`WQ_GOCL?eT7nk(J6UUuvZC|sCABZ(O3-8E4AePa5!%vX zg7!)-ygPoa0idKmRh2C1ZYnhijb8afAJ|JF8VgFI_DZ6hyIz9D98^ZIIIZPhica{G z(?d!a_u9hlrbZ)y;RaBnt<7YdtP*OuzcJLt3Jwa73qnn7f61j#vRIlAl{*c_>)2+O zu1~ELPME2vaQ-}~?xgA&BZvUc5yXL2`Bh--pso`kQGq~qs`kjA4*LI1_YWWD76a$- zVRfIqzxoc>My^&mQTy5IEqC{Lr0}+0HcK){vtFKbUnxWe-E}`ST$N@}btb@|S|C=a zT&0@dK}DHPwXIqg8JaX+PJM9g4;Ylo&w;WGk!gTQ<9p|_3~MY&F{rR|SqUR0 z9>p0{8-6b5v^WXEipBx!=UPM<(tnO6UY^09828Xm%zyZ|Svo*Fa=X%)djF4-#uZy= zP*ys8L>0f!zRFnH-!>YJQYlM6)On*rD9w?<5hLo?2u=b{rZWOL0M8tabDU6y76w~N&QzOL|`m+>}6DY;&b{?iF`chz_kWk+o;&9 zt*oqO=&exFT$&$6j?K>F&kP_}6gQMPnByu#&BYZsN+zwMl&)9QsiYf(J>1t7U0|S~ zfDpM+f83SSRA+q~ZVLP?Y|TYlK$*lqb7Uq2;O&i2A&ZjLsA9`oId)##t(Jp6uwOu% zu3-#eB~_1FOOOY44{^T~VmCJXoX z>uQbb_t@aH`)w*MlOWAeMIq%OFOF0nZ{ExTuDbwxR@{AT5PiSFWNP?$A6xgty4d5 zt6J`_*iTDLjAEf*|J7sbah z+y+v6mqp3u?eTGoDCiVc(-8bYfs=zA`SD2TO=QiWEfvM)&8zK8-lffRYvj~pF-;NB zXM*Uerw0oeG_7(V`E(^~ZpSXqG9M^#88lJ`jjUaflmT0m2hTA*-8j!B8;a`-g~2GW ztMW>gGPooALfjE)syT0%0hNbI%d34*C)_hX=!|!5-s3vqS8yDqnUkL;@bH0yr;#Vc zPl6TjOjCnVEKmP(Lb0y*7dJo@?M3B$a}qhghEy|SbugX&1_>38dlE_U zrOGcD)uMx4*>e||x!DAMm{jcqRr`|fttNlW>Fuk@4Q|hIxx>O8kg{6+#%e*|hs2Nd z!7C#gu=)Bia=Kuo#6%m=hQZ9Lg?rF5IYoUq>ZI)| z2sK~}tqHxlWP)-!i50sGG{O_s#xvfUSosjApzq~jTT8ufQdo7KAfyR0ek_h>u6)I5Fr2@AzW_D`fM z%S@W8w`X|Q6z4M}7-~+1MeEi%LrQ%$w@zAZU)<0OH-FyTUv4+oc!=M1ex8Tq*tAFV z+O&@=vLu&W(r(+B?9%dXe!Y0Dc)wj^Z6BAlRmQG+zYbpxujkl&qnbHRSqX^^_`LT& zRks&-D-h`1t;`^c^T2)IfT-s+TvoP?eCvpj*dnfhbiLcY?|bA^&pho8XQ)`cQx8W8 zz}UV2oLuJhl(z})+v(oOVLhbV#)m?TN8u_bA!WMKXJXpj?INc@`)c@k^z^dIr}(S& zX?oYJlSk!q>v_6z^w{pT`TF6!$@}wzfBEQK!h(<&XTR^>1H1W(SZeour|+Hz!x%pzodZt9mM7?h5uk zlBVN(Dd_m9@4neU)2V#{h!T&eS?-Y7I_fXm+OSsabs3Lr!ukqa0-FYGR8wc{^j-+* zZZDiyXa-z6?G*cQ%AiMcv!5;jIC}@DB9i3dL@cb*VD9Dx>b3XhjwZ&c+M%Q>Ir3AaTp+;Q5xNn^d_0()>7Ke}QYW&6+w4-H_De7t@5h-yJNJTZW4T`L& zwO64=f2B~v;)N9rZtX2l3_@im=2?5MR_T$j<_cuaMW+^(ct1WIcCP@FJIgZ(Bb)pNkjmmvu? zx(9QB)n7%_wJQw9es-pgMPDj6R#elz#FQ)7zEBUAYWrf(PIoW^=5%Yc6jqZ=lD=(mpdT5-X++*&>qOxBtSYvP;v}gx2rIix$xSs;F z+JfIpXwWIfJz@;NZPC`SxD+M^9*GTfU52tsH*uLWGXWHuSnij$V@|f%oZdfJvKwV$+2W#Q*x9 zkRNiAgG#`WgGNM?|BOe;g~i3XWcXyLIE#^~I7^VJ4$A-;i;-n8K*y&#{Rgx${y=?Y zC8-UK1=MjxNKg6?;Jf@GR~=IR(Jc_qB@);z;L1ZLV=IIwW)4WHi8>4$14ghx*3QT2 zw$|kLrGqPnzw)JYe*iCd;D#{>qa5M zz2rXDgPsA&{gaq3BT3{5UIu`810Ca8gRP>r*MrPQL^7>F zQ7L#7UV|xkW3CYSncDtjINgY&KX4)i&-0g_qBQ2W1{gQwt5WC?v4Hkp=uzB+4sqo~ zB1A#;RfQ+=T1nGDA=Fk=C64V88XQ!Pv`_{l(AHSY(kbFqT0(O z87Ij_eL{AH)4W`bNrCFLEc}~JbnD$O;z3SRRxwne@qu}nCz7K^;ieJ`!zu+(c6No; zSY^#?;Z3>=`8svEc>hJwv06(y?20~Qw{^`RUE0KbEKe!j!N7l0)o2vfcol_@>?C)d zjd@K0oVD1Nptyi`xm4FIt0By}P;ouT{yw|& z+3m43-K}k5=Gpw{v~D{iW~qZSuV*mBVl9J-v*+4EAMruLvu1)62b8d^m^%a$I9OBa zc;?_-5Vy=!vr;wV_!K!x^O#0 zC#!|+WA7%SpBA?JUtl}4f4lULAk78QFmFwSZJN8=qCSr7-GeUnej{-ZkH%lMdxW2V zGERLa4nqPegJN|Bgt#$ni~#lIQwc_}QL6b))?ZsxFd>S8Mr|3xC%)zv%=|>K$;r$p zdU1$J2ngd1m|=;+ch0cO)TGU|e{cA3NP|Zha41G`~U~8um$U1dOT8@H@hIXh_+$Cfl;VGuGb&I>5-sxj(D4TERH$nGc z1%oK+kyt`ROJ>@Ue_l2lSrwUvVJG%T<5kc5)rq6N{3=(LxYBsx`~Kk3`U5jLz~d&) zuR4alJab1(j_MzfNR*4AB10jEg}GzzkG=5>uuLV#DnP?CQH{cZFMR)m=rIhM?{74h zp|&Tgt$08KE2KV~G5{%J7#6O1a|pufIs(Fv4!eU$!s3U5N(Z>24EYC!A}!TAJ!1xr z0xTXtLy`k9Luw819Ejf!OOgWEB`py=8uY-F#*~SJdvRq+6Vq)qbNknZ|3K(gAA|xB z6qf`J6~keaQwe*BaILsUYQGgQT=KEZj&GWz@6Q_#nfek7KU4!<4UA(E9=b{qrh57t zjN+suShuMxusLJrZfk2OJ}*atU0`dLU6@-*E$mzEZ3278Z7OImJx*|}T>&UoeM!*I zyG}up|G&NA{PR_3+~H26Gi>)DE8_|U_j~+%Q_$y?vvucZ$n*x6vAEUJHhOlCrJ=&= zl^OVgNTwo~)d4a#K(2w+b+do&>Nz{yJ%!i38kWiP#+~%Wxi)n7MQLqtdrv3h!!tQQ zz0dW@H9bEK%+2lfW}F-=N-Pb2G%Y5RmM>OGkm&ow#GV?Y4)_4#NUdKopEfZiP(|^R zM-AW|K^X&7c#XwY&ckPsq&C1^t&5Mw945oEB$X!@Sat^})MbO~RL1KoQAD8hVHCH# zpZON7=v}y^{TjzD5uYKNv=l>KWlyZ)kTHVp6NbwU+1+)Wp48qb(DB;U+7zofl5{{O zFr?#s%OWwE7IOOT^f=f~b!g_zNjJe2AH*{%r{M)v^Q-aTQc2aI>J6YWIw2Gz@D*jX z;?V(H@(Gs|!MXqZe8dfTCnZ9p$lGn>BpEvx=aM1Qcus^r9qLXkkiXgOX;9S5Nuv#} zQCb+qyT?=kI;ogI;L3C$&jZI7H+M3oV})ESrI3Zmbk18`RVt_99&uJI-r4k57P%QM zDfR}9*?I{TO?m@w1BXMrv^)*?u*{m{okT3rrSvOt=A5ZvWnPNNJ9Ix2G1Lvl4B2m& zr)e*^qG$%3Ww#AlLEyuECT7k*cKx7cm~s7et|M%+a*XW!N#>|Xefi!}u6MHEHHpg= z&6cL}Qu(D+OCg?6*hSY_Fj#F16T35?Oq=7C?=~(<+erN|o^97RNd+|}-_M;r+5|KD zMK)MR&q36G-@f){=zxZm4{&_BRd)vsp)9uPP98gr1;JjO8r zIDA0coK-DwE}0i3a6Xx3@p`DvF!5F|fL5$fK~hC6fC*Dg&>d2t07rA%0rAr;fSk&Z zpr+9$okFge*wJV8fm`PD|G2R%3l0F1YB&OUX#A!{{=U&8QpvX^hWz*D=9^H?wR}(0 z%0tTDlxgr*gV9!cYe^TF$HxiNr{hY0F%svZ!-1Qm70UPzXpoVHW zj6P=BjCxrwkHtAzGh}cLSO98pBjy4~VQ5xaJrbu8Flm;1&s5P5YjAc>9h*k{K0C8Xdp;qL>D~!C zQ$=b7QszsfMB1O|@n9-&C8qk{ibsWrid-|WYo_wZm=5+BYuK)ET88#S9P@_ryRL3V zTUUi!z+wTcSQ!Dwg!h7ps>uMihNmC{IEFaz#mR+yeDB46SKw@pzhz&2AzK!8K}G37 z{2?%udlz7qlZ`OJ{KZLB)6W1D<;DSej1l#=<~)-Z0iJq6tIlLtNKOqr^(!5$2> zA%vKbeiJcE*hYR*k%WlY;e2KDT{V`1BsaZW5`CEh9*6@~5$*hY^94r)Xrs6h z`Z1>?)~&qedLJb!)^PD)$#IlQ+xbXF&K?7J@?85`dRwc}8?rsRRq(_dGjn?njqSrD zG(4@~_`xMIJni840StaxxF?Dr52nrYygiSo_T>3TW&0~bXedZJe*02CKIMKz^-O$L z=VgwtRaGSX#NfPk#1mTEXIvuYV6UCMu|W0#t*b86ONmIsU#9LjRbWF*_ zgNnFDGD4vf;*tBHY+B*CfC6I$^`5olGPDIgw(|;y=1$jpxQOovg6(6joR3p9R~Bms5H}hFy;d{zOa%7Ny6J?KUw-iB1}}tDgvh3eCbNmMpo}5GL~jBsd0qO zBOzkDi8Jkj)}bD-3AV@dY~?VGQ>z;o-;WV2>#xMxYivOZjVJS3R_8ez_AGEiH% z4~&Dm%Rs;uAD|(ISU!o#@k9{67a8Q#Hr++Nuy8YPxnNx#@>0hBkuIce!V5kH#(=yk zwecH_3CKS@6L7w~okD4Og^M}9g2l&x%aU-Q%0Mb$U+L0tT&w}W=m>qkS{%TB+g?CV z1cl)8jJ@dJM@-VPbgz8;3w&eOzG`IoUc4^%fgGAUuv(|6Ock`nVYnSMnD%qV zjh4*?M^Me*m(Wuqlu;53sP{4OOs@fx)Jw{Ai98sanG$s;@YrS>c_y*|VjFHjs~(;Z z@57+lv$Fv8)>d)9R^JR|;y!w?b-x=UHg?)p;wvPp})N6d4kw zmG7!=h1m3;08bj@!`VR#N@q^?sAfL)=&NS?v7G7kaGqJr08lLb0+ymH1*KYq_(g3l8PtTE8O+1b z0+%_;0DsfgTYQv};Lsc9m({yT8X>4E*%Sic-vJy$CvZwis-s|Hb!wUN{lpF5L@H zNwOJOJnahN05}?&iJ2Sc#8Lzd9(Mp<_8^iacMc;d%M`bgKvT#I;Zb-2O-|=uKqstp zyOdA1V_hN{ctxiIfvXASNZ~2e^s0Bb?OoF?1^Bys?pjX}k{(_55=%b2uWk6i>~rN{ ze}(hz;R^-LCo7AXNv1LHzKrD`E4RNelL}TN(v7p5Lc~p0&mV7vmvjuPb=5*4T0A)% zatkhjV5RK{{Ij0QC!xk}Udnf&Q(0vB9zTl%Y51GB>W?{DK4%u$nTI8#WB&j1S^B$2 zrL*|H3U=O@c;IE+YSQb<8p>S7LGt;$_RU);D5Gdtz^*-U8T~x1AFnryi~WWbOi;e`InBG4SYu z2cdG4G~eMl>}11>pl#WUfWsvxbZV3I>|LJG`JV_=Lkmr5`v$(CBilV0p(+Nb2K!uiEbr z7jSgEpN3C4s4+lCsa@dE1??4R6lc60tqnQB%f~RIl{R(SrZqp!nhfFIT=0OqHSg^4 z2hEf4E?STdvbWsJzrfcL@>dh*AF@Dg(l>w3KiX;%zMq8YVXD-VJ5%P?U=hk$f&h&i z+5DA@@6hp;452$#%t8Tf<;<8^sv3}{{bMOZw91D}ICbu149QB;QEL@_=Fp~%suMyL zrWQX=R9gGml)!`%8oeto8<68e@5=r|(7oY{$r7sU83`~n4i<>|hc-zuK~Iopjb84T~_K zU1l%1CKUt@@ZkC}pUTWv_hBt!&Joyu*?<=EI+JhbXRj>_lDh5^QlPCHQY9Z8(juQ$ zuurL~;Ftp~B(>3sM>QJg5;#+iG((151ScTBQ;roUICYIS#(ZeS5+J;4pI(> zb=vQi&r7)V?klpN*|5YvIrUzFGGFR3$-AlHT}pD%^Yg+T=W7t>TX74ho7i1NT#Dp^ zjc6g^-rO^W8;^G&`)puAdlHOdPOqtO|@J#IDQ<{;cg zhGydFM$xWva92~jTW1yPbe^0Nmk_i)Uk)!u)lV>{<}7b|bQgad;$J#>-`wSIaR2t+ zq+t7Y)7{!SR%w0qBY-`BLCJmZz|$_)(80zWx3coT_(nYFTfM(V<*hNLxKb+qlsxFe z5Aa~lp=rh_=k8>hztJCZYv&zfj%l-S)u?qRi z*ETBH-o*ccv#aHYLLQ}YkbJuOnoi|N4YyZ zT`Z5DIJ`&nGf#5aERT{E7!UD^+*ri%+fcH!ef)#!748u6r|XRi5^@Q9ouFq%=vj?V z5}m(IIxH*}DdV*EykLP96|q)$kp3Z^;-6&Hd?aZob-^oTEl3)I#C$|u$X?aC*`ueh zPuh^J*axdzLGkQQes;kKcBy_*wh_(4Hi1HOc5pu*!+L~0XkZP#6uIAYt+^G4Pc^q= zWWBhlY;cLj9g={Uni-QI<7pzb{E<#YW`F!cIz_R|Z@e5m!H89I>${>r2$H;x0_oPY z9d)B8Vq~<8;Pp5$n^j+~ds>zEz~5qo7``woisORwLyZ(FVUkS>sVswI(<|465#y+$0Ww^`FSGv0RhJ7>|>{!Kc?1=2C_pB^;- zrqTRAxz4fBGyXT}?LP?@toHvRT;%)P?SiVJpPZhqnrHy8TpLLE&(;SYe1k{sFsCLd zX)Q9g2Un=;Do>6OF``4q+riQv#@fGbgJD_nvLzq~U;ZR0+K}4g6mjMFc)hyY_Z+Z- z1MU~wuYNsNueaVj>qzr{B{k`M9T&cGk*pB(J-z#6d-MDxpEVO00j$6mg??Y=G<9Qp zKZc-#Y`vQqN+0L=Gy}2cThfr~etriE`!Vh+?(`qe$K=4X_Fdjjlj>AnHuqrF{j$mF z&i+Eo{&su+&>_WTUE%p2eo7%Dj>;<vvL{NL^JpNxPMP4N#W+C%@&a0{M@AWh2r;C*fqpn8oRMHI486D27W~UBNpr;9 z4E`phF0j1dMzE&YSE^m)Q=X6o;qzUDA;gjcdzM(_n&P9rNj!2U)xt9*JHLqqRC&5G zXM5_UrV&w1p3;UoO>0qAt~6Fa(czt8D0S_WaGX`up55Rhjl0wqeASDVE!t6Vb#ls` zl*284C(Y?D_};j?&9Kzf!YJCai0-14{cBsnEuTkZPMfn!JEMMWZ;H+Cm?8((!b9WI zHL}rVF*?lJ@uGM$YAx`F#%ix9d3)XaI@H9+Vb-&ed4Lou@`ppyEp>lKg@{86?0&M+8tbkmXcF$WKy7 zX-%~0^nipYd2INLONRqzH53LV2|Dm0e{dWU?xiVyE$#$YV3 zCKMQ(0c}6Gv5GHP(fG6~+)HhU#w=Zq2&QHP{wlTVUbQET71TzSl|!@?c2Xj&*_UN(#uSDJM@;!!P6f~0??fp43l`sI zDV3s}Io&u0zVTM0;1NvTY@%*8I5IYKsIqBP3Dv7{!!i2T>g$o}W|$&LCYp)DPxVE! zvEArljnlUNs+<8|?YEW@{gV4M4ML~O4)gN`2gSYHr2z%uH1YFA6vbkd^}A)^3{MN=6xF* zJWlE7;0D4s%RBZvm*tv!K^J_^1Vxhs4!9`xlJ=skjJEeRHA{}RtZVlax_SL;Hmffp zOs$F|Y$U7maEExBti_2{9qI0$2Ms$eo3;7h4)(qYr>1QvC>>vZh=AdS@6;#U`7eVt zAIbNaAOF?MZ~T(aoGV@1O9sD^hS#JlX(Nz5)zl5ew8#q~74zJCqNttCh&%>$GukSf z;jGlWT9W2YSlZ#gfd)$1V6XT_aYV91lfn;4pKM6Z=A2g9uonomD+T1WChpE3rd-}@ zzxt;34=i-_eI&)SlwvsPDVP;hR~z!cY1D%~3ynCY)>}%S6-WC)^juqi-*gwi_uK8IsdFmBioi%gKfTrY?^W24;O*Q`gg{Hp$ z*AKpG8nW37^ExBjou+l?O~qukvvoeiW0_fXgzh)D5_xo*d8ybuU_5%Xpb_yO4K~;$ zb0!nO3|WY`4p8SlVy=t2U;yEMUR<;aGEE@qy3{(VOUiCt_MdL>`z!~Pd4bbg`i5bc#&8=I>ZOvvcT=8<$pOS>CpaV=!%{}{MPqS}$h2yCe8QUn z$FgR|p;-d5*#W@FwtmU{zq)#2r|=ZB1&bh6-!g&{f2sOS7SaG=|){E$Fs2OS^2_wr$&0yKLLGZQHhO+qP}9_v!yU+f`(?zyG$oL;=oq#hT!&l6yj9OB3i*!C7 zel`p?nL;!hImt=_$LPPtKi0mQ*jxo^-_|%oCSHU?Cy?z=gU`gt|75x{%4Rd7xax+( zCJ&=4s%>%WlQ;3Fo)j39KLKXO6f!>8(?=$s%a=1EHqwPWlw8*`WoyKYJESQC%CvNW zR$hgY4bCe=j{`L8pa7q0WV=F#Hp_;FZAX~p8MVGn*sZ0U-z~N1h1R!JlWjHY%=_Cv z=0I*^`Q7NS=C?58UH_~Jv_Egc?o@}$#o2xemI7Plo;UelYbEN{ZPzIwv^2U*6u6wu z*e%uUP{48_LyHbUV+3-T2SU+duIZcAF_^SrRz+j1LH8Pl^!0p>405yKkbW$$5Zzj_7Dhf5dNg zb(*#w2_HXK!1+y4pjB3S%a&rmeX&|7(9%rEZ>tlLV_8@4OReLcem*a1b>Z@z7UR2dtZ=z@va)5aXfxLN78-sAj-Bq9)p{Le`H8)(QR3~7U-QJ>J@>&J=?!uVF@Xm zVot$SW%QEkyJ25ip0K5cy&4-XO}^P>=uNt90k}zRhxMw!LqUgr7*!e7cDQA=_rAqN zB8t^Mp<9h|^X@n9t!rnUWytmf)6HDN>RVAlsWX>!t*L_ndX5H&Z-LlQMpcBf=Q2|= z2dV+|gyUULrI;#c8B!zV(i&7BVWdfb@xqvVGFQ+vSO{mGmhS*Lkme+5rSJK(Ep2@9 z!pd$+o9LC=OrP@(-As~#$m*0{z?v-bgn_n{!k#2QO?ibZ*U=33;?s!1vj5o0bXd7*7@D^4+el@Xp5lR z=o#HdVT;u3{^SO_7a`wDQ!R5lp9ti4!m%tBArCU&p@dM9MXC*N>7)84(EnzJ06DxB zd@&_b78ior`+6qQ54YZ(DYB-Zcq=91)?-{9mhKQ3#WF@M71i^lPakB z)#l|3)FHBpn?T!qQGaRRk8wh~a)EGfu!_sMNt#w?V_uCLOLx5i{5lL~64m=A6$%__ z>bzC=wg=)G+3UjG;N}uaBSn`6ZhFpu15M*ySy)nxCF|Ghv>r2@QnM|fdHI8LJgsdS zJiuT$${+j>i+eU7B?@YqVQ-1A$kYRKWFaaTXg{6CF?WZp0cK`nXopDyFKNO7?CzqB z=eHg83%Ze+ZV(4xB8p+;pYBOI*4Vg&kAGpMTDct_!Fa3h_$Xk$gn@|mFgR5dNW|cH z!|(3ma8nhTJ_yEPc=Gj%*d5!pkHE%#5F)m97lwsvKS*Tr<~RbwmpxI`bzXGBMwV^N zjkHsTq?14-okK0>)%Ey2!21s6WyguyoB75guT06p;}X;>^M#9Ca7oNzdVxL97xBik zD`Mts*=5UgP+a}iv>DM$^vBg|bs45{x9!i5)+@+pwS!dmVjFWowVGDhkH#*~EtbxW z>c*iB-%Z;<$#q(fd*`>nI%C@0?TqA(%Ba^P>vQ208uB|Stk0?SZkzX;mSvZd$|Q}- zh?}|6x8~=8wYsGUE>3DVHnMY6Z}6LS-3q^e|xWu4tJ0NPu%@9 zLi<lmuSjdJM&7!0y0WY9W!OB!zeEc{E-vKR>ui@lP**W>E z6+vuavD2w!y#BK9l%&TLr5I1N$3=AlnuheI(ww9wy0W$ z))zsgq<5y9g>Sbjq>6T@d-Vc#WT8CFuG;~k*B_wB&t)6>(4LEV)~a+|L0LNkY46HC zAAp)m7U}A$USt3CJ;yZpb*~?zYOQ&m^2c^VVfp{bEPm{z9cQYe$cy(1mJ{+PTpFCD z+CbjR(=|JQW8Sk}lpY-`keTx->R{!Ef}IL+1} zhc%Bb+mLjHI*hm|Sd%l%iwpvrrAg?J5fH;U>=s6$OZp0ofavdOJ)Vq-sPjUZ=`-65 z-zmgFxhXA1?1?GPk=Lm&=B}kF!@=z7C{ym;sp!JQDT*fNlH)q(OV>;N%N3zkj{MBQ zmEuU>O&qFN_QNbXO=gwHbY%ASTzo(I+ z>t=`u&3GLVWWd3a0bvO=)bPIdhGEPh{WxScxegOiXMtvRGg4=lh2gHNW*nz{faX(A zLG9qNj$)lu9-xaO{tmF-ExTWl+E^Ek)c0WSPHYi0B`>Ew3oAKXZIdM=;tmb% zmN~$+_dLT}vlc?B_|zBcfqhUK%Xnoucb@bp29VG+P5ozJ2BXqZ(kM!X1flQy07b1; zjcYUllw!~4C9mO@ZDON(8XT9YD(dLMF3$>%16dEH_Y z1|Ey9o>=L;ycrH`jAwU>pwQ(ux8aq1@TCT5D=Zx6hZFCyQd!1Jc~-IKi4#oeE}n<1UuCj5N*JjcWYFI|qHvA3*PRu|GJQ15Ca8#F?B{q1y{6LRXe zV7zwtOt>#zaJCz(L%v-O7XS6`m4ruO)3CUQ2FTs9+DHD~q2cby^A^j|pc+}{dmb## z_2vsCcFIx{YgF%ryRIyc29Upu0`TkknZC|`h)v1Cb@B{GLfuuCkDdwon?W8A1>LXa z6-9CX`Rowa;?uH(l>@--LbZxI_cV;4lxyD{eL^Gir1i2NEtE?W)r z@$@}{mEH1?o$O;H!6WjA5MwWr|2G0 z*4p$znFO#PNr6>``3j(*=!-_B03>VR_funILwWQEB=&lemj4Pl!w!6DsC zuz8VIkibNAqX;?US>cp&dI9+bf3$#9dvb*vFB=e*P!j2qwQx4{Vq+0ybWFXycDzIx zgd-ZMYGXM)3T@HxY?Xi`im5qt#>i#!(pB4ooX9u`izfLDV7C8dttWtUs5Qk}plhGK zieT`>3@b^;0PdWCm8Q7nv@$8eUm~};lOHieHyGA#*YEdeHF4jQEbTOtUQYCvy zpGNCT6gy(|ZvJ2aLDTz=Q8#edI(IEcnq&oIgi^E$`Y4&=ZGDxD_Ic;+W**_w#Tu-# zIK`XqGFJ=~SKN+Qnq-tO^Ur)pq{qBFja(Ib+Gt}B7X(#M+Gd6QNE||)NzR#XVi+r4 zxByVrTo6huf)m?rX3b7NNOIC!VK5q*4*n{3Hi~@Yh^bC!<6TCIFX)cY1v29&r(aTv ztmXASG6hM(au98^-N+cqMmYsBizkr`ZSdq+a8CJ)e}yeU^6W8L*hlaxB~^~608g^O zIL?Z5k^RN+aP3YB)1_sbOdK{zlF3wLN&5u#v65>@;H$bUq{CKJCTK* zv9C*Msy}5~H+tIlZ4dv{;zY5*RxrOGU`|dRHZuu$zyCdy(EZiQaoUOZ(e}E!%$*$7 zSmqjRb!yS=)jbn-w(bZPY*KhT$))Ok^og-^18nF2q>$(vtR8;4mya6VtlI?bZ4}&? zM)K))vq4H`m2O}&TvBjdkK2-x@7)?fA-ow@$#bK*75H?8)^6RQ(wNt zYHdyGsVh0AO?Tfry=xKF&KFH*`R2~fr7P1v7X79zE8onwukYY{&2IN78H8mmKH|wA$ z9Ti_54=BOs1S$Yd=})A>Wp2tChT8&T9*1Pe+!}itupQ+kweFv1&Z`#UlS}_=D8eP)4Suq>K5Y5ar$9!^Sv2xX@Gy~d@-O5&Ue(7yH zZfhNMuUTB{^m((&sOV>~{V@vi!1vQ>y2ktS+ByfyR@KI{d`@?MTU6T>JiAs0!=t(N zG;5}A0LFey#Gcv8C7O>;?dsQkcD6z+@Q2fu7FXJ9$iY5PkEhV0-F|CGjQ->+Jwx;+ zTcOq+J5JFLTDEp))&G=2_+PB0|DRF_94!B53PHQ}c*Nf8zZ_pdr5$@h{Sf*zu0J^H z0e%67UEtS1tG;~k&u-FdFmno*Z?w&81LojXa(F|Jrkq?=bQ{zgN1ZNyTMW5cc5j~Q zj|@M5@aTR$Bs{}JdPjSEen%&Lj*wfv%j&HS=r(=7>^+%(?pjlKzZtB3KXcJIXoq~P zXmB^-eBIwKCwqIpq^jT9V`xSSPWXOJK2H}be_EbZbv)124({FF|HAEA)mwe8$5Q|9 z7Q*iJhXHy$ZcpCw4z(4xdB3iv>Q&;jWEktw*zSHG9={%M`fm1o-lh`odcWpw-aeM+ z4s!6W+Fm(k?E2QtevA3w!F^+&zMgL%du{i?9X^_m&gTC1hak;9U%u|H8wvid85x8f z))95fiGAGNh~vc&b+a_Sb1i(nhO!fO*M1bLzPJ$o%!f8X?;l>Kd+a(& z^l0U>{5Y)~?=gJX6~XoYR088tVLmt)-Bx}d47PGsbKJh}M(0tPZfLG6a4fpAmA7}l7Z~hy&Jg%iXoZ@L|xNd2vJPz&c2I1hR zMe^AA!}^IjnKR?G(okLd@*BVDmMR_W*yMFR*Yxi!Fbb7d5qyw{O!ST2FvGi3fDf`mG#ahbCmd7PF zAk8&HxFflu#zri>pr&EPaCbI?{ath0YT@ySz{Ww2R5yrYq$lSD2FI1=)*wZY;5k8y zyn!}S`S7>6wjd0~D&c97PeZN^L#E*}H{8_8+EA+a$r>ju18Cw>qjMnx*|U`tbGung z_GpYs*u|P2m0={xRBifSmNMPVr*Spk@zO{32~i)&ll383o-4dl@R0qFL0E`Pu(5nH z+F;=GIf5tpnC3XB(ioLmZXu>D&Qcxnu)*@gSRz2`jluFt<&Tge@KRcnnj{_rD3TXm zhuH_}tdl%PAzlkBr}x<6=Hfbav6x4FB7~7VXuEs_F39^O>>4u|>=m(f5IVF_y9Ib>R(s|F^(IXf;t?0p7&zG{CE2mUdRP<(m;R_uX1k|EBsNu>dEo1&Sn zyFDRd3^$~4v!ajg`a4tQkH8OG*&dGflcUVU{}#E~iNDN0F2CiTNVOe8s0BNLbDBuz z-7NMY-KR?vs1LZ7<%c)IA1BVO$h`ZtpA2=%q5}HAX?4jFG}>f(NSi_w`6GqT!fF&P zl>Yl+l&JUCI(2`m&ZFLm<4`j}q=@L{LbInYvkel*Q-Y0@R;>6i=j+!b%ew=chlwkvj&d6M zrHd%}tqz(5mjx#Zlf>8asAzRDhpNdK=%+51p;?IFCi++SOvKtl^jUFFkkqc> zRzNU72GG^#M)xt9iu6iqD$c{k)D`px^pIypg9kebmWahgxX)TLnyFjNNw zvR0=Ua#d5+1Gx9S2XG&E3DS~)5}tDXRfuCRRbW>T@b3ebAmkS)0XH_#9^yX3CPODh#|S5$zfA)F6lkB>Nx z{ORdEe=9l6jIrhH`H%2b<@71!yH>jNj1eF-cwgi#)%}qBL=>Y@DA<17ix9MCNfO*6 zZ3&GKj1JwpcWgseTGrI{Q>hQP90ck!NX9PB*XBa-JGwIG48X;qXh1No|Uta>hSzH3I zWF}@K{Yb)%ieiA&>s)~)i7p}n5i1hBR`ag~4b$(=z&GWV!%YUXQUm?1Dub`ob2<3~ z5pn(UW<;w+kE-^U9bKFFMMPfXJaTp*F+(s4$TYbSAH9%f9x-PbnFL*m76Cm$XyRsdJV@xiK@a~?NMJW1As3^Ac8;KV zLiVM313={R0sOb24`7r1(zmJs{G*Ut|GTjGx2hrh75*)MZTQ?hf*2!uRD+%HX(l4x za)vPScuRccBcrbZzAxK`p79UT%gn0(7PaClwoaOPOP7s5S*I}ma=wrIiMsA*&OL(! zsULyeD{(o!D|YX0?qCO-Wq8L8#}4c70b`x7KZ%!PC!L5qKEtjg8(x14c)FO_Dg(TT=RUXM-Yci3_s91}r z=~zv)+hb=39S>JrRq;V@04+rg6-%5`d;U$Z9eG(na!u(5pNv$w1p3xj7PTq#ilZ`B zZ^a%W4Ia@4lZu(Rp5diTDCvz7d@xv?5J{oF{;m>`4!~FO44!F9C9ZbxMivtAMQ_@z z(3~c=4maJ>lq(pYMTwu7>NZr7ADHG1$#qoq&2pI;$ zLmcPOrF9&`0}?w1e0HpDex3oo9e`cfYLTvg{YJh!YCiL(D`n1|&v@<;>%Q-)va$V4 z|5#s#>%L}5W{T_d*i3YJqVc(w(Xq6QCdymwhH911d+Jz)7t|)I_={n~&GF)qyf3*$ zBQ-=&^2j!C^n~{E(LM(3#%tvi25!AA$^b zs4QSLLAOn}(ZZTW9$jecCQ&t^<}%L^EnwA8*2QATZ;3cG0bLV?RlT>j)Mv@F#ui-| zs#L}_o6Yvd-IxjXn7V(00H;dy?+7szy^Q#N1dgR5hILO-kKS7GEWu5KN@6lxWGwx# zcVm#~VfqxJiK$#~VVu;OPAg*7sOvzis+j4j8iTBSdDZ`fT}^gu%Om!qVe{|6`2MaJ z81B^`1t_Tl%IqHs#tUzeo-c$^9V~=PgV7g{hDHy`24KBUyT{0d3LXOwFh``!4}qJm5D zL7~supkdJuXxM~DK{~}CIUk{N1XnB(W$mxkO7t){&ha;Sw*r(XTITlLpT|fUto}CP zuy6F&Fa>Gh?t-QyXO2aE7ICXm&|Y=pi;o`+oRyC=BTZU-ZxP4}X2km-BhuKm=KF*# z#?}?)O?L!h@TY1njVe_X-i3~e>KIu*4PW87)#vERJehr1W zDNEvJD>^#GF$$NaEe>YQ7N2pFkmKt?Aqj-}od>rAL3ILFZ`Q`6*q&K(IeYR&4NN&t zaw1LEqXIgdtutcS04I(BDa{F#yg%>KIQMJ+z%#4=l z{08vs$ek36>H=TbBXmSfi0ZirZbZ~F%19(tn$**M^hH9-Aw!&jq}hN>B#3-jJT;cj zmxN*9NzLS724@_yHgQZ5v?hHRJn4sB!5IhzTJN5n4@VyG(-39C)SNOOJra6M<{YAS z?ahWOiF-SIAGc_hu1S_UQt8qKZQqqJI*F2tjA_t~im9%NJ=xAq$xXpLWI+>r^a)=R z9Fis-X9iJh7nO=daWcT56Hv4UJ!)7?FyiF?h2LW5{*~7vzal6U^&&`Cyl&51Qpkek z{VS-;*$|yb9X!&eQ3WNr(1tB%{uR@iMh?ha9VWz4oh8Iu%@7aFF=!r?b>bv+Lt;?C zZUHWD%(BREfHxG)4cJdq*oMr1lW)TBu;SP_3Q5%7y~JPg zs2>9H?BE}c%bjG>A;*2d>y*3F{v4_}cpr^+ndNIsGkFmw0c&RzTW>z0xhHp26n|-X3$V52<@h)~&BnI- zAJL1=);pi=M{R)nOr{C2(|aS@XKH1uzZ~+EvP^qRHCBC7R?FzM(eY)#Wgdk6vhY!R z)|~*Sd*7X~muVL?s?8o?JBZ+g7qf?DAN2Nan_9%FX?Qj8(4NNW;>$ogPhTRz;JQFx zqLh(KYITXKF*kX!37NQ!j2Y`R{_xQ)cfN*Ej!m3}I+gV2SRYd*wd+18YQa*2RBme) z>ev{Fu6!AZf@adTSS)*zj|Zg+z#6M_sUm$1^;T(r(4SGqNCqo32~7#xN7Z%Nap)F& znO?Ff+TdSiu2NIY{VSHuG0+6x!MJOPic@#2;=aX}lLPoPvY!Z0tRW!}eStG8>#0Nx z)M(DuwD!^=VEw8?$I@k%Zm_{-)%gq5>D0K!`K9xrV`=?P5=xwY(o!Z4x)mNn>`D zqWN82g0&g3E0}{#=rUO$0NPO`WC&0OcW90ssyqfwpEbf1>N>TTi6vP+L(~ym(P@%a z4vVeuh2b5(oU43p5kK0vFIY^W%k>N$Hv1GBC%>AaSUiY z>X_X%BC+V9n27(5Kd}46HQWtPjn7_LTE$`ZW{ib7;|UrXH%8|bTqkN@m&~qC2S~#d zu-!V$vN-0rdRd4{St_|Fb%>GnKTm!o71I2SmWWF1169UvcS;rbz zVJzB_I1C|{^@XC|EiEQl+}ul}c3IigJmZGLHdstOE^bFi9C0&|B`8krez0@gD4`A+ zEPRmpe+HD0s*0E(=s4?PKSwblaL$!Scuz<9k#S|?vBlk*gayQgxPX{J4$d&fq0(o| zdXYJpgc#8vm{KACA|<&hyU9lsh~^u?mXf%q_0iM!T_KUa$%iH#Q-<)S0%FK&hv<}I zZgR>1^Xb5iifgd@oi~gC=sbYIXK;hj>vlnJi3!6C;JbuLv(JRN!6ynU=xjrCCKkk2 zV43h1f!Gr#guW#qMYo|zNKi*V;Sm2^^kj8{w?+E>ui>p%7o;m$+;YlujyE-Schl{- zlE3x>Ai;&s5)krybspGhg(nqxp|0VVQ$Ac-0_ODd}cRSu7fz*Skdn1=t>`LeTfO281R*Bi`<+KqOP!avM1>(7c&0DJDcQg;i z9TN%5aoMZED2oaZ-}oXZ(tX4HI4SgpT7gK8$PyX4q4w3ZoWfE|D9-%f5^Do0Q(P({ zDz#v-r++Ks`?<Jz4ZBY^%>LwYnd!j{lEb*yS67f9 zo}Hso@o$XWG)e|^3qbu@fSx5A>=a~#ZJRxgU~b8gmi)R`W( z;9gPCYjiz|mNRnobCgqFh#T!%(e9E<7z4u<-Hm;vAAb}N0^r>E)oYFB2a6uT3lq84 z9dH1x)M5JZ=`sh5&u8)Sy8u;u`unYJi@?kHkkIG;kWIbP6FB7g5n|rY5p~?d|JwoR zkwQM!kySiC;VTvi6Mj4;5oJ6tX_dV#Z~klr`5=ABoU!Ha{zvrE3i?)d%2vQj#88mJ;^9LC; zdbgFaBOI>PO-3eCZpVm(_eUbt4>x96+ABtGr^5{-pKvm-vVkGkb(rTzQfnZvn> zk0>&ynEoobKw(_G`i$p#1?@o2*ZNMpVBZ@dV_4_#jjMc=WfB9N+15CZ^j`<`+^bd) zXRo6m;U3VwL@_4)6fvItv=Xqb6X!JW*-MsmKQz>=e%iDv!5mENA>2Re^|xfz_EFLw zg?fT0f(mR9DD~$}QUcN-GW$2mvgZ3qauCA9fW;Z92uTUgP0G(lxZzeW=@(8#fddXO zp>UYdgV50%fadABLTJ@NLf9)%@?k(h0!X+3Z39Yv`Y#j!o}9UM+d@O&c_}PuVU*lg zVT#<`;a=o%;U(M$;WOM!VQ=K2VT3%JVUj#lVDmjMIs-CGYzn)=-bl~?5#PySAJI1m z%nH#J9YX73w+LR#GstMA5WTR@8RUBKpJ&qUsVgRlu9u@qd^4m8u6Vrrqq?QT#2pjT zUdrj=HH=8w#-#r`K@(FHw_Z0ixtq90&Z02Ak=LQU=c=GC{r9y3^6)k>g%nKjLyl4S zTwwyE?B)ms^9-^dL0wK!_!{5}qwE+M0n7GIMW6{SG4m9-m}~aT?W!9~_#RBu%FRU0 z(}KQSBcs|d2WLYvO_c&sO6vy+@#9N@HnyND?0FGv5hbolqU@N zZb4h_*xl2~E-Yc=Ei7T?+pGN7HMO#09f+R}FsoLj{cSB=FdHg+spm57ZW>^JlS`i+ zzTd-Ooxqn9!L;UbxQ`cJBjvP-bGvR0K9EUhJ7@QqkKZY-w1#sB94Ef%?5{q7wyM> z;?H0CX{mvNu~V;XZRn}11W4=p2B^Lw`O~{6?QM9=)!i@%zRArCOYhr@MInaThI<^` z(cD_m1NYcSo0xN^n%Oe5(s5x;8Bt{_l$9RltG#EBV- zZ?^Iv+oGbY(EIC;QR;9t4gHb4fJF{qcP*i?18Lg(MAo_@)uA@M{CDec(B0s<$Q?uu zxT5^k>k%-}(YeSO{~Cgc)N#J>1AqP#HAr=}n3RxKU8srH`DV@FE#^$0TVv6&Q*yW# zdXDV4(_6wZVmz&xnx|}RC5OprSZntY!=t5`Ye=!)^sh69y1`^}EOmHz@4K(ph3xk@ zKkPYPRQwTKyNq!MjyE)IAPu&H;sm#uD2fJCGRUbQ4>HIU%U-#{lH>ESL!IP6M|F{e z7VuXEV=UlsRx9}2{_25q(h3202~&tcsWyrLwG3kc-3;cz-K^`O-%vRR;%QMM2u$g4 zo#c#SitwD7iglcqifVy56hGOc6mnTN6oqPU(Cw!rAjYP3+Q`*!c~-Dpv4nUWuL@eV z`{;s&7@y=1d8fP)lUE;ujxc`M)hp+6ZtmLtnRftp%RD0D(!3;7F1NrNJmOwh!z5W@ zRNQxAN}|{OM}Zr_#4J>B1`X>>j!ToXPE`I5j_+i{}DeT z6d%>DoIh@l{Z#*&sZ5|#uT#K=IuP3$JSqA!#YQN-4oVt=%E?tkpiZ05faRKSsl1zm zc95T%#!2e^h%R9=+HI^{@s`ojgzNioBQAxUNN76a&`AWO$P6&J(Pw8l_dr>{`id5PN6TI!h=c%;WCf6L+yzPMj%{NfijMG7?#lvJC&pm+xXCy}aXKzfWWJDD zqp8~%ZSEf@=b5FpIX(Xoy^wOf&%ES#w-|24YeT2oxPH>5D0q{nV8d2@1VaKC>;y!R zVZmGEdFTU0&>L~|e>#LNkf{L_lntQDN&{5!8z4XYv8j+yf;0up;obf`3qYns!kLW( z$mG*Ntpr2TJTg65^dHSN|2Y%_Otl0yJ1&T@W6-8x%4@O|0e5n{-XvI>6q6I#edbj9 zOcg!C>}PiPi==aM)-l+GNh>E^iJJSw)Un6#u0KJT*jeKBaIpHeHU-XM5`m0na}wte zY#PDyH=qRFdHRebLt8uJU`M5lf={c~W1RSJOG%dFAFBzOzvHa(hr8SrMuqVEmAp#h zq67nvZpz~)l0mB{3M5!jeUabNBv{mgH)eE)IGF9g$TA4xA z`qSW8=FSizc*YIm+Ch`EMhz4I;O9K@VTd{BMoM=G<53Pl>)^-Wk1Nz-X}cyI1JYp* zK^%@LL{rtVjO)4%k9#KfnZvfIz3N~85x*>TZ<)3(_U)~Ak5(@C?ysoAYl{~MV?IES z_;8R`L2=}TamT#;Cwy z4eIs;#zq`?fV|b|shrIE`{b*PYeHIR)NnA{^nA;X9kKzmwUv?Ocajr?)_JNA*8eRq znppX7?OKLse|P3sIhH*3t{FP5;uL(nDJa&Ym~upaLdH%#O0vXCEkk$vizNfn+fE}U zk?=?^NA`9|=Hcv05hX8K^>dOqZQl&R9p?%P76;#gCXj1O$<`@f{3tmg7OcGyG2RLj z$Nm07cjal(eSt-x?f%QVvJ9BB(_rtC3>Z!VIhhsxRNlmC&_w$}bSqX$Fv$_UhILg3`3KOH=@X({o?-m4ym|JfxiXv}H;)+A zCfFE@Capd`9X0&pLMv8J$hA*t*32$Bvm1efj&&(^1Oc}_g!rh8KnySzFvrCzj3*xwj6iq$73`^8>dbGFS7;lTp7nQ=)68t!{|Mdxf=(z!#_mGp@d9I%VrRz+h5B0Y zeH|aq_OAcD8-0zwY_4pkT5-;|+PT{b9^p&MXpg!xBfA#fgfz;6=Y2oUv@kXA2-KnJQ-&1rW}tNu6@6k)8b8rnvVKxBn{qIa7=!0F{E_O zJTNXyQq%3?P9{XTdmZ#ic`WxyeInSds}J0pKSJU;I(Igm33EBS^^m8A;eh#C4E0!` z7`@h&K2qNDqMEJZ)l$775n!)Ae^-Iaos*H0weCjxmE#M};$exq_l6v?O^#L??s`+3 z8-A^|K7Y%xCxC4alz!NARD6jy)zq{B2zR_)7ZTWoA2W=~Wh#pwvou1UYY|-`)uvol z)~NE*9Mf5PsHa*URE@nP#!Uf7hmG)r;>LYU6XLpHdgtnABXWdBvp>0qSE6%uyg1W8}y&!Zk;!2iB9xMV1{Yig^ZcPEx)|2C{;8H^94;APh;=iu%Yr1 zWqZEbD2zru)msS7?JXnpt;xh?c&^hxKv-eEF6{qli{ z&Dy@E`7JhIR4QUtesZe3mzCU_Q=%(6&%1HQz?bqs;8YDxx+$ydA>jY!xI6e?j=Mx3 z7wLsurhoevw1v(C?I!=@xGQca2a`#x{3@aKNHR4ub^`_(tscsGCC(|Jlx7b;9$1q< z#IIi_EAEg z%Ve}-ua3sBi|t`4?^P2z&hIJX_$O1p*st0`9oAvs2+Ptl$Xv%?yDp(?brm?u)a;f+ z*WS&BU)eIbw+2c%MQPjH?2ouponBk!PPXU4QO`oUChZ;ooz2+mO}x$Du&)2nahLi3 zrB4SdJ=^~VcDdG8k0oYv@VV8Ep9M`Z(Bk$B_CHsB<=sTo>y7P3j7n!w{rUAn;7$-Q zQFT_Sgz@Yq;a6m$bRQBKK_h0uQKbE~@_F3E%c6k%yuN%b?d6RJPI~x!yS#iQJ5ASf zULl3u!~J;ro4usA$rMssf(u z`u_Spk9|1g`!_g>bZ*P{yZItEQw-gnJm^TH^!r_%vKV|ipUU{Mdv0t_x4fI5>{z{v z_p2Bh=>GHmd^!PLWI2VeS9x;Y9Ig3Zw1_j?9G&(DXj*ap$4obm;PS!Cg+Xi_iIS)I z`GnN+hSJrma~Pg(cN|l5$_OObamKrY^J_7=T9r6L*spk@3T#reM=dPw?)a8Du?xR2 z*3^I1ROh=EDqsh;z0Ce&pyz!`cf`Y4UR4IS5q*>vXD7k>sC2rP(H-;MT{F!!G5Tm_ zNA0)r!9d$jXYTLXlI@we<6mxAA38djnv)MM8o#V7{_ZE=p=?E}`Id?GE_1okQlWek zQ@Syex6M9Q!>jasId&9u(|oHZMmF1wpm+*+kh%-Ims7TTBDs}Lgu$IJ$NS!s_IbT^Bju`jiRf0nix@nyT<3kwK*M;o4sLLX zB0ZrUbZ|( z0;gP8s!Hd?Ln>s!p9gX<7*aC3U>5zc4+BZViUu+>w#UX-@J`6OAPb8ez|NnK8z|{^ zzpEB;LTFfljp2~IQhv&lBMsrSvO~~^n%5V!k@Fu^yAVZ-7dFWEC^ZBh&nE*lXEssP z5Pl+H%b1n0G!4BnJl1H44A2~-rSvO9PU#Z4C9ivv6;jSAbWQIDf-NRZMY2K2f+zDA zmC9)egJlOv5rqnGX04!Ylax+KwoJ1N>&B{5}KBp*~?xGY~?BX=0m^>e)Xf8Nz zYS<+i$uP7&m7eg3Z}24`5m&74{)|Z7w85u8my^n~$$8EMd=$r)V?!s7%piG8!Q>Ogvdf6hGSl!|L{duW$|EBTwVpJL= z*@z@&%_yfNea&qqWWsnc*p#ShIx1_MY+tTqm{73gKA#( zTxi?y;?_hTEzE}3g`zw})R|xdE!!eNzcEsYK|8n9xC)bFnZ-``u7WEGrKvV@+k68^ zvZ)hob>dTT^UIEUaad`(;`{l0wUm#K100(zS!D-X|DnGI{_Z!L_KR=3epBzY&Tj$qQC5<2Q7*!Gm0;OQ#HC;}tmjmCZ<3<@TA?Ue zD>nuz-Fwn&>!rysaWj(DsV z7MVc{9a1~-$3TdtHJO`^!W-v%flkM*)gq?u>B(Ya&V7Fn}q|dUp zOV?GKRx?O)-tk_dni_#JQ4)q9c(VKmAxb{ty`Kp4010aV z#z)u)FFaWsu~q?1gI)!8zr2$*LXRR#fMMWWatb=R20mH7a1gf;F9eAT2ox-dMN~Vm zC{FMKGv;+$uYp%ek-cS_UO92Jjb%vQ;NNjfu)l2_eleqpbNeBweK_DFZDc7S| z^8ZR7Chkj^NBFoM@DgC_^(+(^2@}l*x%s_IDh07N&^M420Z;wa2wID3zT_rAb26(I zGN+pQn{hDB-TxJ&7-v2!R&Gpb9sK@p=@!widko0)+n1g&PRRE$VcjZV3T!1>E>9;_ zxNUJ3EmSSWI9RZNj<6L6U|M;?{9TIy>#-Gr9_LSS)R*VTRY zZO5Vnn7Oha_Nb}`Y_CyuK3~5v2T}(s=t`9}P{uMACq<+4`fgd{t?zXOjT66xchSG` zxyJvt8qdYc_Pbf|Ft-f z?>7<<4~V}Q&crZ%{o2wU*OV3ecMgDdQi0&#^tlK$S`1hotG z%6zIAcaAadS*dbr5a~SxD0>_%B@y5&$VL|N#ljIZ!gMTuzSITMeiof@38*6lptl1K zdqZY@fxMiw-F8J7F<62)+$@XZobL^Q(*3laju>X}Fr3JhV|KLzRB3bY-FzwzgcKl}+I z|BmH`(hR}3cL@L9yZuljWIhb#ugpR#1P=|3_bdj6v#B5YNs^+)%Xz~;vB$ECb0Dwb z638ZDK-?p#hDRcAca1hzVPM$%TaC9P=Xoiv-w*(dMdo$-V%Sgx|A!14C*7oB1>TMf zaK&MM7YK|-9(Q_Tc~=cTNXC!j?r^sXk3oK2gHiYD7Z$ybs3rlGaasf{%{=ZrW?otZ zjCncKEUd-ce~I`{Is}wyO~NT`$;ftd&Mhl=f#j1>bH}KrTbg2 zy?zk9h8P{A&jU`gKX!TU#s!K^J6;FQS#0-JpLHCk7g2=2tvrmmTXMx@0q+#c#wSaE z*E++D;&AUA(Y*N&y1US<{G^t@($jWLf_V7mM0&{X z`;>3Gkoiuc!~trLY4O9bOeMO#xSlASq0kpQ@$U4PzDtjH2YITzl54U3@l8RVTNkRv z*U!E1pYbI4PBZActWHV{0J%mznZSJfJH8SMc5cx{rKPob4!Vx#PIT`%xJk~JD-Ozf zL1|5#c_22jc1Rs+!_$+A^vYVCgkv=$hT>+TR<3X0&wqjmV`p&8=J^9Y#P( z>Kmh6;Ild9l>hKPWjYgQ2uQb*M!AJ9 z$;_5vpMVv1kjnX6VSIv3clb#&)Ns#(y@mp0PU^glV+lK9umjb{$}`{De#gZpCE*a1 z&dU;zm)ZwsXB$S8kpH5nhuBJL;wVNgl5a6;kK{;IUji46PH_w7=ty=9Y&KT@U!#U1-bpi58B#}s zFRp|~i-M(S&(xF640;AvGwYNk?AGK(ToAf+j4QhX&JpeRCgcNzfs6*O8mkt~FiWz1 z!e6cxR}~FPo-5@!A7O8!M01xzbfio9M^ckZPsZ&-8`X<+Mw{7}f$TKfbTOL}lhA89 zr($MHsKx&^}i@ke6#;~Io;FxYVFNNnOk}O6ox%9 ze&>VoY|;FFSr#8|NN+5nIb+Oqo?mha(m)TvuotF>5Bgj7XYsU_hHzM%xxD{eE1n5# zDMU@A@;Ru-g+gQ*^e{h(>PETvnkYv zSgCIe+&Y8`us@C&3}@<(q7d=c;d8${sp2L=!D{Sd*6>A|2UI_v{xBBqr`ID>jO=(r zt+I$Qnv$#7mzYKV(plbYVf+&*k&InGDK9-9!h|)*K3tWARFr}w@+gM?Pcq5S6un%0 zL0q>~8&c40y`We~I)U7Wtx&l8w_f<5W+Vo)dO;WKW$?oz|Q>n<8zZv&V3P4s_O38LQC^ zSVLsCNtbf?NB7TpqLti;-AlyiN5Q_6Ff#xnYBS7Q+Ut1IJs=^#A)SnBU#(N16J~x=vITzVH;Gnt3g~3WQA6--T~^1;4TLd(qc_N+qoY zg*MBo=etxEaUj-G5c>n7fVdWH_+ONqbH_rEcQHcIpQE_U^#%5Qf?SI)FQmp8M{0=% zYU-$#6@ANzXu4h{@2Tcj2;cG}zj#Pd;-hl=?mi2@dyH;;t&TbQwrAS0KemFvu1P&+ z6u*yVqrZ#i`R1ODT(c+saK3o)S(>`~$KCnz-3w%RJzc$4(>;A0-bd>M5%U9Hk^yNY zo4l|uxO&>1r)XAi@j^1^C*U8~UchI9Lyk8VsM-0+D<#lP);Y(STfb-BYK2H8Z{{@} zW>EyTUMb4?qgZ|Ra)x%^8$Elf{>pg+S@Uv#wv*ll3%AEr9~>A>ExF^vETR(}7n9nj zXS5+jw3FK_f|xG~&;kcbXzF#;j7Y*F|9r$_+sN~IQV)WVjre~{B(5jz0ck?Z;g82q zG?3RZDUGX8YA`Fa(xy6EH5;R9{%Gw}#H7CiJw(~dhhgbV;YCDA3&o^j(>mO!NR=NL zYFSOi^j3)oasY6N6l0ibg-7oJ#J*zQh~! zG`G#tk(v>^+Y7I!MD8rYBbpO@i#`WcPR(v=h%q=O~%|d?P zr?dhAQdF>PbS`M_89p*s&*zrnVwK=IX$XIp z;pWw2{xJXcG0nABEZxBOr;DM?n>_!=5u%2Pfnc=|LWpX%0^!^ z298gp7i{bnq?+sBdhlv4&++pm7!idl%tD;?`yhe<2^3}h zc$?$&>ohRux{2<@@ET$Z8-hg7RZwu z5Rw_UP{)u~58pvBAPnRW4T0(j4lx`M0*kq9J|%Po4% zea8LQ+ky$v5?S@2zy8dmzT+}yK+I8Bf?6lTMI?( z=)I?@D%VAwtaW^5T$mO=EA~xkrEAn;H68Z(XFE^kub`p(gft&uguw(O_#fwH6L; zf!Ao2-^}OJ#p)WCmbP{3&ZDf3Lcf~{vN2q*M#5VqccY(0l83$0m-|6jXg0%M2sEvx zp7vVWJA*XTjX}tskf4W8agBevv9N2wDytQ|^*UOaE6AZGp7Za!U5}&e=>IO<$nk%L z8~@*wAK2O0SpOex-8IIoF+Tiy^?9J~Vue=%4F2?+9@9ete0>qT7(>8&uYUS{QA5Q# zOP5zho$KkV9^swp#cPS;HN(OQ6-o2)-?+O_qv+&aG@LlwpFb|@Y0jclcRkw@9bFouj7zWk+WTM)Y!bQ+q+MIp6(azJdO}Ycx3qZ zQ`o+qT;7|A+(*I+Z>Hr`T%6w{m}rq>c2U^m_qGJt4Z*`N@5f63{x&jhM66w}Uqr|H zZP{!7njv4$=k1|f`^V_*rC;x#tq;3z-;Z(#51D@5H1_xN^W%k;wA;7W^h?&&=SMf6 zp7ZxP-8jP9h_lD2xYRGWX)(l|GS0;tSdWNUH1MHl=N^iZDywTl#GDM45Ryg!{YnYceVv~fh zMl;NfHI9SimobUySw`&TIeon?guiZQ(t4+P&3W-rZ)p>vU*p_A?hku)d;IF{t`;X8 z&Ze&t^L*VSc>M8Eytpvk-USb(iDNY36PDDe0Gcz5w+o2xOVo zTZK?pg-|FF-hF*c>govTM+`0gM0j&EIM%iqB)`X7^8YY}dSRH@c@oDpn4%#lY0A|(A4?ba9M{{KnsWb5t;$^iXKgtd@|5B%a zlpV~0X>*d*IrS-Na|lQNxn@~9w+Q}lHthcH1+^~_;HiU>XH zYtSgWiCH>_F0L+a>|+(kO;CTH2x|PM-s5DbG(_PeDmSd;9Ux2k)A;EBV^U%*RmY(? zJYC-cLlPO&!Q7#t@R;eKR&>%Vlk@MZkv|4;0@yRMVl@~V?k&z>M85)oiv$lK5a{hd zX)Z2UGFud*k`yI;L?xG7f*Dp-j?S>hVSH;0pTCS3cA9 zHhxDEr(Fj#Rk?2|%?FYn6~^Oswzt#W)Hpl&|A1aD^6#Y|RfqPCp-M&T1QJNX@`$EV zGEp8c*=iidJY}ioi$8B?E|eh%FXvliq9H8#`N;Sn&_5d%x(^%RIa4JAB$N=kj3Ph= zP{UX)hmruPlTpwvkUS}=QpCc{NN3vrk1Sr)YFoFYW z7{L!KehSgD?0S|+S6~bM_#S^+sfk0QjjBc$qg|5RUh9eq+3k%Dx46CjHXHJgcp99k z`$>^aCP6>J8VeeD^c7R$*Qn&zmVu% zbV=TzurgsoSXp4PG!fD!U5wcCq@V-LmUh0W-hgvwpB-O~H4=oh^#J9hUqKB$>JFx> zF)-)F#(>v9BYlY3kv+uOwLL6(`Z{EcfjxSL^kFA`O+@21BrXR!Ef-&xA_yYabGMOP z*~EZG>JMnY~<_L@AH zV@5GR{ZU-~fUB&=6EGf6(=RjKtleM~&`vrjId$6RIIG(nuz;5~qjM@YwsPiEwK$#y z(}8JDbC0ag@H9@+K2H6ZAEy@CmA0jQ{sa7|O1`9j0arXu@;br0NI@MuXpw^Vd-_0hEmzyvhX=9> z9m48a0Ca>9QF!neij##f(eUacT-1mnBpT7M;s}HgfEq&4NaOrA-k6%7N&nSR$ZpY1 zrTmv4FuE2`z<}7Q10!b$n@ZLXya<+Lb_&Xh7OMZ-rUFh_fVKcGm~aPuPIUk=eX>&} zgibnR?n?-LgS2U37Bin-5JC!bf_TmMB=7}^H`oN>r(YWeOR4W(Q2S5>WW-?KkIMrB z0+T-ZM?U=?L{lACfazio#O_}$_+4G20Azm9Fm`_BFnzwVK9T(Q9t}g%u#LVvqDI>( zr%p!%S9J#?=y%5ww?d~AM_wm7;eBVXNA!*_<-c^+CVMs2@>ec+YB?boF@&E#N6hTI zp`stF9nCgSlr{TORIukUkR4=KzkVuni{0yznJ+{Qpu)}&j;A78PN}vf&a5^UuIqeU zIbTOFJ(8BLfpPdf=zI}3mQp!4ap+zWP(nTL-JKx5X{oe~&NW)6&wm!tKO$?~DM4^^G0}=j`XiD;ZOGk+OMp zVTC{K)2#3uQ4eY2s_>jDf`~Nb6zar|A3(TP=;|+qw&0Ldir5{1D8^dGqtG6&F-PR0 z2{S2vj0wG&r3i--#Lyr^Vxt?A5&&7048eM6OQ(xX#G z&{QFWuj7#qAi)Gj4-9uQcOqiSHbFc|4%vwtKw`K{D`key+8~}7rYOuZuYp`T)d?=B zz=r`I)Hxz~;TAMa2Fbx|{v=NY2APw+S4)#}LoLxg9q(+nvWL4=qgo3$ZO5cC=Cyl~ zC^*s|K+AayFam-6F4zm^GPBUS=D3~y=o7J9NA}`}B&N6$xi(Aa;=ItfCSTG#>*>r< zn)Y#C6t**y!7*;@@chx_f3xwtyo8Op#iPkzX=LvAFL>}=#xUBXt#I1PHqXC&oLDgF zbi=-UgdOnDVtsam=llTbybjS|u>I<9P=BF3k?785eaxOc^z?9+`Pz8U#WlrOcpAG+ z*ZZwOMzgRYygnBlml$(&N}3Aoa4KwrIb!EP`(iE`q{(x_Z4@j4d6AD~HPp=pEz7o+ z4D#Dc%0u)FbIJNaPkPD}0gHkK*T%I7SOm}90L_!7QLaUVs{)LYWf5)FRD+~mT61Jm zV+1K~DY_C{IaSg+IqsA$#H2BH9)~)@T17h(CenG?ln%cd^rIF2UhmPy!;Xs|UNwCz zZImMaz(xqg-F`1rejOS;xnGxNEQr?0erU=C!-bV&t)l}cO`$$^#})+s!Inz)m$|Ym zo~^GelWmEtnE9-%w(YB|{T1Ozu){Oy{$!}`@y6L!#KZg9bX3-$9egk6$I;FIfJUd6 zW2#B0aoZDplwIY=!>SIjKGr&G0BJ!=@cW=TC}^z zhVwaV>5hrUI)Xeg@@-# zZMCw6=UubL!BLE1 z+L|{p>$h10h-BS!6>l1bU%0fa8Qb@GV;l;OjGl~Ivf7(MA2UXqJpvvu)UPBBb?7AB z^z%wk`%oKo2Ke>n9XvL)aA205Q=gT^LabTJcw`E{IdqKiLQV#9fW;Sl{W^Qi8(V!c>di_8krj0>hCfx;RTUx+X z>tJ9O^;>bi?DcRdbUmuyd2bvC9_VGVlJ9wz`wk zKSvKco(Rc?U0F+~U&T%o)z(b5S-h0&W`){e_526;!C`%At6+FPLy0s-xPAM4Po01D ze1~(>vNr4tIb3Q-_jQRXmfjd(-)HIMVLI_ho%a?MCbZ_&nUmCHvG4CMWjSniW3C+j zG(DK7`%+?xIUe*r483%oq^O+jOCC3<T-dZGoC%BZH60%h)k8YI59suAfE+y}U zD$=f>AXBiaNOH2ZnL;Ez!|Ig`jZjf6z+%+@V26ABQId$7{R<_(m@1^RW?%R;r=9QA zG{cF4%w$>SBTXufWW&ZVKqGn`OEijpS4@~sjpEHgYhsT>a@u8yj1i30tE9lv^N&Ot zH$&7&GNo5OB#JqxG>mw|B`j@5%A-swgz&1tIaM4LN({kg76>bv=DRrqr ztYlnm@v+?Rt*=ZqmII28cTr^<%{6@{<5aDyj0!LwtsD{i2iz+5e{fCE{=$w zLAcxS^6hi;mUsw&ruFnpa9u*@JsvYB5t$K&iYY%CmuOGdnG;TJ$uOT= zNZ(A4%3fb|W&9`<<8g3GEHo2za4Kbri*a3{zORGcY(jOj{~kmNcKX}hk|^Rc@xisf z(8lXoq?=cg*fhl2Ltx_c6$OFTJJ(}}`Uk3~7)$bRlTEKEu8ZyWqVnQSBW{@@oN<}W z+O{DcJ1Vt`3}hzikbrdpL~+P=s$74?w} zD6jqUXC`Q7qfkg)rwh)>gQot)7{T>)P}L>Ok;L*>l?O|Yj8t61(<}9C3_$aoXL7)& z{GJ7d4N)KM`Nwbj5#-+`){oz|4JdJ&35QeLuOGkdc3{GGiyyyjB$yeFsf>PX8Cg;1 zZJ;Y>dc_}V|DHqN_*G8d*3~HXa4#3Q3na8#zWx7Nee;8a%%qT$rcmS&>eiCK zE~+qiOm<0MH8#TtC+JZA@yt)z$Y$)A@7PXrNQSjXY#z+jAE+AkBtuI7a>Aw(%@n#iQ$%$Pb; zgSp$S%#IE(S!x|d=ruQU--XqTC}ici#fd|IMrtkA26Hx=X<3chk~$x1Lt}SkuNs$J zVBFNJN*S|!|N5k+T}E0D)~szQZ-s6Sf{)CFZmxifE}AA?+uBv1hwPYV%DjiZn+{c< zk1yL^+prNA*)^>;Me8n_`rThSRIfjpo%~SwZ;kqGa~gZQcaVC`fls~7*96hY+kmjr z8uD>e;S}I)XCoc;$n` zj~3481*ae4qXh>ZiUa4sUU0$ib_(%|{Fz4!Wbw!uFd)jj2f*NU;v0BH=8l;Nhsyzr zzZXtAq`~<&;zAPY9NYhIr~TbG$N~ygosFDF z1o8i{k9l7q_a$8M^p&2N_jO+-_sw7Ri0;+O_-_dI;e!3&s_y`T9cEH?=tE}79KgF1 zc3uNWICXau7)8mp7~E``St>rvmrpWKjGTv^v^M(a&}f#?UI!OhP3KR;L)NqRl#V*2U9Ipr~FXw@b`;<0*+W}Wlg*@R_k zsOpW|Jtl zrm1&N8u1ZH#SjEy1OsCZ53;hpkpkSiO~K6jv23^_XvP z9$?~5)aWqE$l3Bw)v$!*1>oJ~dk{5Ugqr*)K|qWQkf^PO_43FzTkG21m3KCiP=VG{Mbt-eVB(V}+GPM@wZm#k0TpjcDBa)J!`4@bWTf;^+IF zT*t4PMpZ~)rtQ0p(+gSXw=WOr94lVvRSaAN611(D} z3&YYvPU{}PNsAGfLEjh13er@)X%Cj|WhyXE?%2q*sqZRu zrVJ`{t&ASnM2)t)@k812!-Ad<%0fjRXW=8sw)mTrY0hj$Qg87h?z$itkG7c-FHpKb zI48TkG5*rrUXe9#C)rE+S@Q5dz)kElkNQ4&qzkz1u`x~_Weez|ywZ}2{FIcZTv;yH z7JRW%IlbBv%-J}j_?v(S$-*4B5C!eDmg|SlG3glRzoWwR4Wf&3rtzmB1wL7x5=Kkp z03OXTmIZXYE_yuDKU#gnW2IqEwU|YzDQZVuwb*DiBHkqXDF!3EF8+QHvoJ~0d70?f z%5OUOIz} z&A^_$M66DCwe>yZRLveg5i**_B4#~7>w8#Wq9iJ{lsMo3i5Qo!uXkwa3T?0H&2fzM zy2WWOZT$MR?)&^!^(to11$&x6Z*%DS>_3qR0As`Y66+?~p359;kvS-0VM!?riN@&b z!|j;N>lg&bi`^r9<|LsL#ME%t{X`h^2?{9IGwqO$ysA((rd5RM@gT&yPKh$xoG6$6 z=zzTb9rUCiBbpIN^uT{W*)}3bJIO9(jdag!YO1f!uK1^Q{xkMKx2qhpFIBjS_CD~s zJt**wR=q&5yg-8gw5fpHbt*szAc{eZIgSA|{@gvTBfQ*{QZg2}0AP8yeylK3F*RE!XFE(n zKT5;eJ)iH;9a_L@e|!*+deF=euj`PyNU#^HPhGH3Qe{rZ_S z4+Bei$&OLsy;T-Ue7tG(&U{2`!;#^Ug)Qs3_1;2nw}l9aU2mHh1gGUTjr6cp3pf>k zJV)l9UFx{9T{!E&KzQh-n+4_8P`fPPt>%91yIJ1!(a*n6?43$nvGLcxKVKHOiFWDT zITAi66S8OXGWn6Dx_}qX6iI@N&4vw~v9B3il~x_nkh=>$Ot3(|W+2J*j(#^uDPAAp z>Mw$>(tQ+A(J(kKQI4aP|73<1WX_m_UP~Hby@&YI$V0t6%ndtU;R&|2hLO1R z3q{*NTvcBBMD(BTB|Lj&@-DP+q-Pl6@F%ixk{o$h0t(!ZdFMa>aT@nq32wyxGn{&F zY@Ai^P9RVNBVgJzXdsoe3Lrnha{ooCPxupnB+yHLu0K)gA#jSh#Qg~8lUJgB*lyE{ zCqa+~E3;zG5|f=9hO8NNSi_N{n9+isW7^Hs2s`$+wRhv~f53-T{jFKAV!9%i7Hw+F zYf263S0De~ZUt(GvjlgUM^Wlv?z1zYfaiOfaQSlt=YeMsOJE~=9%rOiT4qrSEi92ZVgjpPE>|b()P+>w!**26$V60ZFmO|vG z?65G3!A`AHiF;;V8{ZQ0sTqCJN(A&N3$}~E)#?#lhM856uGL#hG>9lYo#7qK%5#tV zf~88>t(MHperhdt*g-cn3rcT51+5O;42J#Aq^b>NmHtxdn| zjzXLeh2q#1saOAVfVe+UU$#G0>Mn4xdfV>iB!(@4)RaHysx<`8m=~S{f$(%VXvQK; z&mjE-$Oezk{lnA(yWIAFKwfAm|8oejm*(9X*+g|Gg$Aq)=^z;F$Iy zdu+9C@jk}IBTx8p<;|$V=6Mj#XLll$`hZkywrm&ExW%YddVGG@+Iab7WnuPRmoIb> zJbjZR+G8M%nHK$~knR%^y_r2dgj30L17q~BuD;14NP5Bjmq4inmaCgY)`Z$ZHjMU( z?H02tARR`|B(fD7ameJBfL1mH(n3oERTk zykS{DqX!MaqdaKpaRJ2Dpb>DnFrV#3BZy)t((Ix!w(@Bsw4xaUOX4WB;=!M~&f#3! z+$iJz*qq3p1KjNA0JnuikDQ?r=hX#ri`EpZNPuXw8-iBEIF(1tQ;8q2#?kg(h8M2m z8KvHa9A(|66A<{P-Z$~HnEdbj>z}3N`FCC$kb%C;NdM}4Op~Bl5$wBH1#GYw!R6Os zS`w^ylm%3A2*Vl6RS|rWQU+vY+1d8AzaAa^4`|&#n%UZP7zgd@>zLwbTw+xPonb!d&K*3`c%F`usu!lcYnXNeJQ-B1 z0|06|x~bh(MSiT$Vr0Bq+^5UW)S|~_&-Bd;*%DhT?it4>F==jtVv|W(#CnW#;`frv zg{mm~-rdhF@_uah2-#ZYwV7IQPIPuHK16FY#nG3C!z^^6O1&FtufD<^>atS!^_G&g zOt=%*4LQ%AeIhz4_?UzDt+hQ*OJ3~7-mjC=+wIwj1A?@n1hU%;d`VFWda6rL$ww}0 z_{Rk6fB61Ev?|yJ>h;Wk)po3IcNZ>PJ)&cGdM}xbt7-YYFv)z7G%m zfKe4l&;K`(W7hxQ-yBB_cIq898ZP{(=YLOBrE&eeJ@DnGWb8mdz@e%a4ArBo$=Jom z4%-Uh>;!Q^6x7>0P}`rk-OAr9+5i0A!VrJKrtb=j^715@ zdZ(E(watox0md;jGOz$czM5gVY`T`=#Pj#XELj6R17bwGf304jV& z5CBHz(k>G-s^&diQDpghOixJgv%57lt1Kch%txdc&oQh?M0 z$r=X!eAirleE-527tkW?F|x>94{=gl_TM~Je1UGLu;1qfOH%RD+cm|yk(sF1wDRTN3QpUh*)*AuOvI`ol zL~~;Tj@xmxWsAiZjGmmMRaIB?ww`yrB&%!Tq?~@?_t7y4&*a5ghKK4t3m&qUWpJNk zrx4-HQzsJNL|N4Zm#ZGHlk@Qfm3oI2g%6aipilx=W?38vyX8NUf(~MbU8(e(giVCs zSdH**|1z8tOBnVU62o+eBMSa*{h<;6i!m`$|9)VdKV)l!(2Cp5#r=}nKQsn!w!xkk z$@p{Uku{<-&-53kbxJE_e|gnta`Z~7E^>N*w^LV6Q&or6Zhe%{Mb9LfcIH_(yse%FImnFO{u%nz5ROaVz?Av8%@d&$os-C#4`gGfwCr} zklJVZb?{cU*-V+YO51d8di&EB@WEZqx1Ofp5oze@HM1zj^ZeqIw8~qK&%1@I+%!U7@Q0N;FaC2G8 zy|n1-dG<8bcdljJ|3<)Aq^2-2RyB30zT6xK_bd&>L_*Hn6XP8qJiP0jvh#iK&ya%m zeZRYWSdYLVNZWqy?eXU3#D`)#CN7aV?fN{=YjxWDF~au!V7BS~c$UZmMeQYhSik;u zczb=IFWrV_b-!l+LwDf!UV2#@R{cdV`Bg1rROr6-k;NU4a(C45lK)Mw&SfvU!F_Xk ze>#dj6l4GXasOXL)hL5OR0`|7-kdMgm%P@QZx4{)U&p=Hevv)eMRqG6JbJay3k!GN z-S|SCBTszo&b^D<1v_r_=Z?UVGE=^)Rb53tKGVn$w*=tbCAB93rBtpLXEnG1 zHMW+Pr$@glJ>bswUR|T_AKyA2Gxgx}@Yi5hxDa|O_sX#z4+Cf$XSwa53m;z9#h7Z8o^lt-v`Hep z=kt}1+&uWt4>nu()~(}lpDV-I(H%!qG<&_{6%6+yQ2gU_*0S+Y?)11HbC0NX@f@wM zrU%nq2onX??FDX+q$p9$ZjapkVPyUl`=`v!VFc#J+8F*y%d1E^%CJ_3yt}btRs7zC zsO6on%z~OwkEgF|D0j^A*1Mm~1UxUQz<8r6X|%PUy<=$KWnkEUx!!iu;Im1exPU4_ zUzCOjP1`Y~V4)BX%7O*9)pHWG2dYTeU^KtgK|`32s%f9uF5>#%Bvqo5!3!a<0#EXG zk}5YcctXLV0zO<^_nXU@6J%o_t`0=xQdtoM&r-0mO^7tamUJBGP*-%0^ z>(=(1r9_ocT{Q`88TiLfQKyherrrCI^!xP_rIl3{j9Ha!V&f!>1$@gs@O@%RBcCEYl>9L|^V&@<=ApWRNk# zB;!E9Tf-_^NbfZ=Y8MxyE?Dmc40-6Y_2iR`ZP0YRMbASi-UnZ4OTzt7RI&eyqKfJE zLs30^Q+B(rEj{%WT>4_`RvR-&=O#D^uJ5*VRtbcu=iA^!cFkRw?5KeCgQ^Uca8x*S*j$cE)ir&*!0(RhD-`U4NLGv2!CVjz3Z5~&mG3N;`r zutZ=Jl{4g_z!Bvw%R(CT4|9P91?C7F9M=?0X@7afHA^&{a2`b05wfecb?gF!eBt%BLt@QzmI+8%?1Ez!y8><|Uy zkm!`orj=*GEYF%^)1}KUxN(_2@>&<)5de&bLnNP6I1dzVAJufe1}_#GJ2J^P7cJUY z&>fqz1e^sK-7=O64-Su2E#(@OS0ulD0;*i`3A+OiP>vS2*dEI++ z6Zw;5U^`Wtv8SF0ozfuaUK5=tqkdVVA%W7qM>&!7yahv*6cU{F`CV=$RFWwcST@VQ z{Jp>Dz?9@g<~xm;a*xjtik%sk_H1m#mk_G~wX7TP@zoL60&85tVH?X9Tr90u&1y(h z#I9|2o6Tw96~fO{LM~6bqILcH%DB?A7)udox&x*FC^p2H$gp4PMNEc5S>*-k1RNE# zWa_aM(QuVTKZ0UAx~KIH9csbWf3~f}*q)xLl5mMVSu0}5cr>)J-OARj%I%wPDY39^ zi8HQ6f>fC+jqp|#g|M+IOFWTk;0lxS9_N-*AD{X=RKF&7K9@Cu#XxSvf$)Cy5d*uE z0L6jrBmjNnkOT4OtWoHZ!&9B*QP$272dA$u$NO;Y3e|sYWdQN{N^y|&;>byAr^~)D z{Fe5=gYzcM5uU`PM~$#Wkwq@m>eyi|(AG~H^pbIx_OZIhYp~{2H)Bf`;?<@$uU6@- z40&rF>qXT|+gnjw_UTYP)QO6yT>?cI0&%w*f4bR)0ntdeq+X(r@XV-c=bF0Jba*RE zOEmTHK^T2)d8O1eol8Z&U9!kKN8zrWlEQJu+7HQSvxfm-jJ7cTx`mHu)`(Su9(7Xj zLt0dX*VBEB4Xp6-Dau|OL?3pRT9DW>OtwLWh>Nk$A@S*59e%GoNAB}KcTnkT);(3s z)xUS?CVpG&cOE|lHMgCe9UJ=sHAhppkBLPANwyv&vi_xhhn$@t)|c4t%%Z~}*_U{# z9!wj+LY@fz2sVFF4qOu&2a-YqLlX;KaA1_PjHm`hJ&@W*+JF8xa0ldEifLM%ekhSe zQy!!6D3wp^1|!k5z{X_LKZDSs2aC2Zl^}D4tf7z9c*@^Hx4Lxkw?51}xc>F|m$H<< zkxx#^j%T@t)<%RsU&?Qxxvmz(kY7i5K%NeS5Wh+q{rR|OA{AU~pc#?rL4d$&-AT!a zD}@$eH|YGqz-D1N`boZoWH}YtGC{z!`&|o8g=#dO{RN`BXK+$w5VH{sf+VAOX%;}U0^vmV8&-hDs?wlTqZZD1 zijCpspEVs^$5iMN!bdASfp-Uy|5(x#lLkX9sE>50S8xY3ha%IZKd1Yaonbwsd(N-7A{>knmP8Q7kNU`a} z^E2~y*X-Mefz0|>9xam|^+PS~D4#yn;Krg2vc)~*vrSO?F#s*Yoyk(i%Wb;QQcGHK^t{PoG4ZO7aQ4&RNp+&7Y$F5rK ztfRSS_H6m>?O0&r(NSASC^*jgoCyPD4`c6JiAkyXXMsvxW+>Dn@MCt zT0U2>4riGmqX2Km1}?G5VfHkhZFl_DkCnj4M`q>4a`Fv z2WkhA4NNCNQJ6i|JIuZ54t^hz{~pWO`5C)~{V6~WW&=(`)kDlb1#~DUA{#OrsTG-! zKDO+qTYbPhq!Z4)w+yKN)vG(1b@TqoHu8YJZr=3VKT^G=gT2kA$A)}G^pDsyEhVN> zr;H6m?X@=RrnACY`kJeG&QI-|PtuvY-bjL-g8S^E#cZ_Hw%8Tt{K#6YYxC~%-@lw8 z*n*{uBbk?_%Vn9DVc}7-kElI*7%Y&@)E-hLSwN^m80&CLWKbYV7O?CLvXy@(KHefWxKVo zhW}xzD(GSso()tMF1-uJO(&u{*MgYO{+X6se4QDp0DXMO22d1*sfb*=s7i!|=Yxd# zb2V0t(h+;2OTMS$fZ?nB3O`^nnD03Y#V6Q8Ofq^O7`DGRj-cO3KwtQ3^AoeLcV*`HE~An%`GF(BxKG- zyZYpn$Jk1+q_p|#=>kcH`h?(#SQ6I%5LKUNE*fMCV}BPd1@@3a9p2r{swG}90ojNa zQ+lB@mO*7MQx{|CGDpe2dNR2(g!ns_F6l=JtJg#IA*JI^L&#gieE=2|Z`V-)|275BBaUNVaI*7kt^aZQI5w z+qP}5a@8u^wpZD# zd^sJVw}|Q7-BXJ3g=Oez+P~!4*S&^@@Rgf%(jBh{K_8~Y62BaTPZ4a-F#qBjhpL7mCxxJ`gQ+}U# z!R%?vXk^N9RWNuK(P)D+2ig| zt_p&`MweID{`6cl`N~e09adg*^R~S#_9<}L_yc}<4Ml)HR0K$oizt|1Wnti=IrBAwMrSb#4rj3i5tOgqejudA&i99#%}UyD4U59I zrBcJN!X!!9$7^~NovXH>^qW%8m>A)BdYGt3iX7K!XtUFXMRU-qQp}#t4oyOZ4u(^) z+tu4hITF;p_>+jmw-dwW#2vJ3S#?OMO$HAlik|;AKv8R(5C4lKy?(JKS=oqaVXzw! zg{UVL{Q3Lgf_(&-^Bp$G2QOL5^C@v4RI*RQfY->S&sl$;mGfsobKd3HEGR9xlcIO z_nd{{vs@Q6xRV#S`gGQ=A(ENOm>5e^nUZDxOJqb*xF)-KafKnkLbXKGo|ZvR|5T)6 z_W4%^4<+eKi?LdZcD4kg>b=X+souhT<#(ej#TmmkW8nxD~Qkty>XnP`cldTivoB5o2Otra#Y%+*@vv_;BNI-Q(=F$~>Rq zp(>}~KsasZdTQR6*0QSvfXR{|7gnQ&POPM+qw%nEcs_@@<@Trgr(z0$-OuZ~`b$Rf zBd&2{Qd)kmU1f1Bbu@$8w*7W}`zFG-<7NB0F?pS9z3{cdHg0oq8o8ZE@0-1CeSUt7oaQ&W zL0bvao%72&@o_fsgtC;a440pp#RMR%5uKgMynYn4M53@8mV zBSRN7Q}*!(*GwH-J$EjUWkU6q-=f&#Fv!ZKdJ({1(y2 z7?`Ax)Lc|(mVgk%HzWw*gA+;U1{AVZPzVCb>~XPu1#t%eicr8`$T}AR2!(jE4Zg@H`MApiLg$5HSfl28k^}U#gwxd5JDV;g!=&p&*(sWjMDd*q40roe z8TkQUuf@gwHCX~*GC?}*@a??gn@-mRjm}mw<2m5=v03{KV3ay4hCa6AP>cWdWjPrj ziXN?Vqks5iX7=&m5Vh%mi>JMc{)FC`U>TboBC5J?LgP;bkg1V)=*u?`d~0ykf=l)h z-o)y}H^4l=SognMrT=e6h_f*Jc+w*@RwheVQFinRgExz%PK+ zB|`(unx}7nQSA|q3Crf6J&uuhitq(frG{~lX1(yDKq3`DWdNr)>zN|`mc9r3M7{1!(^_wllIX)r0@6Iv?fEU8=3AM}l z{VeTF!qxTpuB2=;TyPZVN%Q*h6k4)tC?fKEQ_}L2LQLI0GTF}LJ z(aLvSt>)D^c`Wyqd6{-`|JME9@wZyc3y-Vo^@-oRfIjB)P;UFo*vQwWF443;mMadcTr$;USyS#8S&B zXQl*Y?tYlHuQ{ry(4FkDeHu?v0(d>-L7EL|E{=y>!2!u zPRIB5Flh5Xh^Z+Kjwn&?zlbShH25wlhv9z`)3QPP=rOq1z13E!=;T>8JC@C<;qeN5 zKAV{BQYJG3ZzXMLo^I&^g`W^{xtRM%*5>`f*dYfpERCaAf<%v@5#%UF9OY>I?6p|_ zuiJ;?vcRQ#K}0>I(Ny1oeSEp^`-f-p_k$m@S7Pa!^6~PibO5#?b8%|Sat)ru9K~YE zDWYmrMq|Z0oGG&8WecvtCLrSMiXnqJq6BqoEIcUy_-;g|HOqNE9@~~8Ae)SCFVs69J*~ctT{BEk({})k# zbR!PSK@3e)LC2Q*2rZEt?zASc)Qgi6I^^>YFhv|NwlOgV50w1@rXK+lKftu)2be1T z0Mk*aX`4Ta>J*x1;1TL>15Ar#5h9~RXRV?ZYl9d>DEEWf8i#vc|Oh!brF)wBx0yFc9UzHf6Q$ zql?FC(nM!VB}uLVkK_z9(Fz!i!*Xq6rH#d4D>qfvP`FH2s8G0AE0&S|#*rfqa`el} z*JR5R4E$o8z?^sx%os4@6pw|c1I48rLGWy7I&*XwQ7<|^O_x5%JJjt7+m9Vh0QK|q z!pSe1gNG025J_tldiWY;iX%>BCt5&{?L)` zc?hyLy{ISpy;vt>0QOXku>JhK5^7xqWf>y|=uxKtm!@t6ZqE!Oa_z*NoGs(Da1O)H zb%N-wnvQyIZ<>U)=2JpuuGZcsf=3;vy`_b3S#>vN-hhl}-Tx&qJR`x^LH4WO$L+hU zG0cs2Lo}WhLL*)LeQw~7*>uMa%DqIRvR0Nj{#JA0O^Dqy8v|7#Bxur0to)zKAw_^K z^(8M;DA+GQ327b<_$3YOZPoFX9(0TdeK zK0qM@%y(CzqdcC2MwIX$ZA555COHpk0QG rRWwTo0Gz}Hv)R$LO9hH{bllMEZLx^ zhb*)21^w(z1Tb5W7z2FkzmxG+<8yC z>+Iu97FOh9>pGG*kOa7P+I&n4ieaBlxNhf`GFy>#_$F5MR5+Tkmr#ex9G>$Bm*V^b zms%os$%7*w$*b%$4g>6fT+;iwP;(*`@Z#2Q-bG(t5sm@*xRI7XyK$AEy2%pfwzbzP zCB3&RtwBK_^NBP2k@C)E%J33FfBww6{wG)ZPhgs2cvjs&AkdiIYNji^i3Z~MCPxo( zU@!>UO0CS=!}!CA?K=}pD$hCy3&e%3U>OokR00NSlTAp;o7i)iq*n2%df3NT?3jAI zuXN@jI}m}Sv~W8CU1}<06+#tY#wil$jO6IXI*a1>MIl1+V43d453>IuaC1=aSQ|kdYIU>{6&bIuySGJ zIo`hvJy(oIvS84gw@%VcYW@^3+6KlTHJ>uc_=8W1B@4MDXgq5tFZDrN{J1dIA=5Ad zf}k)1+kJ-=|KMeoK$CwQk%{Qld#qbNDgL4X9Vf+A{HB;R#xyY}uT{_oVvz{RyvCR` zjUc@Re;bES4xHP?10VPLSYBd-ed^mAOfVU0AWIm&g4_5M{LE%XfE?9+Wbq6G1MrHW z0>p~70xSl)IOK-@EPBg$KBqm6IMW2E5y(;I-!(sj5+$|5z0=QBlL>-eUho()X&{~} z9-W&Pl*oy66L;~71w*_H8T%D(d6d=AeDivE4TrF&R!Gl0FtUNXVl)h)c)%LSHN6`s zRZWhLRVTtGt*y9C-T_VkpV8I6&MA$-ETz{_B}``{Gpc7dvj$W&S)W)F013}R&NNSv z=o_acVB7qzus5=^j8eOQ4d_J{^ei}Y8LS^e@BA{4Eqm7Cr8-^{MXD>0JY@IaJ&}ky zy^;3r+&S59VMmGGwCFac>PhkWtD3dN*kaV2-vWlI*LZYi@uJll{?LaR<5ioVyZ=L- zE++N*N|mS);@4qlYY!+T(Y@A=jJ6hAD`2p$X&5h-V^;jA)8%%S0{k-gA9d6rGd58IkQwO%3NZjgaqYPKH7E`R9UOoaf&odt6JgP~q@n!XE z`fi9qMfm6G{yhB`XM2seQrj|9o5EBd%e117x-lXoCHpvj%khNg4?E4Y0I`|yAG6Bd zbc`pvCMotvmbmJp`WHK0LM`erFRUlgRk%)u6ZJ4k6kYwRfn41O%aw6)`H%}8p~%B= zaQ1G5%3?T5Pc6?JJWrl1nm(cZY>tk3RfsbYV)AiWi#BymtYn3!uT^%J;%>CS=pJO< zEuciS)XB3NqDX+7$yKlt(ZPl!x3c-=Z`ftRQ}7sR+60oDnl_2gqGG@dqy3xH5<{B{rx3VnVdK2pkW<71sSH=O#+j=OXPH{O zTyej*eJJ+-Q=0y3@O_5!)o95k#3ezOtdG7cdVYy8+`(Vu<9*CEq?LkV-B4ycDfSQp z=~i}7Nr6t9c^^WO)5OqAXwIy9>F40gCygP^ zt-HX)M-WUwvR)<~(WA@s4OT#jRt>;(@eGv^!+OhzWiRl>rvQ7B#pHg6fx)H8=T=lL z18~{{YwFwFs!H&;Cy=0`wl?^mrihk6oAMfRNOQKcm1c0rYkcRc0}yoaj|ltObH&oC zyAZM|qf~^wob|Xl8yy@8i>d+LX1vj1uc0Hx%;pg}JTdMbfwBYW<3mx3{KeXxpV5fRPA>DJ&?*q&6@+>(o&)e7C z9^23F(=Atu%+R_Vf3qSGQKrv>B$+7PD zG6T185!hAR^)AS6ElmAQ+Qr^w+^eXKDs@|HO!+sxs3kmkuUs?ynnH_;a5cTcbz*wZ zmWtXHNzu6O7?bvqifEiyturCaB85<=P_X*XoU`n<1Tm~nNudwXyvh*=vWSID9iGl( zF&QV)D3fk8og-_)9o_hk1dU0~(A*~p4tF@Lp@~qO!7%&lm55;Ckaf^R#)~vsRY22E z-U%x^7OXKe{^(haJWmJD^XKegsU^>Ov=8gZM6R!mW-ls$hRI};2ke?+gjDQF#m@?T zc&8Jb56MywOMDA+ykkYygFS|>9aF)?ktANrZS|QT?ksMEC*3;IoL|+VD|xBvB^mwU z@rJsiWDRWMqmqPa6F93=(&4f6L&YO1T1?ycJhVvzWtBwIs!OqgQj1vFwnK5UA<)F+ zz{5h%yfHlTx#VuaIiYVY&X^q9rmrqt5?`M?`F2Zvt#U$fOLTk(-Xr#+3GoGX+%ogG z5!{f_R?qlO7|niE7YN>XoxG(@hMn0~Rs2u4I-q1$%J=NqcxAMR2SdHzm8{oVLI8Cq zSfw79v7)0jH@vDKUOi$a+{jTrWaG1qw>Ua=PD>mS#v1%nDHl6UmR6R(>SXxz0k9&U zqJUMZUae}E<|$@nQwnZb2)8P6E?U|&J>G)V{~{s*tJLP!-DGTAz(FYSVeJW8_jUv6=<3J=T%wy>^ZuAI z#vd~l_hZI5ff{}g3y^FUro5vkV>c4!gsga$slZ9rkx;B_KT&1|IKi2mn4qV9iV#uS zRA>-$ma`(V%~d1`8!rB+Ef~aHekc;s2@Ds>8fFGJX1813-G5@Se+|AD72cM)Jd%en z19gu!r}tM~#_OO#G;^j#>mp zP6NUm@X6RL<^1|&Ml54;n)>;opEJH}k5O6mp>`6GRmkxdY6^{=Xw)>xGF+$7P z$zotCYW7K|o3t*pal1^wJUw{<9(^$~QwG6VgpC|fa21o%EDE0^crY4SpCxpm$HHmJ ziVX1Ka67Odn>Z{WM;Um+t(S&E-jr5LfRw72z_9d^pw}cSAZRYMLfP^K z6YjVr$Zv9^p9f$A^9T0RlZE!EN5T_=v;u;xj}Z}2oX_a%?Aqj2-eF#B%^3i`|Cq7a zA2U|^W5#~N>HdWTZ!Mw+5S9}_U`v4n&`l`=_|sbousZ+dcQG#J2h@|{N0YqGSwiy+ zat9~|mad6+ZQTR}Yz{930pSRWjc^JjS+M&2mvn>0XZ}HEo?T}9Ujx0M;_kUOfy1&N zGj@IstXD@t^|!qA<(wiS{yeHo%Vcc00X@Up`%)~JpRap&QtyO3^pibQ?`78Dd(q%~ z)!=*6;Ct7AmfF$-$LxSqlAhIZHD+6?vBTBecM|(vEstOo*J_j+DlGG?<01B_(Wb&S z`{>YCenk9$%BRtD5l#C5lyx{_|C{=-@PQxmhtiEM>V@F}-Y`Dz)e!tw3#Qt|Jiv>X_2v zkf*5AS@*C$5nXF4f4ehA11~Z#&18V%M8m#A&MuiOkVqAhnZg>CJHzsM&ZDNcJR3}_ zitBu`yn+b(qMNF@S57sG{cWBK418Eibblw;;}eL${fF3<0yE#wQ|A1qi;^ zR1Pir&3N#h-EM zi89k;EjmH7d`}3?$e1<-e4$*Fpw_r&Ke+Ps?RnH`eL%g{Z9XyCIE#8ym2*S~lV_EC`7_r_TBPRG`#4d1ZwPB;J|I+mc$kXH= zG6CkEF`@3zW1#-z7HKwE8(ih z-VQ%Dt4R{pa0)J{J)PzpaQzP*_CJ`|x1#mO;&h#Yq*=vavd!OC%lcgt$z_G)M&s2%E&Y?>D=<`U$N zr%H>EYKaK%Dox?>#;(rCTGhUvWwSw?U!6-!&99T9?(zeg<>0|pqCO)`-jDd!HLj37 zs#g34^=BJy0Qc3GkoF0UasFQot~@=rOH&XWCmTYmI3Aace&f}=m=IBoUiE`BYsdcP z5vlj<36}_*=0vwBio38eUb*4!kP?o#3kE=fO?7scoq34d1#9L`~U2W_=hL;I=zkbz}<_y1BXYe zoFM8}@uTs-pB_@SalX9`K6YPd^;901$Ee>BpApT@z#oy?BkQebMPb-x8kSWTYGeYJ zqHyk3_ZO#S8}uF-wL1Com8(=RwU%A*S4^^s&^$72lvcN-U2>E?FKaJAi9h?zq|=Bm zah;AbMr>$2a(?b3Y zT&I(vZ*^R_o;HRp$ayiW4s3BGplz`(u$f77A83cJxsmFHytVbN9jB5g_)d$=^+i-P ze;8n|oujpid>t0hRqLW#EfyJhYmlRV>N?+XaK2V8#Ru+L`%H4MUj2T!ZCsJ$H-Wj} zIBs4uv}y!?&=Dp97J`Fz4JsQ?42jKT!iE=A@f3Mj#b?L0O ztj26m^O@*I8QO_#9l2v(XyNgs*Z-hI?=nAh8ifUye$}}@Py(grp0CJzR=GWf7WGqQDwle!)kim= zswWj1>v{b+?SBBB{{WVDPo}vpDVYBt4hhUe@UG+p;Aw5B&VYP z;4Bpj?21BIggF$5BSJGEc!=^74Jkv}xQ!)Alh;%PsX|8R>@u{Hd!^j3d_;_z(l zby`QLKLptDPc*^#sx}1Scv!n$@=ogZ^m-Ydd@=a<80OrGX41UKR(`tSYbD#8mXCufKZIINNI(~9M(HjIBc_chrEsT0#uyw;I|(=$292` z-dnwG9BKKRhH0Wl_9@h8H71Td&#!Wu<#><1V17dM4F3_LSMn30m--W;H~xJ3p>3-{m9x;JC~6IhNy7%4TOS{?c8 zH_TWMr~}i@ZAwXwE&yE6ehNQtaQUUZ2+|M|ZnwAB8*!2^-|yG!l2~}(kGq^V4##^P&&IVU+4d0l{=Y{p@Mwu$uOOMyJd&f`S2G_EW$8mn|zx*kW$H#i*HH6zp zXf@kMx35N*DY)p;Jg4+{ITF78J49j(-L=EVHO}r@?GOjC&_~bq5fI~(csUWn=r=EW z!E!#zhQlcJs5=S6Dbsj46+~$|Hz`PlNeu1EOYMQf=!xXcvN{3-{U+jjrgzQmo1nMP zdKp455U+~GNa~xk%hABD_sy>CZk1PvZQOvBXT@4_C0E8d*~{&=cOsjVEtNjQQS2Wr zpHpjB&BWCy!W$y%qMK_Ubxrrf+#>K36&L)S08Q9$^dMFgM^*jP9b;;9PhOqfVoy%m z^wTws&BMNxG5e3Fsx>!w_kssjPwOGs;u*YdfkEqFk}a=CwmXaXeoN!)mv;5!M|gy{ z`}s}n&ViuSBX#3n=~wBMc9FtQ*SpCf@Ym(-J8X98+q9jUhB1}xG`%l$&Bl?-8_{+d zhUmZXO|J~Q5}z6Hd37ShE<3Q-&U99Wk;#cpgUK zgu+~|*3G-W-%v(x0S6QKyBdGdCB{_O$KjCi6k__2U8dwqNee|_rV15+_U%V(r1An% z#bvb^kf<>s8W+VSY!K7|_W%^lGJv(F;SR>u>W0yoBvT_J7tNUa-Ts*c#rO6iYC#F# zz{OSATPWKJ)J~&RZVHq_h)%^Z&UIC>k8M0YKq7EbEO$$bPQ`UE?1>T?5RwAmOa66F zIzBlF_^KQ{w1?D>7$FtEqzW}?PjbzG^ezh=8=c@5+)>yoH2K$b%lL3gK3Unok5{>hd7GhZw&vkgmy7|)1gNcUt zC!8YCS>sFuB+~MD%WE}x1erBcO5KHyJrH#)5QUYrl@xD9;JmpanUYjVu`KDc2Z~oB zmtYDPl*|3o2_s5Q2tchIi;Cn~*}V(gCF#uh`$H3llq;JlY0+)Fetx~~V=DapK1lT_x7EI2 zyo8#io*KBvrin*Zr%{@@7p0|#Jf}-cytJlW{Sukba2Sxu;6qG-U`DoqALNv*3nc`~oy(cLXb zYQIzMT%&U7yjdQLzD6W^p+;TEPy~@y|fi z$a(4{n9*X_`97#gmBE(paoPLp{0RMd1O{c=q&P#UpJL=)`qsq+6+htD!reawT%s}j=~O>x>jtLsJ~7=&r+II)bm*Qu1r7W-QOu6O^??X2igf=&8pd@BTs?G#@4U%_p-AkCcT zAd3_Xp;obo{!zZoyYeni1~g{2B5U|Sc2Ovls6?NZmeY@B@E{*~kQUOrm_Jce!gv)_ zZq>dB1!X}Es?@;~s={h>(R}q~!4NX_twm@=$`bE1HAV{;4C(+Qg&xN0aYP9RVHUlK z(&=gWgV}AuLi)D>ifOFtq!DImq~t@5P74r+6IIY*v^Kp7 z`0{4kgOIT&q75*EKnF$4Bc%iQm4vxdNI;|vSl^_c1o#~ACst8>Qm(y~Id;$d97AXw znn(!QSQkxgyeE9uYgRT>(cDW=#GG;v2c3Nyq0xJ$3<*IffeARR2N5fTg(|j@h)B6i zdqO?ZvnXnLb?P!&1D25%RPD$E_jg(}tgIEykTrr1`ru9%*}WHR0wY8QJks;Uu9K>A=e+!0S-I3}eqg9|d-5 zD&`?5vUV|oL7#mhjdV@)Tu8`$X^?qojN(tAhv}g)9AHDp;zLRmjXk$k(jL?=gbi0iYs%E$s zSLLE@Y}}$+6BYNV*TFHWPZi8~YmVX>7#T&HxV18QR=u^8jZI9PC1;u)EK1K_%Yu0G z-$rk~(%&(s-;AI9#oxmZ-)_90-yaJ{FKrJBh~JVPKBPg07GmT_0V7F=AzsT&FCUc7 zvcEa?R9ou^?hMM3Kxph@sYi*-DPyN1wC$8+$7G`gf|nB=MWu_~=vE_%_BfqvPK#B1 z#8~aCY7eX8TNW4iDw76PB{P#so6+>;Ft8hMFj91Sn$KsvTxj{W|HfuHYd4V=Kcn%; z;o$;3gz{FqbT&e?q|iMh5#?-p$3*&9yFX+U{@L9?i>hwNkWh=}>j;ZuaV@Xb_44Yh z#qDfW{L9<@f|mx+-G2#K%}|H==_=}ZU*f|!QQh6Op@lGo0z+h76#`L2s%1W6n&v3_ z02vbo6^!OIoySduV)>*@C^&6Pc|u}gV31siU1N)$@#>gGhrBkS>F7Y#P{V*crkvfZ zoh48935KkxDpxuxShLzKeTrE+k0l#B>Kh!aQ3n#UA`#9_lHn(>FG>;bCcjRzlpA?M z$(}ev7<0n>1Zx9~qY%$Rt*M;K8kWDnnA%4xF-~#UCLvqOO*L`BuFTQAE-{9pe_@p{ zp^zSLJ0JnGlVCd;c2p}l5ozEkkDrVyI%ez+yAyFw^SX&58HVVQz%OtUZ!&DGTr@B+ zxNZ{)C=@%u8!Y-RDNAa|7y^Z$FZM?=;Zv#N6c_|0XqKnMGYlyWu#%gSF{NXP7zhN( zJ8<@;6bV!5RK&rQ6w0)3@ERBd%{kZ=xeND`R!V7${wl8gp6LAA0}1R4#N@HvA_ zyFo^V?^4(+!1A5Ftn$!>q*Jv#4p$2{RbR>~)nwXQFjKQL#acShGN(Y>!hEHEU z$R!1kqtXcW#yo2#SM0n7mrrvVuVv(yzrQ@2A=p}7EvtSStZ?9t^$1*znXp%GAJ!M} zuc=ErP2zN;;h-$1$g~^h=wE0fQw~-_Tbx}o<~(9T(D}!yoV!mLn&9CVM)r7Me>|D> za>bcTrvrL$zHCnQWl`!!7|0VfB2$%OXtgFJEYUbDF<5G~2t`VG&Dros6SxHX6t&Zk zPb+&TD3?{Ojt+RnxSZf}7V(*nyPM-bMzHZb`ibq_4`5?DcH`K2?m~PgI(CoAvl8LO z-fT&)OeUcBu$z8b5<+n1(u(BR^>)`8d`tFn{v=WAXz&>%T3u%RP3+zxtEwDGR2&+o z_)<+e9G{F&ZdO(QZSsB5<(oYvsl4pQrt2!cUi{`}r`+lNK;hoyD58&UNV|GjboP0) z+ytX{hdPwr#~lPU6EXY#^;G5l;;}9U-5k{6_Wlm3cREJ*!VZ~KjkCP+v}oI8Zmqj1 z`Qg)UPrn+psc{{LI8-6c=C;u+)m``G@O1Km+ZO6fy5NScQ88P6;f@!99bb6R|B7>K z?|3AqH`6?Ow64i8$I+y7z^bTc7MPg{-%v72V8}bd7Gpzg!{4Ms(D&QAT>wTF%)o0; z#(czt_vex)dArgDCRg5Qyg#oExHgHJ_Roh|6PaRc&|_WhA6J^@=%Q`VcN%clRp(r- zwJgwwo1jMw+jyI*Q1Gv)x~nb6SGrZvg?+O000FgCp|#9dw-H2G ze1Zl$i)q|QKL3>AijQe2O1V!1Qrg(*S1h@{0{T58Y5r7!&j(zYuFwk9h@JRF@J7P= z)3zl7?wrqch@?;uw&zLZW#vjGibuBOOGS=)$X0*_VIaCWhhce{h^7c_%#uo;=;TWg zmIP3@4IDhK4T1-8SaWQGDz%8D2%!wrapWOTw`ky?AydFj+8_ zf-!*>AvFBM-GOok+M&D`lro1i++k(Jd$d{Iyf5urgBwQ$|ITq=WlyW6jhDPqYtBS?4}eZ*4k#*i^IyFc+A z-BU=vyWSkX_NR|UZXQ`b2}dEEy)!^o)o6XaZAe^b;urt)Au-_T4AEFAh%iwWLV&xw zB5;xu22}Q(qU7^w%75tSqNxa>D7n|xgZRd#FdvH4rSX7-A{qzGpwk!_Dg=ReQgRKC zyvOE0*M%U(-;=z-fz*YkALv85i>>jKppS^v0s^!Jvpq7G2Q*z-OF~;;KhVPei%rh6m{IzeQF&z6@VMhh~+2ugR{>xTc zbchJ3f>;_9_f1?iBNeJOs9dJN1Jgn057UY)H6HAYS9 z5hV(v*^JOmMY_L1exZyORCVFP`2nVnk_y9CwzHIaIg#6u*ipVwa3RE4zaod>lB2BP zN2O6Pa8vy(%9$KkQPzZG(HAq!FWHzBc%@sTz?ce82nfM77g!S`6IG~Z66ZqV$L)Nr zpGVOJuH02n>-|#s{rE*z{ZAo^e)}KzY$MJ>`cmF_etHIXtdBZ9WY<3rY}G$!^Lb2< zdi~j&m$FIt_|&d`9DQf#Ds(s|Cu5P*kUe5n`cQ7Oui`=6s03X}B7rU1DQeX|oB43ia; z?|4Qy+wM!U&;P#h(%zY4pyW~pPtXYYgB-{2j-N~2@}_H^MO~%5KjQLL zR93(OrnMkox!m+!4#nTOr~5Thc7J<1{0r6P8H<<30nbVr`Wb8cLztKrRV>Z;Bje7; zx|6j;ck_I>HNHccnci_6gDg28p5K;a_u{PC?eF+=*{XA8gU|4A!IpD*wJcUGkXe7;cx?I=uBxkiv%BFnwH*) zq_s)ZNG(vW5L}s&BRp!1MAs4_r=x{hU4rtju()$>@n8zA#l$;hsDKh~+T~w-yQ5AtnIz%S6bR1Sy!{U>Qw7R`{S1&>dOR83T>RfR?6?{#c z#dNGcnfjrs+E&@5 zEC&r-c?d?^ryRJdBf*-mMeR*{d6~-$2t-G7`=z0gv0g4U!^tx!1S=dU`2hR6Y8H&t z2l-1(aa9AFXrngDFNUFisx|ex@j2g#6aCXa5t-hh&{jWa?G%!;qJ(-91C1~n3QvjR z0pe&V_^D`H_L8_!yb(;8wMKx3jfrugwqpJHjmgv$(V$vZ-lX8HI#HDnaS#(VwNa>* zH^3x3Zemt z)xAm+ZJO6X;P_js=pKl7-{ewV4^c9<(CivqkS8bm_=+{!SpbZ>|1hRxZ(&};yFu3E zh+z}-AkSO7p@gnaBab-~g3qRxm1bWWe5?FtqzNSJ?$4G5$n$gqsoj(bs< z+lQ!y;I$HT-b~xuf$0)sj%~Pgwrd?8lC18k-3}?>p{sQj&ssrRhH%*iO(qZ@8>6*V z8J}*P-8(A(b@J|JuSHbIoML#ot9rQ*D-dvgNAB{-JQNK52xRyR>N*8Kf2o|IJpt#;_x#@Rac<*7u{5LtFYN#?a~@HY zl9}x%6w}Zq@>tJWM$utjK{B~*uAUD<$v5^@oQ;#A++h_n8J^lGkIm|6ddh8^W0WR}Bs24cY&H zDH_JMo7xf7f}t~zr>lht>NA2v0y`PBC^C064dg!Et*)ylpTP!COq1YPDY%$!ga zCiV2K#9cyGM?r2f)nTcFv@dwUMeia})oazJN5ZJr(3ln&C|kUuFpwBUE9*NnK*<2R zD(?}c1Nq|&*!1`lCh~-y2Gx*qH&_D$hc!2gaG&5(JgyA5XbPWC9V5 z3(kkhe14e%S+RT%nbSKtiC@Xx+nT)x@ zwTQgkFY2fymNVK?-W9!vJxD6Yqz&cDeXyz(RPXuZXE)3cx9Sg7JF&bhvk0^&d(ZQ7 z>_@nR2KL}f!Fyi!(pxHoR7(eHHy*Qqq^G~P#O|EEX__9GgTqgSGVC5Dvr2l!)DzPZ z?y0Md%=eW;7Ca4UNbfv<3+qysp)3kolY5+yP?xR>tuAkJOqv#p2GXZd{)cT zC+rapvMM_EkY?VDlmWL*dORvASZ`-8#k}s0`U?!DN6gNLh`wTe6Y_q3rCcMq= z^Uk8L(&+(IUk*QA#$5Vdf_1e2yFZ%$W% zLF&eFj+}Z`6kRxE@}SR` zkL}i+m43+k@ghn#J{~Xso8_kMt=M0w7Z?;_8oC@$qt9>u_ddUg3xc@x<;&){9nhC| z`bn)`15ZlB1Nn|^)GH{(M^@LsftnX`zJ=krHJqiZ1_jZ-w0Q58&+zA^6+~8g8HJcv z9i{Xl1r?iagZ;xv%`xly!|W8{3R?w~cwl?&GOij$9x}_Z&A0ALHvQ+`s_O++A7GbJ z3D+}Qjz^%U?5Dcw$EZXd`4?7WVwy%fGRg?o+eR?AyYc64r|gH%!@nCBBT8FJar9AK z1hVUai)mP|FZ5TvDb}u#K?4dhiQ4Hq5se(D3-WrfGFc1c6j7oPSw#8`^9fcM5_ht# z_3wnVdjR}bxsFJL%JhNK5+VTqU{JD060hw5ATc^zj^~88-t=_$y0VMF4hn8ckFPMA3$)w3t5kXvE_V5eX^wSGKnXgQ$)1 zrLLF|7);q(BVwT+AwqDN7^pNSZe+jqFmxW?G|91yV6pU>ei>Q)=&UOt-sobK84D0XB ze3fuS?-d$-ed7zVizP|4Ox;aGHDK0}y#V9hvb^>huW|j!3$$)BX!*k=U@)pCNHCpv z&z`m=f@FWeJ4r#{sJ*EEtiKY7;v=*JvZRF`ut2~zGg@9tsS7FxbspYIRP5$KxF=N_@%ooo4OL500O zoCIM>^o_KfoRE;porC3O;+aHTkbn$vX~W>{tfVeT2#JflSy0T(#GG*;i4h(h9xFt; zBz`i|Q+rXw!51PBM2e$nXzQHoPP;G~fueL&?zJ94sC6qFB6tH!hY-E-{!yeM6J#m& z06B^czoGnjwB#sH<1u=bZ6-^QE8+|YrpZ+!ASRvlE3tZqQ%lM;ScNG}GlKMGKsXB} zRF_bs%NR}v(vj3P)0505lLLdum}^bJo)pNO>P!Jmn2!xyrRw}cyPFR6Wh0;U>b4FM!`&ja3OCb1a(`u+g`3{Ae`yo!414v6P zgKg;^H2j><-<+NuI7NS2IJ4O#U8d^l+qM5 zr%QS>Ee3K|Slo{Hhz1ERNpAI@3)dim24RRz;k=?|uuLxrG0?yx^|O8gq&@G>BCPc# z4*w7K-ZD0lrp*>KGcz+Yx0#ul*==TKyA5q-W@ct)W@ct)X0PAb`Ef_{X*7FvwbE** z6v~Jw)l-=zWkgh-IOjRV%a#TwrO7-Hjup+Zu-J(;>d{H7gkaZ!7L->{Tr!x|Tg$iV z!D{j^Fe!Ud3<|nE>*MZ?E58r+55rQ%{FoO7@w_#u(X^14kNW2l8rNoRLdA~X9gU)i zQZ$?s!yP%c7w)Yz&my?hx->HtBr_E{e64jOfzoQSGNawEuQem3HEZEnq{y)THt0il z)&D`u7jiduCZ!!8UUaBrs!Qbhu|W?)(MXS$LS8m0cfe7?O=N@kOC8J1(QddP?*{1N zJy$h#QBj5J!>y$8Re3Ws5*xbkCZgrL3e0O&RPyodnzru`-_X z^|8OHQpvlh23Kx0zv)bBGUxhDq6@kc>2eO$P=@vC9GQ0t&lG8+)uiyS=y<*vmV+ecXoW5Az9L7VithMKo{>nVyqJ%WvogIA)S%>Ht zUi*2{(8;tZ>vY{+#j-kIDb4lki4F9*e(&+6MfP@zs;x~(r+Yqw?|BO?+xhdR>c+}w z-<`VisGV8qw6eJJ=T@3uT0A#ciCR!YzGO8xugsGB0zg)VR9gCbMuQ(jcfFT~C zvFIkK^Ii|)FqMZ?^%EP(s_;p6Y-k4WTnG+h#27>P;lJt-Sk@_8PvJR~@_2wYEu+FY zN+MjqMnp~_7-41*CHxW=?>XbaCLu_oI-?enY;veewl$_8i@|Ad5*AP52}LkOS`16v zGh_EjUb`?$67;NF)_(0#M;5GMUQ9_~UDb+BIbPI=7c9UbXVj<%r^dq_t1aaeZ;DZ;Ht2gUfn$-|?; z!-8#_E{pEL5XAyyiQo{lW_yPi+s)x{YbP#N$6tI%E34sVvC%@^M86ou*ZyQYJH-F; zn{Ai-{!FV@v8@uC&@0#U2zl2C<{_hLkBefuS}!}UBexoG-;y(ssE2po+~Qrj7Jl!% zQS#on_tbqJieC3F#YKE4Pcpys)^nYLkIt2F+bthKH|-Gt?6f2KcKN$*r^1_H)9zBV zQMJ-9@Y%cR(l^pp@fC`O?xo#Lyv6B@jIQ2hOJ#GIV5?%u=?l?5DR425joVQB!F>9u+Nk^~T3$8btv=aOn6w#j?rc47?i&~jJb1tH z5wE>ngK34QVrM7oQyCGH71N0z4@J zMGc=z)jHh__zD|kn2cY+H9Sg!aOeWN?)o_iEK{pEH#aj@DA8c_fvYS|(ApQr$8L0W zMw|33KE7|uryDdJL*w+a-cOqY9~fuKv>@Q{^yR#HSmR~>xw*Or!PSf+1Gn^)HnCbQniKjS79|A-u~+&eHK5dba45g*q3WBn_s-0 z%+6)-`tq}U)SuztYnz!ySg|Ov8^FEW-Qe|KydCts8^L_|_+Q@82NVPRA6xL>>|M9J zS6$wA&$;kHFDv??I7z&gK5eS^7yHPgquk?4ce`}&cGttcy}|F#(4qa7)+?Jg3 z{_ZQm?<;uV4x)V5?-y4N?<}Zl6<O8a74vD#FG*Sit_cc7~4|ft1Z$nYSx#5diJ z`j}0E0Z_w*M4&SFgDT^a!W zPf$v$g8tcI#(O1Al6~2jf7+iiPfQTAWRPK>-XeTSK zhe(3^^W_}n{T2M63@PI66~1Vyu(ycj<$!0}P|+l8-d;&izZHo}Fv>-eQliX!lL9xN zGX^%*Rw2mJT9|9$kwN)99W;A{8^$~BMeV4j2cQ_r+WZ(f6eqk@%9txux>k*@>WsbH zPH`e1n$yL_kR>!*_2BFCk7uO&?WxIB02y40wh~+$)1$sLZk& zc3)a-Fy6Onjpfx$-f=|eq`5!Hbl38Dr&9{954(`l^8#uu-`1D&`_&PF7^k}0qaC2- zMXe7yTTW1F>>BDrb&fCSC-sS*z&F&J+RQgD*k|{q=x=&%*X4Ro>eVx*KyVZ#UkdA< zh)TM9wu!#p_;FtA4F`UvexQcP>6sx~Z|y${c@Up%QR7zhrFv+uER9leWoeuC69A!^PR1Fp8HAmji-sLj#f?qtav39ays#6Y1kJ>nYicau8dx59gjY z`;ZDp>1IQ|LZXYdJw6t;Rln)B_uWD#Bo`9SzFaik+izwdG=}7+J#@Y<42d5$ zek*_9ydTi!`;h-aZx3G|v8~h`9+@t?MGbfk2mCmMA%2Ov810E%+0k3$=ga5oUG;y% z{EQ?Z7AI$VgVy~G{5U*TY#CkP|3;kOjUl`w?|TQ=Q9YXXHEfBudP53L_zYZZH3MU=)HyEdh(Y*^@^8;=nyVhM2tdUg8k$chQJ_0*KPD zf(&)nSeQK7RuK~kFt8_CYp%V4yNEgDNAd2O55e2vVeFk0i{LM>QASdF!W?oiY{qhf z^qK+ywnu=6!9g4;<#^DC#n%BsugWq=M{!~)L{I>KQ;MUTQ$U%al$k3Y0+1mDqx<$$76ZwUwXC$7g}OVLvuVc=S;BJZ97v@cDnVJ$ zv=~5phE@OqlAx&}u{1k5@H7U1NUp)_G&ebjGCEb3iJtdNQWl8s{>=))Jzrzka66Z-}K<>@)Odd=5cbYQh&MW>c|giU&yM zI1op)Ns`_S&A9QCc^L;hZ@4NFf$WqxvXTImIuLK5Y8rv;#W>OvVx6Df%TF&DaunH# zJ(gPlJS&m>1cB7uAI>fi4L&e=6Y9fw2!BMk%?{i!#5Z$DO zq5m%?-GrS%5Hz!P%5HQJrfz;;il_DSqEtld`ZopRn=ZVcMtOU^bDFX=E9pwxj4r>Y z?&$0U$-b$jxK`{*)p8R6K3z`dHNKoECayo<{a|o+oDGDR1~$DtBc8-y)FA>nuh`7&+P_o9IayPfIq)eIw{q zY3EpHe zBSyODOoX2b8JV2N$vin`(V6{?5dw@we`o7J>8BvBlB;PA)vZa=U|Sn4{u$$a0;{)B zuB~9rQ<0*6uURvwe;rgDj~Ky|n}A5lOhsG`*ylJo!WlP&DT*AfV`e4t6y*uS?DbC> zae~(fqLpCw9@5mIO~Ozpr^d6|uUiTZL2S$lMWn$V2zfdt5p5`s#F+hEgvb@dLc9Lz zFu#F2&myzag|$hmJHF&?tPpd>7mlWquUV?q*l;{lvh=*czeu8{Rk?OLPocc-ofc&= zLrtty`C%SacE~rW8Vj7@M~~L~03yPcf|qXwIo62cYrvVi$02QsD-H2Ezw-i<6OkakcC$5LHvOt{^U|}rca3I_a;P&Tm&~ZY}j~|)RUOTrYjtLn&?+f+OS54u25h9lR zRnH$G75M9DQIa{HT$y_N=?o>1+4v;_}GVr34&0Gd%S@6)8spCkg!&1e%9CwbSj@%+HS6+NN-#lBmVI4LzV+ z96Fb~5y1k#T#h=>hOI+u2-+fjuz+Lmfa5SCTlv_Gl&gNQz%g?%Tyu2lOhYE5xJ?TR zx{P;4II>KSZMN{Nf)c09!w$K&Om|bbsjR%1q2}ycrlI035Lu->Dz9(5{E>oPhn0dn zL#SxD=0&5|{3Du7>etImiFqOYVtP~iMV$G}xJ#PJ*P8qM3pz0)3SceSB$>L4 zX$ZJsUQixElhp~#_yz2v0QW!)$v`4ZuAzJ8u5O60Y)}w;Et0a#$%%PP7dJ8|*j?Rq zHpb+Xa}P&*8Q^;b7@1(h8kYXtnRAY8Jt%Va+9sC#($#rS#}XJBd(#t>T|;9=(35?BC^M-grO$g)dodLMBI1X`?-LSw3NVZAH1b)sZOs zE9r!O960euXabL3syhIji8_CL3w2n_^y@=`X-Brot0AF{_S`_%z&-BtBTYmzKjqIC z=^G41QGLAV^VsP18rUK;bb$La7j(ebt6C}3?CH>ykm7nRP|rZo@GiX^1@ujEI@L$8;hPvH^8OP5;{pZN`;@Ls zv+5fkW_-L|Fy^I@M`%z}@$y@%-~gY%pvH;ZfJKAc;DPUN;A}MwWd6@KhbxRZ*1-K? zQ6hJdx#pA+M-c}Py3N{(kVw%wZPIL29!hO$ff3VZcjx5kJlFoHnGrz+@?c8tRhBZCF4roec*D z$mu{Y!3Y<4fQTs^7~mxijK9O4e$B;1FF^@89N73;Si%~l_xoJ*p?;0iu|7iIDSD~8 z%aJ}pUH}R#c!2Rwpz%*2>oo%o4BAh0QYHsR;O#)K{_0nNG7YxgrsCAd+$VTxnw0~? zi-iNj+uuX|k;}K07=uT^dGZ=ZhBsweaG|6E_+O1L?hvx1rTKN|a}Eq`ORjK38~Dzm z)85L(t!uaLXL956wFa6oVMLotE^tE)lBmf=k7W==7uthur-;-fvfTWsQ1+=zJnjsM|zCkVXxi!Dc=?yQg^rLyE<|3-R|}?69<%o0#cbB z?acJsUC*6rz}CAK?|rY;%G4~-K@VvK(wGmaAOo)}8RPrg0$VB7T;X=>-_u^E8`6Gq z8R!!@Mm{Z5Y)5wk$=6HI1Ifo9H)uA0XRIv_D>F|m5#)y>fVxJ|IJ$VGt0tl+KW?uN z`KH8hg*Ls-zNw480e^51&42YQ{XY`g|Bc;nr^5ewH~i`Uk-gvlF$wMeySw25Ui#w3 z(~3axZ5u_RhV924>PUm@tADUnSo)sy3sSKm49ZSg|G(+)hdZ6B|34Di|DzIGw*RJt zmW6@gKT2r1$D?ptE8p)?8{rt3@QFwP1E5>hH|u2$307U1m|M(_4avUYK^DqMGI`~i zk#~l4TcXwDUW$a1l%v=WeX*@-K6iqO+*WkEaD2FGgyKHDz8~)ncY2s@;1c>w>{h=X z=3QWZJni~}v)$egv%#^0Q4F9#)~|i}KD=J`cbj1z0csE>z`hUR*ZH;v-h}1|p7Tt^ zJtDqrfD{QzJGLs zv+VkQtv}@p+8{49d5u}ySYMAjT1_)HuiLq&1;4Y%MIUkutsM=6dV62VMJ%uJWt@E9 zwl=gj;X`rBWy8azx;w`DhmQNCKScfM{#G0$!yfuIfJPDy%Qxjln&g5Uj#f*!$aean zjhFm%&y;oSQew@{m@T=UH3qUJqg4$*~RNfU<-LkZEZhr>qfgfhou)M!LY&3cAm z2GP~pP(_WTp$^4a)v#A%v_62K6KPEoY=KuW7`q%${|?BVnN^)n&~Z zk#UKlGgxEch}<=*IiWBe?Euw^kId{ufJH|A;gS5inxvEuEu2%@M<9ZoiQ^9O_q=3^ zBuTr5QxMP%QVU@C3>0fZF+W)dAemczvo~i?v4A!Q`AMOskLU(%BvB!QClXMB!tm$+lf7xIOCZdlW`47mf`{OKp1Caoe zqZB7YqTiUJx%CGzA-muLLkJac00{<2Sl|gopdp0L113(K16D&|-~k0i^w~tupIi*9 zWp1Q8p-`2&L2)MeKyfgwv7VGYD`)W&Tz3Op7#85aLKgh>2QV-Kz;dF|fqMYu`enYq z3CL#I*%iTHRX3`U(} zw-7G{Sa)GglHEW1M zeI*%*-?G8V0ZYgN`2@qubv4?ct<)UmSSH(OXIrJ49$`{+$hZJ=zGVlceZNlov9MI* zq$QA52@kz}^K96-mSd#GgH5b#oaX+-Vc%mT!%=Ud9vI&8eSCMhe;Pdatly+gGTlhB zE5SxhpUx{@^YH!sY3Dze@5iT|Y4Yt7+iy2)arv!EBYB59?^VE^#X)^EC4OEJ;3KyI zb7uVmGXVg0j@X2!&RpWm1 zJ5z!&N~9zgC!k{xT&rJ1@)+3d$m~D}M==sv3-5Rh$?X{Wn@JKFCa?5C0FfOhMyf)| zLae;yl{yoPCUekFCIf>{c4Hkp_7KM06DkDTL!9xmMmjn|j7lIH6%rr3619@plcWUD zW>SuhUIFlYFKB=b?T}xp?&yO# zI|ZR?x%0pX1(XqMIf3B_#D`;uS_tZkx$u(6Ekpc51gimPaWq4k*t3pfShb&^;~1In z0eq#YqgvNr2dgz}vFtUuja9PVPUl?)l@-f9V8+NPW4Y}JTM;tftAy~0Gjz_;%k3z(pK$}DjfkfzC`9Y6UW=7c%9hLUh5N=r{m+^#pLZ~poKF=Ms0dCS~QP!)8NI~-b0bJ ztAYkT5J2C!gX}4GYU#Dfnt~TK^QF{F)R~VZN1AR=WxeU4d?Y5|pFV`0&-coC1YGhN zi4YSCJtLAEw^<4ZA)zPss$@O;v<~H|@DA2-gCH1e`AX6TjLHmMY{9}Ytl}VKBq&tn zFutyYIgt@ReZVkHl^g);W=(1t1d^sMWl5DC5{iZ{yoQ7_{#YuLVg$`zwiM+^YngP^> zoc6u-c7F?@!nX=cYEq~zoSp8Hh){p5Z7zQd$0kxU=m&?S^8_)Iun{#I8(pLImue=F z#TvMfp%D>jnQeugJcwHr88%nL4oGN#LW-7n+n~o~uV2di>6T7#0cfd0c+mmMq1xK= z=v%)_mML00c+>xMvLaZ3uG`Ql;L2A{vbBdb{dpe*$>)6R)LoxsO*7nQ!*+pz%h$^w z02{7dwruYo*eO_<+0kTd*+Hjo_yxHbBo-anOG>|f@k3f~1;MtIcEbc7u=Fu@^^}=H z>(Y&`-wfiXSaVsii=z%VGxR6OlwgMtHTr~9Zqw2q~H|Cf-#}T(Cj7WPz~o$ z$iJ6x$fYvIUu6JWe|o90pP)%jQ~JteZ}3n$&*W|iQ4QHLmD##jjXsHoFI<`*Q%jv8 z*@;m!sb@@}5l@2wTZ$hnnF-TV5tgVpF!Je=V$v|~udqdTSJX;wO!`c7h|3G75;a=R zHeV~IX^Ln-(*mP*vra@W0Yy=I{f(t`ymbj7&-u-%K9~GWC&lSfphu4Vez$FGl=!GR zm6>t5{JhR?&k-d5OR%HX=kc-o{PxJYU?`uP9Q@HE0Cr4b_F$k&_vxMg<5Y&>HhsrK z`^79yQ34YB1!OGuipU+lD#OgNH=?(N8>s2hT@$_}uVxfv{C#fh#9@k4m$^jGC+3%& z&$DCsee0G-S9fM{Epp>ZJV|z2_Ac{LryZ_?#TneRl(*e^1Eys@(kHc?$$6nqO?VO z>?@x~SI(=cefwt@%bfPnbkhabz|XjqVy>21pV1yUbu@g9g&L2UyhM*_!moDe*iVP) zqk+npa^XJSPTIJ?SDp*gy91M1=M>NeL*7JPI*P+IH}`UC(yk1bpUWUn+toL;w{$ZO zt7KWM<}o)5_|W8;T?|$i}XF(Hu^dw zeW3J^T^sdoN?mE>2J`B%16=Uy^{_gK*Girii<7agM`s`nPcS(F57gGG!D&u~!oY}= zSJuZL`B#to; zoeV_DcOG!dvBEdyC!_qL&b0&Js!FY>G2$9>IEt=7i_6Q*8W&g0M$c~+f+mfI z0yVL{aV%~A@F_J{ww5Igg~E=HV>?aha=I`|n;*fc%N?6YVZD@&epNx9P6=jZjKW-} zyJ2j!EL&CT(fP~q%R;j%RH^Y#EuBD&!<4wtl=wdtFeJ!nWI-%~!(55boH&G-1Ti5F zd1PQryeMXzsNndA^_k8^;EU*zcnF7O0-+_zKnCkj9P5!um9)I=3S^22iRbf=e~-Cq zIX2|Vr6YNx*6q}+%@y%^yU~T<8m<}o(UnF1zxnsDaM~&z?3`bMOxUva?Wms7xr|&$ zMWN_RXuj5(=HP!>Jb1lzSC6`0bG8`n3PjiI7COKYUeM>-c%mLGkLQN$cU;@=*3(XH zfAk&Cz4q5DAITp4@knyL*p?{i(_zj&w7IPt=B*Xb=6xYJmOy9=chKN9tGCifqIr_k zB-#>@vg%vb2(zAFc}6n*6)E{EM$#*JCFIdMa}jnW&4|`@w7a+Hi#vVeS@u`$=y|gw zXW>@{ZZ(v|uNsx+igDgsNjg_x5B6jQUHvxS5rf&`F_x`rcsbWW%|m>gqKB2 z{5VxNEEio|$^+gUs`IAN3uN~c>>!Lh3=Tc!Iy;%8dM4fMRw}ZIEaDrev@+1T-q_#zsz1^h(Z#PXG3fsI7xF6uqLcqph=pk+CDe&qw7Q zY>kwRod~q(<%LBF=#`D#oCxS8tPMMk`uAEw2Z~-)Fv&(-~$ z)xp5V(aylZ*v7~mie7@i$-&w9pKlR0w{kLeAfOku`Z=Yrv61a>V<>uQV;fT^GXi#2 z_WzY_l&H#4^}hivGAN+;pF8&3S@Qof?V)3Od8hus`grwzzb{Ae`nH7zMl}XDL1*yG z{h`Htlp}>r3-GqNf3HQXf%3xHHRkyKWTz*J+PiV*Wdwb*5<)w_0xB9)c@5cL4ihog#|Scn37juKp~dO?2I?nh7DRBuz;NiN}Q;? zS;JA`S_e)6Znb;@L$b63bj)*4!~j8ajA39v529x6x0HghpwI4%G%nqeKfzf$?Gap| zlZ1_|64ZpGiNIaWx>-w^p(QT&6RDBvJl?^e%VlauEgv2E13GTVh9#PqBnK$ObR-Un zCRRSfqAx~Dmq&>(BCr95gQ2)upU_i4*IXLAa>YTPBz*gnE0G^2x`G$M;s{JAjmqQN zq;-ITAi#!qp#ddQxyFye!_xPhb5ygV+r{?ig~xZqIO9Swo#H{Z1kj11GA$Z<@C;mn zzFT9+Q{e#_ce>uVAf*t$*9m%NjFH*+B-M!nzSY=xmN-Ip8`Y11x){_1Z+Nz7##`au zqhc!Cbi zNyorPwy%GpDl^rTRd%1SwpbK`rkNV$&Z--GH$P%*tcv*kEH$6YRIPVTN9a_@4jL(J zVOH21rA48i3~~`S6k4zEBI3fQWG2PArGKg*p5-rQa4h!)mIMsxBblK9(V#qA)J1%~ zA5wcH&xXsx*~N|)7&0+ehP@mws*#yY5?f?@fw4G;O?orbaAo~)O7w+PP1w}_Zo96W z#yP14Uvjlf)#30{${?aU&S4p8_^Y<9JRIF3+?2gl*^DUV@w}no?)GTkG}O z#b7bMHky<#fY*iZUyoE2c*?5OJZkT$*Zy1CMpI>;3T>0MsqIgj@ei(2-qZ0CZV|@L zPSZ2uEYFXw(Tl8wXuRvtt`V14Ah(~y5I@rNZ{Vbhj`M#t)BH2e|9z(UuSO^{2lIa< z1Zqp!{%&^IdamB#{KN5h0L%as!GcvC4-<2dxH9zDiT>ilmw=)R&iyU-DrqQugONe? z{#FeW;07hmo|14(J)wZww@J@C& zF7IdGRr5EGI$r?@9a0P5_wmj7?lzn+iZVbCqPgGqz23&QoZ=^?spl2%Tm&I*{7+Us z9Er?n$bqly5(YaE8yIdcF0VJqAE`~V9=v*EBwdJ61l860`L3z^o7(fGEqH@%_h<7v z2fsP;!;{cwmX;RZvWtziSH-1UQMaM_^YEkj=iB|V^GopB=jnPcF*8>-MVi~wY5@<> z_eW)DDcn3HW4$UPHFgRoesuXtf{Vq>&(@I+T_l}O+i-E?vPhP)YUYDL2o<$ZfV;Jl zx`y#)?G{aeX%>7()8qMClvltB#tYsmV}aw`DE8bDb_;RKI8&g5=r7N!v~(w`4khc6 z=F%?EX$&8}tSut$Xbfw{isuu5O1vX=ht^gLB`^2F{||buvDleO1q+s0|uDv?n3cW&&>) z=;-HQ`5E3YmZOslJ3DAc^Wn+j>VZn3Z&72?mqMfqgS!@`B_XYgc56UX-z|&^-?>>#QO6vIA=eB$w zve~xlBTt$cp&96j7aeOLCZ3hVHP?+XICo{lFj0(*OOvX`l$B0Xto?H!+G%>rsn0Zr zUFqKNhttUvronYcV2>6BMpOmacCd}R1Q3;$t|8MkQ=}a;)<^ia1mn#eydCH3d(Kux z*;R_VU=&CVrH$}p=8H>ZSvSV!XU9ruY|B70qweBJ0`g{3c{encORv2MzrspaAAkQo(iFu)t8 z&Pet5-bmh37P2C!kZKKncLs>@n-Tj*r&PM$5GfdmLC$1J`~SU6@FsC0^pGTZEKT4k z6y$glufT#%^Fl(8Bi9$OjtRj+3ne%R5|CZu@I(qxIYIGOb|8E=3pEfCt`Fbg2oW4E zVZiM*1(YIzh2^IVAQyqz1{+=|2uxtjp$dSQhMs=Iw*o<%jwm^y z*}?5XLUby@emtCTVd&L5V+??W_>I2GoP}ks7pU;BAjP|mfee9bvQ9kQ%V;+9{m}m zH0<5OM z+@jbm%4zPA9OgYX0vxr*r9Nb(-tTvx`>VmD1@f46jE__67Us6_X#Pq=sg8csa=rZL z^4-Dp5?xO(zPT+I0P?6pImG{yf&;*cm(8}+dUW(~fLB!CA&68KP)Bx$Q9(S4p9fTC z_7KDCASSYKFEuq*JL-Zm-3>>&W2BGi-igJjRF@uYDRiKuN|)6uH9(YW|GuU)_3`*;YyJ0G74tdJ=$I;$VPSYb&$3cc-ANq z8B)hKL=lwl5hFItBttN~F~655HxcIf9Yg&(aM+qxIc=^Q5l?K`nd@55hwhGk)-El8 z3C#fnu5HflHRX|(fyZ!!LDrF zj+QryzG6LPTD{lMp4F`)n(0=&4~B`Pcb*^^@}3y16snVc)!^!4o`_&#JJ*-|i|V8} z`hfmg^14Mp6eoTHyepLQ_iVa=wwF4MZgXy$!r+G?$1&_LJ*Q~plmSUuZfIt?d z*p5+RIe>@4rtppzgFC`lIR_HGKk$k0gDx53p05p~5cuSB4c7CzI4>I^JOCk-Ov*6X zywbw!LZ6LA(E9Jjj%fmzcoVG2&!oejD};d>97ofoR3eH>KT9orIJ`D)+wqDFUKq61 z0xQsnkdpKZ!{EV=)PPMO0yQDA`d6(1J{cC2TUpVH+1PQ>RCIa-L(Zk4+Ums7VDe;t z!I%kD;}d25TKx?KfZp~K@@{8#Lr7w^_007tdBEHAQ@p?l{X@LKJ=goFNuQLDLtn+B z+}2ZUU?jf=GamZiPFF=zsbT3bfdO{r>ZGGdq&4n$_1dSdXW|C4K}zjXbX?wt!*6LX zZytOqBXjSHY)Alz?HNY)zJ`HaaL$6{Hac69E~Of4?9#}E&nyR)4*%_F-Q@MB=Y9Y2 zyNp#Lc-NL*Ed$Ufw~6cMd)`A_@al7^(6UMS0^L~iV|)weIKtKRFx9dMW#|=ib2rjL zbwc@_zH0GAU46YO}xGAxVX5DHgP-9YX-08h-NBeh4vG&iDjR4h@nJ z8#^GaNw|Q9v^pYJgYtJoeRKRtGnTQGglr83-AR~=bE4tiaIO9VLbSUgw=@gkrTmR4 zXoF${no`D-mkN&|l^ECyaAC^w&L~Fpc9rd-j~tB_Ohp@_w4`;aa8n44eyPUFNzAIc z`RG=M7Zep6JsZ6wMZbXK(eV;bX_9hO*)6HXv~0A+CUq?&+8I)FT%ZSqa+2%c_hEJ# zlN;W9V9b(XRLNi($_$M1m?!x0(mG@q0-TD0z?d&iHW!U+R3+05F$aK0EI@!of)Lw! zVPtDn2GWgJ72gBPkufklBzzn(f_D5gZ`<9I3@Yk4bNvKF1vTRWCg``Z7s!o;jC+;C4L(;pU|TpG*S zrHG9ptoMvp*2ZN9RFqtjkUetjSpoHVjhq&o@){@01%;Z5?~Epb_rBK$Wd-HlFS+ z%0!7vt|&B1k&0oLM)Vd(!Yw9ppmk50PBo%`ek`v4BWG6lWxYVNm`i@QTDDf?uggOd zVFDVR5T2rwQ*jV~s*l7|?h#S>w5F1S%R4UcKq=tq`op+=E9pHx|8c1ug-iazKu=s zb}-sf|HWmBUANv$RTV5LcLh8jEqwDhqCKuVXZ9ysJm6CQ>Mse5wvfxO$(GxaKi-KI$~UPq#5&KZYxnx>w^EhlVTrB|VvSDosuB8BE3G zkwBZkIS8sx6x*i6+b$DJ|$)YL<4a!rwK5Kh7v)FGC`8{BpWPP zE>%TbqfakK((5(p%abrxU#+!232@@g9G^8FXc^c@tpOV-9ibaFF16%sz|sPmu^qx5 zeX5S4+4^(J4?(!do-|FMYButHR*=f&zKz8+x<2-K%r|tz^sGD}hDULvyoph-d1MIQ z!*fFJTed$POt(#W9yZI^g62*^sk9H&Ts_q{bkgzoj$>qLmG@aEM6g~@rW!76229#W z+`1EaRd=ePE#b>`@6v?4N5hAPoljiNVa4c5&NDUE3MJZc&AS9FQ>HKe($$*?xHC0x z)GpDunOHWrLw$%YK_z#n+ajh7eYIc8P5nl-J<j#Ym#6PD81ztoL?W4Qwk%D~BOCODUKnTK zw7g9A;P^?zY`I7stFwn2Oh{D*YmGm!P(JIWe*dR@D-i8b7Ua>SVNP8lf6IR@;8TP? zD~CvJRA!LVW+qIh_m{Q1Z?b{g^O)_U3(A^%lbHd0adTCh!Zp9Fr_u@@%XUC8RyB}c zDO$6`up^ne`85`we=>4LX=1X1mzCU_Q@kq{&!cf$-$zDZaHmGA<5luThu5m(`ZKg)nt9t%;A35&aAp6sRbW8y>#vI=u5_M;yd;+6)Ciz zZMrtDlS`%PS3DultJ;)pkHbOA>?@ig57%3V?Z(w`IldN}q%VM%m2ap=CQ3X-ZDtX* zx1Yon`XCYB{zo-j=(F zE%4&wsjWF}J5tL5Z!|}CFIU~H+VFK~wTO`OjW-dV_*B+m&eB znkcJ2HI`hg6yvDxFZc7Ex~Lj=Ni7=3zi#h2&qVML+YpRaLXN`+P8zFsaU1fS5C_UM zT0@^GsPBYgxa=pn+XD}7^K`dGxprj+<_yk1YLGn1+}yJlMYP|^b-U#nG0idkSfgIyQ1VOUpcBae|+4$-+~)b)YH99U~Co4 z*sWerzo#J#0uM$CxuYJ)P?zu{)9pY^qJA%BI2U7{J zHf&^lHCU?^P-}{`szYq_dY-#=yRa){|pInPUZeuKb0R_s)s6!%_Rg2*i;dhg=|s1PgCH>F8sq z@oe(L1hNM-p|@(l-hzVasw&ORiL5S-` zLKL>HVN&G*6^}G6>r=?KLRTRq%#+&T0P}+*X0j)}!Rm3*0TV$^kUIG*gl1I(vxnpk z!w6QV9y) zB@j)w(ewnCYFMgqA=QbE%2X{1LjAD+$b_hRD%@E)NMN%3?J_Fr0sh9j1 zqy4b|0Nb_898n0$2Dsf70GW!G=09ZKK>Sc2>?YOUr@puV;VL%oyXj=`OLx!W%U&&t z%aHYZXcmso2FhObQJQNC8Ql?dMD%+`HjGyW3kOf*v_LF-On`&o7CPwcmkrdC{o?Di zP|6`Cw+A6$Qffl&Fe1nv)J52($NwnGSYqS?)=M_;+0>+sC^fbitbw5cj`+|(q6>}80_)X=yj`+aM>Bu-TT)$=Xf60HU$O?*Jx=L(EAuR6J}oc5sG*gCp_;Q6aL#Fmp^? zmh=@PAC?U_eZCw6n^44*Za7vrGpv$SLfZalt1NBQTz=Ycj8GcSA5v53E~3c>$qzn= zJ!BfHG=lWWB6r3df>$`{BqR9mPBVH2%iX}88zRonnKs+uUEPI87 zBXq;RLX27t_7Fu~)MXdvqXq(gdH zTohRgDBJfwCkrdh;+-&|N5|bt7Mq(gkxtg$x zP<#rCbkSK`8+Jj8Ok)V}-6Knc2@K8Lh_5#h|0 zYh8$s+evQz?ubxg`nMJWrGdagy@n{=+>ZP=)!|$_X!Jca)H-{6;muLN8$4h5ipwE6 zkf|k?WT|YjB@&oW5OhxpmOS;$utHGPG6Bpsrd>O#f}&qx8+4RqC>{Yf5Ci}OFa%%- zfH-J7= za`s7fc6RQ|eK_Z#lFFDPl}c*Ps?`6F`3;Pc+2@y$54Z#uY6b3~G&5=(Kw@AJK!{v` z0Ph&rBUpt9bl91k>j_jwH*rielmq}l0Ek>FsVqPc>`z1j?yXoJ)L8xT&w>sJSCa&K z&6o@_YJp75432@V*L(tAf09gSzT0{O&$5s|^#ix;{+^wyI?kg8+p~~1 z41l_6uUtbZ`)HM?w`aBygitNb(cBcGl^jU~j$*t)T}a2=^oT%xzyRE|vd^+2*#?H8 z2xe3t5Piygi$;Mw+bR->lBW$g7yMfsm6iV-Cp_Yh`<$pd3U5g8i_)(66@aFNkcGN- zu<$>y_~Z#&)<#fq_qR~8$3t;c|CU@LsUiUsQ&fd~1Y??ZesCJ`RK1!W&kRO`^xCh0 zs()|W#rI9|PRz_)9A_9XtTHuz>3(B&t5V>neaBG5it1gt)xFvC#Rly%7|5DUZS9am z)~`Gn?Nai-X`c^@(&-}n;!f=PT~b-c4(kqojvz@SYx0ycODq?a)4E(B7!ea z8LwK5IFR)#g}tp{6^lL0lTt&_ktAW2BiHlsU@8*8`=OE`7ECEv)>Sz|iQ8X_HIG}V zxdm^q^Og??|FBGL_t=v0BN-lowHRtroB|hVQmWdb5WFD(g@PR-c---s4S~@tlTr=I zr-Vdyi&poM*RM>mxWRqh0+pfFR?h{i&(f+lJ)zjKhHO%ErCq(8z}ezg8hUxK($db2vx!mAJy5f_yUgjd^)c|0gJ#d!DUn^ zpkhGNJgfOJ;DpLet3tQo0^q4m^N$)IX9}MBFKC9czNXr4X!#q?S6$q@5;vpg4(BnS}N$2%&s?{RRXY^JR0^-WbiuH zP1v*~#;NP4e4?DMK~=;vVGuNuR4FjoE7CTjj zC^1sUbBi^<*O|gwvW!@V^8TybIOm9nj#&p!R?J%6$7wNNYj+o)X`m0SuG8hED%DlK z>1OepH5aoqQsvSBfMD|A5+Vn^(k-M5s_+wA7%(*x5B6fkl&-1_8(pIMlo57`AQ<4bdc}rPPx)I`jI= z1-vxVE0gkgg+G}vgL~FGJo1acURO8j&efoqdEUfzBCUBT*Mu92Ie6ha@Z#D};2ZI3 z*`y=v<}nF+XBO#RBhox|op@Ump}!Nc_f)lKm8ga;hV=qHQWi-_un|*rba^RpbO*Z( zZ@Xr@QfNcR059Bpi2Y0v_%hJ++;QsK>pR-Qte&0Q$c&(xCapNQ?xB^@qU&}s z5!24dT^Yr=TG#hINl~-i%p4N9xa(-xhp1h6mPn1+{DiNRXcCLeB*MFKXB}xN=c~!$ zE{cBq7KzJVIha1IsEN*a_F>W)*(P>YC!jORRn_u+Z<=@E?*3?+X^`YND>%6j^j!x6 z>Lyp!&UM?;g9^NAa=h;`9~q_kxN@Jznq7dEMJM)xHyM?hcy76o!bbAIktq(rApkyx-9`c@YX)Ni@Pf`+HR;N8arECMO-Uhb6jjA z&9+?a_p9deg;05gr2POHUT`w2y{92)_)^9lZRdv?xzy% zyjMiJWi*=6MOwaKBmr#gU$1Fh(_y&J>Z_r$g5yn_Blo zKgc?P_n*ZMsL7~zz@VhYbY69oYRv?l>eK+D;eyR@!2;2A!D5c*&qHs)QYCMx7R_qG z3bJomCJ1_{1|v+W4w2S^72KrTSQ5Gnax@qai*F&9O`CJiE?q2!aQTN?W%}?6LOWY z$Za zdZ~^q^Fp%S9#0ZpZ|xngWN?jq$AsIYk#0VT&Um_BKFNWJrmpIbDOD%J8E%l4SC7B_ z@!$1|)+kq|sZ?mh%{7_}uTmoN*qO(%x_ z$2+dm(>Qxg->{?(+n-fWOZQr++A>gqHHlXEsyrW*Quo)dPheUo(Nq2l&y z$scf#>Vnb#N;_cwU)sU{RVn|+DrGzBf2&e1|NXxz<^NSF{|{9u530K!|Eo96e?l+( zcU6n5EDZm*CF_V_Rj1(9Td)cYUS&h;yJQ60whtBaRKJ=qxm$8Yb?r>Bo`b;ml) z3kGY!ldGMdrfg*2ueZm++<(sxKiP*IedeuxE+0?5a(vm}SC6UEBvw};W9gsxKMh~* zt*d-~&er%>n;d-)-}v|fP-B@A^9i56L)-yO`xyO`sf+Nrh-{&oskyT9hp?Gsm>LCF zlP`<-Ul+Z$dfz7?292AkKO5g;ta^pjt2N&_=gqzpt2Mex8NQ=(4^Qu%vBlozU&+r4 z3p!P+gj2D;uiUObiXk6oljD9)woHhDVM5<%XIY58U+odWY+)yc0;3w#hmw3YX@C>X z$dNztHSP6x?matqj$e#?u|D5hP6vfiF)^a(nSXWprsZ(&lm2n9Y`z0Y#r_3rp~^Cq zRhvf_u(ABC&ikR;Y&W#q; z{4~{Sv%8(jRdaYX&6L;P3!98F;YRug?y9U*Xl>-P-T?8)kQo!8_En&L%T1elpIFXl z+`zr3dk-jA?x&Zhwz_(zo(9CKdYiM!h{jnf1qq@q>RKtY*6_sMpSaXirkD*V)oubY zO*Adz;5aYHCbW%OzFcn1?JOtb)|)FJ?|(hfk^0)ZGPK>%N$wBZAf)+kVbbyz{B_>R z;DscA)5k&>#-b^H_vbM)j?W*j6L9t^TQo3w^SHAf5_UM2G7&cX!%QRRFV2t5d^GJ} zL7N8|lk*fpVP~c+B6bxGV6>(O+&T{I4^zGY3S@xi8jGDGRH_bddNZHn1gatagQm&f z#H*4aqktz1HXbs-OhyDGMJisV2Qg#-y}~YMjSc&d7RVA_#Sfe>nz)bFS64VDFEKxW zHV5D?r){Cz0c#E%j28$%GC<8^) zFqrp23Le6(RSPBo7kvam?}nJ*x-81Mc$g*Nx0~b^gvKs_#Yij$CKP6i)FLl*kCLo8 zR^Pvyy^s?J1Ok_Q^-`qZa438abfdL!NboYViBilOPj+%Z4P1vOBymvm@v`2RkJs1Lw5SV54R@fz-?T4Y?x1< zznQ@B&kEa=c??)mpOsfX@S66K{^5~fRXB%qhR~7gmf`UTv9(-sdXs-md&o36{l(75 z=?aCEpDmYQ7V9Qw+?_vJrM2sxWeAml*0;;(aAarVNY~a+qmBY)cdJyd>dEzH`EX+1 zqOc;WZbS_Vn-uGXbL<7_GRn@9{InnPrGB0y{Al0jN_{(x|7_8`@#VmrL=)d2*^&~V z*!zlVKc{)E`IT^sOfktzyEB1Gp63-qVjfFnIO1*NHwV)^Je)l&iEqVPq%!|#y6U}8 zTl8?qroP^ts@X@c~w?a3tYYqMH>_Smd?`_Yo| zB4ICFISTA_lA}qf4IkR>&#pJP%Z5VfYX9v?=ewz29?gugt-;3Ko2#o4FRMd9hqg0> zaL9i+NZ-(g$S5)1NQ^o$B+K0E(j*fSIX>4&#)8>A*ofW`u= zpY2DP_6zrh>*Ob-f7a7 z0IMdNrm-20E%%@#;Ljpa%y~(A^8 zNB@u}H>@f%LqPz(%q|n@N`*z7Xl0!Me)T0_e3J?@y-IayK{rrGM)vfrG`2CYS|&tTrMQgWm`lijRl8DxhU+mdq4J%Q!I4JL9k`{R_P zj;PyAe-h{@ixrKPjz(J7%y|;Y6f1=G1D{E~6BfoQOFd-;Y0~*Qhgr@!BiB*c2&2xu zy5+hLGxoRkd#==v)0r>r*KF}m`y*fK_s-SA&p~<3O>tBn!B@H?3%)Eb<}7b)N%3%Y zHY37G_)T`G=JWnb()acFzxE^g(osb@^sOH7`dsw|L#y$pwja%(VBrO9rA98`-9}ff zA3(=TE-yhkoQ@pJ9na4Ns#CV7E02Wt+Em+ZY_ZE5^&8Xdn|+EF6lyPZYBvdt2f|5u zy`Gs=rpe0ogD;PvW|Tv`ocT`Z49yV^CKa+=Xv{|u0>G0iW?z$1TP)Mb?^%u4y0O>6 z27{M3xJoV3JeAByoS0?TRcjS>sXfH2W$pH0Z?sej*Sq-&9^cGc6VAuQf8+-m(Y`acGd#Q~34)`Vm8u_5pA^rI5&!1*}f zDzB>q$ObW8%uBI{#G;YV5JY72+QYu6HSv=Q_~zY(ih;d%4bV%y~)l zh=hAEJS2HV@1*MfWk_x#5#Lw|#RLov-Wt_Lx==_wp23esG0_yv`q>OkAe)Eo9$zwH zR12}z=tX?ng^Bzab-neZ_WZPHQ09sCIEnbw zCK;|>^zaa>eu?msvgsJ?8c&Rb1b+JU0ExRy9K<&X3y1`}5${Ygx=|U;a1gTmM!y@V z3DU=+%4jH%jUt>pAQ8j~Djz1enc{WCqsd*e!hr&}jPL#WfYP#kn3$2V8*FWp!cXjm zO&HsiA7F+#m=wqWPzYN>MWOihOt~3YHuy)G{ru%h`dNvY>X!*-i39v&NF7)RSRh*n zX{!VMr%9bzFxV(s_PWO*z?icxi}T0E8?gRmRoN3Pj_YHGWlMMFZ;iup(&pfl5T1@V zV=d)$+2`Gl8)5t9a(5Dboqy4=(Cb=HTJW(rKPm@g7wEor*M9aNPOEAtfT|-nBV*R)r6?Hi~#%mySkBbIulYYKU4%2c;d0+y~E^1@_M}Z9{Hyu-8HPN!?wJPal%2^#+6ai328Oq%euSVUEAH|vkkc2LDcwQy_4L@ z$n@>vDGyH%^PF$d!qbJ5&vI^R`p{iDVm7~DKf28Vi@!vn9^=5o>d}f>{xvnKO55b1 z85_$i`7-{d&_QQXYjx&B>v_bUd<_j7cCz4IZa+<#|pr^Q|ejfW5(eva#(fBcPY*$P(ec+g1vTIqk+$w2U9hfYo$}yHC5tBX`mP zG2U5W2nRCcy+S)q9P2lXs3Q_gqM>Z*px8TZWWpg9? zWfE%l?K9|KctRF$=MWNytqUWEONAg^+_dz-JwFdoV1gV(q(4RzQPa?YBFB``nGJ z2(xZD!BX5-d@2pGvParg#$`L{XY8UVz5t4Mp#L-6sY9=3p@#|HQ z+vWz~*dzz+44q}AqQ@n|j|AeB{5%oERMse%KxH;0irC>uEwHqZ}8kf9qgGqPD6>xeTVB2qH66V#aVz*=;~je(>V za}3ccRRh{3D$17(^J~T@uQci4qX;&K+Lhj6fZV_qEP*~96TTWdR;%EHgJ5QQX_K(2 zfy4Z1(l;r&i1LS^fo{5o|3in~xC1NT|7qgHqLfG$bScGn<=h|GBsgFEX|IGBlqL-% z(dH~7DBdtgCRU;1tQH}jmmys0#Rc1l2@m&xh0Dye1dMsi8Nxl~Vb6-gKdIj)iM)JU zN;r4y&K>UaYQ8#ef0REl{9}SNz9`uIq&(fPFl7j-s4-%5&;Ii~{hs9ocoHL{WZF;d z%ikHU==b1%{D#ae2yCE*9Bn3Wxa)`@w|IK0A^S+kyVPvJlxU z984C$>RTxOP1Ut<^1gY|c?b1N!&V<2s%*WPpb8@y9HJ_&V4KhN=JP?yWU{>s-AEmK zHi~bY)8Fn{Yvjna0*fO}>8#m5j> zV()O>^6z{V3msHB6n$4^@2mOcLM6Q@Ia-Fx{@zE3A*pW)ahkR<(sw)d7#5RIp zR0WmaLh|4AACCNPY)=Rv9y5wa=0=*HT)o0B;gnRJ;;GaQJbe~?HIR&2Itq>NZdoL^ z3(7P0F>rXbgP98F8_PM_foCQ{Z5^26G`Wwbbl+YTAPgBwq+8#~v@y|x6^Bz$#T4V1 zWxRzn+J_~IjfzP(4T90OKkd`<-*qId=$A8LVtD&9x0l&iXmcO#Azm5gw;%1YFDfeo zW_pZXrh@1)$rE5dw&?&S zS+%lgVTeu&KZPV7$&AV`i@@S;0GDi-pHr-;IQ(^5v8;F3u0?805OKO}UM8Tw-D?Lt z`ZgNlb1zab6KBovAUQTPw~TDY+@AnyV)!-xNW7vK5LtGTFaRlA%1%qHKoPC>WJ&bc z7P>#@bIXk=Y+lu;F?|Wb$iIx>lzNb1OQe|;oZQ<06EX^U^2SeM3klM0M&8RyH>>PO zrl_YZ_9drn0Ib;uFfQps)c?a8tFIhd3XAWe@kof(f8@*+o);n^b2-wL*i2SU%x~CA z0uOKDPN5TZknhc|GO)I33V}S7TACy%I@Y(weg;Iw(uz#SG71VA{1c!JJ^upJ*(Uys zZbhPiPCZ`$P|)A2h!!87Z&_!-vg!~d@-sBT2Cdp6xUF8rJ4uM}W%6z>I#r{b!Bz-R7AJinOimH7{vI8Gi0Nqtd}Gvs*LFq>*L? zbFVT7ujlB6<$5Q&9=oUqnJ6A$vjMXI-0qDLx>(SjFu)+a?r_14OiVC@TuY31v5$Ct zaRSqsgG>etcO5gXn}H0|M&q5Z!CLIl28g-m89hp=#l_?h`@x?QC{;GiIbi7>FSt&CD_!7 ztbr`>OdwVnKBg|!@gbal3D6`H%{@1?0#Gt#YDCVEkv5x-T}8$LOtVCjPg*dPKQu3y z;I1S-Wf!LH60ANFC$gPH^dUGuDPSe!TVPSnxe?)`B-2kt^}2F@*K)YrI6=0UW_#V5 zjW{vgOD^^PJ!>Ly67x7|Y_#*!Ze7)|&H6@a_Hl%JK&qxISm_YAnMJ3?*6ZF^a(=U~ zvBD^KQBy)DSf$+)|+7Eu%JOi(vE_5A55!4dEOJy-pB~7zgqCs zf7%=o(H*KO0E(+BUB!Y3Dp{n#nhLdgjNG^KP@3YH^xH`Vtp-K!k|FIg`iayNKGrh% z;NWa!q4@}=srb|QS2T0@8s`e*$Mt4g?dKs*@Oj>HAlao%03V^b7-ydA-2(sX5_;mv zv!{1sJlO5u#@oL%JKZbNTjTq9bn{fywxtlN1r6bvdkxosai^2)e4!8;THF`=8rX&T z!JZgU`f{-Y7m4+i+_AY;vt0y>wYa>8p1gw9M|GmufxYCAzwOL22mVXQneMTVTjT_a zH8(olMXa8-yYNbMG!C~;>?$#Pz#hA2l@Gro(MwH$9P$y$H2TB=B6A1r>XifmJoHOQ z%DPkh7sU$xb`Pa4xk7w<|3@+A-YJp+3r=0va6+Mn8|SE)XdG(dZF5Dk4O@a0_^7xH z=U}oXuPX;E3qKfVKh%pTjr;>MjARHtnDkBh@cU&IYj1TDl142fCRMADv*Eh?0-_66 z3G_S}6L${2#QAh*sE|+)xeyFlXcx)0!WhNqR=Ho9k4k90Wg-T9~dBGUO4F7 z;Ur8(z1|p==d}39)nJ-vWH`^`clH##4|wddOzrJy z4pjAM6~L(r-^|@as5?j4g8b zb<8vzj}Gro1Au7gK;4ZG=A;6Ev=>&RXb)uiU!mm+ytYZSS;qDz)LxtA3+zAVd*%$a z0{?>HeQMb7@fsbcm^rMvR{;5)lR(Se2aWIf4Hs>ZvP(yU(rl9^sTZA#8Y6K(mb8SccKZm8`Ajpo zW;90}y^@v~`Lw6$V!TVZ|pdJS`+h0!Dw&+xl8e@Sna{^S_r>pyD=_IiJ< zo*kUkmg-TlxZSV`*BttOntaR-*M0-!An&}}6yVJC`f`Dj5dJoz!9U!=qyje^8t>m) zJli5VjJEfDcMH(jt{bjHM1|N~OkIr4xo#{Kd$;g>KN21%fl4|Yl>7PT^Z0nHj?c|~ zMJLqt%qR=@Fw=5LJABzaBW~QNrhfm3z{B(Ytatn9_5)>0Q2$_pcdT;BPujS?XjHaI z$U&6*k=+@pp6lqcK4E8n*>`a47seVYZ`j?H{QR^?0XB*a`sn_#fF5W5!Hs@O4%rz~ zI7_IE)ixwx&Oiii&J5ATGdXeztVrT9s?3&(17w;%ybl#DQv(25$Bg9=KYb|}B>h3x zD3yMc8ZIP0XD;p@Iqwg?vz?|L(81M#fK)0QtazBp!EeGPni|(a9ub)TMHxXlwoMG5 zu2kGGX^?2=4%HWp0t8J%_^ysMol2by%bBf_|hLSoY=pq?bM{+|B_M9CezWG4m zt`>kEi9{J*)B+MiVH_elnbR5sCm7|AO><1pIZrZ^4;h6cwt>VUiRdubf--`iD~IS% z#XC76QpD_w6ORL?|0S7kg0?)5A4?8yq=%A;xb9Ay7faM6-bFRb?lyFaAiP-;7L?LP zU@2hen5L*J95Y^wlo_^hr0|Kyk5xi|#Ds@)82llT(xYH^Ss zocBf(b8refb~{m=wr^*%kC31YiOoAHV!)vA@l0@vzS>7Q4#cJ3K}oW>IZlECTmI32 zj7F#7AK_3yw(34XBg4XTL8%W=@Jrjd5wPCa&`;%hu)CBHS#_Px~Mt@d+I`1Ip2gp&ISmHiDz_ zQ4z}Ani{Xy?|dvuK^RoUdSQyp2u>jymA_c$mHTOme^Kv3B&PbzKI_3^MBy6 z-+z28?|6*%r?1j`im6#Lg0PL1BFC2Xl9a8OU6~^w=x70#Uyfndy3q1E#*r>O_r7!& z{8VdpwO5O24s<&Kc2+Q^jlT6$V_leZyeFK~-|qt{rjshIQ)gyF!5c5$4Wv$YphA!f ztfH#rymd@H%TnuU2oJz|2%}=r2PYk|hgNg$2d&s?%sISYAbPG&6{*d)fBGlRu5DLw zEHA9>e!MFtziT?dADW0g>x_+a=BaO7^KXy3U%bvnA3oW(Al!S7z99$Lir;-!Yuz*| zUd(g0L7mz}R8qTBMZPN@&`Xn1wbeG|KLys zoTf`jp|Gn~F(AQ9P_SR68I$5M9j)ca`9&}D$i){E(GQeR zCzHM|Z}UK~0?u6ByRwuEn+jLUC8tTXj58?1prjQjE=U?n79)#fQYrLtVGe@>YT>P| ziIdc{OOYTI{ZhuSDcz@aDHYVPQ2gIZ(z{MgLr{f>9AI{C7NNQR0eA5$!lgS*!r(S;Rb18=E950+75=rp}Ong{mZ~SXdA%X{nrr zB@rEAMpUj4FGt40Bsx=MIj0CNkf~_P*UkiRIe5UQy7W(lUpZ)s}YjM5%2Js@eovh+UZ%GOetu-pSbM zSUc7&fcj|SH51>X#z0B(X_eJ;dqBAL=x~kd(1fpd9lNvnQD_x`+@EuBje5fGW-;x# z&Kj}ZYjm~dlYkzsSLR5|vRPcvnZ%MBVcY3H-=Jv>7~En zh5rc8kTJ&XbH)=EIsXwdKS9P6AE?C|LlE3G{zx8j1fS#wOMsY|GJ>G+tgBW;>Zd!v z5HzMW#VK5Pc8L0l^~N#MTX%@cHtp!WN-mN6*K30{5iPOkwmoaexpXjBlDaiyR+L&MRdYbjVR@n-($v%p@A=Vcns+9o-;DupqJUXC~Agj zt?6t(Kz-$5N-c3?0;oO>ljY;POg!RblYQEXOpiF%&}R9NL8CsOjj?D7lSxYE}0x~ zo}jDdP1P_+ycQrSH8j`%ZFgK*`;HdU;k}=nfrz)|D0 z(`FIlq@1@&g4FvvSPYE2m3HPQ-fBX=j0-*P3W#oVCz=A4d{)lMd!%DicM%c zMc9=Hn+&7PMZQzZ;MUUO^FSuvX3v|v`=*iIib3bybd>dpk9yYCJ=zAXJJ!AQg2ZtpA!3OOc@nJ%2Q++90259V~e|7slL{uG--Bvmv%*qa^)q z)^cjdXO$^Sn0d23fLmo9tefVtEyQw0zhA?OA=Y_w%kpkL%b*k57%6b`7z>#$y1b&XG>1HIX-)S*K-Q)6jkm5SIZ^XWIt_vy(c)AjRbN4f<32M4Bj(g6F zceY2R?C08j5SSLne$NjYT$_D&01zFn?bgf>+K$cm^_iv5Te@Nu;7d^<9NwkI;;nMc z>g=@h+#@70jE>rUU8h^VN%lnN$f;bmW-)Gc(rXfC|4;2_fkTIG-NEWKag0qb3#~=) zZFIxVa;Mg|^bWZm)^}00!(e?}2Nbn$w>J+7ZLmdULGAm;&yLD)&-*bmjOw>s<`3{t zK}YI;^=I-wB;heLar|diWwG+4G^4GIpART; zVSd+3n$tQjIw;kCc+h_Tv>9j&2-5kBU3ZSPe2s0~QLM_{x3YJQD^e(Z%;UfUW@;cL zFb031DKh8D1Kg=uNf3l%KKl!ufiwnKM5j~+ISM(!fjtT-hbtPb9tFNo-FdV{+cn_ub&(k+>SE0pYK2yG`ns6*`nkI8vSbRSzMEaYx>*np{mzSRKj+f~~4isl1YtwNB|z*gsI zY)rOn#I28sz~5@%tEuOBm5f&qT5r``tUGo!m+YhXH(U@=dPM)l<7fXr4za-YpQrKv zSLABse~(yrGW|cbc=`Wtcn4cQvOx8inla=oVX4~@Z@{Y#V^#?VYGmN}rcz*LOcJgy#axVU6E zCi+0CDtK^vtyxuC@d)3TJ+ex)daLI#br8lAYquOX8$N= z{E@AYduODSQ;@d1Nq-MJ!RxhS>?C_C9Q7=qYtZQd(A|u^+Qi@dNt*aCiL31YL&5?R zI~&7)UZGe2p@6YD{wiPvxxmyqYG{zuK<1(exs8Z%T~zha`c2TDKYR!%bkma@Oq^J- z&%=xavvnO3s@~29&hc6NS(CotIQE|;(lV&*yuR(9K6`#eM{lpcU6!N(47h=W8wSrj zKCey=GG0e(Q*(We4_1A3yYLkQ1|eejzF+PqkN9YN(JKJ@1d4(`^?qDFzmBVX1wedH zoShoqmp(pgPYAHj5FLT;e#j_sv=PC<;d5#Eyoou}V&r-M9?k^+-eV&wE_eTQFf zMoWJ>5%BH3-g6IX?}RK0xmRVMysd5A%C5e(t+-xDX=TQpn;sl+v-PvD21}**O?d_X zIGugEqCZFc-kppj5B*jgqg6ao)r^!4-topra%^Jth^bkmvv;<+H(upj*(`Ty+jH#3 zaMjeL)D%(C%2mDN+oIV1O1>OHknr~mC$<2Npo-WacEml4y*g~9{#y~M+`4? zNF_w+Azejuom5RMwqILIbT6R1Yw4ekb^GtaLn&OAAhJm!*O zekgAcd z>2yAz;Q-kYDPP%~!B|#oiGN7EeV)C+b%g*Cd6kVted4>MJj|dleh$%y{}**CNl)2r zguu`&OQP?~1gYB6-i1yh|Hs14Auniq^)tT$l`@!EOqw?!k2OKuB?D1lDmsLJn*$uF zj+B|RS8S@E+p`KK+zkUHreMxOIgJ%Uqpwk>G=Rt%1I$DsB07a1zR(Y;(7bS%cso-Y zbpaqSFCPA&4=r34Ys|pgO$`xgsPRoXgAi$y-I*T#-nnbY)Paf@tfZ7cy#q+40X&SvV{U4qWo z*=h~8Qx6$zmp;0l1MAsKW%UmnMszHuS@IU}nxd%2OY~lCC3x z(pVg#(o#g1BuigYgu=@(-CJ)MCCrB;ZJF{XoB$!yO8MObP}Qe(g$pb?RvO`Tjw8gF zuCi{fvRR$UCgBAUv{o#{3~!LI z&<8m0m?y66e;P(e3PWKQdxfhpbQmE@caqJ?FO8+HG*RrUhHelOPrV3Sa_25}*RW(#-qmI{U!PR4Brq1--shqu=a9-ghBzcJ14p3utU~BApmu z_ih>CXC07H-AqvqmY)C`s@EBnZckjlx&63oMvah8$QzOApf0!P#q2J#x&m)0jdmjIx@tG~0ee4Q8@WH<%hybOW8vV+EZtq`B0iu=p=d@x8++0uCoQa?c zBlje1q#T8StcO*Q^c<=zNv%RlpHlx+c{c=d*cjr80bwUoFVpfq%rz<;nNU3!#RYUb z=BRM51)9bDJ5#Gh>z72@CPNawpsi1{hSV|!>aJw(Tv&-H`j&_A0zIp)%Fvb+bv7m} z=eQkzao+)mDaFaPai6wCA~2YS)s>DFJKYBA zGZ=?Zd_&mRA$FuX4!5Two9+t+-*)H{%xGd-WCO9Qk#KuRTuw;5pM}ftH2RsYg*<#T zf!VsOHwCKd6` z1r}FQ&cWm3MO~W!4hfs!zJHFQH*l$mS_ZxVR<>NlKztPa;R~+XAp==iRW>)w(;0ST z#5y*8zxTdVd-`lR23YY~YQPcAQp;*?LVeDT-SE|{xgA>PYS>MsD zq)+|49%c<0=m8>x1PzrgX)tefHf%-$$~4)$mN^CeL>naN2UTqXk>m4+;++=;1uIyc zObs$ES~Fe+7y-=@hH|WXLULGlA}1sjaNQ9qt`J+Gs83(@Vvqwo#$<=uQXlvQmaOB3 zz5X>&OMp^5iqqMGX_9>5S#}D|5G-tznH#zdR!xJGih8(CGx^atb2xx5-NcWUKnf15 zJV{oLUY)`(p$QPnw#qiRKFkqls;5w~gioda9MnFlyrQ5ongtXYA@p9^jwM`^xQ6Ma z;n0vlu3Hk)Tdpa6IGMs`YX*)@yl~Mj6V&HzQET_1=WWxpQ15$)bt4W#i!$@&`#Gc> zYqgP&=4n6h;6<;!!*@TSedKR)`wB^~NzD`WU$}Gh?HNy=&u`N9Wd~PBt{ra{@vqnV z=+CL7#nOb7EWUS>X#Jdtwj{NoZ;suKZC;CYhVmV1ow)~k4na@7m4mzPH`$a*x*JNZ zuQJch7G~4tr_5BQU#)JV8eREe*X4n_?z&t033n> zKkNt^_x49~oah($h>lJU9F}X&%+JQEbMg9xC}d9%8a@XCAvKWjK_oB*X~!`8fj%$F zgC8datT-hdscTbbE5Z1HO!GOeM?T5k3xbXm=13C%G)#}jz9iSA1sFHq{|Pxv7XI@{ zRAHK|I-`C1_HmLD+j4wgzGkk(=?ceb;$!qoA;i6olWvS|D#<~XUwZi%WF~1Ohfx~k z3gjgjBexty?NL^Dn5Z*Jvt^A&?~8?G3^9ITZKNMSog=Y01SHVnVQ4zj-aUjpXMiDy z2o!wC4s!=70IbO+yR83*T7+PUVu$pRjvC*iPxjOq+RSjKb-a}#p^^gPt>aEoOwXZI7+jizo+qP}*v~AnAZEI)d$-hqb>8hyzRCHAIRaZrf zHLm8}oNKI@&w9V-UFwu-tU9g%N^YG2yC}u1%8j-U_UZuqWE%GIx?` z`Tk3y(fj2pR*j#X*Co;CFPImq-O2Pf{3*>m!aoCg|7|1q&vYnd{>L_gX!-xDK<~eu zssH7jsRs@J)JDMZziA`*A$m;zzeF#s+%vwH$j_AIjT0MitOIESLKJ)T?VDe|lVy$P zB+69uKtDbi&=ao0y=+3QQ#oFCu=uN?4{Srug0j5#`RL;41)7|sYUiYeUXLC!$X-hS zP;1ut<6>sRXdk~vcl&d4qvqQ&+(jIdjePa%b!LJ-^#=m#mH`1^$E)7=d@ekv1ZZZrJu~FAcJquLy>EW( zcc=GP4Rpvm-}lHfdY~p5#*tj9Lk)cw&C%jlbqb$PH;M5vt;zi^y$^UtY?$xg^|wRV z2P0m@rhCZ6;XPj2v!lM1(BaUhea{+^tD#tz%IsWQ9Zjo2g=Hg+57+Y}PhOwz-@a6O zS6^G?34{-SEM5*4^b33*k zDLW8vdgF<|z2?(dL&mFSe&eX*;IJ-Kq)qt*YH(R3KAqi&iqR8#YN~r{vTN!R{6gn} z@&%QCKRcB%<9{#;>PO6f#{!LvGVLD$oPk<|uj*v>`flvc*2^Q@I`Tn$Y47m6TiA5+ zoVp)#ee$L~(K_Xn;X65|M_T?u>0#?Gj>KNgu6A6`?h;PBry6Ny!qMWx`%w{uG&&@& zosF0o@Og*+?w--y8Zkr!opP6oi*5;0TrW8g{y12Pl$ei}A+XaE1B7i3?aCvqyFe2O zq;b}s8dC`{O;@g6kpKOG1j`IzPwJrvXR9l5TpJ0}4IN8~qLL)mMuj-+{Wxw_*kJb0{bgJPzx6->RN3Ja zBc+t;Wf4p(Cn*Z^oNNQeGG&|T*?K^cCfmuNtuVKZ7srqzklXiQKX#GIFc5@|b{dQx~$+Gv-N{-3Ud zE{xP6L2>c$O}9GZVos0H^IA?M2f-@C z2a->1r@>o^^T~SiQ;#u|!$fH5>6F8xwyogIDvbAlOztKmwXbtw!iF1=d_3|35kSDr6r*vAj}x`wCZG)&S#$N{k6epN-N+ns|A95t^BJgXN-8SmR)7pSb}f!3p=^W593pT>@Eo~A2YaK_3w zs6k%Vcg|i3k-mW87|LZnnqA<^h6}Dnwp;KHtCgJ_kiL-Sy=~n((@9bEd_+=0v|g@1JP@I=bIDN|h2s z-VxL=k&+f!FMF4+6ac6X1Nys)^-osM7S`X3sm1>1mJ8v46ysiqVc)IDcpJAkW3V)Y8iGQ8RHD^L>z0)_^XNH{d$IZGL1y^B6HkhSl?9Xv0~%({*6`f z2{KG1A`Le!Hy6q~oz2A7dTW%|gxR`QGQ^NhM1cg1HPVs-Z80+0;4ypT(jrc58{wQJ zze2K-%XUN~qOC|hx=X-r3HR1oZqhqJ?&vLAe+`Xx)0YGkE4@U>XX!F?T{n{%EWtA( zWY1|zvSJmtXC&sh*#ffX{_s9y1#-{$L+zzCl$)w1QWlDiaKlqW%8tsC%SO|yZ5q#! z{s9v z*Mj+&d|Rhh6SgRMC%a`@&0G^P#(Di5!J_~^ksB>kddo8E0<^x#+lKF z6c7O#v5PE}pE$i4fIYzSv_{UOIX0)+Dl!PYbpLYKo4?Xz9dC%5^da`(G^I&!(TUUFD+D1N-&McU&qB;R=Ve5Wf9WGJZGGam&hqX9ecU7yPY;ev z58%5_24h}L36G`VJSZRmOxxrE8e`=>4+~4f^v$*~vXZ6RaRAyuG<$4sxC`RYCSBau z!xOT(FY&IaL>+Rzv2J#z7f5Awdz%!r4<@Gr^Ld>}dwqKqN8%*$es_&yuu;dB)qGva zoZH24*|C2@3losSv@~dh_T2bBWMYC>6`g}d3SM_}+8GUFuYd4D@XZfq*&WBBHs5rx zbpT~GiZ*4c3kK~bW?c%`rXQq54YoUQ1xZbszBPYQ!Zce3vKf%`}z9) z3eocW>T-xzqA#HGaBFJ8PmJS*~*0F}LFcrsLIx%WPgy-JQ9&IUxz+tl9sT z*oI9?qmq2iKc9CIns3L+>Dl75GLuV_JLTLW?OYG*V$VqKIXSnLnqo!JR9TL%$MLKZ zJI^N4TY(v5C?Q-;sZ$wOyHI7G2n8B=5(n6sStkL*T&xv?yj4Epq z|M?kVQiS5CEt=%yG@PKQP0?*25w;cnu_i8sm2<44@1=O}BDq~@q-$%|07(=*7KsC{ z$VN5Xir1o4Rzi^xTB_)%w;@jum@@uxL6T$wnN=nsVvg1xR!2m)>~cs*S@|al@>;N=M zPOL6V)Pd*{s3E)N31^|sRu6(Hhf$mGQ^VL7DFk#*nFm-oD*7jf;WUn@V~(-)V9B89 z7|ocQ%zA8S2pR|349~XFQ@TjpQrPZ^cH}Ti&IbeV$aZ?k43`^9b>=yR{G6|+a$!KI z3-R{8md~1k=MaC6rEn2=+k@h0(4bD%a3+m~jMn%dNShfuhgd;DsESO&&mnf#gNX{w zSmyW-s}~IAvYv4ygjYF%fc( zp$_;8@M*jXBbd&z(*vE_D=yti-$PB{HLgtx+7RA`Ro@8JP|Ye>UWX4IIn1#(ArmyD ziHNbU1ZjEQ25XSlu`%Cj)-`l^Ang13)n=p@l2PiZYrl-6{L95}WyM$BO~-p~< zRU3H4%%KnLrvmv^(h2!}G+`=p{xWTseLk)GCBNXf*kIiTJUUkn^*$Ti;_VK~qmw@$ zU+J8iY~tIwV^-p8;f2{>ZsFK&e?#J^_S*D>^6wg-oUn(uyG zFQw5+^Vo6;IVX`UZu^CvPwcJ-fQJ)a4Sa3)*vU^v=KEg2lQW4-vEh=M*Dj^E#yT$i(o*FX)r^Jc_8DaD@%ZN9*m* zR_=K%A^Jgry7Wcmx@M2Y(O&?wI|z=NF7(@lBQ>00$cs~NE4qFjWk-7fHs3l9vlOUk zv3g@1x*tZAq;2M#<^#%plF_M}o6Yw=M_{;BVD_9EARLe+s5AD?pJ) z24kESo56n-R+(Ojh{B^rpeNGaqmmgEZi9B4;PojMZiw!q%2r zvs}@F>BS1SSRPWNiJ=a!83IuW&ZQI+lK39g z&>kDLEJqX=vBk-YKta^31Ygy;MmS zxN4dkrtS5;b?w&*=pW%qf8<|O>{Yp3~g zf)#Ir9{t4FXoy3Wx&2j3F4FM1mv7d>%*VRJYP{~wO7};R_o&v!X}3yO-TitZOs1}$ zutYU&qK|hOSJg=|S-&ZGo#hs5Gj>oL-m~X4G*?u1~Ea__`y{$$b(_>(~G|s)(GvGCHj&tp=m_w>} z66PZ;=2$ULsZf;F4o;6H$gw2&Y~E;I&W<@F83^3E+}PWXJo?(#kpsMsq9vsnSD#;q zAGC>h&6VHKtk-z`{|xEN6i4c{4*%R z0t&<#w&4dXMCF-+l(u-p#)`DTb25}bu{{m8`KJJ}8Ju`(lOIA!WG4FxjT2NjE*ji3 zMNpxF4M7Ax`j+PpCr#^5dpA$+NUS?dBknkJNlrK`KfTCOg96dpC&0M~N2U5t4_Scm zy9@1;;$o4ToxcaBs9DvgBK?TJt4);$X}whE0fVqeQ~p(8ng?qJycOQ>rOera?eM(q zC{-+Ki$yJY&)S~TA!Ox4semw5n;RyW8{N06?HEDs88q6rUkm`rjnriesY z24qk7ZByI#ER+^ORmC*(b}=o*4N(!7umm`sSBaGZXZYZ zr19meDcEMBtwTKpk-!Hz_zMgd}_y|Lf%iWwFEhArc|H$Z}{f~@Z z7NRTMHD4~T7twlJ^9*0^PexA*<%DM9`EBA%%;WFE^IHwM(<|S%$%n$d=5gqNqs~O# zQmU#d&C%Ct5pOf})QP5SRaoc>aT1dN{m#nCrss$H_^%u_TYSD;Af^X2r1Zjr9^6Xi z{hJ<^B)0*l7)3)`3ZCJ0yBqR3&F&V(W!1l{`~!5wRVGC$QQR82xvbx<#Gf(h38a40(UWf*Zg+WioU) z-0To!oyzn}3~J?}6lQuf@De28)M`HYfF1SGT(69bEXSA@zQNX?*@&O>GYv0U#BSE& zUHUDTk@I%@Z-^JJ^P2gUG=hr9xA-Mo!1(5UeoatH&PKxyHPcriC{9IJjvZm#8-F4^jykjhc-!iO!h3uWO3H5g}NLc=znY^pmke=aB^!vt))DPe8$@ z^|uuTBo&<#jg;tQ16?42Wq`nPXNI$mH=kuoyn8qc05fVIYbE$rz{65CrE#s1=h% z&O=BDT0fe|3q3WP(dRNnObEWX7*{2#7*;OKwWdf|lBHT9BnU||ZqGC;sNB36ZaWri zjuwqxC?*K&hnsee9~`D(lz~%*fLYbGrc)gk%zQY;4Q=nTmmQaxi6T_=>|wPi zuZV8NARi{7Xjj2#MZp=i&K7C%2Z7(-KM#Qz76w~8B;wj_1IC(=t*#voX32R{Csal! z*t+ekmU3CXt&)`-%nhw}%=5r`$=9ql!3{pMu~ZS%rUEufS>Xd z1%|P3wimXTBKJfP!1#jLwd*y`4@X95!|{4VO#u6>A(k+PqG*T!w;3{Clw{1vFd z%|Qxt$#^y*Xvy9$vJm4RibsGuREnILxg+b&TlZ#cln(a)#_SgVC1$t2o~|#2QvXvR z-dseNB+FD+jN&Dq5o|WW3j`^{P-g-Mqd>;7Ru6IjWCprzd4<6sh(~o_?FchwtZGuI zV$))&i}QTzwO&E!2nE6Gd~-z%9g=2Y0II=~mugiQZDlMWfQ;VT?lu}hn8MigQ^n~-?i~dvV9E)jnZ)fGwA}JS$oy}rvlHVCEKa_i6HWtS$_xj}Sm{IayCYph0qi2Bcv7 zWzdg?y?u(Y^4@;DsW+dzzo=K{m@nrmdRq;l1(#6tDtKZjZvSFCOQhcmbxm>^%{@oY znj7Hf`PV%A-uRlKtfH)BcFgANGe{auF=R9`s=Be``31mFj~Q%Rkqax3&AAn%Ow%`> z0Lbr?P&D3XRJoD0^$u?fUbQvJP6%>Lo7{bIMt*CovL#{uw#=#z162t04Y+sE=Y591rD*W^2b1*K!L<8X| z9*EalXD$9qV;ql1Le11#sDGf^n*M?1KzA)MukS|UBbnk1(3G5cuyP5R2L09goyxYZbf5wiL*-aWY6TU~Pa5rp zos>IwNcCOxo!il@}%}00NFoDP$SFYkYB}oz65QI4kk-WeAg8U?PbQV zUAg|vsljOnT?+yZ>V~$JxG4juqd|INTjj7&p4nnYNc-+;sC@2;w51wxq_p8rNDKYvV#`l z^CvZ>_7Mt!m}3DbSfn!csDI&x9|QqR-6RtIIow!vI5Uxkkl6Ywry~w`|cL=Q`JLXDj^*x&2tj{B6FM4U< zZ`V_K7h{JfB!PDsfESZex}tmz-i6%bw%+B4XZ2`&Q5CqoP_b&{`3Ca$Vio6P-DK~g z*K|QqGxiprPI}D)e^*AZs5PfFRiy+z7eSNxQ(`%|*hQlRePR4|fJ(MwY$5WBXxcmi z&0ce&g8VLwC=5!1&q@VSp~|j>{;|e(0FZD9>vzWb49XW-BQsaK3!Ut#!w- zm$o|D?#>5qV3yXQ_R-UB#NHw~P_^gS8Gtj!&9x%>0anrE6Rqt2c51}R5C{CaLJ=3B zT|}(_-TK;@jGk)8_#Uapq8)n$7+%$L(MOlj$7>FFd$4ssSj(-(P@A#4ayO6}&$>7| zbRcnusS^L{l7ZsaHh=)vqZjFtJ8d0*9L=M896$lSygRP}tdxTTmizPMU$wByOrHUAxf5&^jSk!5 zBR8dJMNL0NQx=Vs!~HCikwXw!9*ZX;qGuk z|B}#?Sk)&2;bT*kt#)C7jab1O!x~E%53PK_ZL6MrTu82ptIBUQPNHLU1n5B3% zXtE{wxaeTKnz~kHXRh5inLe-G*D2WAG@ElBSru5vH3xTeZNhxsqI3nFn%+R=eDmPT zdDg-}0MQ`hQ6MXeIxzqkc@s;-F|^6|;S-3gMCF zP#_KnEr8%5%Fi^U3}q8GmL$!d(~+bKo!PLh3L?bT@S+)Q{s<)zIounx4p3nP*znIZ z!3C-|1QB>xd!F)+>c8prGCg=>@gFeExs%MKd62FAbR){m3We`K02d>FtJmSFc7cpN zUTK~e|B<-c26|$On%4X%){OzaS=W4$G){FJF$jyW6xsl1e6nQ0U;edQ&YmyQg)Gp8 z`F~wRL(oSnt_je&%ktLda?nl^e%2yi5Mhh z0~N}>c_;c-LDa-#CEojKaxS}}LjSBf|B#c%uk3jJU%)~ViSPsn9FW!Y z>^sK<(1aJxpV{1J5SK4}2yq?B^6ToeGhA>EPAh#L(q_6&C1Z&r%COIqUjL6VIhmMU z-R^83KG4{~=a1*d`>R7jFef}DlhWTV-|r3F;9qwaXA3iZpYMF+xS`6uCO|JEzBxXe zpA%=UfuaDvg{^mezsX-(A}hXv(wYvutwM1Q-riq~2+~*GDG{E&gJA-hcSHJq>UB%a zh|ov9KaYZvcTN?Z2$@A+o;J?t{k|`|zgEHnfM1?!uIbO_*3&e(Pu5eGk4x9_HM#HK zxp^vk9J71Avm`$;KYnY3{=`?jt457D1@RoM2MB&u0mqh!Lh_o>nCLXI16Tf9B_7kO z#NCBb_**-RgSWC*R*!Iye3l83)1C7x1R;w)NoDZ866s$G(}}q_XwbtZ7JcgBZ%pNbi;{6za z8+sSc`>^iWi4u3Kmz2b~u1FB^Tq?^90BfFoV>3wGCqR&4kq?cmUm|{kZgdrFhIMU* ze%@Z0tzLV7#3BZWwC2(AcQ4Wxz`@7Y|IwN-?Jt>X8TdN!jB`LQNYbwc~F0eZ4*nhQrvo?7TY? zzHsHtjSR*hyMq`5`=i5wK_M7f*QU*OoifbC1yZm?rfPedO2lJF1#-yt8HrBAhLo+I z?sAr(z-W4<{5+1(E*L^iSp~5YwJhp>?Jke~f?ec5oU)ZXoT_ODN$U#}W&FNAOJ*~G z9xXs?LLey?RKfOsD5)aQDDWT>WRECloCtEp6qWLj)P10X$Uzun%M>(Fuxa)329hG` zX;rgCCSm+T1q?DP`y^cfvxn~vmNWgLkBe%n%qA_9lw(2z=9P3~?@LSIISD-a4$wRa z-cj|6bZh7l(RP7iioc*bf>RZ}XzY*LQF4nEdB?;e=-E7w^HJyvPSb)!q`BW4s9uUt zt8NN-Y{o@qhW8^y*;vr0Yz}F-cp>yE^Xts(GKR;8y1^FAgskT=(X4gYJb%7BF7HQO zoKOh^wH$2IDh2_Z&5tHe?76X7N(qJ2Go38CIV*a(F+MWfrLAA%zZ-2eMna6tV8o0L z76{)ug5l~s&@YUW11imv>cG9sl#xR%qB98HRGNg%=Y9K0Cv_tOD38l&M)EJx?sDOa zo$QZaf_NG}Q6fXS-f{~kh9sLF7ApRa!a(#Z=A6sHGg?oWlL%3*>$Tb#KIxx00UM<7KX@)(lmkSZ|s?aQQ@F2PZiOu0i!eq3cJnNGRb`|H{oSuQ3iEejlq{qiC zIHHQ2g?|P`;}?1QBOIx%E}hKP(r|jJEd}nvh_Di_@41C(bjpIeMC21DRxcqd8jdHN z=BLSnZt{z||Fj396j6J@qg$o19}K8bHQMbDs3GJz4Oa8mEg;f%2+nIYBDg@7ocCUn zM2AGVc+8Ivy?t*3JT{$rH%3AI4K0@eXoJsXIG_634pN1*vcd{IqpKDB5? z7#7hNk&2*WD2FoZ5(x!e*@Q}6s=xK?B+Z+yl81RDt*%d8jC^ZQAd~Ses@dtDQFE-mMP2Le!$eH_{QfH zr;l!f2#|tuGK<1deahbhjSDeByO4}W;WA*8Gz^T$kaJ4YGT>Yruvw&_=_Elxhm@rZ z|KQS&DoccpBrtewEY+${33GfR3`9H0M9y z8pEYqd4hoes+1``4iNZw-4P?x-v}XYj1HCq`vxSB_fO{M#r&gYUOG7~z$Il8C?If( zO?8Mhpt!1h&KOl5s;aJrey{Mn`|7F+z~W(jCZ<*IqIu?RG*dQb-%doXQYqKHF-C3YMzy{UfhruZsN2>{rH zuGt1t9@$_6CKiK!IWkNl>u(l+n-U%W1Z`GdE2?wOnBfbHdz`}WLxbVLMCy#+X<5ts zuJ<;9)nm}IG#J|sx0ViNfn|vg*{^(UXN2WrnegedKE6obVemq7B@|33mJ#fU*D~=I z=4U8Zb*Wh56a<&scPDzAr_?jp(WkkD%;5GAX^o2c3K`5!d zmMA!j;Vmsaf_O0zZ``CVRTOX)(Lc7mz8g}Itws)|6J-39#B`>ZA|{Ck8RRP6YwVID zPfbzl;RvO^d(CpgR5CLa)*lN_FMjKz7>Lvv)6jS$g+kY1ZiTZpbw_)b`9wAjsA zhWU;#@}7Hsuq2Mu>t}wG3M7k&}X*dWUqmZ_EfNoy52{;ecigtfJp`pm8l}@2L^C zKP!P8$z|g(E%7zLy&uRCE++w3c5PO~L<4L?(5YTt!}QX6vCx4Ug}FUi=8qhIGr7&? zp!QC!@V&=+k|}m8r!BvoPHf`aFV&N z5X~@}_fDm@MfJg7ph=%R-N3fDp^MVobXJ|W@ZK`z$02}}pSjfT2^O@2R859e9^@_^ zK$hv3?uV`0x5{R67SZT2WB_CUV1Ur)D1f@fo~#=$e-{IL#kUIe;qzO7UMrQqNYogf z-}2w~wis-c2h99Y*f>3lK8&55t_fS4pZMolTsy=7Qh~k}n{P1uu>cAH5WNTnL*%TT zt-M0Eue=vKePfMXDOHt9vN?b?j!06h@BSTg)d^nKuf_0*SO(>ghx!Yl@dn#t&5qoH zyl`*woo63JN0AAJ0R8NZq^*k8=2G8c_#=35IgSc;tg0&B%+N=%4U*TYZS&9aZy>JR zxn3nr2v2U&Ay;)tNXSP6VFEN?QAtw!!=+R46w*(0mbs-iFovu?&Oo=TyLQ~vsH=4` zGegXwu}C@7ALl9V&!We8&bsXaEqw-2b_CtoC9S*?1;D=LX_LH9 zXqDsJZ#%n-3hiAL76S*NYa|@~22tbBp_JD5p&=6(jWmVRR$BMK+4O-sGqxVjzeEya z9S21sl}*H;`ByC%c-XhZmsobTvp20%JQnO*!Z{#TO-1oXE@?bYXIpt@YrDpUN?#7N z2~hAs7NKpe(y6U-L|26V*3yy=pJKY}$i0XSFMH7)#KPS0^X}Hy57Rm?y9J6qeoQ3l zedJg@vS+1SqzhS+P8W@|dJ@ai`llA}r9Y;bgD$OWA8N9|9Qtd8XC|UqQz3ZLqWn75 z$p9+B{#oimLQ~`bu9S2Xv_N2%cr&|H0A-*bIZKR_VnA zY=4fXGgKA#npJDH1i_@UECCq?ZM+`&n|}TcPacIqQ`c0Z6>0>sG2}5;^q(vwpkrKY zx6xNARh^-mH6ZlIN-&1W}P6qDr*s6rQrB zR)_ae%WE9BN5H2BhmrV{A1Y%F!a7=eadH& zh|MxnAk~vosiDeLZXK!`&#oVNH#B7mN^0tzqqV@08Q<0wm|89d-4^GT zl3q(K8EIH5xg64knQE@;)kL75qVJrP-CxrE)7@iO&YiD7yVQjuRE2W?sO=>mk4bP? zphhHU^R8?McG|{Lp@_=kS>tR*?WJ+XLD{&CzL0_G28*uF;Zf(BA;{bGR1YuQv`L{U zFBljh_k_`nb}Oz@cnZtJ1A<q1FB5D__SU~SiYo4!pOueph-*HXUhsR zU!|Slc~oB~UQukF(rvHUNTUK>m3^eiZ!*-Uz8y>q=`G>ntUoG8iYs#7(L(o{ssXL* zxdvnTG$GvmXL#P-i5qxvx<@AC@d{rmaT@llMP#J=)96f{xNBt}-RR>A*i|k+2g#x% ze^>DRs|J6o`*+uc{ImnM+rY^tQ%g`kUE)dc@v3vC<9njf z=96!pHic2ZI;Dr<=DgrdSGunpu}!^>N_vm1K+nc&Dr~Q2+9y8B3IYc{*rV{sUtcU6 z77~9;Fp4&KXP4+%LA=byS9>8}uyGCl2zTAm&ODc=548AlU0qRKx(jg19(9#m*b}F1 zXF8+Pz*a^0S88TA88ilkCSBgYd4(5V)J??$gW)UYt4mtNl;OtwUJ?;oV$VCBP0mur z4&@G9qjrp}GMMRCV#ZOQC*lQfbaqapY#+Rp$LO+j!~W{2(zirjbwu}8JG%3pcW$72 zl}$~TZFT2uw$iWiayiMF%E;f3R!Yo>tuew>Zun3_5z~^Kg@gKr6jo* zh^&Q*;63N9$tfkN3YM4)3}-{3{T^FJ^rlphi&*?iu9mi}5kB%DCFQH>NJ+}FnkD@x zanfj1$y-W}J4G33F*vz4E&7;+?)*IYret=IWnlx8t5i>yLF>FBY|bf@>LBHo0XF#r z0#v6RTcRDyPqR`82@2E}cZnE4>S-bQ46#SEMjZ5D9E(7+c0jpCycnfZy1gnJhF;Gj z*k~PFY8{I}yHOG9Wwk&B#e(H=`G<*YIp;bbIpU#<v`3(D< znW!09auoWF-tbhI=3+8tTw{XEN@pV}5)f zF_EnGX1A;O_4fu^yDP^FSi>y01h<@sy?mV3Gq*=c1WK*p;YPklzPc#*=dxkCXSp8K z9mLKD)xWUPv#o8`qBSI}Bfr82$P8Ytu0C6o;Kr_V0k%n3)xhwX-SjZH|Mm}bs1FNL zPpp4^`U38(xKI5vy2kw99A6A(>H{STHte`Ni@(l0*q;>i8$9I(9^^eR8>XNZG2dzS~fI^qIzK9F1Z1EfS>vjY`%hKU?q?Eq2Cwmmop{x7r z{qg9~i-035HVrQS;qJzli!Qw9%j$<^cwdwB=Erz1Ed z`StyHau8dbR(j(Im~^#}quW{fAax}~$HZ#i7-@FR{u9-p@4v@h9n!`LO?&Wc9ZHxS z$eDf&se?@LY$<|RvkAa@AeW=xJ;Skb4b~=f-gwiXbLYza@ReyU=Ad0UVV?{H=E`M? z%N|LRRKmweecN2`ZV@s9khB{?_srh#h?#h_@9?H;0Vd+o9wu=i@Qu{aM)3V?lZ${G zRU=DoT_14F6uBHQwjO}1&IzzdU0i2qy>7s2@Zs9H(0ajNKQIE#(R>I+hshqZC%tWD zT9pd~ZYI9O;b}N>JJ@ZL`Th7Df4M-v&HH)Z=?KB0?$ykbJ+=7mAlRH*T7K81;?Lv} zjm?Kh)6-go9`bQjr+e_G-u$({yq&Z2w)QcRsRs2@BC(*pO@iA`xQKCi+E_*AyIGAs z@frQ0H|CAGITCAnw!@OXD@M=TWpE3yVLq-{;ydus{ARFFd?KSMx2*2EGD|CA?=gVl z#SpU3o{asu|5R#+F`xYQMci6H2hyDV*{o}M({H@d)HnVH3&&7 zZq5AXQHkig6G%7Y=$;Ij897-Jmj!BI`A3P5rc-#stf45}tOdgBD+#!x@?{d`hke5um6grmKEhF4|s z=wgT-F&a9^UYjI@J@IV?m`iY2>V+S9MJIq^zG?hod@p10q{R==aDLAAl6A|0wmBI-th9C#wlt`LF1SR7H znIds1xOOKsX@iENKKDv~2~LorGg+chaKhlIQx?sp)zeGb2d5}Xs}2F1ocL?31;pk3 zUb!`879X=;p z$mopd8yfyjQ^IQ`2!Eb!Ds;_Fg*v385r63p$b}*0^S{ z%59UH7buO#_X3U#P{d>Ch^uZPwQ9FgU&u>Ku7WnAsGHlYrIbU{I!~u6$P=9ivY#lcG=1)`cd3W4!=?tk_cTYt~ID$^FG)?-rX@RVo6moX^djXvY) zEfN=l%fK08(r8**c+(b!T3+>Y`Tle1!q1_Wg)13Q(?@ZXB6j-I z-Se-v?^4)Lz8svD7Rq=iJUYTgfs0I&KECp6J7S2=#GAc1!U^l0iUtPRTE9-!me&c*{$Pc9vS!dj&bG0p>spnm~HG_syuuqUB z8!hjRRC?M5rgRM(*7)niq94;B46G0P-YUKcG1f0chh(5Q&(HLZ6)q1v4Z&*aA6$ZH z=_CYeNZd@(nrBM_8pZsNPZ5>@dc-ur1K_f{mU(*kXjD%A;;Jr6E@qcLK<<)P5Sck) zTDn;fv_4JaAgIC^6R|Gfupp{*VM9t(Bd`%6skn~9h=&;rs;tEn!a7`3Fd0AtDl_Kp$z5P~YA^E@8I)vpB;rMASzNpq8*z8ktaLQ%LSh#z>yM z__+wUqV{K}KPvz$v&_&_jiPV}rL3-gJXHtKD3(?jw+dQQe(CGoXaq|s9C;PZD}eTy zBJjeSmEQb@SFmIOs=7u*SJ!$0d;FdS;oHe085DYNY{~Ex^c>9KN3>=k`JdZ~J#(t7*P4(Ba$4Y32TJAOL0b5*E$k1y<*`!XNnU*W{Ov%~abe z!9y43JR7){`sS**OP=+bTOChooBhob>KwMS5OJAr-2I;U*D+}WwqshyJRMcAHP@Br zye$gch)*xJme>Qes^E6W*Mh!xHYuA zcaN-_LoXKTEKr{xYtE0eT5#Bp_4+i396SLcnH>R3+)!hr2e%rmoDrU-5;k9SMBoB| zBZy~j%-^aNw+QMFa3naTdA@5HYmikGUV*TO9!m$6cAK&#M#pKXU1|{YDQ-NBY;^mbi+{r zM(ESXhb$@OhVnu2PDlWR&b*Pdq)IAA`#TR;Py#=Kc@WXR$yt&`1*%X8zh}IuWOR`> zn!rJjPB&Fb%Opsdh%LR#2es>Eng9tQewY49YD7v`443?AnMwd;ihzfpu>d~nVoK(C zh_sbXc54&LO8`#Jv0+8763zyr6vTtC5*BBtE~(FU*)_pT!}q#cDdTzg%6f00_Mic4&WI$l#XmBypgXJJib~|K-os0XBe(ALz*ZI9mSa`Jjvk>quN%wF^EQ`E#yKYO=Go?@yq3%s zn7wDdB>s$@l^0=FZ{r?Yj z?;IUlw08@}wvBV*oY;0w?BvA8iEZ1qZQHhO+cqkBx%c+#zPJ19H@?4KkFHT`?Y%fw z)vnrAd(Zis)6pgznij!|;k7AR3x5Lz2doCN87tfX#NH;Hp3fh#fg|uPZU*nhch+5`4 zN}rdNjz=ld;qrJxEbgFgZQIa)Fo`6;UAOAZHPzYoM zZFncVct&>n$!*;^Vk&>_c7FI7tvt3Imx?&wX-^jTIqh>RxmP)4|LtHh(~@q7DMN4} z9_df|hm`{y$wO&v#)^JJ`u+&1rh2$3L(zU#lTT(iRb;th4gI%l>3I>bbSu)>r5!VR zq5-_SEGyEEI4e>#v{s`G!GG+1Cum#QW)yAd<^YdaE7G>_@~uQ$;)z5X=|H%HWJqhz z_n1E7s=_tF4zcC{7t&1$2hvTHJ(2Hr>eHkcy17aT&C?|2W8mtg8pw_zz}j#`R3n=@ z_up=omBmlX2}$=pQolon;ED!~O2JJ87naxS?`{gF(Y#Aa@1Kny)S_@av$2L02~ix9 z&khba>Sg&WawhoKNk``+>=DA?GkQ{QKFf7n`0>G^RX*C2s)Ntg-0J`zD8!JPf6u2NTCcT1X?A^VA%7`!WW$q z57|K({9&PtPebyCK+N?EXcuWxmSPBzsPRee2fn^Lnmisfm_w~s>dU-1TxUXDAt+T9 zi6}Qx+`Yg7JpY{xkR%6EC#<8#s}z_`S#-XKB1Zg;#D&LHA2r$VN$D1D8KelvAM&mB zY?%bJSI=19Yzk5bVsuSm2}({vgIR#0#Gox|!Cs((=%0hgHT^UN<5a@)Q~9yg!Lh73 zu)-f(lsQQ_g@REYaOzzN5;mb_9*gQBh)zhJv*#+I9N_hRne6Dfd>WLcgL`L7?}L&O2XbAUTJ5+N;Xv`ziRTP_u{!8iG5%sQa4q7tVp5-Xj@Iu97GwG* zdnn5|VsylcrHIpq60I#D3PPIYX<^RDhg`S@x44C73d=D9uO15D%tfU)R>+jFQY?8K zZZ(xMUX!8T$zJ!797m zC)wv;$vWWOE^@pGpFzu_6LE7NzyRRIR2u-5F@U=@9B*uwo&F&@Op*kC=1PiNfsf*Ctqi?{Jj` z4bfMxdjT09ve?TG&oNnyguyj%C!#G)Iuz&-3a=|+R{BiOvk`&cq#2p#uNt}^Ri#qD zGWk53W9ZxxxqmJUcsTKr6*!`B&fjP`Dr!fv%}#$G+<9rAN1es;$HLV=={wQ_N6bo8 z&4F)|mex@v7yBB=y<3)<;j}V<1fz&;ODeUy1q+k83*nBQWk+L|%xWr*my*huH1|@b zv#+-;?6+$w8F^8a{^i}Qwp}ki0l#YO0Bnhbj;WY68=&pUF7Qu12&Rmdx;Dnr_b1AY zYqs%Utwxpn6^|Y$OrJ@sT0u~JUd4iy8kqV3Ht%lwS#M+iiHNSeDFuoh>CAQSZA)Kh z&0EWBT=Pl5QOYO4f!L4w5>g_8Ijcdo`x5@g)gCH5CoZ!7*shI|5eASQmt!j`x&NzR zKyB|dN78`J>vVkaL$4yIyM%0(!c9UJPvHrr*Tr(+XRWsRC8lg?gS!!`k*CTV(gVWz zS_j|LdF%6I?l#jE&$#NgCBp~s>a*z(bY9otA7^dHokoGP6?1=%aSgvMU5mwi3!JFf z^J3`0g)sHpPGYfN+iU@%2Pdu1d%9@Io%f;lEzOp&k5P&b`%62u$~zul7ohDYwhO)- z18y!FBdbEx&#u|(jUl72Dt$tjehIZWv3(T4M{qNt3fZNk!U=g6kQqdE7;{Fce6Fxibz zBdd!;kjTXYkOwzQn1O{*BP9EfuF5!%d3y|7$q{7E)_}RIM34GMbjSh>p5U-Y{k)d!=u2!^Ja3-(BS^ZMK^7k9Wi46|2>v11Im+beDZKQDfzUv)Bf(S6u3&9418_kKE zsO+wIcjKLqvd_~;nv<~sz(z?}gX^`{-*HjiJ3@gmfH&0V;uUjIc^(whT>v>S%0~`6J83 z`ZRNi7ap;IGPSX8W;4}0El9Onyu2wN-)(g+B@_O6+v9* zE7~b4~Nf%;>ke|;j^`L-E{cpiiGH91{U2OzYl~h-9>&2I>>!I5lVQRvq{h* z*~0<@$ajY@Y=`fd61}Xly}Bf>8p|^`oC~!b=H_A=Vy)pyCD^RjVZCcjuu_D{X12hd zL$^MK`}Y;`y`yCvH8n_d+qz)gwskr!yQ56jx4crWlwm*)hh*D2qwX2K+h@nz*4bsA zYDWG%E$VE(XLjqwy`1d>{mITc27cR=G0*s?GX~z++ujL3i-1) z=j3J%OG9|^+GIjKUhM(@_akk8=P^k3n(v6+dwrHbb2O>j=;(U%edd_?p7(*b?d=Q? zhk{1!?+FaJE9~YD2cFzPj?<1yPW4Sk-ZF|&_Jm6yJamD!B1|iVHjd}uaouAM+BJ-@ zE3h`O+a-g^@MVhQW3jH?;5>tZDL*XKg7t96=i^E~qcex{im_wVH$*P2p#r|gKKJ@Yx7M#S5{4txV8 z_dcXHne-8bYN3PbePJ!bRL<;MEc_)U9D6V2XnX%F; zdC3$a$%|H{7^51S#&KCuC#W`{0q!rfeQFxUJL6a*|C-CNAe9E8hRElV7AYQ0dNO{i zPFe8{$j3S%b@}TqU+&E92j6yraHlzW$V;$Gs)SKMnqI-9*@b1`XSggK$cYyq*xc7f zbh5lVgi&XF<1)=k`1KubHsT6Ds6X;%%WmXVqkCCz?3{hFA$WY|dOPp%EmkYMLFXd( z@;o?`{J2-RDXVExv6yc8u7SnB8qcZA*5$Elg4jCP$J(@CtEcgF%nJ)(!G!5<$72n- zYRTEQTm2p$$^f{pG{#(NSBXACzS^Eiaz=F}HGdVws4b+nR>*w7m`{2pv}Q<=G&*gJ zxojRUwo}FKF8AqQc03+s)qBspK1a{M)#@(uvo}Dg_hTaAX?XPlAO7+51!@V8k@;T% zg{=PXKuiBvOS15G>#$D=!&FeqLP^E+}J=l~-?~ z9Ek)m<@RevXCy3IzLn+`Whxp?gwc6RNY!<|^zDzQOvPk0z|-mYVKQtR&;oC^x96Lk zEwBDchHMO5()`mhVRQb?ayH%eSIGMGSLcmAaM(8E%jLIOmRH-y;hki>=rsU>U;5*j z&+@DFZRr{W?9SSgElDBj+WQ^O3}Q`_hWD-;wgDS2z#hVxkZzkVu#VV*(7P?bv%5cO zFQ`yqgV(F|W9K&4#iNhUn()iB_kvM$;$tuRYsKs4uvmJ+vRM_P(P0j(tIUH=YaVvF@3swfmIZ2TiIdP9w<{b|``F#0Oq`$S0}*R2d7 z`~iM9u_Sc;!C5+4BrU0f@-$-*yDT%gay@y$H5QX!Tmp7Tf})KAzs8k-7ia~YV(itL zaO=idE^$d9K?en7N~RIR#)*e55OK<27o7hnft39Ofm655X;Y9CDc3*27Y@rwMDG0g z>s>TtF3*{xxTAy(;utix2^5Z2NkU{D79yA!(cnBNuver4z_JOZreYqsro;fpwUv#6 z`sFeEEX1Fz+pRMch=i}pz@)1d%9u2PF37YfO#>}xmo-w6X#{Py&9O=fwdy;az9pU1 zNLuO{+!GuISU3n!O*{88vx`GAYgf$X7`Iz)D#ZiZ3T!aN*GHD8UmL1Z_%hXuwMf#EFQkh3o%(Xb?>jUBWV|msW9QnW=Ue;)n{L z#=Jy4aJpnORK3(Y0&Ad)D>X|dm7JTBrtxC$trZ_rjG9#9Rkm!u>)Q88h)=Rt+S0^- zxp@;}P_n>+DaZ>^U_rMIQYdR-PWU52UwA~d1n-|hY@0Gk!1cVJ1yPiDK|hF`=WL#d z{62rElblUUTad!GRo=!Cfb*={4TCG^KOlAq_hvG~=l_ZQFrDKK0bn}$Lh%3Grsb)_ z9BF9fX>X1zq>a~u9b6!kz?~5)AK%!e!0Twam>;6iAY!tBy4>;nyPxE_f#enn@_fEV z7vDMYZWJq9s%6~T!G@mbc0UPrx1i-t^)&wen`z|ol$_3AiOZ6UVc?HcMNH=Cvuy7( zq+wLdMG?=1b@6%fv#hZd@I}A#YQ>j-XT>VF$Mav>_w=K<6Pk9cIBwC!jO#qOhrdpa zov9O(Kq|^liU=-%{jU7+*UpO`pT2r>jAUuLCnYe!ZkWbuCtW%ZYMTS99O=i4`j@=$&&Y zcBmNHBSLTjVx4>6B`~Ux^ZW6{LAmrDux5bxVQ3=2V9`rGam4i`K%A=o=8*f2Bbn6_ zC9*rb7xetPec+Non~;nJJr0Yavs>&WfiE4Q?{_EwS-Jk zjK??j5E3eDS9#2=IE`NMk!lnM3FK!J-oz4{Z54DmXCV;q5?t;m7VVlnBAx|kqSsA( z7&9@l&r%`Tuf`Q_=7tq~=y-)0GLi}9fQnJ+5moHSIs5BC`NrC4GEK!mvVoZQOnrOl z4l-Ejl6W^#io2PKZwqvP0%JK}a$^wG(Ueh`6NYgV8^b2uJ&JlQkk*MI7}j|cdie|v zT40YOU2tq1(iEh*6G_N)(OR$s9MX)J#glS=t^8HL&`5Nt8w)s5n<-l0u9vT+LqPbaj~ye4=otQE50y_ByFer@CQsIl1|Q**&W~aJw+7Wr^gn_~9kY zV6WwCLzKp7VA#`2fNE3H)R~8zKK>o)QiAuwVDNn1gU=;SLE8? zG{RVb4g(r!5i5+B90bx= zrG)sU{++nKE8Qd+bbBQjbXQ~bfmHv50f&bnHUWn$7S_?jsfsDV_vef{1@(Rw)5ASc zkJGOh6&0@rGjGbeHk-yjiKjW8bz#gqLs>XKq53=~^KL6F|>t~VxMpzKM|QyhLb|06x(^yV!5 z?9F-mPHr45m3S;I{ILBwK|lL*AhL$X=u2!2v6R>u;ixnXu#~vJx97NOxaBAG1&Mlc zv$dtT>6I%M7(?5Abbm2nyK_b(rcZ=$jv2MBHsrF4ZdE)vhN>q6WxvRA3o;8V3Y>~9 z#}O|;cr#LH+W8UW-S1pC=J&(ZPg;7;6w4xsq-Rx}eE$|8i08F(x=7&a9IhzQkU zPtv9=6@pf*?1oGQY0XG5>inkU-Unb`PrG;zy)$iP-+o3scSpN?d0F&DYzIlFJTvO4 zhS=(cW0{tk{yOZ?rMtGIoQa!OF-tql^VFi8sR)%MpI-E|V(PW+}2Ms>P8{#;5ga10Jke!vo~ek=jNU%9x7Y6fBN!McV*%Ez6K_>50w= zq-k-r*epHoJuvDhYLIvHq&VyeL-yx{7wxfJpS!8i)rWz)8++%h;DM6P-B(a z7^tTP;de}N?S`Lercq96aY&}qWTEj-zD)BoTMBmYhl-?&GgHn*IBU|9Wx1WL1vqQh z(@H|Wp~P7oNMa3zhBIOgInbmF(7p5eoe6~U@p~8p!Dmid1;Z( zBB<|5+m|vXC;F;eh?F= z9I4|MXtugAHes{Em$VF42{yHoc$6&vHm;WG@kEKRG!5UDVzhAnUHnBzm78`ZWUKV9 zRhnY9fM}!y56EpOd#qk?w*w2pr=aSs!4%GJ74(c7QhOZ4YGzI5+03?xeu}lkr8(8xzDazbj}m=1;SjtWJ=T+rrjy9s z_oIl8B2t`ms6Y-}U=T<9^Sioqk8>)Np~QxQEMFCIti>S!oe6JOt)5^dp*!x-1>%Eg zCmZ++?!~0%I}{oF#+wfKYx8du);?P%kQCm+KHr)$RF6v4d>)*e-Mk5aRr-BE$-WkcE#tyO;$eSMY7cIv9ppP5vvV?=zB zjx~QA)q5JLhvY4Hy;^jScg!i}w`#hSdafTK>T3fcC9&N~rRWaU_?;@w(N^p{PY%;B z#+xsa-QF1Ov_>261W4|qQVfq@zdr8ys#1?q{;MnJ|E6vw3)6o{Ok}E9hOg7ZeO~G0 zPW#`V4%X4IL$uR&PU8jweAcVzPj=eA5c_53Xl2sP75}12#%BGF{#Beccm|1tMDXD) z2@h2b`Fu5iYW|pgt&KQkfCLg9i;C9X_l%i>8}0u5@}uVKTmsKlR4l^g<8W((?OD4L z7}-~?{B@Z8#UA<5S2eC`5F?y@SZCTt7|i3SV5f2e6M|_!)mH?Gi3Ey2!QI0;bUYqg z=yg&vej;MH(|xOTn8rvhXfr*(O9PBVvn~j%-QQjCHH-p3*P`&t3E4=JLMym#(<5lp zdigTQuqh=%*<-H)4yrx-#*j5qyQoi|d=@mkZ|KcjZvh)(z+DyGfG$X0rB(qh{%->9 zvWtprEcE3Cg+rs}Ip}H!6*=^=+g->-qZ3sa!^;4gIjYG}Z74Ptojh{|&xHDY9D-Qe z<#K*p?Q^u$VXO0ejd50$L0VArX`B>TgNPj~O!Fz3yk09A*Jzqh2WZp??LJNaW4?Mg z;=H~{QlrHt`=Z^SkCpywwF0Yy8AyX! znL7VstNbJC^v1QbF?U*VM1NCjCaN-bFNb1RigG6OOqn3(PR^QNp(V? zuLljQN(rJm7OOtDzA!;G=?pG#DmN2BD)2IIVdjLYfTiB-V&o}cSy!+*q5{IWkM^;D zzy>-I%y`Ib4neoKF69eGH1P$ffBEt*3(Adw9XRDh58<;!9IDeT-|%7J{tsw2d+ zd_L>}-(ZlCEc-3-g5U;QmKBLIIt}(M@sg)6`%j4%`6M?=GX-vq9POZ4HTUiXbFX|4 z>wgJ5AIq6=D3>JJ$xfWGum9zhuMaBU3cz>-^K)ZTH@(P_w-&Ih!`D8m98tat*xS8= z+0rZD3fkS|>RMcv|BGOI+_x)Zz3H02<(u)OyRys7<{4+}rby$oCZkixbK?0%3*B<1 zyajU0utdtB#7orR7q0v0+sFkEky^>6>l(P9p)Dv8iL@d?Ep=z%?cD2&%0k^fweH*x zGRjfRY+0Gf*@u_=j)m5lKfV6k0Tw9(VI6Ojz&qOI3sfkh$IkDtYvlK_5CdM(mwJzu zj_VH|N`P942~FDqVT=dUq>C@+NVPfX1M<6>G7J-#whqfF`>j>g=)@J~Qkp-Lb6qix zj!{RGg@kv|ok2bNmLPy{aye%G151)zW*Q|P-TZXwbCFb@y1US*JWBfcDUK~xb943K zVRKN!<=NO8rSqt+^c82P>SMj4nWk3P_8N5)*x`~O3fEK^)xum_D@Q8OGMnbbs@+=X zt%(eieCyp|f6D!ySM_OY7MF0l-DCf<=}l*U_~mK%h44M6J>tJQU;Q_|*;v^a|3hp2 z@;|8H7?cVLKtFpPq?)r05Mw%I>u|w35jwuz+4v>O@*HUG+e{$N1EYN(Gv3-H@>~*2 zGQum$?ljpZ(DS_$$fS1R^WW|sKU08;Ei?I8rWIpTTooc@9&zIu{ zz=tfdh_}KNlk&TG9fT^G<5%%(8 zYe1>K$e~na+5v^!{Oj$r53R8O@+5sB)oe~Xw zP>6gTI}AFB45jii8aONlNR~Q$2FQ?b9KJVNK^R`RL4jW@<0AL1=B@&4;=w?EPFQVC z{Lh=1dM}oNFSj(EDl9Cc^zcf`fdN=(7Vx13arTi)v>!XHY!wPbdx6l2f&yon+*m3c z{Fc`Q6_t1;Ge3gHh?9pz=<3FDl~#;w%TZ3TIER$@AHJ^W9e2U&l%yij^W`7|qjPtpMmd5%#{r=4|+>=ib}H9}$1X zjQ!6K1+)0F1CapLJ4zz9Tr$EgXw#eHp(-xfe$gU>6?3_ znRzFDN?n>`dFx1w6Iyp?@lH**LPO8FWFL3iH<(1&J5Fb7#OH3z8r2rg&D$%g>p8-7S<;PNC#Pi1S1sZsffOV(`N(OE=+x?XH|2E58zR9zKJkm4Jq!t% z`6hxW$|KIzK&jPAfyKi0_mmF1=0bsU;$S~aD#T0#q6+T#o!#UODAXE^5!ok?u*kDA z2W5nJiL;RPM(Ht1*_9oELz_`RYve?WvpdHiEmD(Hk(3(5#_6{nY2vCdTbvG~{E!F# z7NgSN1e5ApVX)6dk&sx~jwf0zqXmYpKZsJG)SxAXP2{9Ms5`^~GOxYKQ$+)`KrGpq zefZ)@h^G%AaiA;W4hG0E$h7vj(8Z(BBK=sHgH{-(NcRzimNC-RFvtdc*ySZW7yt2` z!|L?zrj(Ne`$I&^GLB|cramjdf$^K95Cw`o&OAb2L|>|FF~Ll1q%&=ZU@!nY-r%P^ zT#S7cYCpQsD3J_vnDSAGOn@+wf>dU-&`OvwM41c?S~+$+`y+9mPpEm;gOq$!;;LzZ zzToVSml@4LswMVwc6k_}ImZq)fBg~VAez!eilmgvWXF}{yn&g7W{o_(MipC(@)i2y zr^T9w<#_Mx#PLRX`Z48-q)?!s+0ussD)msdZ4#BGQpUC+YLz;NC3sebp_rOZj+N3B zdg%xgBdsFZCgL9=YNa-LN>cAF+9we!TnE}bXp;*G<|VQE%9Qpn!zq4`MIFX>JGRTZ zXDK9W$~?{$`c2j8@(pGU1}e=~+(7t3mQGCdz@$UQmHl|=B$j7-br6)<3Rkj6Xg1z1 zJg(OC+Rxes31@(D`Oaryf0^rAQTGmWF7>O-ot;?cB>&{C$}6eoPiL{=_fuk#>sdrs z_iaAr{=kr2e%>Tz<#YUJo-^jchLZZ<#kn24QTS$8Keyx+5!U-)kk!CS;wX=W4=NF(JTLvbuX`cEh~zl+rkbgHTMkY)_%cp zA7Qy!Auexd!)^p5^;3N$ZD^a;{GvY`7w;H1QgoF}l)9GMON2iWY`3?%v{FOEI;}}K zy1>lEYfe+L|2o;ff0&i#<&Q`%)h1Xb^U6?2 z|FA0!b(V)$+7e>j_q>Rxr#JyPEWHqLK6_9uzn?3ld%A031%nv2k+zEr(s%pTJP_y+ z?`j3ms5ih+YuA;%k8Bw&UxseYhqbjg9&9vs3%HJ1ccFfCF7p6Fm?pX5S#)?^C}n& zYH_m~^!4cG0EPxqOsnnfXZ7OO@;C#tRK6M)GN&@E=9iyO6Y{Mu zF6kgqn_HN>zn-?Jrv8AvJCrZq5(KZ5j=2jxe-7dv$1x85%r02In4 zrIx~Dzm1boaF8Zvm{sExuf2CbQRI{)rwlU120@A{b!Jl`f&(*>Ag3%+Yc##d^`C{2 zw)OGje&2~__ychQu%a+B7{0@c4U**kZ#$twF=lWTE3z)j2 zM4bs_GJ5zaR5)d!)Y&)#*V3qS1c+xze-SCZS)xHa&S+nW8SnX z@|d#HQ`{>~-Af=m!)P~&5!2)qr}3O3H;OQMB^gZeP!Mg2kyU6wk$NqN7;7y(g~=?A zXDq6Bh|@Rcq%`l^`;}R6k|v{2K^lM%YjP0tgYJ|>q<*bY@yB2pEx6rT5<|Mpu}55< zIj?vvOLoDED=%d}MSYP+oW3;R*&|Lc)OCuSQY?+0OG<_KYPI00-6VdkKSSCqN5+0B||Z4aD^I`=kdVXXzMXb3P0;Y&Le!X`ATeY{SvI+@hah?JpgJLajBr18KyL)0w*@O#Dk z-?QyMD_>hoVi~K`1sT%E9xmf>bBWET607c0Z;|$bNOZ*_Z-URq96YK=hLiCt`y(ly zX~zL&Qqey4Wlx}+zusKkKIp6QbizIt>V$ts{oabhIk&8I$D!QLfYMMzv_`&QD)k#_ldg4q)gj~6`7GXP`;h%- zp{?dacGhvHNL7m7nUO*ZtA)}`qr;*@hyM?rWTrT{Y>;==^f(dvdPtp(mVH zOcv)CLTpy%vhyvK0$uqlun+r9`DT1pxWaF?>whB%n=dP$`kQ*QN}V@W*&p+rgJgNG zXwynfwnW$;cb)ZQI{{S~^Cdau)68Bgj}|zl4v`t6BwF^xwc}O$^F+lO{mfWrDopU{ zPVZ?$e>PEyZB?6BJPU?qBi9F(p5C4Zll&+5SqIA|(4g#yl8knWPB?8)C(e7MbK~Y2 zZBX$EuwEg#(ChW__Q55Arp9}u<=3N6g-cZnIia;`AS&wMHqa&q=KuL_WEZ$}eaQAY zZWOI>S}97kPv5slqkv`lJ$=ugbm$F}N%N&>qxNYs^W7`^DOSTh<+s(o<28$D=~g%1 zqPr~f$pe9T!*F|3{^1rh0)eXuhs){a*_6Yzcd$c8Hi5ze0U)ON86d=@8G;3KU@)3% z#(M@=_%LfqQ5|g%oc12FeAx>*q{qq|Kmc*%e@Q?1Q{lZgT@~Xr-LC2X_G|E6cQAJ~iV>e%;TGB`qsMWcdD^Ous*LkN`Jl zpG-}yCH(dyo5s%NiM&5m&^P-^vPz7&FB8hbyt$pPw9Y=Z*5TcFJD=+*%;WZMH}2WP z#cAx*plJs%qh963(En{=jkIykKQ8^=Fi5STbFIGcFg>}XU3YQ@S< z7}`S-$ox3$2uswO&E53i^I9QxR>^hy5 z^(c?lZVf@IHH}I7US(8s^3rcxDYd-y_<&94$SlfZ3qcB}D{c~$5SNow-B7ptR#88k z_#Q(ZK3>=;rzusbClBRCx)=nfOZVdLa$OOeW+rm7vI$6F24ruA!-A0X~&^=wjUFszDAT-yc^!38fQ!(|H4@RL{Ns#hN%&ToM+hB5xjK#m{~5Hn|K zm%Yy3UmSI)@xJ>Ob;Pp#VoMqW;tvoeL7vn#W}&_;KQW4BeE8SYXqZj2dhw_^@L8lB z9$OWSL8+5Ou7Q0U6*tklQ$u`5Sll%jZ#VjwzK@xwsY6*V8n9gwBYGOm6ZnZ=)?K3nQZ6%lt4Q)*!U zY>;MDo|)>szguo(04(rUQ^S~?jj=XJ2xy7Zn-a~d9_}VORurT*s0)}%*kbwkSq}Ca z{;KHzEw*l`0+UzUlbYjKxqnruEPuHtD_W_`bOsRM`Ms5`ExTpHJmH=sU-m5U8?dDT zuh97i*YfO2_H4o9ngX)8LueC|oMYLYew*u*nEZMon7?zK&+r;_Kn|5qEQt3t#=ayA zQASA86X|@6J8!cKuL3?sL$jb3FIK$-Z`U4c4ywUmP+dp15%Rz)o!1Nz^-2D-GqnG= z?Cz|h%L5t#PvHOD{Zw;)~(CTgXCGOzcHh@ndj}(8Wvy zf%?1Zp!?l8(-EoV&tS2jKr(>X|*6c`wCGRzG(95rASSZ1WxELfVoY&7)7@`PA zv|MMD4!r~590c%vW3CB>Cc^6CZiGMa%w0xbe z=2h8QR?C>O&-+8LP(cYwJyZHO*@w}oh2<{jb$3e3E7Zu9QO)J#_;P-|vCnu>MZ%WO zU4_u0F7F#Mz@pM*1JzK-urkJzgS`Kh_Extr$>znuAkx48Zt>)G*q-nOVBs-=4I=4a!&Ck_CnaX-#xd#hnv5ljLG;R%=o)0ZHjbTZ`1(*CnA=0ts^v z^RiQ z2yXKJov{YEX)0$zttfWAO&rY%KsZ9xd9UO`@mihV>bV1kpmkxnMZ8D@Xpl)QQN#v8 ztPfR4!Y1jCHlv=39)V4Ps`@_P{urDPz*qgsKTL7M%^Pq{(5M%NA_^g9BO>{G{7CSH zVtExXq%1WxBq-YU#D-TH8kxl@eH{iUvB1`q*}^E1X(U728V2N`$C$(gBx=LG(B=;5 z(qP0=zn3lN?w51cMV@OCNq}qz_GXq~* zh$Zlr-hZUd$hdeic`v5sgzLorge~(3Ts?0vvZ9!fFDD-_ZbZi4JI7=ZrHX8kZ24*& zT7V=Sj0cN0VJd5f;1n7|HNeWCBCyLi${)}P7u+&%6%}iVQXz&wVX6WG?o3Po^V5wD z``A)}23#X+yENCYuupD3xAuoo&H0Qa_-fqs6apHWxIvz7N`#o@pAgr51th8orxIO1 z?H;{)nE2AzdP~qph#KRsx0Ma!)okW@SN7;zUuVXA!|On6nrbDtMRR{VJ5O}>_TT@`T zMIf=*+4DA4cn(=lr5v;>@Ly0=Y`eTlB*=oa#~f(!T*HYv^v!bKMT-r+AgAlX1darWAec*X3=zeRg8;q96XV2N_)(b3{WbVY zgi*~|GRyfXgHRm3mwUZ)3b@`L`g8$aAutrCd0R&)&Y>WwV#@QuJ6sD5C8om&rKT60 z2VMAQMdPkfW^Gmy6HL-Fv09)RQ|(2Zps6o=6{Yvn*qgmZCOPrK2nJ4b_Quy>o=5Zx z*D2()>*i991%Pm zPCA`}eI`gitQD*mllF%0q8>8DzuO)E6vO|JjCer%=@}8b?T)kJ3f~qjHyy-91u_Gp zUx4ycK4OAF!76cm+pPbTRFw9T=fb=BnOO8~#)by+X&mt?ng6GXihk|@{dX)OlkgYK zb~I&ekW=HWwxS1TdPhpPIBvfS+o|_<^`a9@u0s7X|J-4}Je?&Y2iA7`Mw~;}!1Wkr zNCDu7>}W6Md5VRv#aY5|!zQ*%zJnI=N`fsNfs$|B=Q98&Hf|C{y7C3ffIB-&om6uy zI_X9m6dwA>>WvT)`rQ5uh0t5kyu&zIH8 zBhcCUq?5Ms+02TV8)RJbJJCJh)vGPCDXk#`n!zgs+2%ybpoCWkHm<}wpX@JS3GJ#C z;9i7e#zxq!&t~f%F{S7^9U{@bd7+%L8L<=BKE8Wp{L&7AHi_iW&Y}LYP);3{kX)tu zI=m`3)tgkqF8V2S`Y9PO#srxAQvGF^M3|E%*SbZ*g|m7{`B zyqK3#^e)C4!EjKJi=R(67~)8Z5`Z(i6|OuSkmlH*0s>{I!VC%Y-cA6XTQ0ybgeE3S zw>Y3A*nsjgfCB2tadA+#L!gorN@9~4I{5;OphOvS3e=hgKJ+ZrtPwPZMLMS+yzJK# zSzrMGSs1D{CPbh0WzJ*g#d5!Oe|G4IltfF6p@u|cnn-*RJ*^;yphv#=EFKLSns#LY@)Ifn6`mY{s?;AF5w zD^zPvM+Q*aV2SkUk0Uhe4&~XKC>Rld3az}R>k@IF-lM^RnbrNVo)lJg)LlC^!;w?XChieZ4BHN|n8~$4 z2jKatcmhOv+wlSq{(U^V`Dq`k`SX^Ke(veiyW6yNa}zY!6h6;ravHI0W-`D@?Afce ztcjDBy6X(&`KPYR%hvZ3Z~UqV%Stwd#6B$Cg0P?&>y4j{5#h&H`BpOGVjNsL0m8( zZ4Ph%>!!~;@&%?fT1UNIn^*4s6m(-6r4X*<)ez-;#0ZoJ(f!cYWrw zP%^tD`+FVZHNMGVM{hGXuCTWS^`>z%e{82mq<4bEgo%b}l`uh*VCk+C$s%=^Kb0#V0 z+5;Y|6P&LkSjv|}n#qdy$XwZYQJv;N?N3|jUez-`Gq+@9dd=BjdPwt-{YNU@qdL!{qMIh{{I~7X8P}A-5QJhv2muX#bJ|&ox|S2Kf*zQdrdu& zf4uZb=)+V``)U>W7?1hT;@v#|d0BkDe}B0z=koZn4)C=#1g?ku+dJ(&)O@>aErK$K zE#Yr$oNe&w1qYJ!%Ds`!5lQ%mbT0)VdszebjXUty(kA%j3Jw)Q7|K)vNM?!lA#j*g zRUfogN~|_;b*}1ORc?>)2=*94kiKClv{Z!E5UFm8bj4B+iR!2(LiKLR+A2Yh;fR(d zobLdRX3xQ2?LlbYK|B&TDc@ZQqZ^!1fy={t3w^aRCN$1qCr*0wrf>zJ{PLKkiL%!{lP(3^~PI4RKW3y7%wq)I3$*yZ9}KH%f}pVU~&X}^Jl{$XZfEK)x6FA+5Co*4fY zcy{`Ny5i9waV_5RodKumtYG}X^;I8SW#&EvlY&%SD7~^1$GXiQM|j^J#%kaxpdyu2 z{AfJPeTcU7{!Ox7aJZ<(*lien*6RsLZU(S^H}y+)qPI$H<+`-A`#Grg`|Fo2mfDi%-%Clb7velMh)klJD6dP&VU3Q;+jO2 zl!MhzhyR~|-KTpr9q#pPq1yJV3m)(`e?Bdj){|6gTAo9%fZCi8ha;Kupqm93`@*m&He}di3w*SyQ%LWap!c`;D1zTCooVCCB_AikxAWCs0I{X3^xSi8FXuZgo z9Shnq;NP0xc8DKrt1C-4B%*!v#3NHxose0A4YDa53Zqy*-%@6fi~+bQQtNn4Wa+9IZ%>ZG4eze3jx?-2W>e-v z<*SoL>SLlA>RYVP`6q*ktzQuC9j^|oZd_bgS2T7bLmF2|dsh4Z0=ZqX{{eD$BJBjV zcz&J+Os?)Nar)MIe!9IeaRbhuUcF^FgeghQx4t3p?DcF0tpH%UZGh(P11pv`ZJ$Ho zrRuI-YwYoKv0OqPhXB(1m((PA)i*fpM)`R?ll(k<0eu z7W^g9H=7Tbk9_CYWXB{U%>$QM42Ql52dd)Kc{UKQSky7>0AXd5)y@at9!9L6~MwU z62H~#BEJT3N(~kz%|<2`uIF=VIrs6zC>m7<%@j5j5X4E7edQBq5`C2HUL|fNGSYEuVa8T#Mkx1N=tAYIuz)15&{FT`rDs6|EaV4jDsQVlKkQIs z-WSWY)J|5jx8W$TXILoy2YYWB968gbYns~3jBRFSX1h&oEHg7RGq;(UnVFfHvCM5| zW@x)@AHOqmCcZg4dv8_EN$gkVa=5yTI0L;pbL z#2#z_yJ555MNKojE@d8Lik7~>rUnBANSoC0r8gl&XDDRb!_zW@aT7=A>+j5r5!;Fa z#Hi(%;c3Iwv%$g@h+@cPGfd5cQ41HP29@)~Pis0uFld;p+M%JuE;Y9<`k5lcL)p_e zu}7F&V1Tv;A<{!7J=5s4%F>Ev^&tpOwnzvve*AylV4SkuUQ7`hVG1ez>mb6{H*kw^ zHQOFJLc}11iDZK~=_s$N@T^G&`l3gJG9fLpR^`O<<=VTv;hQ+Jun}nDDFe_Pa?QM! znAlX7xRl50l(hJgq9wr`R)G1*kgAtg>$C)b6rEYXC@ed_9p-#TIB0yUEq54!RfnF9 zwGe)J`dOVgxJ}COMYG5Vx!ik&C&W7A*LW>P)JFFtcD3iRqx1FVT;5`5CG+>|)tGoM zEH3v0ox`1Cw+i0H?q`C9TU}4d`L}z~t*v{cX?xIu^H?OZ&YVACi;weAB{j_gfdprl zMw?6!glM7tFDD*pDM*cj(6QK?cR{4at=t}cWE~ng3N3xgMc>{qtkb(rqkkHeE4vEzr!IxXsDXv8`jME1Dc`pR|$b zDV?OcrkgpOmS#5FpDB;Y)Z%wQ_fhH`QhXpzx0Ec8Hdb!ql0!n1<)oGWR_GWR!?phM z!pHBN_`)Ww5ndXD#j~dk70Gyi7)sGNIZM&~c)?F9cH{<+;&H?CIDv&IviNhY^v~?= zJ{hiWN6-S@bw1nibslRZ8I~{Of_knF7rNe-fa$`ma;yJyoqtnT_&2ysI0;p>DS5j* z|Gac3@17+HOq4*u-)1xo>_F&D2LeXSJ*1EsLr;{%)G0v9oSj}}Mp_JYAsxHFT zcH{71q@1O}cm)Y-_GX)#d_d}fd+IFiL9sZ6o5rxY7}oY{OU<>D$QwWnU&?Hr-LBno zhk%b{#0^;*|GMD9rijcFiJDqxcWp1y4B{JA1bgnsA6m?dbDO7B(C@QOp>?TtsMQHQd0U2J8uJfhy}kMi}&6VsA-$L3Frq|Jd6O&QkV zawlr@xtFKcrC?JAKMUBZ9-%}niU|Ak#b02hEC=MPZ3y>Qv>V_eH~qt*N!fprAH zjiN(ZRBUdj!yh5ushh9``Wk%UH_o08kD+&o-+upE2&(`7++wt=a#qyax;f;eCcN_S za5}X8N&}&r+J5f>KX5o98KBy?RKD=+P}A@I%B9zmF!e!jul@ZKIAJ3}PcgGZEHSBT z<(2L^>s;RN{-;)6X6*@}-LWz`Ox>=OZ3)kPRuOk7+g$g7zojOKFRw$JJnN{wZ9(Vv zi}xhzRkmCqJ)*Xa1+z9Or?-FY-DWsDi~g@o#G*F-h03(!p;8Jc{qP)Tc#ON<)%81K z5n5a=)r(ETWHP6#42B=|hMsNW8(30}|H@XV@4m{e(o^ zNjUDkc+3WR6R`9JkwK6}{FNen+Ta*yszW+P<8d>Oe1l^T;>aAI1+&!*tcIfduDL#T zMz*PjeG3ZWw*nf$<2Y<};|Vwft$Pv7_8Y0(d@Eh^ubQ~7Iam$kgfjoJ@$qjTsMlBD z$Li>=)|7PB3Hws4<2`un&Nt7(LB$I&;s@P&>@r*Deq|t&y}zCrvnc3k^v+mt+x-dn zWEi5BS{>#uM$=&~sVbzMOUk*(;2>xD>bk+DUvn^UFEs_o6*s?^7*}pgC#76sa**3^ zVwQ^4Zd~NR{%{V@Uwh5Mh8@!|{Q69a>*20SdycQSBsTS`JgvP(k(v8}rcZ-J#qa&pqaIr#{QrvCp=nW8H-Ke0Lv? zHw#|N*{56IkWSsz_=`@mUy1FmKSE90sF=~mLK90YJ*1E_m5!+S@h8qj*Yb}9P7s1_ z`W>)ikP1V?|M>Gp-G(g-@UsPdM4RkN{Pi39{MX_$Xyo%+=lc=78F%UAB6mlVE48wBPTZ6JcUS_L)`54G2IO?4!w$#3uP9~D{QUl4y$@J z+j;mh)M#ijt$_72^>Y5oQ@_sCkJTxqX^yPjs^rVrGPJgGYZ4iwmwY)_!gnrS}low*a^bcTBaF)TEe#;t-H4X?W5*w|6)qHTK z6Bp4EOLqRfs{5kGWf^z^q0;XIRmPx5c7S_mf$IAUFyv!Xaw_#rhGar6KWB`JFyPR z@*PKD$ECxXSG}F$yrY57O?M@?xcgqXtRJ(agm|rhBhqZ~2EjVt&M=uiX@BN)Mk$DG zV#-G=YNfA{$^j}qXoV0I{L_Ecn9cwI9Jhe!n9iz;4(}yIk!_&*VosQ;Lw0spuC+e?`opY3TGAs*#eWwsU~{<-E^x0!CJLjFYR3NZRvcR zH#)>)g+=pG?&M^ffM|S?d zJKl%>A+2g4p7k33Q4cE_De8j@-YTtx}4gLGEQ^?DDcKvx{{)h zHXOtjTVs=HJZN3}U^yOD9L2MV8X=^$WYnp9%+YOP0WZ%CY%8VC zD@x-{S?~JoIcWnLbs0kt{R5#2W^@qq=udl6KN1}^gR>_u5Py12UT6ux>9LCMCz{@5ooJqd_j z6j?rFD7nbc$=s@{+%I+GG7?-rI$A@D5f#7Al362zF-1PBxl&?{>OoaaZJxPNk6Alz zgIZP&Y1qyj2!09y9P=ecAYEW5SjpFY4j z%wBR*VOmF1v?hxnTs}!p<#t11ijArYQ%cHSy_kYljcjj1wkO!4UpAajnTp$gziz>UX%Sa*D6r*-JdoWv4uSI{Eu--ZYQEeTaSbb zZp?-!;Yj47`I>Y6PXwb1-QTl=vtwSVIFi;zJ4LU3jPWV39XPC?-f1N%VM_% zlYE*!s}Gw-qjs5%+^4X=vxfZ7@I%8C-mlx!ef_C*GEa(k)qx%Qso(l{&-XaTd&XMu zhU=~*8>|p>7l-=mHLi`(E)JpQR@j6K9m%PVavO(8bxV~mw?z{&-lOS><)^mrD3ZyN zvVK?OI>tO8CL5r^F645MC3-1BmbnrTr(>Q)dYu ztvVnFoBr@mfPUi=Gz!PmCG>b}?f!Eu=Gl~f#fJz#)}-YtGN}-me;Q~3m?UJKCZYprEo%$2!trh z-F`c@4~s0pI$iil8R#JB^1aIqJQ9u{0~#P$vM-ui%~(3y>!K{?`9MmTA^RxH+B2#y zX>I$cI`10R^(eo4gn z7oR7BvXiUGp{S(XN=l!cVX_Q=4+A=D93Ko1F38>wfsB=yT{(ZjF*TVMj_?>zL4qkz zBU&_GB?UA3KrXzpGoGS^iQ{~J4f?)7yH4Fm>f+`?3tt{wPrS^?iD;!PxpQL6n_Klt zzmpvyqvRi&mdE%)CtR2tXgxPNoGc zFU6gOmH{f;HcChsZzNUYjTSj~o2FtKi1_BbeD&MA7S?c_u9+QOQk$!Q ztHG}GB}Z1jlMa?^q1N-`$@eQ`Y?m;Q~0|XzxSbGuibv!fm?a2kA+YC z&0|%ahSADm`PKZYd)gd5X=Olqoyz@*YVBC_H!AhCjF{jaPCHCPVV0I`YXe+S7tWfNZ74(rL zt86tk_NQBnLG?aM@oBSRio zwOhfNFU}v3w-u#|%WDqQQpmIpP4%R8Oy>K)pq2dCu3XcyxyD&r%8}VEi)t1~p1D0T zU^QOJtwP>WE>iHxNYK?gBYy{|zq_|E|KGEDqc69dBY5q747C(LGt_X8v<_eR_0U6o=*=IYTsQ6!YU3umJAfMn5`-p zSA!Wco{nJgtw%Q@7+M1rCqr~v<9do+Dmg}cmvq=4$LI>VqyT9YnVg&tY1Akp&27Ay*AXxT(my4BR;~MRFUn`?+E{oF1Jc^4n0r>22)ie1_ zmZ5{wORuR3$$9=rE?(_T>dlZaTQ-uw#g_q-Q=@m)G1y&+@R;0>_ZNbaOs1X7&Rlr8 z+MwM@*)&~qUR-TE&bx<2a^O$JP2#W*yZj>px3A$aUeObM&6j|Qg|RbNS)!3tO^LTB z^pq7ocBs)@n3r+{MW!Tm?$JM^j4&^7V1lQ9@_q8 z;(~rGsLOK?X=^H5`nkUrK&%qB2Pf5Yo#hCC`~7)9q)8K_KY1(DFDXXZp*+K9xW@TP zUj#$;QNygFiwo)-(I@{KTV3=go?Whh^RKz>g$Ke-f@>l&*ih;sx#1l}%Y^~H8Z9V@ zcg=NVb9iE3TT(*5SXqoS_rDeyB_qrJQ{E5*>qqpwPv^57ja(44Sedn};!*`UUfTAV z1d?G&{!q(0W~jnUwJB6$BUkR<>hvXqts9hJr6NUPR4SLOL_?IyjV9Rc|De-Ga<4%U zlXn7W>`P)$@KVrLjwXzjPF755`?&vMn<1DfBthpvLsFQ7;edU((-WWa_~Ybi3-s26iiYh#5g+RWn>p6 zefS9KqydQ#ka(HJ;xrLVB|1kMt}B@W(phW}t5Z^?=bYFm+;c;?qzHm&zo+|iajxk~ zv+jlT5$_L$JWQdLyt)y`kS^zH^JIu&1f@2Je(1e0#VTVE-7(CX0O}`S+#vKxW;EU( z5kh@QN(6MVG&bT!a%tK2=#~G9H^l*B<#NpEmEl~x-%#^~@U1l2WapvTf0QOhm;`X3 zoOV>I7sFPjMA{2Y=}czwQ~jtvGLW_8jBtpuY2c#&sTjTrY~A=$@-AOktJWLLU6vc1 z&tm!csdyxF1kTqO^6);9mT3nK{ocSeQfY$yo>M}D49^p;R#x;|gL73`h3y}{32U+h zKKe|9UI%cHmYgp$vQJR{X?CW2q+$Vbfy>$?I&Zx0VELuyg*tkuj)2&!sS;(zV8e9# zmJ(xk(zyl0t&_g+0$j0oaf-DNogpt%Tu<`u z^DPYc!2rpaS8jF5)Jl~~e0v|HSAzdqY#aUl+$XPd*E9z!i z3v?x>?Mr@188Ei6-_nYy$9;YJI$OI5>E+lk52mov!N&gYU|~o3 zIJ<_xjagr#Cg9YyK;{0TRhvY%*ZIkT?39%a6T-@nTj&yO0~cIVt}TXfX+v^sZE3-Q z8@v~0<+f30EiNW%uaUMSqx;CFq^i!}5ILY1+fk?VCl3e)3RR89@9zS zbdB#aSiR*j?Yis+3E0sfEGy4?49K`s@e!);7El0mC=x0-*CHwVGub}rUephk#%eDsm`&%r6z zdIXrTn~Dsw<7Ij{Gmk1Ql0)?Geydr}qVc5b>Fg z!mG$vDPTlGHW!ug=*z3T0|}7SN7W-_vabBvhuX0M1;2R)9%Azd3MRGk2rAn8>TjUs z<1h4et@`?^1@u={37LLwJ}40q#Wj4@)j9`dmBr_{<#@O7XDRV?22}o(OX4f{fp$k?tJ4R7bq0GL zV{9~`#=`2CenkL?6Z3~`{iMcOK4%{Kx)t(}ah?N$Kuv0_=o5N$ zRB&ULUP3fiy~}zOE;_W}e}BG4&>Ws1|DngY|C2PQY35~+RbK_ZQPG8mqgDUN&c4H) zH{Qk>p5nhvt~KyicKFf-*x2^RgSqhCQElmU8u68M|3`lHz{jqtAEWCHO*`wlCFvX&(xEy@^bZeB(FDjp{N=39 zGH1|AYl%FAarUxb5hC??{m@F$yza74*23z>K3Iz_!GI&3!{&$X3XV`lXT)D^;^D7m z)?dw%*8jad{6+%LU`+xK*fhQ)e@eOX-q-F6%l6cKEv1#Z!u#0Sq8hzFMKz+nm}_{> zQrYM0o%X5iLrT}>Z0apum}e9c%S z9#@eoT}@de9wvfm&61n9smCHN<}U@D@RW*9Y#1^IIclfHD6jKv$VdoJ_Q(;_G#xuh zKK>9WJ;|A+ZaH=uv(KKT#!j`Ci=UEVDVXs(UDY)~t+ACi`e{0rx+oF^S z?I8_#O`qbL?5XMDw|aX0)Mmca70sNgL#~gu|a)6;!O-_=O|32 zzH#%2AFub~Y@SU%prefU6_-3o}uWy#F92D#v56sWoOq7<5U_YMMUAd00C(t}JT+ z6OZc0r#X5|6mxm&1yUyzyYIc%O?9|4klc8$?%Ij3&%eRUM0?G;TI>c;n$NX}Bf(UN z_`iup1ER`&(}`~Md!p6OP2APD}Co|!O8AtrVNu) zfSehO=@5&Lqn}tL@eTqEwKK~<4)tY(MF6PCfSaQAV+CH266U2KF7)hlaL$buXV&_~ z4Hg2ZXB?%!ReEv41JJGRmW_8FbNGW?aF2chnR>^UL0NKebay=3twY({IcxxmTOF;_ z5*Dt4Ar*Ba)xW4V=gHz!A*s|+ksuLGPX(y2x~_hzP>m+PcVNLSB5%hf6)+P+ z=nmJu^}SN->#Cs3$*RZ|HxQUrF9ASpIyHHPCr>ME{DW$GMawaOt+SD!RI9qmj3Y|q z)GIN=Rp`K9%aJfNt0g*Hnixwk>xMvBj=~(QGwy{h&mQ;Od8TWPAC+5B+3#L<>>+2} z>v`pGz1moJ-KF?hci&y=fNxugf3{?hxIOFyAkN-DsJ#e@Lo!|@7na6Dv&!8BI9$Fx z5?58;hPfE&=>cB8W0+ikC~w@%J7Ldffq(Ex^Sg0Yi z?Ste(2VLO%R#wPYt&-APeKy0#a(}-$S$gQmE5TBt#sqD#ymc4qVzYR#x_SIqrXx+g zc|=oPwc2`JyI;!KT6RCU=8Q09`1a$v$xYkANWg3E-~n-B%q z{dnKA@tJcR0OdbL7MyJT^0AJK9LSR~M>??0bSVeOm1>`bLUFCNVi^KOB=}D94w2cl) zK#!ZbN>jdO8>|ODpWingoD=Gu*9E--mgS_grO=i0c*3W;j}!Uc?CV-Vnooi4aPe8| zr>yJqd?-7?9mlm)z1YbfE-!6g-C^aG63f2~%-u`2%&vfXLPN7r055;HENSt^FPzAC zqtS^-ji?Wd;j15~rPCYD8nSk8-9P^Nu{C|lNA{>z^;#s30Btn=;0t|4+brTqGQ73h z6o*t19t8O_2fSz1Scp;_A?7R`=2D+aEb&}p%4RL376%#~Rjhu~s5MLLPqRM6K+x}( zSz~}_0j7!}dGRcxzKOGQc&9g=uuX zrGz6!liuIamiz3$hZYa`4;UVohEG~d+AQ-jnF@^Dsm=

  • AlFSHfR7r6?l2J0av+}BLpvZxD>+}gK;H(!MdvUJm4&)Lcu zs0%r5oB)v#$z!=*8N~FwO)=y3EqT~j{%2L@pNPZEIvexdt^0_*Z#^}@cgP;O6zVGd zBY^%(Fh>KDn>%3^xyPQ*uQyFP?rrPO3}6tRlkmG@|IE#Ma`qR-yIO90K4v6E zr5BFmSxk;bbm_Qd%-&qjHilO{);*f)h7AV3$kT_DWP>-IHO2?h-(#S~9$bO#$Zn6f z9<8v3A+6y#rc+3}W61Qp%ovQr56-I>l{1mMQ4OPw1nIxaj&geedE# z8=nNzAL@vaPqhJedDgX#=yH6xf;i4f>{@i2^y!3|#T~$oRy@DDw1}?eCWxAG48sMY zw}-68TC(ri2LGmcr}vj{Ey>&ZX#+M0bs<5=SYw7e_IZIN<&rPA2&ibrL!YU38JC7Mg+>=?hTUyJQ+@bs4YMG{! zwpMA&Dk{yBx_XPBZ#=Oh83}qkm`(Ih{fI8^+7ta^A(en9MADL2BQtv5R^TIkl!Y{_ zU1!}cP=Fl+IOT7@S6(I9sps}#CEhO~k}2X@j7VD7e4cok^>VEp(S08@sH$uT{jn;cTDLBryFqo4tJ=&^*@9N_|??Z3K$H=^QMdnc{=cB1wbpbjwBbGuhX?pM%9~qXC#cMp;m|7 zSFZE8NpU)0BuR?_&ZVEkmFTnGBq23%SnN>|-|oMzq~9a>tPF4Ww26ai3n%hZ&IoYM zbikXF*lOV`$O5KvamrIrg#1{&V?M9Xc5t5P?;9|vYnN40bYs|vK~4)|rcb|j{BLAM zaKFs_CA*X(CLNv1fU>#H7kxmKa4F-G%G4ydSLK0^s#{eZPLB#F z>;`6Q+>T)oN>6+^<~4@%9hnPPHJ^3b>{k=GbFfuY*LoHYK*+8jXJ3C##|$6u(N*m! zzLC_9r+zCbp+pba(K)$c;PNH;|&}lq>wO_5c zxXA48%nRT`+jegE;=?LvDV*ciX-QF&-1TNE34_wQe)%pAo7{-^tteEnza~%=vlaRo znxl&fYACFMZG%3XF4Oq1;76$+h5{&Bsx;S_vb1V1o=+8Nyn$%=&97Ma%lW9$IEcTr p>$l1g;adE<`I?v&`h5n+suA*8gMO&|;%5$UT`{vYEi?H&=6}HNBnJQh diff --git a/docs/src/assets/performance/profiler-tab.png b/docs/src/assets/performance/profiler-tab.png deleted file mode 100644 index a6d228d735f6198ec86b00eb9c2238a409545ba8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54993 zcmZ^~1zcNC^Ea9_#k~|L8d_SQrML%oC=M;I#ob*3#R?QJ?!}9{ySux)6FfkWm*4X| zf4TR)_vCYO=IqYwtnZ$k?*uEzNnoLqpaTE^EGbD*B>><>(=)w^iv0X<^3W>@004E( zL_`#%L_{bR>}`zAER6sF+9;<;Y3UdGuLHr2l*<_zKQaQWUc4QgA{>9GB>aOghCrKx zJv`TUo=HwL`4mO8aF0f`kb^#()>OUtM@g0WEDq|@ZyA#+rBLh?n3pRztan{dw({>` z0Ys19iX_T*jJ>sN&%R~CCx&ndGhag-to&PwcwMuQ?#ZWfMl<3;RgF8*9tWni?4qs9 z7na8Olv?_?M~yct*jp08w#?MNPN2deyS!6m+xS)*4K|-bdzLvo{wkfo#Q5FYb<%Ye z`hp&RU4O(M0`EURW|c@6X0flYhtDpLs!a17IX7RbN4rG6<-I}cqw9yV_6#Hzyi!K>}(TD`u5_!lmox zroV|i)E80d#;czpzAXLryYm`!PX^_YqDRDCrBxPn0H^q+IiAq6UK&Yl26AjY*La+f znv}7uEa1~KjS4^lz5;-rDd6)D03-n*{fh62Axfg+{}F$F<9lc7=x7UJWOQ+HVQ^t(u(3B`Waj4PW@KVvWMQFy=Ad_Qvv$;X zrMGsV`gbD#m5!*9gMq!7t)rQZHRV6)>VLO!a^!pW?jJ?}ef>M1My_W6qsiLgKgD`3 zAmcwVjLZy7jQ?L^j%LRHKVtvH{9Ei_<@&ce-hUE6wyjRGYUVDHV*>kQ}_ zm(pquf)Kt5*OH<+c`}9ZmAG=P&d2DrtB<#* zc>;X6cX03<4yy&NadG$Lo^SMd_Yz)$4NbVS-bA-FTCbg-;;HJTk1wJ8uQ>TER9H-^9`~%d@l9TAc`-7B-zMQAT)DsM3D@ z!tC^qy>;^5+Sv(OsI~x83ZR$lf<)fwcI}r0@{a#lv*J7!zeSNxz7Ek{TF*naJ8Y16 z+9<|9j;a;VLX*}iC_%=e91++^L_|kNE7V#qE9A+MBTit)Z^NJ+b>I_eY3bv7AwT4} zoAd2Kk&B(-Fzzm2-IP2FoV!|wT{(=!Dzizy`#Rm$SIBpKm9Ne3Nmo;IWs^CGJ1Z+H zutR1ax*mG>L!r9$_C}^NMe6zLmBwOA{?b|tie< zqeg6Vc|K@Pj^@<$Nev8Ou&|cIZsD&{ZT_vQ^d^TdJn1gK8Gh=$&6A3M%&+gZQ)@Cx z5!%aR4hP$WZo)m`b#?BD<8^GO0B0Y7zUgdp%k z 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 diff --git a/docs/src/assets/rxjs/49/prototype.gif b/docs/src/assets/rxjs/49/prototype.gif deleted file mode 100644 index 32c33528c2cbfd161db7651dabaa8c08e91aec9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106408 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 z 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 diff --git a/docs/src/assets/sync-fork-update.png b/docs/src/assets/sync-fork-update.png deleted file mode 100644 index c8a1eea7dc6d7be2cd273c5e69bb89d75962e435..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72374 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 CD7ggy diff --git a/docs/src/components/ActionButtonFooter.astro b/docs/src/components/ActionButtonFooter.astro deleted file mode 100644 index ccc03c221..000000000 --- a/docs/src/components/ActionButtonFooter.astro +++ /dev/null @@ -1,56 +0,0 @@ ---- -import { Icon } from '@astrojs/starlight/components'; -import MyIcon from './MyIcon.astro'; -import type { Props } from '@astrojs/starlight/props'; -import { getEntry } from 'astro:content'; - -const { lang } = Astro.props; -const { data } = await getEntry('i18n', lang); - ---- - -