From dca6ff00a1015cbbeb202beec030574141b0a867 Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Wed, 25 Sep 2024 10:06:15 +0200 Subject: [PATCH 01/17] chore: migrate Ionic & Capacitor packages --- jest.preset.js | 1 + package.json | 5 +- packages/capacitor/CHANGELOG.md | 89 + packages/capacitor/MIGRATION.md | 32 + packages/capacitor/README.md | 11 + packages/capacitor/eslint.config.js | 39 + packages/capacitor/executors.json | 17 + packages/capacitor/generators.json | 18 + packages/capacitor/jest.config.ts | 16 + packages/capacitor/migrations.json | 26 + packages/capacitor/package.json | 28 + packages/capacitor/project.json | 62 + .../capacitor/src/executors/cap/compat.ts | 4 + .../capacitor/src/executors/cap/executor.ts | 96 + .../capacitor/src/executors/cap/schema.d.ts | 4 + .../capacitor/src/executors/cap/schema.json | 19 + .../application/files/index.html__template__ | 16 + .../application/files/public/favicon.ico | Bin 0 -> 15086 bytes .../files/src/app/app.element.__style__ | 416 + .../src/app/app.element.spec.ts__template__ | 21 + .../files/src/app/app.element.ts__template__ | 375 + .../application/files/src/assets/.gitkeep | 0 .../application/files/src/main.ts__template__ | 1 + .../application/files/src/styles.__style__ | 1 + .../application/files/tsconfig.app.json | 9 + .../application/files/tsconfig.json__tmpl__ | 27 + .../generators/application/generator.spec.ts | 24 + .../src/generators/application/generator.ts | 45 + .../src/generators/application/schema.d.ts | 5 + .../src/generators/application/schema.json | 30 + .../capacitor.config.ts__template__ | 13 + .../package-json/package.json__template__ | 4 + .../capacitor-project/generator.spec.ts | 172 + .../generators/capacitor-project/generator.ts | 31 + .../lib/add-capacitor-config.ts | 28 + .../capacitor-project/lib/add-dependencies.ts | 16 + .../capacitor-project/lib/add-project.ts | 38 + .../lib/normalize-options.ts | 26 + .../lib/update-project-gitignore.ts | 20 + .../lib/update-project-package-json.ts | 48 + .../generators/capacitor-project/schema.d.ts | 12 + .../generators/capacitor-project/schema.json | 38 + packages/capacitor/src/index.ts | 2 + packages/capacitor/src/utils/versions.ts | 1 + packages/capacitor/tsconfig.json | 16 + packages/capacitor/tsconfig.lib.json | 10 + packages/capacitor/tsconfig.spec.json | 9 + packages/ionic-angular/CHANGELOG.md | 89 + packages/ionic-angular/README.md | 11 + packages/ionic-angular/eslint.config.js | 45 + packages/ionic-angular/executors.json | 5 + packages/ionic-angular/generators.json | 18 + packages/ionic-angular/jest.config.ts | 16 + packages/ionic-angular/package.json | 33 + packages/ionic-angular/project.json | 57 + .../ionic.config.json.template | 7 + .../src/app/app.component.spec.ts.template | 21 + .../src/app/app.component.ts.template | 19 + .../src/assets/icon/favicon.png | Bin 0 -> 930 bytes .../base-standalone/src/assets/shapes.svg | 1 + .../base-standalone/src/index.html.template | 26 + .../base-standalone/src/styles.scss.template | 10 + .../src/theme/variables.scss.template | 236 + .../files/base/ionic.config.json.template | 7 + .../base/src/app/app.component.html.template | 3 + .../base/src/app/app.component.scss.template | 0 .../src/app/app.component.spec.ts.template | 21 + .../base/src/app/app.component.ts.template | 10 + .../files/base/src/app/app.module.ts.template | 16 + .../files/base/src/assets/icon/favicon.png | Bin 0 -> 930 bytes .../files/base/src/assets/shapes.svg | 1 + .../files/base/src/index.html.template | 26 + .../files/base/src/styles.scss.template | 10 + .../base/src/theme/variables.scss.template | 236 + .../src/app/app.component.ts.template | 17 + .../src/app/app.config.ts.template | 14 + .../src/app/app.routes.ts.template | 14 + .../src/app/home/home.page.ts.template | 66 + .../src/app/home/home.routes.ts.template | 9 + .../src/app/app-routing.module.ts.template | 22 + .../blank/src/app/app.component.html.template | 3 + .../blank/src/app/app.module.ts.template | 16 + .../app/home/home-routing.module.ts.template | 16 + .../src/app/home/home.module.ts.template | 19 + .../src/app/home/home.page.html.template | 21 + .../src/app/home/home.page.scss.template | 27 + .../blank/src/app/home/home.page.ts.template | 12 + .../src/app/app.component.ts.template | 18 + .../src/app/app.config.ts.template | 14 + .../src/app/app.routes.ts.template | 18 + .../src/app/home/home.page.ts.template | 54 + .../src/app/home/home.routes.ts.template | 8 + .../src/app/home/home.spec.ts.template | 27 + .../message.component.spec.ts.template | 25 + .../app/message/message.component.ts.template | 98 + .../services/data.service.spec.ts.template | 12 + .../src/app/services/data.service.ts.template | 83 + .../vierw-message.page.spec.ts.template | 26 + .../view-message.page.ts.template | 106 + .../view-message.routes.ts.template | 8 + .../src/app/app-routing.module.ts.template | 26 + .../list/src/app/app.component.html.template | 3 + .../files/list/src/app/app.module.ts.template | 16 + .../app/home/home-routing.module.ts.template | 17 + .../list/src/app/home/home.module.ts.template | 20 + .../list/src/app/home/home.page.html.template | 25 + .../list/src/app/home/home.page.scss.template | 0 .../list/src/app/home/home.page.ts.template | 24 + .../list/src/app/home/home.spec.ts.template | 27 + .../message/message.component.html.template | 16 + .../message/message.component.scss.template | 59 + .../message.component.spec.ts.template | 25 + .../app/message/message.component.ts.template | 17 + .../app/message/message.module.ts.template | 15 + .../services/data.service.spec.ts.template | 12 + .../src/app/services/data.service.ts.template | 83 + .../vierw-message.page.spec.ts.template | 26 + .../view-message-routing.module.ts.template | 17 + .../view-message.module.ts.template | 19 + .../view-message.page.html.template | 29 + .../view-message.page.scss.template | 40 + .../view-message.page.ts.template | 31 + .../src/app/app.component.spec.ts.template | 46 + .../src/app/app.component.ts.template | 174 + .../src/app/app.config.ts.template | 14 + .../src/app/app.routes.ts.template | 13 + .../src/app/folder/folder.page.ts.template | 78 + .../src/app/folder/folder.routes.ts.template | 8 + .../src/app/app-routing.module.ts.template | 22 + .../src/app/app.component.html.template | 29 + .../src/app/app.component.scss.template | 119 + .../src/app/app.component.spec.ts.template | 46 + .../src/app/app.component.ts.template | 18 + .../sidemenu/src/app/app.module.ts.template | 16 + .../folder/folder-routing.module.ts.template | 17 + .../src/app/folder/folder.module.ts.template | 20 + .../src/app/folder/folder.page.html.template | 21 + .../src/app/folder/folder.page.scss.template | 28 + .../src/app/folder/folder.page.ts.template | 23 + .../src/app/app.component.html.template | 3 + .../src/app/app.component.ts.template | 17 + .../src/app/app.config.ts.template | 14 + .../src/app/app.routes.ts.template | 9 + ...plore-container.component.spec.ts.template | 24 + .../explore-container.component.ts.template | 50 + .../src/app/tab1/tab1.page.spec.ts.template | 26 + .../src/app/tab1/tab1.page.ts.template | 43 + .../src/app/tab1/tab1.routes.ts.template | 10 + .../src/app/tab2/tab2.page.spec.ts.template | 26 + .../src/app/tab2/tab2.page.ts.template | 42 + .../src/app/tab2/tab2.routes.ts.template | 10 + .../src/app/tab3/tab3.page.spec.ts.template | 26 + .../src/app/tab3/tab3.page.ts.template | 41 + .../src/app/tab3/tab3.routes.ts.template | 10 + .../src/app/tabs/tabs.page.spec.ts.template | 26 + .../src/app/tabs/tabs.page.ts.template | 43 + .../src/app/tabs/tabs.routes.ts.template | 34 + .../src/app/app-routing.module.ts.template | 16 + .../tabs/src/app/app.component.html.template | 3 + .../files/tabs/src/app/app.module.ts.template | 16 + .../explore-container.component.html.template | 4 + .../explore-container.component.scss.template | 27 + ...plore-container.component.spec.ts.template | 24 + .../explore-container.component.ts.template | 12 + .../explore-container.module.ts.template | 14 + .../app/tab1/tab1-routing.module.ts.template | 16 + .../tabs/src/app/tab1/tab1.module.ts.template | 20 + .../tabs/src/app/tab1/tab1.page.html.template | 17 + .../tabs/src/app/tab1/tab1.page.scss.template | 0 .../src/app/tab1/tab1.page.spec.ts.template | 26 + .../tabs/src/app/tab1/tab1.page.ts.template | 12 + .../app/tab2/tab2-routing.module.ts.template | 16 + .../tabs/src/app/tab2/tab2.module.ts.template | 20 + .../tabs/src/app/tab2/tab2.page.html.template | 17 + .../tabs/src/app/tab2/tab2.page.scss.template | 0 .../src/app/tab2/tab2.page.spec.ts.template | 26 + .../tabs/src/app/tab2/tab2.page.ts.template | 12 + .../app/tab3/tab3-routing.module.ts.template | 16 + .../tabs/src/app/tab3/tab3.module.ts.template | 20 + .../tabs/src/app/tab3/tab3.page.html.template | 17 + .../tabs/src/app/tab3/tab3.page.scss.template | 0 .../src/app/tab3/tab3.page.spec.ts.template | 26 + .../tabs/src/app/tab3/tab3.page.ts.template | 12 + .../app/tabs/tabs-routing.module.ts.template | 39 + .../tabs/src/app/tabs/tabs.module.ts.template | 19 + .../tabs/src/app/tabs/tabs.page.html.template | 20 + .../tabs/src/app/tabs/tabs.page.scss.template | 0 .../src/app/tabs/tabs.page.spec.ts.template | 26 + .../tabs/src/app/tabs/tabs.page.ts.template | 12 + .../generators/application/generator.spec.ts | 217 + .../src/generators/application/generator.ts | 37 + .../generators/application/lib/add-angular.ts | 25 + .../application/lib/add-capacitor.ts | 17 + .../application/lib/add-dependencies.ts | 20 + .../src/generators/application/lib/files.ts | 55 + .../application/lib/normalize-options.ts | 41 + .../application/lib/update-workspace.ts | 69 + .../src/generators/application/schema.d.ts | 20 + .../src/generators/application/schema.json | 82 + .../files/__name__-routing.module.ts.template | 17 + .../page/files/__name__.module.ts.template | 20 + .../page/files/__name__.page.html.template | 9 + .../page/files/__name__.page.scss.template | 0 .../page/files/__name__.page.spec.ts.template | 24 + .../page/files/__name__.page.ts.template | 12 + .../src/generators/page/generator.spec.ts | 115 + .../src/generators/page/generator.ts | 66 + .../page/lib/update-routing-file.ts | 74 + .../src/generators/page/schema.d.ts | 10 + .../src/generators/page/schema.json | 32 + packages/ionic-angular/src/index.ts | 2 + packages/ionic-angular/src/utils/versions.ts | 3 + packages/ionic-angular/tsconfig.json | 16 + packages/ionic-angular/tsconfig.lib.json | 10 + packages/ionic-angular/tsconfig.spec.json | 9 + packages/ionic-react/CHANGELOG.md | 201 + packages/ionic-react/MIGRATION.md | 109 + packages/ionic-react/README.md | 34 + packages/ionic-react/eslint.config.js | 39 + packages/ionic-react/executors.json | 5 + packages/ionic-react/generators.json | 21 + packages/ionic-react/jest.config.ts | 16 + packages/ionic-react/package.json | 32 + packages/ionic-react/project.json | 57 + .../files/base/ionic.config.json.template | 7 + .../files/base/src/App.spec.tsx.template | 8 + .../files/base/src/App.tsx.template | 30 + .../files/base/src/assets/icon/favicon.png | Bin 0 -> 930 bytes .../files/base/src/index.html.template | 30 + .../files/base/src/main.tsx.template | 12 + .../files/base/src/manifest.json.template | 21 + .../files/base/src/setupTests.ts.template | 16 + .../base/src/theme/variables.css.template | 236 + .../files/blank/src/App.test.tsx.template | 8 + .../files/blank/src/App.tsx.template | 42 + .../components/ExploreContainer.css.template | 24 + .../components/ExploreContainer.tsx.template | 15 + .../files/blank/src/pages/Home.css.template | 0 .../files/blank/src/pages/Home.tsx.template | 25 + .../files/list/src/App.test.tsx.template | 8 + .../files/list/src/App.tsx.template | 46 + .../components/MessageListItem.css.template | 59 + .../components/MessageListItem.tsx.template | 33 + .../files/list/src/data/messages.ts.template | 62 + .../files/list/src/pages/Home.css.template | 0 .../files/list/src/pages/Home.tsx.template | 60 + .../list/src/pages/ViewMessage.css.template | 40 + .../list/src/pages/ViewMessage.tsx.template | 78 + .../files/sidemenu/src/App.test.tsx.template | 8 + .../files/sidemenu/src/App.tsx.template | 48 + .../components/ExploreContainer.css.template | 24 + .../components/ExploreContainer.tsx.template | 16 + .../sidemenu/src/components/Menu.css.template | 113 + .../sidemenu/src/components/Menu.tsx.template | 100 + .../sidemenu/src/pages/Page.css.template | 0 .../sidemenu/src/pages/Page.tsx.template | 33 + .../files/tabs/src/App.test.tsx.template | 8 + .../files/tabs/src/App.tsx.template | 76 + .../components/ExploreContainer.css.template | 24 + .../components/ExploreContainer.tsx.template | 16 + .../files/tabs/src/pages/Tab1.css.template | 0 .../files/tabs/src/pages/Tab1.tsx.template | 25 + .../files/tabs/src/pages/Tab2.css.template | 0 .../files/tabs/src/pages/Tab2.tsx.template | 25 + .../files/tabs/src/pages/Tab3.css.template | 0 .../files/tabs/src/pages/Tab3.tsx.template | 25 + .../generators/application/generator.spec.ts | 200 + .../src/generators/application/generator.ts | 49 + .../application/lib/add-capacitor.ts | 12 + .../application/lib/add-dependencies.ts | 35 + .../generators/application/lib/add-react.ts | 26 + .../application/lib/change-react-router.ts | 26 + .../src/generators/application/lib/files.ts | 58 + .../application/lib/normalize-options.ts | 27 + .../application/lib/remove-plain-reactapp.ts | 6 + .../application/lib/update-cypress-setup.ts | 62 + .../lib/update-jest-babel-setup.ts | 94 + .../application/lib/update-workspace.ts | 31 + .../src/generators/application/schema.d.ts | 18 + .../src/generators/application/schema.json | 87 + packages/ionic-react/src/index.ts | 2 + packages/ionic-react/src/utils/versions.ts | 7 + packages/ionic-react/tsconfig.json | 16 + packages/ionic-react/tsconfig.lib.json | 10 + packages/ionic-react/tsconfig.spec.json | 9 + pnpm-lock.yaml | 11026 ++++------------ tools/scripts/mock-project-graph.ts | 34 + tsconfig.base.json | 5 +- 288 files changed, 12416 insertions(+), 8137 deletions(-) create mode 100644 packages/capacitor/CHANGELOG.md create mode 100644 packages/capacitor/MIGRATION.md create mode 100644 packages/capacitor/README.md create mode 100644 packages/capacitor/eslint.config.js create mode 100644 packages/capacitor/executors.json create mode 100644 packages/capacitor/generators.json create mode 100644 packages/capacitor/jest.config.ts create mode 100644 packages/capacitor/migrations.json create mode 100644 packages/capacitor/package.json create mode 100644 packages/capacitor/project.json create mode 100644 packages/capacitor/src/executors/cap/compat.ts create mode 100644 packages/capacitor/src/executors/cap/executor.ts create mode 100644 packages/capacitor/src/executors/cap/schema.d.ts create mode 100644 packages/capacitor/src/executors/cap/schema.json create mode 100644 packages/capacitor/src/generators/application/files/index.html__template__ create mode 100644 packages/capacitor/src/generators/application/files/public/favicon.ico create mode 100644 packages/capacitor/src/generators/application/files/src/app/app.element.__style__ create mode 100644 packages/capacitor/src/generators/application/files/src/app/app.element.spec.ts__template__ create mode 100644 packages/capacitor/src/generators/application/files/src/app/app.element.ts__template__ create mode 100644 packages/capacitor/src/generators/application/files/src/assets/.gitkeep create mode 100644 packages/capacitor/src/generators/application/files/src/main.ts__template__ create mode 100644 packages/capacitor/src/generators/application/files/src/styles.__style__ create mode 100644 packages/capacitor/src/generators/application/files/tsconfig.app.json create mode 100644 packages/capacitor/src/generators/application/files/tsconfig.json__tmpl__ create mode 100644 packages/capacitor/src/generators/application/generator.spec.ts create mode 100644 packages/capacitor/src/generators/application/generator.ts create mode 100644 packages/capacitor/src/generators/application/schema.d.ts create mode 100644 packages/capacitor/src/generators/application/schema.json create mode 100644 packages/capacitor/src/generators/capacitor-project/files/capacitor-config/capacitor.config.ts__template__ create mode 100644 packages/capacitor/src/generators/capacitor-project/files/package-json/package.json__template__ create mode 100644 packages/capacitor/src/generators/capacitor-project/generator.spec.ts create mode 100644 packages/capacitor/src/generators/capacitor-project/generator.ts create mode 100644 packages/capacitor/src/generators/capacitor-project/lib/add-capacitor-config.ts create mode 100644 packages/capacitor/src/generators/capacitor-project/lib/add-dependencies.ts create mode 100644 packages/capacitor/src/generators/capacitor-project/lib/add-project.ts create mode 100644 packages/capacitor/src/generators/capacitor-project/lib/normalize-options.ts create mode 100644 packages/capacitor/src/generators/capacitor-project/lib/update-project-gitignore.ts create mode 100644 packages/capacitor/src/generators/capacitor-project/lib/update-project-package-json.ts create mode 100644 packages/capacitor/src/generators/capacitor-project/schema.d.ts create mode 100644 packages/capacitor/src/generators/capacitor-project/schema.json create mode 100644 packages/capacitor/src/index.ts create mode 100644 packages/capacitor/src/utils/versions.ts create mode 100644 packages/capacitor/tsconfig.json create mode 100644 packages/capacitor/tsconfig.lib.json create mode 100644 packages/capacitor/tsconfig.spec.json create mode 100644 packages/ionic-angular/CHANGELOG.md create mode 100644 packages/ionic-angular/README.md create mode 100644 packages/ionic-angular/eslint.config.js create mode 100644 packages/ionic-angular/executors.json create mode 100644 packages/ionic-angular/generators.json create mode 100644 packages/ionic-angular/jest.config.ts create mode 100644 packages/ionic-angular/package.json create mode 100644 packages/ionic-angular/project.json create mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/ionic.config.json.template create mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/assets/icon/favicon.png create mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/assets/shapes.svg create mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/index.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/styles.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/theme/variables.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/base/ionic.config.json.template create mode 100644 packages/ionic-angular/src/generators/application/files/base/src/app/app.component.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/base/src/app/app.component.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/base/src/app/app.component.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/base/src/app/app.component.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/base/src/app/app.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/base/src/assets/icon/favicon.png create mode 100644 packages/ionic-angular/src/generators/application/files/base/src/assets/shapes.svg create mode 100644 packages/ionic-angular/src/generators/application/files/base/src/index.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/base/src/styles.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/base/src/theme/variables.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.component.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.config.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/app-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/app.component.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/app.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/home/home-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.component.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.config.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/vierw-message.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/app-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/app.component.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/app.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/home/home-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/home/home.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/home/home.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/message/message.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/view-message/vierw-message.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.config.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.config.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/app-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/app.component.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/app.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.module.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.html.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.scss.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.ts.template create mode 100644 packages/ionic-angular/src/generators/application/generator.spec.ts create mode 100644 packages/ionic-angular/src/generators/application/generator.ts create mode 100644 packages/ionic-angular/src/generators/application/lib/add-angular.ts create mode 100644 packages/ionic-angular/src/generators/application/lib/add-capacitor.ts create mode 100644 packages/ionic-angular/src/generators/application/lib/add-dependencies.ts create mode 100644 packages/ionic-angular/src/generators/application/lib/files.ts create mode 100644 packages/ionic-angular/src/generators/application/lib/normalize-options.ts create mode 100644 packages/ionic-angular/src/generators/application/lib/update-workspace.ts create mode 100644 packages/ionic-angular/src/generators/application/schema.d.ts create mode 100644 packages/ionic-angular/src/generators/application/schema.json create mode 100644 packages/ionic-angular/src/generators/page/files/__name__-routing.module.ts.template create mode 100644 packages/ionic-angular/src/generators/page/files/__name__.module.ts.template create mode 100644 packages/ionic-angular/src/generators/page/files/__name__.page.html.template create mode 100644 packages/ionic-angular/src/generators/page/files/__name__.page.scss.template create mode 100644 packages/ionic-angular/src/generators/page/files/__name__.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/page/files/__name__.page.ts.template create mode 100644 packages/ionic-angular/src/generators/page/generator.spec.ts create mode 100644 packages/ionic-angular/src/generators/page/generator.ts create mode 100644 packages/ionic-angular/src/generators/page/lib/update-routing-file.ts create mode 100644 packages/ionic-angular/src/generators/page/schema.d.ts create mode 100644 packages/ionic-angular/src/generators/page/schema.json create mode 100644 packages/ionic-angular/src/index.ts create mode 100644 packages/ionic-angular/src/utils/versions.ts create mode 100644 packages/ionic-angular/tsconfig.json create mode 100644 packages/ionic-angular/tsconfig.lib.json create mode 100644 packages/ionic-angular/tsconfig.spec.json create mode 100644 packages/ionic-react/CHANGELOG.md create mode 100644 packages/ionic-react/MIGRATION.md create mode 100644 packages/ionic-react/README.md create mode 100644 packages/ionic-react/eslint.config.js create mode 100644 packages/ionic-react/executors.json create mode 100644 packages/ionic-react/generators.json create mode 100644 packages/ionic-react/jest.config.ts create mode 100644 packages/ionic-react/package.json create mode 100644 packages/ionic-react/project.json create mode 100644 packages/ionic-react/src/generators/application/files/base/ionic.config.json.template create mode 100644 packages/ionic-react/src/generators/application/files/base/src/App.spec.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/base/src/App.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/base/src/assets/icon/favicon.png create mode 100644 packages/ionic-react/src/generators/application/files/base/src/index.html.template create mode 100644 packages/ionic-react/src/generators/application/files/base/src/main.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/base/src/manifest.json.template create mode 100644 packages/ionic-react/src/generators/application/files/base/src/setupTests.ts.template create mode 100644 packages/ionic-react/src/generators/application/files/base/src/theme/variables.css.template create mode 100644 packages/ionic-react/src/generators/application/files/blank/src/App.test.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/blank/src/App.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.css.template create mode 100644 packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/blank/src/pages/Home.css.template create mode 100644 packages/ionic-react/src/generators/application/files/blank/src/pages/Home.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/list/src/App.test.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/list/src/App.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.css.template create mode 100644 packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/list/src/data/messages.ts.template create mode 100644 packages/ionic-react/src/generators/application/files/list/src/pages/Home.css.template create mode 100644 packages/ionic-react/src/generators/application/files/list/src/pages/Home.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.css.template create mode 100644 packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/App.test.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/App.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.css.template create mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.css.template create mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.css.template create mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/App.test.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/App.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.css.template create mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.css.template create mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.css.template create mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.tsx.template create mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.css.template create mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.tsx.template create mode 100644 packages/ionic-react/src/generators/application/generator.spec.ts create mode 100644 packages/ionic-react/src/generators/application/generator.ts create mode 100644 packages/ionic-react/src/generators/application/lib/add-capacitor.ts create mode 100644 packages/ionic-react/src/generators/application/lib/add-dependencies.ts create mode 100644 packages/ionic-react/src/generators/application/lib/add-react.ts create mode 100644 packages/ionic-react/src/generators/application/lib/change-react-router.ts create mode 100644 packages/ionic-react/src/generators/application/lib/files.ts create mode 100644 packages/ionic-react/src/generators/application/lib/normalize-options.ts create mode 100644 packages/ionic-react/src/generators/application/lib/remove-plain-reactapp.ts create mode 100644 packages/ionic-react/src/generators/application/lib/update-cypress-setup.ts create mode 100644 packages/ionic-react/src/generators/application/lib/update-jest-babel-setup.ts create mode 100644 packages/ionic-react/src/generators/application/lib/update-workspace.ts create mode 100644 packages/ionic-react/src/generators/application/schema.d.ts create mode 100644 packages/ionic-react/src/generators/application/schema.json create mode 100644 packages/ionic-react/src/index.ts create mode 100644 packages/ionic-react/src/utils/versions.ts create mode 100644 packages/ionic-react/tsconfig.json create mode 100644 packages/ionic-react/tsconfig.lib.json create mode 100644 packages/ionic-react/tsconfig.spec.json create mode 100644 tools/scripts/mock-project-graph.ts diff --git a/jest.preset.js b/jest.preset.js index b85c8b178..84dae52df 100644 --- a/jest.preset.js +++ b/jest.preset.js @@ -12,4 +12,5 @@ module.exports = { * More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format */ snapshotFormat: { escapeString: true, printBasicPrototype: true }, + setupFiles: ['/../../tools/scripts/mock-project-graph.ts'], }; diff --git a/package.json b/package.json index 1fe571161..c3c5295f2 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "fs-extra": "^10.1.0", "globrex": "^0.1.2", "husky": "^8.0.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "is-ci": "^3.0.1", "jest": "^29.0.0", "jest-environment-jsdom": "29.5.0", @@ -142,5 +142,6 @@ }, "nx": { "includedScripts": [] - } + }, + "packageManager": "pnpm@9.1.1+sha512.14e915759c11f77eac07faba4d019c193ec8637229e62ec99eefb7cf3c3b75c64447882b7c485142451ee3a6b408059cdfb7b7fa0341b975f12d0f7629c71195" } diff --git a/packages/capacitor/CHANGELOG.md b/packages/capacitor/CHANGELOG.md new file mode 100644 index 000000000..30f25c265 --- /dev/null +++ b/packages/capacitor/CHANGELOG.md @@ -0,0 +1,89 @@ +# Changelog + +# 13.0.0 + +## Features + +- support Nx 13 + +# 12.1.0 + +## Features + +- restore Angular CLI support + +# 12.0.0 + +## Features + +- support Nx 12 +- plugin rewritten with `@nx/devkit` for better maintainability and future proofing for future Nx versions +- update Capacitor to 3.2.5 +- add Capacitor `run` target (requires Capacitor 3) + +## BREAKING CHANGES + +- Angular CLI is no longer officially supported +- `add-plugin` schematic has been removed +- the `init` generator has been removed and the functionaltiy has been moved to the `application` schematic + +# 11.1.1 + +## Bug Fixes + +- support Nx 11.3.0 + +# 11.1.0 + +## Features + +- support quotes in `cap` builder `cmd` option (useful for passing additional options for Capacitor commands) + +# 11.0.2 + +## Bug Fixes + +- support `angular.json` as well as `workspace.json` during migrations + +# 11.0.1 + +## Bug Fixes + +- fix 11.0.0 workspace migration + +# 11.0.0 + +## Features + +- Nx 11 support (Nx 11 now required) +- update Capacitor to 2.4.5 +- added `cap` builder for a more generic interface with the Capacitor CLI + +## BREAKING CHANGES + +- the `command` builder has been removed + +# 2.0.2 + +# Fixes + +- fix Windows support + +# Features + +- update Capacitor to 2.4.2 +- add Capacitor configs to frontend application +- add or update `package.json` in project folder when generating a Capacitor project +- add builder configurations for Nx Console +- add `add-plugin` schematic for adding Capacitor plugins + +# BREAKING CHANGES + +- Capacitor plugins must now be added to both the root and project-level `package.json` + +# 1.1.0 + +## Features + +- upgrade Capacitor to 2.4.0 +- copy package.json from workspace root for cap commands diff --git a/packages/capacitor/MIGRATION.md b/packages/capacitor/MIGRATION.md new file mode 100644 index 000000000..1c2debb76 --- /dev/null +++ b/packages/capacitor/MIGRATION.md @@ -0,0 +1,32 @@ +# Migration + +# 1.x.x - 2.0.0 + +## Move Capacitor Configs + +With `@nxext/capacitor` 2.0+, Capacitor configurations will be added to the associated frontend project instead of creating a dedicated Capacitor project. Migrating to this new paradigm is trivial and takes just a few steps. + +First, add a new set of Capacitor configs to your frontend project. + +``` +nx g @nxext/capacitor:capacitor-project --project my-app +``` + +Move `capacitor.config.json` from the Capacitor project to the root of the associated frontend project. You will have to overwrite the `capacitor.config.json` that was just generated. + +Move all platform folders (`android`, `ios`, `electron`) from the Capacitor project to the root of the frontend project. + +You should now test the Capacitor commands for the frontend project and ensure the project works as expected. + +``` +nx run my-app:sync --platform ios +nx run my-app:open --platform ios +``` + +If everything works as expected then you can safely remove the Capacitor project. + +``` +nx g @nx/workspace:remove my-app +``` + +The `@capacitor/cli` dependency in the root `package.json` is also no longer needed and can be removed. diff --git a/packages/capacitor/README.md b/packages/capacitor/README.md new file mode 100644 index 000000000..9884be34f --- /dev/null +++ b/packages/capacitor/README.md @@ -0,0 +1,11 @@ +# capacitor + +This library was generated with [Nx](https://nx.dev). + +## Building + +Run `nx build capacitor` to build the library. + +## Running unit tests + +Run `nx test capacitor` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/packages/capacitor/eslint.config.js b/packages/capacitor/eslint.config.js new file mode 100644 index 000000000..b8913d723 --- /dev/null +++ b/packages/capacitor/eslint.config.js @@ -0,0 +1,39 @@ +const { FlatCompat } = require('@eslint/eslintrc'); +const baseConfig = require('../../eslint.config.js'); +const js = require('@eslint/js'); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, +}); +module.exports = [ + ...baseConfig, + { + files: [ + 'packages/capacitor/**/*.ts', + 'packages/capacitor/**/*.tsx', + 'packages/capacitor/**/*.js', + 'packages/capacitor/**/*.jsx', + ], + rules: {}, + }, + { + files: ['packages/capacitor/**/*.ts', 'packages/capacitor/**/*.tsx'], + rules: {}, + }, + { + files: ['packages/capacitor/**/*.js', 'packages/capacitor/**/*.jsx'], + rules: {}, + }, + ...compat.config({ parser: 'jsonc-eslint-parser' }).map((config) => ({ + ...config, + files: [ + 'packages/capacitor/package.json', + 'packages/capacitor/generators.json', + 'packages/capacitor/executors.json', + 'packages/capacitor/generators.json', + 'packages/capacitor/executors.json', + 'packages/capacitor/migrations.json', + ], + rules: { '@nx/nx-plugin-checks': 'error' }, + })), +]; diff --git a/packages/capacitor/executors.json b/packages/capacitor/executors.json new file mode 100644 index 000000000..1863a4077 --- /dev/null +++ b/packages/capacitor/executors.json @@ -0,0 +1,17 @@ +{ + "$schema": "http://json-schema.org/schema", + "executors": { + "cap": { + "implementation": "./src/executors/cap/executor", + "schema": "./src/executors/cap/schema.json", + "description": "Run a Capacitor command" + } + }, + "builders": { + "cap": { + "implementation": "./src/executors/cap/compat", + "schema": "./src/executors/cap/schema.json", + "description": "Run a Capacitor command" + } + } +} diff --git a/packages/capacitor/generators.json b/packages/capacitor/generators.json new file mode 100644 index 000000000..ffba6c7ab --- /dev/null +++ b/packages/capacitor/generators.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/schema", + "name": "nxextCapacitor", + "version": "0.0.1", + "generators": { + "capacitor-project": { + "factory": "./src/generators/capacitor-project/generator", + "schema": "./src/generators/capacitor-project/schema.json", + "description": "Add a Capacitor project" + }, + "application": { + "factory": "./src/generators/application/generator", + "schema": "./src/generators/application/schema.json", + "description": "application generator", + "aliases": ["app"] + } + } +} diff --git a/packages/capacitor/jest.config.ts b/packages/capacitor/jest.config.ts new file mode 100644 index 000000000..817c6ecad --- /dev/null +++ b/packages/capacitor/jest.config.ts @@ -0,0 +1,16 @@ +/* eslint-disable */ +module.exports = { + displayName: 'capacitor', + preset: '../../jest.preset.js', + globals: {}, + transform: { + '^.+\\.[tj]s$': [ + 'ts-jest', + { + tsconfig: '/tsconfig.spec.json', + }, + ], + }, + moduleFileExtensions: ['ts', 'js', 'html'], + coverageDirectory: '../../coverage/packages/capacitor', +}; diff --git a/packages/capacitor/migrations.json b/packages/capacitor/migrations.json new file mode 100644 index 000000000..2e9f85c35 --- /dev/null +++ b/packages/capacitor/migrations.json @@ -0,0 +1,26 @@ +{ + "generators": {}, + "packageJsonUpdates": { + "18.0.4": { + "version": "18.0.4", + "packages": { + "@capacitor/core": { + "version": "^5.7.0", + "alwaysAddToPackageJson": true + }, + "@capacitor/cli": { + "version": "^5.7.0", + "alwaysAddToPackageJson": true + }, + "@capacitor/ios": { + "version": "^5.7.0", + "alwaysAddToPackageJson": false + }, + "@capacitor/android": { + "version": "^5.7.0", + "alwaysAddToPackageJson": false + } + } + } + } +} diff --git a/packages/capacitor/package.json b/packages/capacitor/package.json new file mode 100644 index 000000000..9df74a0e9 --- /dev/null +++ b/packages/capacitor/package.json @@ -0,0 +1,28 @@ +{ + "name": "@nxext/capacitor", + "version": "19.0.0", + "description": "An Nx plugin for developing cross-platform applications using Capacitor", + "homepage": "https://nxext.github.io/nx-extensions/docs/capacitor/getting-started.html", + "repository": { + "type": "git", + "url": "https://github.com/nxext/nx-extensions", + "directory": "packages/capacitor" + }, + "license": "MIT", + "main": "src/index.js", + "generators": "./generators.json", + "executors": "./executors.json", + "nx-migrations": { + "migrations": "./migrations.json" + }, + "schematics": "./generators.json", + "builders": "./executors.json", + "dependencies": { + "@nx/devkit": "^19.0.0", + "nx": "^19.0.0", + "@nx/web": "^19.0.0", + "ignore": "^5.3.1", + "tslib": "^2.3.0" + }, + "peerDependencies": {} +} diff --git a/packages/capacitor/project.json b/packages/capacitor/project.json new file mode 100644 index 000000000..65e44ae80 --- /dev/null +++ b/packages/capacitor/project.json @@ -0,0 +1,62 @@ +{ + "name": "capacitor", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/capacitor/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/packages/capacitor", + "main": "packages/capacitor/src/index.ts", + "packageJson": "packages/capacitor/package.json", + "tsConfig": "packages/capacitor/tsconfig.lib.json", + "assets": [ + "packages/capacitor/*.md", + { + "input": "./packages/capacitor/src", + "glob": "**/!(*.ts)", + "output": "./src" + }, + { + "input": "./packages/capacitor/src", + "glob": "**/*.d.ts", + "output": "./src" + }, + { + "input": "./packages/capacitor", + "glob": "generators.json", + "output": "." + }, + { + "input": "./packages/capacitor", + "glob": "executors.json", + "output": "." + }, + { + "input": "./packages/capacitor", + "glob": "migrations.json", + "output": "." + } + ] + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/packages/capacitor"], + "options": { + "jestConfig": "packages/capacitor/jest.config.ts" + } + }, + "publish": { + "command": "node tools/scripts/publish.mjs capacitor {args.ver} {args.tag}", + "dependsOn": ["build"] + } + }, + "tags": [] +} diff --git a/packages/capacitor/src/executors/cap/compat.ts b/packages/capacitor/src/executors/cap/compat.ts new file mode 100644 index 000000000..53561fd0a --- /dev/null +++ b/packages/capacitor/src/executors/cap/compat.ts @@ -0,0 +1,4 @@ +import { convertNxExecutor } from '@nx/devkit'; +import runExecutor from './executor'; + +export default convertNxExecutor(runExecutor); diff --git a/packages/capacitor/src/executors/cap/executor.ts b/packages/capacitor/src/executors/cap/executor.ts new file mode 100644 index 000000000..a0060820f --- /dev/null +++ b/packages/capacitor/src/executors/cap/executor.ts @@ -0,0 +1,96 @@ +import { + ExecutorContext, + getPackageManagerCommand, + logger, + normalizePath, + parseTargetString, + readJsonFile, + runExecutor as nxRunExecutor, +} from '@nx/devkit'; +import runCommands from 'nx/src/executors/run-commands/run-commands.impl'; +import { CommandExecutorSchema } from './schema'; +import { existsSync, rmSync } from 'node:fs'; +import { execSync } from 'node:child_process'; + +export default async function* runExecutor( + options: CommandExecutorSchema, + context: ExecutorContext +) { + const projectConfig = context.workspace.projects[context.projectName]; + const projectRoot = projectConfig.root; + const projectDistDir = projectConfig.targets['build'].options.outputPath; + const projectRootPath = normalizePath(`${context.root}/${projectRoot}`); + const projectDistPath = normalizePath(`${context.root}/${projectDistDir}`); + const { devDependencies } = readJsonFile('package.json'); + const packageName = '@capacitor/cli'; + const packageVersion = devDependencies?.[packageName]?.replace(/[\\~^]/g, ''); + const preserveProjectNodeModules = + options?.preserveProjectNodeModules || false; + + await runCommands( + { + command: getPackageManagerCommand().install, + cwd: projectRootPath, + parallel: false, + color: true, + __unparsed__: [], + }, + context + ); + + if (!existsSync(projectDistPath)) { + logger.info(`Running build first...`); + + const parsedDevServerTarget = parseTargetString( + `${context.projectName}:build`, + context.projectGraph + ); + + for await (const output of await nxRunExecutor<{ + success: boolean; + }>(parsedDevServerTarget, {}, context)) { + yield { + success: output.success, + }; + } + } + + const cmd = sanitizeCapacitorCommand(options.cmd); + + let success = false; + try { + execSync(`npx --package=${packageName}@${packageVersion} cap ${cmd}`, { + stdio: 'inherit', + cwd: projectRootPath, + }); + success = true; + } catch { + success = false; + } + + const nodeModulesPath = normalizePath(`${projectRootPath}/node_modules`); + if (existsSync(nodeModulesPath) && !preserveProjectNodeModules) { + try { + logger.info(`\n\nRemoving node_modules from project root...`); + rmSync(nodeModulesPath, { recursive: true, force: true }); + } catch (err) { + logger.error(`\n\nFailed to remove node_modules from project root.`); + } + } + + return { success }; +} + +/** + * Strip quotes from the Capacitor command passed into the executor. + * @param capacitorCommand The command input from the user. + * @returns a string without quotes at the start or end. + */ +function sanitizeCapacitorCommand(capacitorCommand: string): string { + let cmd = capacitorCommand; + if (cmd[0] === '"' && cmd[cmd.length - 1] === '"') { + cmd = cmd.substring(1).slice(0, -1); + } + + return cmd; +} diff --git a/packages/capacitor/src/executors/cap/schema.d.ts b/packages/capacitor/src/executors/cap/schema.d.ts new file mode 100644 index 000000000..af7237e02 --- /dev/null +++ b/packages/capacitor/src/executors/cap/schema.d.ts @@ -0,0 +1,4 @@ +export interface CommandExecutorSchema { + cmd: string; + preserveProjectNodeModules?: boolean; +} diff --git a/packages/capacitor/src/executors/cap/schema.json b/packages/capacitor/src/executors/cap/schema.json new file mode 100644 index 000000000..46eab0d15 --- /dev/null +++ b/packages/capacitor/src/executors/cap/schema.json @@ -0,0 +1,19 @@ +{ + "version": 2, + "outputCapture": "direct-nodejs", + "$schema": "http://json-schema.org/schema", + "title": "Command executor", + "description": "Run a Capacitor command.", + "type": "object", + "properties": { + "cmd": { + "description": "The Capacitor command.", + "type": "string" + }, + "preserveProjectNodeModules": { + "description": "Preserve the node_modules folder inside the project dir.", + "type": "boolean" + } + }, + "required": [] +} diff --git a/packages/capacitor/src/generators/application/files/index.html__template__ b/packages/capacitor/src/generators/application/files/index.html__template__ new file mode 100644 index 000000000..4252e3f12 --- /dev/null +++ b/packages/capacitor/src/generators/application/files/index.html__template__ @@ -0,0 +1,16 @@ + + + + + <%= className %> + + + + + + + + <<%= prefix %>-root>-root> + + + diff --git a/packages/capacitor/src/generators/application/files/public/favicon.ico b/packages/capacitor/src/generators/application/files/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..317ebcb2336e0833a22dddf0ab287849f26fda57 GIT binary patch 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 span { + flex-grow: 1; + font-weight: 400; + transition-property: background-color, border-color, color, fill, stroke, + opacity, box-shadow, transform, filter, backdrop-filter, + -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + } + .list-item-link > span > span { + color: rgba(107, 114, 128, 1); + display: block; + flex-grow: 1; + font-size: 0.75rem; + font-weight: 300; + line-height: 1rem; + transition-property: background-color, border-color, color, fill, stroke, + opacity, box-shadow, transform, filter, backdrop-filter, + -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + } + .list-item-link svg:last-child { + height: 1rem; + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + width: 1rem; + } + .list-item-link:hover { + color: rgba(255, 255, 255, 1); + background-color: hsla(162, 47%, 50%, 1); + } + .list-item-link:hover > span { + } + .list-item-link:hover > span > span { + color: rgba(243, 244, 246, 1); + } + .list-item-link:hover svg:last-child { + transform: translateX(0.25rem); + } + + #other-links { + } + .button-pill { + padding: 1.5rem 2rem; + transition-duration: 300ms; + transition-property: background-color, border-color, color, fill, stroke, + opacity, box-shadow, transform, filter, backdrop-filter, + -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + align-items: center; + display: flex; + } + .button-pill svg { + transition-property: background-color, border-color, color, fill, stroke, + opacity, box-shadow, transform, filter, backdrop-filter, + -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + flex-shrink: 0; + width: 3rem; + } + .button-pill > span { + letter-spacing: -0.025em; + font-weight: 400; + font-size: 1.125rem; + line-height: 1.75rem; + padding-left: 1rem; + padding-right: 1rem; + } + .button-pill span span { + display: block; + font-size: 0.875rem; + font-weight: 300; + line-height: 1.25rem; + } + .button-pill:hover svg, + .button-pill:hover { + color: rgba(255, 255, 255, 1) !important; + } + #nx-console:hover { + background-color: rgba(0, 122, 204, 1); + } + #nx-console svg { + color: rgba(0, 122, 204, 1); + } + + #nx-repo:hover { + background-color: rgba(24, 23, 23, 1); + } + #nx-repo svg { + color: rgba(24, 23, 23, 1); + } + + #nx-cloud { + margin-bottom: 2rem; + margin-top: 2rem; + padding: 2.5rem 2rem; + } + #nx-cloud > div { + align-items: center; + display: flex; + } + #nx-cloud > div svg { + border-radius: 0.375rem; + flex-shrink: 0; + width: 3rem; + } + #nx-cloud > div h2 { + font-size: 1.125rem; + font-weight: 400; + letter-spacing: -0.025em; + line-height: 1.75rem; + padding-left: 1rem; + padding-right: 1rem; + } + #nx-cloud > div h2 span { + display: block; + font-size: 0.875rem; + font-weight: 300; + line-height: 1.25rem; + } + #nx-cloud p { + font-size: 1rem; + line-height: 1.5rem; + margin-top: 1rem; + } + #nx-cloud pre { + margin-top: 1rem; + } + #nx-cloud a { + color: rgba(107, 114, 128, 1); + display: block; + font-size: 0.875rem; + line-height: 1.25rem; + margin-top: 1.5rem; + text-align: right; + } + #nx-cloud a:hover { + text-decoration: underline; + } + + #commands { + padding: 2.5rem 2rem; + + margin-top: 3.5rem; + } + #commands h2 { + font-size: 1.25rem; + font-weight: 400; + letter-spacing: -0.025em; + line-height: 1.75rem; + padding-left: 1rem; + padding-right: 1rem; + } + #commands p { + font-size: 1rem; + font-weight: 300; + line-height: 1.5rem; + margin-top: 1rem; + padding-left: 1rem; + padding-right: 1rem; + } + details { + align-items: center; + display: flex; + margin-top: 1rem; + padding-left: 1rem; + padding-right: 1rem; + width: 100%; + } + details pre > span { + color: rgba(181, 181, 181, 1); + } + summary { + border-radius: 0.5rem; + display: flex; + font-weight: 400; + padding: 0.5rem; + cursor: pointer; + transition-property: background-color, border-color, color, fill, stroke, + opacity, box-shadow, transform, filter, backdrop-filter, + -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + } + summary:hover { + background-color: rgba(243, 244, 246, 1); + } + summary svg { + height: 1.5rem; + margin-right: 1rem; + width: 1.5rem; + } + + #love { + color: rgba(107, 114, 128, 1); + font-size: 0.875rem; + line-height: 1.25rem; + margin-top: 3.5rem; + opacity: 0.6; + text-align: center; + } + #love svg { + color: rgba(252, 165, 165, 1); + width: 1.25rem; + height: 1.25rem; + display: inline; + margin-top: -0.25rem; + } + + @media screen and (min-width: 768px) { + #hero { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + #hero .logo-container { + display: flex; + } + #middle-content { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } diff --git a/packages/capacitor/src/generators/application/files/src/app/app.element.spec.ts__template__ b/packages/capacitor/src/generators/application/files/src/app/app.element.spec.ts__template__ new file mode 100644 index 000000000..8f8178a21 --- /dev/null +++ b/packages/capacitor/src/generators/application/files/src/app/app.element.spec.ts__template__ @@ -0,0 +1,21 @@ +import { AppElement } from './app.element'; + +describe('AppElement', () => { + let app: AppElement; + + beforeEach(() => { + app = new AppElement(); + }); + + it('should create successfully', () => { + expect(app).toBeTruthy(); + }); + + it('should have a greeting', () => { + app.connectedCallback(); + + expect(app.querySelector('h1').innerHTML).toContain( + 'Welcome <%= projectName %>' + ); + }); +}); diff --git a/packages/capacitor/src/generators/application/files/src/app/app.element.ts__template__ b/packages/capacitor/src/generators/application/files/src/app/app.element.ts__template__ new file mode 100644 index 000000000..23ab525ae --- /dev/null +++ b/packages/capacitor/src/generators/application/files/src/app/app.element.ts__template__ @@ -0,0 +1,375 @@ +import './app.element.<%= style %>'; + +export class AppElement extends HTMLElement { + public static observedAttributes = [ + + ]; + + connectedCallback() { + const title = '<%= projectName %>'; + this.innerHTML = ` +
+
+ +
+

+ Hello there, + Welcome ${title} 👋 +

+
+ + +
+
+

+ + + + You're up and running +

+ What's next? +
+
+ + + +
+
+ + + + + +
+

Next steps

+

Here are some things you can do with Nx:

+
+ + + + + Add UI library + +
# Generate UI lib
+nx g @nx/angular:lib ui
+
+# Add a component
+nx g @nx/angular:component button --project ui
+
+
+ + + + + View interactive project graph + +
nx graph
+
+
+ + + + + Run affected commands + +
# see what's been affected by changes
+nx affected:graph
+
+# run tests for current changes
+nx affected:test
+
+# run e2e tests for current changes
+nx affected:e2e
+
+
+ +

+ Carefully crafted with + + + +

+
+
+ `; + } +} +customElements.define('<%= prefix %>-root', AppElement); diff --git a/packages/capacitor/src/generators/application/files/src/assets/.gitkeep b/packages/capacitor/src/generators/application/files/src/assets/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/capacitor/src/generators/application/files/src/main.ts__template__ b/packages/capacitor/src/generators/application/files/src/main.ts__template__ new file mode 100644 index 000000000..fdb879ded --- /dev/null +++ b/packages/capacitor/src/generators/application/files/src/main.ts__template__ @@ -0,0 +1 @@ +import './app/app.element'; diff --git a/packages/capacitor/src/generators/application/files/src/styles.__style__ b/packages/capacitor/src/generators/application/files/src/styles.__style__ new file mode 100644 index 000000000..90d4ee007 --- /dev/null +++ b/packages/capacitor/src/generators/application/files/src/styles.__style__ @@ -0,0 +1 @@ +/* You can add global styles to this file, and also import other style files */ diff --git a/packages/capacitor/src/generators/application/files/tsconfig.app.json b/packages/capacitor/src/generators/application/files/tsconfig.app.json new file mode 100644 index 000000000..a8afc0e4f --- /dev/null +++ b/packages/capacitor/src/generators/application/files/tsconfig.app.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "<%= offsetFromRoot %>dist/out-tsc", + "types": ["node"] + }, + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/packages/capacitor/src/generators/application/files/tsconfig.json__tmpl__ b/packages/capacitor/src/generators/application/files/tsconfig.json__tmpl__ new file mode 100644 index 000000000..8101416df --- /dev/null +++ b/packages/capacitor/src/generators/application/files/tsconfig.json__tmpl__ @@ -0,0 +1,27 @@ +{ + "extends": "<%= rootTsConfigPath %>", + "files": [], + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ESNext", "DOM"], + "moduleResolution": "Node", + "strict": true, + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "noEmit": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "skipLibCheck": true, + "types": ["vite/client"] + }, + "include": ["src"], + "references": [ + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/packages/capacitor/src/generators/application/generator.spec.ts b/packages/capacitor/src/generators/application/generator.spec.ts new file mode 100644 index 000000000..f4e5e9d1f --- /dev/null +++ b/packages/capacitor/src/generators/application/generator.spec.ts @@ -0,0 +1,24 @@ +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import { Tree } from '@nx/devkit'; + +import generator from './generator'; +import { AppGeneratorSchema } from './schema'; + +describe('app generator', () => { + let tree: Tree; + const options: AppGeneratorSchema = { + name: 'test', + appId: 'com.test.app', + unitTestRunner: 'vitest', + }; + + beforeEach(() => { + tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + }); + + it('should run successfully', async () => { + await generator(tree, options); + + expect(tree.exists('apps/test/src/main.ts')).toBeTruthy(); + }); +}); diff --git a/packages/capacitor/src/generators/application/generator.ts b/packages/capacitor/src/generators/application/generator.ts new file mode 100644 index 000000000..99ed416d3 --- /dev/null +++ b/packages/capacitor/src/generators/application/generator.ts @@ -0,0 +1,45 @@ +import { + convertNxGenerator, + ensurePackage, + formatFiles, + NX_VERSION, + runTasksInSerial, + Tree, +} from '@nx/devkit'; +import { AppGeneratorSchema } from './schema'; +import { capacitorProjectGenerator } from '../capacitor-project/generator'; + +export async function applicationGenerator( + tree: Tree, + options: AppGeneratorSchema +) { + const viteTask = await createDefaultViteApp(tree, options); + + const capacitorTask = await capacitorProjectGenerator(tree, { + project: options.name, + appName: options.name, + appId: options.appId, + skipFormat: true, + }); + + await formatFiles(tree); + + return runTasksInSerial(viteTask, capacitorTask); +} + +async function createDefaultViteApp(tree: Tree, options: AppGeneratorSchema) { + const { applicationGenerator } = ensurePackage( + '@nx/web', + NX_VERSION + ); + + return await applicationGenerator(tree, { + name: options.name, + bundler: 'vite', + unitTestRunner: options.unitTestRunner, + skipFormat: true, + }); +} + +export default applicationGenerator; +export const applicationSchematic = convertNxGenerator(applicationGenerator); diff --git a/packages/capacitor/src/generators/application/schema.d.ts b/packages/capacitor/src/generators/application/schema.d.ts new file mode 100644 index 000000000..19b46b4e4 --- /dev/null +++ b/packages/capacitor/src/generators/application/schema.d.ts @@ -0,0 +1,5 @@ +export interface AppGeneratorSchema { + name: string; + appId: string; + unitTestRunner: 'vitest' | 'none'; +} diff --git a/packages/capacitor/src/generators/application/schema.json b/packages/capacitor/src/generators/application/schema.json new file mode 100644 index 000000000..fb781da47 --- /dev/null +++ b/packages/capacitor/src/generators/application/schema.json @@ -0,0 +1,30 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "App", + "title": "", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "What name would you like to use?" + }, + "unitTestRunner": { + "type": "string", + "enum": ["vitest", "none"], + "description": "Test runner to use for unit tests.", + "default": "vitest" + }, + "appId": { + "type": "string", + "description": "The app ID for the project.", + "default": "io.ionic.starter", + "x-prompt": "What app ID would you like to use?" + } + }, + "required": ["name", "appId"] +} diff --git a/packages/capacitor/src/generators/capacitor-project/files/capacitor-config/capacitor.config.ts__template__ b/packages/capacitor/src/generators/capacitor-project/files/capacitor-config/capacitor.config.ts__template__ new file mode 100644 index 000000000..3353fd651 --- /dev/null +++ b/packages/capacitor/src/generators/capacitor-project/files/capacitor-config/capacitor.config.ts__template__ @@ -0,0 +1,13 @@ +import { CapacitorConfig } from '@capacitor/cli'; + +const config: CapacitorConfig = { + appId: '<%= appId %>', + appName: '<%= appName %>', + webDir: '<%= webDir %>', + bundledWebRuntime: false, + server: { + androidScheme: 'https' + } +} + +export default config; diff --git a/packages/capacitor/src/generators/capacitor-project/files/package-json/package.json__template__ b/packages/capacitor/src/generators/capacitor-project/files/package-json/package.json__template__ new file mode 100644 index 000000000..4f87c86e0 --- /dev/null +++ b/packages/capacitor/src/generators/capacitor-project/files/package-json/package.json__template__ @@ -0,0 +1,4 @@ +{ + "name": "<%= project %>", + "dependencies": {} +} diff --git a/packages/capacitor/src/generators/capacitor-project/generator.spec.ts b/packages/capacitor/src/generators/capacitor-project/generator.spec.ts new file mode 100644 index 000000000..72a92cf60 --- /dev/null +++ b/packages/capacitor/src/generators/capacitor-project/generator.spec.ts @@ -0,0 +1,172 @@ +import { + addProjectConfiguration, + normalizePath, + readJson, + readProjectConfiguration, + Tree, + writeJson, +} from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import generator from './generator'; +import { CapacitorGeneratorSchema } from './schema'; + +describe('capacitor-project', () => { + let appTree: Tree; + + const options: CapacitorGeneratorSchema = { + project: 'capacitor-app', + appId: 'com.example.capacitorapp', + appName: 'Capacitor App', + skipFormat: true, + }; + + const projectRoot = `apps/${options.project}`; + + beforeEach(() => { + appTree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + addProjectConfiguration(appTree, options.project, { + root: projectRoot, + targets: { + test: { + executor: '@nx/jest:jest', + }, + }, + }); + }); + + it('should add files', async () => { + await generator(appTree, options); + + expect(appTree.exists(`${projectRoot}/capacitor.config.ts`)).toBeTruthy(); + expect(appTree.exists(`${projectRoot}/package.json`)).toBeTruthy(); + expect(appTree.exists(`${projectRoot}/.gitignore`)).toBeTruthy(); + }); + + it('should add Capacitor dependencies', async () => { + await generator(appTree, options); + const packageJson = readJson(appTree, 'package.json'); + expect(packageJson.dependencies['@capacitor/core']).toBeDefined(); + expect(packageJson.devDependencies['@capacitor/android']).toBeDefined(); + expect(packageJson.devDependencies['@capacitor/ios']).toBeDefined(); + }); + + it('should should not replace existing package.json', async () => { + writeJson(appTree, normalizePath(projectRoot + '/package.json'), { + name: 'test', + }); + await generator(appTree, options); + + expect(appTree.exists(`${projectRoot}/package.json`)).toBeTruthy(); + const packageJson = readJson(appTree, `${projectRoot}/package.json`); + expect(packageJson.name).toEqual('test'); + expect(packageJson.devDependencies['@capacitor/cli']).toBeTruthy(); + }); + + it('should update existing .gitignore', async () => { + appTree.write(`${projectRoot}/.gitignore`, '/dist\n'); + await generator(appTree, options); + + const gitignore = appTree.read(`${projectRoot}/.gitignore`).toString(); + expect(gitignore).toContain('/dist\n/node_modules'); + }); + + it('should calculate webDir relative path', async () => { + await generator(appTree, options); + const capacitorConfigJson = appTree + .read(`${projectRoot}/capacitor.config.ts`) + .toString(); + + expect(capacitorConfigJson).toContain(`../../dist/apps/${options.project}`); + }); + + it('should update workspace.json', async () => { + await generator(appTree, options); + const projectConfiguration = readProjectConfiguration( + appTree, + options.project + ); + + expect(projectConfiguration.targets.cap.executor).toEqual( + '@nxext/capacitor:cap' + ); + expect(projectConfiguration.targets.cap.options).toEqual({ + cmd: '--help', + }); + + expect(projectConfiguration.targets.add.executor).toEqual( + '@nxext/capacitor:cap' + ); + expect(projectConfiguration.targets.add.options).toEqual({ + cmd: 'add', + }); + expect(projectConfiguration.targets.add.configurations['ios'].cmd).toEqual( + 'add ios' + ); + expect( + projectConfiguration.targets.add.configurations['android'].cmd + ).toEqual('add android'); + + expect(projectConfiguration.targets.copy.executor).toEqual( + '@nxext/capacitor:cap' + ); + expect(projectConfiguration.targets.copy.options).toEqual({ + cmd: 'copy', + }); + expect(projectConfiguration.targets.copy.configurations['ios'].cmd).toEqual( + 'copy ios' + ); + expect( + projectConfiguration.targets.copy.configurations['android'].cmd + ).toEqual('copy android'); + + expect(projectConfiguration.targets.open.executor).toEqual( + '@nxext/capacitor:cap' + ); + expect(projectConfiguration.targets.open.options).toEqual({ + cmd: 'open', + }); + expect(projectConfiguration.targets.open.configurations['ios'].cmd).toEqual( + 'open ios' + ); + expect( + projectConfiguration.targets.open.configurations['android'].cmd + ).toEqual('open android'); + + expect(projectConfiguration.targets.sync.executor).toEqual( + '@nxext/capacitor:cap' + ); + expect(projectConfiguration.targets.sync.options).toEqual({ + cmd: 'sync', + }); + expect(projectConfiguration.targets.sync.configurations['ios'].cmd).toEqual( + 'sync ios' + ); + expect( + projectConfiguration.targets.sync.configurations['android'].cmd + ).toEqual('sync android'); + + expect(projectConfiguration.targets.update.executor).toEqual( + '@nxext/capacitor:cap' + ); + expect(projectConfiguration.targets.update.options).toEqual({ + cmd: 'update', + }); + expect( + projectConfiguration.targets.update.configurations['ios'].cmd + ).toEqual('update ios'); + expect( + projectConfiguration.targets.update.configurations['android'].cmd + ).toEqual('update android'); + }); + + it('should not remove existing target configurations', async () => { + await generator(appTree, options); + const projectConfiguration = readProjectConfiguration( + appTree, + options.project + ); + + expect(projectConfiguration.targets.test).toBeTruthy(); + expect(projectConfiguration.targets.test.executor).toEqual('@nx/jest:jest'); + }); +}); diff --git a/packages/capacitor/src/generators/capacitor-project/generator.ts b/packages/capacitor/src/generators/capacitor-project/generator.ts new file mode 100644 index 000000000..53a709823 --- /dev/null +++ b/packages/capacitor/src/generators/capacitor-project/generator.ts @@ -0,0 +1,31 @@ +import { convertNxGenerator, formatFiles, Tree } from '@nx/devkit'; +import { addCapacitorConfig } from './lib/add-capacitor-config'; +import { addDependencies } from './lib/add-dependencies'; +import { addProject } from './lib/add-project'; +import { normalizeOptions } from './lib/normalize-options'; +import { updateProjectGitignore } from './lib/update-project-gitignore'; +import { updateProjectPackageJson } from './lib/update-project-package-json'; +import { CapacitorGeneratorSchema } from './schema'; + +export async function capacitorProjectGenerator( + host: Tree, + options: CapacitorGeneratorSchema +) { + const normalizedOptions = normalizeOptions(host, options); + const installTask = addDependencies(host); + addCapacitorConfig(host, normalizedOptions); + updateProjectGitignore(host, normalizedOptions); + addProject(host, normalizedOptions); + updateProjectPackageJson(host, normalizedOptions); + + if (!options.skipFormat) { + await formatFiles(host); + } + + return installTask; +} + +export default capacitorProjectGenerator; +export const capacitorProjectSchematic = convertNxGenerator( + capacitorProjectGenerator +); diff --git a/packages/capacitor/src/generators/capacitor-project/lib/add-capacitor-config.ts b/packages/capacitor/src/generators/capacitor-project/lib/add-capacitor-config.ts new file mode 100644 index 000000000..108304de6 --- /dev/null +++ b/packages/capacitor/src/generators/capacitor-project/lib/add-capacitor-config.ts @@ -0,0 +1,28 @@ +import { + generateFiles, + joinPathFragments, + names, + normalizePath, + offsetFromRoot, + Tree, +} from '@nx/devkit'; +import { NormalizedSchema } from '../schema'; + +export function addCapacitorConfig(host: Tree, options: NormalizedSchema) { + const templateOptions = { + ...options, + ...names(options.project), + offsetFromRoot: offsetFromRoot(options.projectRoot), + webDir: normalizePath( + joinPathFragments(options.pathToRoot, options.webDir) + ), + template: '', + }; + + generateFiles( + host, + normalizePath(__dirname + '/../files/capacitor-config'), + options.projectRoot, + templateOptions + ); +} diff --git a/packages/capacitor/src/generators/capacitor-project/lib/add-dependencies.ts b/packages/capacitor/src/generators/capacitor-project/lib/add-dependencies.ts new file mode 100644 index 000000000..e8484b93e --- /dev/null +++ b/packages/capacitor/src/generators/capacitor-project/lib/add-dependencies.ts @@ -0,0 +1,16 @@ +import { addDependenciesToPackageJson, Tree } from '@nx/devkit'; +import { capacitorVersion } from '../../../utils/versions'; + +export function addDependencies(host: Tree) { + return addDependenciesToPackageJson( + host, + { + '@capacitor/core': capacitorVersion, + }, + { + '@capacitor/android': capacitorVersion, + '@capacitor/ios': capacitorVersion, + '@capacitor/cli': capacitorVersion, + } + ); +} diff --git a/packages/capacitor/src/generators/capacitor-project/lib/add-project.ts b/packages/capacitor/src/generators/capacitor-project/lib/add-project.ts new file mode 100644 index 000000000..1c0f43af2 --- /dev/null +++ b/packages/capacitor/src/generators/capacitor-project/lib/add-project.ts @@ -0,0 +1,38 @@ +import { + Tree, + readProjectConfiguration, + updateProjectConfiguration, +} from '@nx/devkit'; +import { NormalizedSchema } from '../schema'; + +export function addProject(host: Tree, options: NormalizedSchema) { + const projectConfig = readProjectConfiguration(host, options.project); + const commands = ['add', 'copy', 'open', 'run', 'sync', 'update']; + const platforms = ['ios', 'android']; + + projectConfig.targets.cap = { + executor: '@nxext/capacitor:cap', + options: { + cmd: '--help', + }, + }; + + let command: string, platform: string; + + for (command of commands) { + projectConfig.targets[command] = { + executor: `@nxext/capacitor:cap`, + options: { + cmd: `${command}`, + }, + configurations: {}, + }; + + for (platform of platforms) { + projectConfig.targets[command].configurations[platform] = { + cmd: `${command} ${platform}`, + }; + } + } + updateProjectConfiguration(host, options.project, projectConfig); +} diff --git a/packages/capacitor/src/generators/capacitor-project/lib/normalize-options.ts b/packages/capacitor/src/generators/capacitor-project/lib/normalize-options.ts new file mode 100644 index 000000000..dc96b6126 --- /dev/null +++ b/packages/capacitor/src/generators/capacitor-project/lib/normalize-options.ts @@ -0,0 +1,26 @@ +import { + joinPathFragments, + offsetFromRoot, + readProjectConfiguration, + Tree, +} from '@nx/devkit'; +import { CapacitorGeneratorSchema, NormalizedSchema } from '../schema'; + +export function normalizeOptions( + host: Tree, + options: CapacitorGeneratorSchema +): NormalizedSchema { + const appName = options.appName ? options.appName : options.project; + const { root } = readProjectConfiguration(host, options.project); + const webDir = options.webDir + ? options.webDir + : joinPathFragments(`dist/${root}`); + + return { + ...options, + appName, + webDir, + projectRoot: root, + pathToRoot: offsetFromRoot(root), + }; +} diff --git a/packages/capacitor/src/generators/capacitor-project/lib/update-project-gitignore.ts b/packages/capacitor/src/generators/capacitor-project/lib/update-project-gitignore.ts new file mode 100644 index 000000000..d44213624 --- /dev/null +++ b/packages/capacitor/src/generators/capacitor-project/lib/update-project-gitignore.ts @@ -0,0 +1,20 @@ +import { Tree } from '@nx/devkit'; +import { NormalizedSchema } from '../schema'; +import ignore from 'ignore'; + +export function updateProjectGitignore(host: Tree, options: NormalizedSchema) { + if (!host.exists(`${options.projectRoot}/.gitignore`)) { + return host.write(`${options.projectRoot}/.gitignore`, '/node_modules\n'); + } + + const ig = ignore(); + ig.add(host.read(`${options.projectRoot}/.gitignore`).toString()); + + if (!ig.ignores('node_modules')) { + const content = `${host + .read(`${options.projectRoot}/.gitignore`) + .toString('utf-8') + .trimRight()}\n/node_modules\n`; + host.write(`${options.projectRoot}/.gitignore`, content); + } +} diff --git a/packages/capacitor/src/generators/capacitor-project/lib/update-project-package-json.ts b/packages/capacitor/src/generators/capacitor-project/lib/update-project-package-json.ts new file mode 100644 index 000000000..710001e4e --- /dev/null +++ b/packages/capacitor/src/generators/capacitor-project/lib/update-project-package-json.ts @@ -0,0 +1,48 @@ +import { + normalizePath, + offsetFromRoot, + Tree, + updateJson, + writeJson, +} from '@nx/devkit'; +import { capacitorVersion } from '../../../utils/versions'; +import { NormalizedSchema } from '../schema'; + +export function updateProjectPackageJson( + host: Tree, + options: NormalizedSchema +) { + const projectPackageJson = normalizePath( + options.projectRoot + '/package.json' + ); + if (host.exists(projectPackageJson)) { + updateJson(host, projectPackageJson, (json) => { + return { + ...json, + devDependencies: { + ...json.devDependencies, + '@capacitor/cli': capacitorVersion, + '@capacitor/ios': `${offsetFromRoot( + options.projectRoot + )}node_modules/@capacitor/ios`, + '@capacitor/android': `${offsetFromRoot( + options.projectRoot + )}node_modules/@capacitor/android`, + }, + }; + }); + } else { + writeJson(host, projectPackageJson, { + name: options.project, + devDependencies: { + '@capacitor/cli': capacitorVersion, + '@capacitor/ios': `${offsetFromRoot( + options.projectRoot + )}node_modules/@capacitor/ios`, + '@capacitor/android': `${offsetFromRoot( + options.projectRoot + )}node_modules/@capacitor/android`, + }, + }); + } +} diff --git a/packages/capacitor/src/generators/capacitor-project/schema.d.ts b/packages/capacitor/src/generators/capacitor-project/schema.d.ts new file mode 100644 index 000000000..36aaa0f2f --- /dev/null +++ b/packages/capacitor/src/generators/capacitor-project/schema.d.ts @@ -0,0 +1,12 @@ +export interface CapacitorGeneratorSchema { + project: string; + appId: string; + appName?: string; + webDir?: string; + skipFormat: boolean; +} + +export interface NormalizedSchema extends CapacitorGeneratorSchema { + projectRoot: string; + pathToRoot: string; +} diff --git a/packages/capacitor/src/generators/capacitor-project/schema.json b/packages/capacitor/src/generators/capacitor-project/schema.json new file mode 100644 index 000000000..04d9d4bea --- /dev/null +++ b/packages/capacitor/src/generators/capacitor-project/schema.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "CapacitorProject", + "title": "Create a Capacitor project for an Nx application", + "type": "object", + "properties": { + "project": { + "type": "string", + "description": "The name of the frontend project for Capacitor.", + "alias": "p", + "$default": { + "$source": "projectName" + }, + "x-prompt": "What is the name of the frontend project for Capacitor?" + }, + "appId": { + "type": "string", + "description": "The app ID for the project.", + "default": "io.ionic.starter", + "x-prompt": "What app ID would you like to use?" + }, + "appName": { + "type": "string", + "description": "The application name for the project.", + "x-prompt": "What app name would you like to use?" + }, + "webDir": { + "type": "string", + "description": "The directory of your projects built web assets." + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false + } + }, + "required": ["project"] +} diff --git a/packages/capacitor/src/index.ts b/packages/capacitor/src/index.ts new file mode 100644 index 000000000..bf1ba83c8 --- /dev/null +++ b/packages/capacitor/src/index.ts @@ -0,0 +1,2 @@ +export { capacitorProjectGenerator } from './generators/capacitor-project/generator'; +export { CapacitorGeneratorSchema } from './generators/capacitor-project/schema'; diff --git a/packages/capacitor/src/utils/versions.ts b/packages/capacitor/src/utils/versions.ts new file mode 100644 index 000000000..e072249fd --- /dev/null +++ b/packages/capacitor/src/utils/versions.ts @@ -0,0 +1 @@ +export const capacitorVersion = '^5.0.3'; diff --git a/packages/capacitor/tsconfig.json b/packages/capacitor/tsconfig.json new file mode 100644 index 000000000..19b9eece4 --- /dev/null +++ b/packages/capacitor/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/packages/capacitor/tsconfig.lib.json b/packages/capacitor/tsconfig.lib.json new file mode 100644 index 000000000..7bfc80f73 --- /dev/null +++ b/packages/capacitor/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/packages/capacitor/tsconfig.spec.json b/packages/capacitor/tsconfig.spec.json new file mode 100644 index 000000000..546f12877 --- /dev/null +++ b/packages/capacitor/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] +} diff --git a/packages/ionic-angular/CHANGELOG.md b/packages/ionic-angular/CHANGELOG.md new file mode 100644 index 000000000..3ac89fab4 --- /dev/null +++ b/packages/ionic-angular/CHANGELOG.md @@ -0,0 +1,89 @@ +# Changelog + +# 14.0.0 + +# Features + +- generate applications with Ionic v6 + +# 13.1.0 + +# Features + +- add page generator (courtesy of @joshuamorony) + +# 13.0.0 + +## Features + +- support Nx 13 + +# 12.1.0 + +## Features + +- restore Angular CLI support +- add `--standaloneConfig` to application generator to generate a `package.json` instead of updating the `workspace.json` + +# 12.0.0 + +## Features + +- support Nx 12 +- plugin rewritten with `@nx/devkit` for better maintainability and future proofing for future Nx versions +- update Ionic to 5.8.3 +- update list starter template + +## Bug Fixes + +- fix styles asset path in workspace when generating an app on Windows + +## BREAKING CHANGES + +- Angular CLI is no longer officially supported + +# 11.1.1 + +## Bug Fixes + +- improve reliability of ESLint configuration + +# 11.1.0 + +## Features + +- update application starter templates +- support ESLint when generating applications +- generate applications with ESLint by default +- support `jest` as a unit test config for the application schematic + +# 11.0.2 + +## Bug Fixes + +- support Node 15 and npm 7 + +# 11.0.1 + +## Bug Fixes + +- support Nx 11.3.0 + +# 11.0.0 + +## Features + +- Nx 11 support (Nx 11 now required) +- update Ionic to 5.5.2 +- add additional Ionic starter templates to application schematic +- support `none` as a unit test and e2e config for the application schematic + +## Bug Fixes + +- fix generating an application in a sub-directory with Capacitor enabled + +# 1.1.0 + +## Features + +- update Ionic to 5.5.1 diff --git a/packages/ionic-angular/README.md b/packages/ionic-angular/README.md new file mode 100644 index 000000000..0edd7b406 --- /dev/null +++ b/packages/ionic-angular/README.md @@ -0,0 +1,11 @@ +# @nxext/ionic-angular + +[![standard-readme compliant](https://img.shields.io/badge/standard--readme-OK-green.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) + +An Nx plugin for developing [Ionic](https://ionicframework.com/docs) Angular applications and libraries. + +For more complete documentation, visit [nxext.github.io](https://nxext.github.io/nx-extensions-ionic/docs/ionic-angular/overview.html). + +## Usage + +Visit the official [Getting Started](https://nxext.github.io/nx-extensions-ionic/docs/ionic-angular/getting-started.html) documentation. diff --git a/packages/ionic-angular/eslint.config.js b/packages/ionic-angular/eslint.config.js new file mode 100644 index 000000000..6f643dca4 --- /dev/null +++ b/packages/ionic-angular/eslint.config.js @@ -0,0 +1,45 @@ +const { FlatCompat } = require('@eslint/eslintrc'); +const baseConfig = require('../../eslint.config.js'); +const js = require('@eslint/js'); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, +}); +module.exports = [ + ...baseConfig, + { + files: [ + 'packages/ionic-angular/**/*.ts', + 'packages/ionic-angular/**/*.tsx', + 'packages/ionic-angular/**/*.js', + 'packages/ionic-angular/**/*.jsx', + ], + rules: {}, + }, + { + files: [ + 'packages/ionic-angular/**/*.ts', + 'packages/ionic-angular/**/*.tsx', + ], + rules: {}, + }, + { + files: [ + 'packages/ionic-angular/**/*.js', + 'packages/ionic-angular/**/*.jsx', + ], + rules: {}, + }, + ...compat.config({ parser: 'jsonc-eslint-parser' }).map((config) => ({ + ...config, + files: [ + 'packages/ionic-angular/package.json', + 'packages/ionic-angular/generators.json', + 'packages/ionic-angular/executors.json', + 'packages/ionic-angular/generators.json', + 'packages/ionic-angular/executors.json', + 'packages/ionic-angular/migrations.json', + ], + rules: { '@nx/nx-plugin-checks': 'error' }, + })), +]; diff --git a/packages/ionic-angular/executors.json b/packages/ionic-angular/executors.json new file mode 100644 index 000000000..9978addc1 --- /dev/null +++ b/packages/ionic-angular/executors.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/schema", + "executors": {}, + "builders": {} +} diff --git a/packages/ionic-angular/generators.json b/packages/ionic-angular/generators.json new file mode 100644 index 000000000..b57c85de5 --- /dev/null +++ b/packages/ionic-angular/generators.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/schema", + "name": "Nxext Ionic Angular", + "version": "0.0.1", + "generators": { + "application": { + "factory": "./src/generators/application/generator", + "schema": "./src/generators/application/schema.json", + "aliases": ["app"], + "description": "Create an Ionic Angular application." + }, + "page": { + "factory": "./src/generators/page/generator", + "schema": "./src/generators/page/schema.json", + "description": "Generate an Ionic page component" + } + } +} diff --git a/packages/ionic-angular/jest.config.ts b/packages/ionic-angular/jest.config.ts new file mode 100644 index 000000000..8a3e09760 --- /dev/null +++ b/packages/ionic-angular/jest.config.ts @@ -0,0 +1,16 @@ +/* eslint-disable */ +module.exports = { + displayName: 'ionic-angular', + preset: '../../jest.preset.js', + globals: {}, + transform: { + '^.+\\.[tj]s$': [ + 'ts-jest', + { + tsconfig: '/tsconfig.spec.json', + }, + ], + }, + moduleFileExtensions: ['ts', 'js', 'html'], + coverageDirectory: '../../coverage/packages/ionic-angular', +}; diff --git a/packages/ionic-angular/package.json b/packages/ionic-angular/package.json new file mode 100644 index 000000000..90497ebc1 --- /dev/null +++ b/packages/ionic-angular/package.json @@ -0,0 +1,33 @@ +{ + "name": "@nxext/ionic-angular", + "version": "19.0.0", + "description": "An Nx plugin for developing Ionic React applications and libraries", + "homepage": "https://nxext.github.io/nx-extensions/docs/ionic-angular/overview.html", + "repository": { + "type": "git", + "url": "https://github.com/nxext/nx-extensions", + "directory": "packages/ionic-angular" + }, + "bugs": { + "url": "https://github.com/nxext/nx-extensions/issues" + }, + "license": "MIT", + "generators": "./generators.json", + "executors": "./executors.json", + "nx-migrations": { + "migrations": "./migrations.json" + }, + "schematics": "./generators.json", + "builders": "./executors.json", + "dependencies": { + "@nxext/capacitor": "^19.0.0", + "@nx/devkit": "^19.0.0", + "@nx/eslint": "^19.0.0", + "@nx/angular": "^19.0.0", + "@nx/js": "^19.0.0", + "@phenomnomnominal/tsquery": "~5.0.1", + "typescript": "5.4.5", + "tslib": "^2.3.0" + }, + "peerDependencies": {} +} diff --git a/packages/ionic-angular/project.json b/packages/ionic-angular/project.json new file mode 100644 index 000000000..42450e081 --- /dev/null +++ b/packages/ionic-angular/project.json @@ -0,0 +1,57 @@ +{ + "name": "ionic-angular", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/ionic-angular/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/packages/ionic-angular", + "main": "packages/ionic-angular/src/index.ts", + "packageJson": "packages/ionic-angular/package.json", + "tsConfig": "packages/ionic-angular/tsconfig.lib.json", + "assets": [ + "packages/ionic-angular/*.md", + { + "input": "./packages/ionic-angular/src", + "glob": "**/!(*.ts)", + "output": "./src" + }, + { + "input": "./packages/ionic-angular/src", + "glob": "**/*.d.ts", + "output": "./src" + }, + { + "input": "./packages/ionic-angular", + "glob": "generators.json", + "output": "." + }, + { + "input": "./packages/ionic-angular", + "glob": "executors.json", + "output": "." + } + ] + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/packages/ionic-angular"], + "options": { + "jestConfig": "packages/ionic-angular/jest.config.ts" + } + }, + "publish": { + "command": "node tools/scripts/publish.mjs ionic-angular {args.ver} {args.tag}", + "dependsOn": ["build"] + } + }, + "tags": [] +} diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/ionic.config.json.template b/packages/ionic-angular/src/generators/application/files/base-standalone/ionic.config.json.template new file mode 100644 index 000000000..839f85ef0 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base-standalone/ionic.config.json.template @@ -0,0 +1,7 @@ +{ + "name": "<%= name %>", + "integrations": { + "capacitor": {} + }, + "type": "angular" +} diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.spec.ts.template new file mode 100644 index 000000000..51b7b65ab --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.spec.ts.template @@ -0,0 +1,21 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { TestBed } from '@angular/core/testing'; + +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [AppComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + +}); diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.ts.template new file mode 100644 index 000000000..ed79833df --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.ts.template @@ -0,0 +1,19 @@ +import { Component } from '@angular/core'; +import {IonicModule} from '@ionic/angular'; + +@Component({ + selector: '<%= prefix %>-root', + standalone: true, + imports: [IonicModule], + template: ` + + + + `, + styles: ` + + ` +}) +export class AppComponent { + constructor() {} +} diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/src/assets/icon/favicon.png b/packages/ionic-angular/src/generators/application/files/base-standalone/src/assets/icon/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..51888a7bbdb59f04c29c548523eb2638c1c954f5 GIT binary patch literal 930 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!x&nMcT-^(N+`Ik{1{5}NM-k9f zx+Ot=!3-}y{#<)Uok@}X^0T)Mjw~(h@l#Ir^NC7r=_#0-8E$a3RKVL~nc3p~*UxA# z4bjg_XJBBO<>}%W5^;EK_{&+V40u?Vtzk_Oy;*YMVqw~ozwz&rPG6d~>D#mR`SK=; zww9K@s-5|}%Dy=+ak|}>#qwwKGH>ZO4~|`P_r2LJy1RYqyXB`=?Mw?@F8Z!h{rcpz z^y94Mdt1KFIr?nR|NE2g?N}2vO^d(4;=OB>WP0Plul!REN;cgwUAJuA?C`^98NGCJ zuf=eS_OHmETd)0azdLJ6Z^FIm6*YNHw|4%lGf`stp1;dK$1sNYdj7ec{*dYEN(RM7|LFZWoy#R9733Kz`kee` zcsH&1+JCz2|7qRT%bgpNUdZ3E%i6T)I?vY6{p)ga_qlB<;GAPn(!{OF;x_wm_K%n( zW67=BbK}Hx+Mo2yW_)0K?|;#s9f!Uw=S;9NQ)S^>UOs1+lefL)nQKa6oJzg9f7^uT zr^QQJHL|;hJ!n29P`>r{pI$??E8ll+Vp%D3sqgGAQ?16Ir>}307i!n%dGB~BKleRm zV`}#;lUe7&`Rm%PqCLs%HOEe${KnWk%jlG>GM}cUf9>%Jt~^m(q1U%2$4$<)xHgTq zd0EM;Wjbazr!IcCcJ{`1i$kvS+;+RTmT^vJdf^@OKlARE7bo`3-BEDmtJB75>uhqr zB>Z2>{qec~lUw13i#jzoi~HY diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/src/index.html.template b/packages/ionic-angular/src/generators/application/files/base-standalone/src/index.html.template new file mode 100644 index 000000000..87447aaa0 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base-standalone/src/index.html.template @@ -0,0 +1,26 @@ + + + + + + Ionic App + + + + + + + + + + + + + + + + + <<%= prefix %>-root>-root> + + + diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/src/styles.scss.template b/packages/ionic-angular/src/generators/application/files/base-standalone/src/styles.scss.template new file mode 100644 index 000000000..097cf6dea --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base-standalone/src/styles.scss.template @@ -0,0 +1,10 @@ +/* + * App Global CSS + * ---------------------------------------------------------------------------- + * Put style rules here that you want to apply globally. These styles are for + * the entire app and not just one component. Additionally, this file can be + * used as an entry point to import other CSS/Sass files to be included in the + * output CSS. + * For more information on global stylesheets, visit the documentation: + * https://ionicframework.com/docs/layout/global-stylesheets + */ diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/src/theme/variables.scss.template b/packages/ionic-angular/src/generators/application/files/base-standalone/src/theme/variables.scss.template new file mode 100644 index 000000000..eae592599 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base-standalone/src/theme/variables.scss.template @@ -0,0 +1,236 @@ +// Ionic Variables and Theming. For more info, please see: +// http://ionicframework.com/docs/theming/ + +/** Ionic CSS Variables **/ +:root { + /** primary **/ + --ion-color-primary: #3880ff; + --ion-color-primary-rgb: 56, 128, 255; + --ion-color-primary-contrast: #ffffff; + --ion-color-primary-contrast-rgb: 255, 255, 255; + --ion-color-primary-shade: #3171e0; + --ion-color-primary-tint: #4c8dff; + + /** secondary **/ + --ion-color-secondary: #3dc2ff; + --ion-color-secondary-rgb: 61, 194, 255; + --ion-color-secondary-contrast: #ffffff; + --ion-color-secondary-contrast-rgb: 255, 255, 255; + --ion-color-secondary-shade: #36abe0; + --ion-color-secondary-tint: #50c8ff; + + /** tertiary **/ + --ion-color-tertiary: #5260ff; + --ion-color-tertiary-rgb: 82, 96, 255; + --ion-color-tertiary-contrast: #ffffff; + --ion-color-tertiary-contrast-rgb: 255, 255, 255; + --ion-color-tertiary-shade: #4854e0; + --ion-color-tertiary-tint: #6370ff; + + /** success **/ + --ion-color-success: #2dd36f; + --ion-color-success-rgb: 45, 211, 111; + --ion-color-success-contrast: #ffffff; + --ion-color-success-contrast-rgb: 255, 255, 255; + --ion-color-success-shade: #28ba62; + --ion-color-success-tint: #42d77d; + + /** warning **/ + --ion-color-warning: #ffc409; + --ion-color-warning-rgb: 255, 196, 9; + --ion-color-warning-contrast: #000000; + --ion-color-warning-contrast-rgb: 0, 0, 0; + --ion-color-warning-shade: #e0ac08; + --ion-color-warning-tint: #ffca22; + + /** danger **/ + --ion-color-danger: #eb445a; + --ion-color-danger-rgb: 235, 68, 90; + --ion-color-danger-contrast: #ffffff; + --ion-color-danger-contrast-rgb: 255, 255, 255; + --ion-color-danger-shade: #cf3c4f; + --ion-color-danger-tint: #ed576b; + + /** dark **/ + --ion-color-dark: #222428; + --ion-color-dark-rgb: 34, 36, 40; + --ion-color-dark-contrast: #ffffff; + --ion-color-dark-contrast-rgb: 255, 255, 255; + --ion-color-dark-shade: #1e2023; + --ion-color-dark-tint: #383a3e; + + /** medium **/ + --ion-color-medium: #92949c; + --ion-color-medium-rgb: 146, 148, 156; + --ion-color-medium-contrast: #ffffff; + --ion-color-medium-contrast-rgb: 255, 255, 255; + --ion-color-medium-shade: #808289; + --ion-color-medium-tint: #9d9fa6; + + /** light **/ + --ion-color-light: #f4f5f8; + --ion-color-light-rgb: 244, 245, 248; + --ion-color-light-contrast: #000000; + --ion-color-light-contrast-rgb: 0, 0, 0; + --ion-color-light-shade: #d7d8da; + --ion-color-light-tint: #f5f6f9; +} + +@media (prefers-color-scheme: dark) { + /* + * Dark Colors + * ------------------------------------------- + */ + + body { + --ion-color-primary: #428cff; + --ion-color-primary-rgb: 66,140,255; + --ion-color-primary-contrast: #ffffff; + --ion-color-primary-contrast-rgb: 255,255,255; + --ion-color-primary-shade: #3a7be0; + --ion-color-primary-tint: #5598ff; + + --ion-color-secondary: #50c8ff; + --ion-color-secondary-rgb: 80,200,255; + --ion-color-secondary-contrast: #ffffff; + --ion-color-secondary-contrast-rgb: 255,255,255; + --ion-color-secondary-shade: #46b0e0; + --ion-color-secondary-tint: #62ceff; + + --ion-color-tertiary: #6a64ff; + --ion-color-tertiary-rgb: 106,100,255; + --ion-color-tertiary-contrast: #ffffff; + --ion-color-tertiary-contrast-rgb: 255,255,255; + --ion-color-tertiary-shade: #5d58e0; + --ion-color-tertiary-tint: #7974ff; + + --ion-color-success: #2fdf75; + --ion-color-success-rgb: 47,223,117; + --ion-color-success-contrast: #000000; + --ion-color-success-contrast-rgb: 0,0,0; + --ion-color-success-shade: #29c467; + --ion-color-success-tint: #44e283; + + --ion-color-warning: #ffd534; + --ion-color-warning-rgb: 255,213,52; + --ion-color-warning-contrast: #000000; + --ion-color-warning-contrast-rgb: 0,0,0; + --ion-color-warning-shade: #e0bb2e; + --ion-color-warning-tint: #ffd948; + + --ion-color-danger: #ff4961; + --ion-color-danger-rgb: 255,73,97; + --ion-color-danger-contrast: #ffffff; + --ion-color-danger-contrast-rgb: 255,255,255; + --ion-color-danger-shade: #e04055; + --ion-color-danger-tint: #ff5b71; + + --ion-color-dark: #f4f5f8; + --ion-color-dark-rgb: 244,245,248; + --ion-color-dark-contrast: #000000; + --ion-color-dark-contrast-rgb: 0,0,0; + --ion-color-dark-shade: #d7d8da; + --ion-color-dark-tint: #f5f6f9; + + --ion-color-medium: #989aa2; + --ion-color-medium-rgb: 152,154,162; + --ion-color-medium-contrast: #000000; + --ion-color-medium-contrast-rgb: 0,0,0; + --ion-color-medium-shade: #86888f; + --ion-color-medium-tint: #a2a4ab; + + --ion-color-light: #222428; + --ion-color-light-rgb: 34,36,40; + --ion-color-light-contrast: #ffffff; + --ion-color-light-contrast-rgb: 255,255,255; + --ion-color-light-shade: #1e2023; + --ion-color-light-tint: #383a3e; + } + + /* + * iOS Dark Theme + * ------------------------------------------- + */ + + .ios body { + --ion-background-color: #000000; + --ion-background-color-rgb: 0,0,0; + + --ion-text-color: #ffffff; + --ion-text-color-rgb: 255,255,255; + + --ion-color-step-50: #0d0d0d; + --ion-color-step-100: #1a1a1a; + --ion-color-step-150: #262626; + --ion-color-step-200: #333333; + --ion-color-step-250: #404040; + --ion-color-step-300: #4d4d4d; + --ion-color-step-350: #595959; + --ion-color-step-400: #666666; + --ion-color-step-450: #737373; + --ion-color-step-500: #808080; + --ion-color-step-550: #8c8c8c; + --ion-color-step-600: #999999; + --ion-color-step-650: #a6a6a6; + --ion-color-step-700: #b3b3b3; + --ion-color-step-750: #bfbfbf; + --ion-color-step-800: #cccccc; + --ion-color-step-850: #d9d9d9; + --ion-color-step-900: #e6e6e6; + --ion-color-step-950: #f2f2f2; + + --ion-item-background: #000000; + + --ion-card-background: #1c1c1d; + } + + .ios ion-modal { + --ion-background-color: var(--ion-color-step-100); + --ion-toolbar-background: var(--ion-color-step-150); + --ion-toolbar-border-color: var(--ion-color-step-250); + } + + + /* + * Material Design Dark Theme + * ------------------------------------------- + */ + + .md body { + --ion-background-color: #121212; + --ion-background-color-rgb: 18,18,18; + + --ion-text-color: #ffffff; + --ion-text-color-rgb: 255,255,255; + + --ion-border-color: #222222; + + --ion-color-step-50: #1e1e1e; + --ion-color-step-100: #2a2a2a; + --ion-color-step-150: #363636; + --ion-color-step-200: #414141; + --ion-color-step-250: #4d4d4d; + --ion-color-step-300: #595959; + --ion-color-step-350: #656565; + --ion-color-step-400: #717171; + --ion-color-step-450: #7d7d7d; + --ion-color-step-500: #898989; + --ion-color-step-550: #949494; + --ion-color-step-600: #a0a0a0; + --ion-color-step-650: #acacac; + --ion-color-step-700: #b8b8b8; + --ion-color-step-750: #c4c4c4; + --ion-color-step-800: #d0d0d0; + --ion-color-step-850: #dbdbdb; + --ion-color-step-900: #e7e7e7; + --ion-color-step-950: #f3f3f3; + + --ion-item-background: #1e1e1e; + + --ion-toolbar-background: #1f1f1f; + + --ion-tab-bar-background: #1f1f1f; + + --ion-card-background: #1e1e1e; + } +} diff --git a/packages/ionic-angular/src/generators/application/files/base/ionic.config.json.template b/packages/ionic-angular/src/generators/application/files/base/ionic.config.json.template new file mode 100644 index 000000000..839f85ef0 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base/ionic.config.json.template @@ -0,0 +1,7 @@ +{ + "name": "<%= name %>", + "integrations": { + "capacitor": {} + }, + "type": "angular" +} diff --git a/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.html.template b/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.html.template new file mode 100644 index 000000000..13b96776e --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.html.template @@ -0,0 +1,3 @@ + + + diff --git a/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.scss.template b/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.scss.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.spec.ts.template new file mode 100644 index 000000000..51b7b65ab --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.spec.ts.template @@ -0,0 +1,21 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { TestBed } from '@angular/core/testing'; + +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [AppComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + +}); diff --git a/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.ts.template new file mode 100644 index 000000000..4242f27de --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.ts.template @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: '<%= prefix %>-root', + templateUrl: 'app.component.html', + styleUrls: ['app.component.scss'], +}) +export class AppComponent { + constructor() {} +} diff --git a/packages/ionic-angular/src/generators/application/files/base/src/app/app.module.ts.template b/packages/ionic-angular/src/generators/application/files/base/src/app/app.module.ts.template new file mode 100644 index 000000000..4255dd891 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base/src/app/app.module.ts.template @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouteReuseStrategy } from '@angular/router'; + +import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; + +@NgModule({ + declarations: [AppComponent], + imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], + providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }], + bootstrap: [AppComponent], +}) +export class AppModule {} diff --git a/packages/ionic-angular/src/generators/application/files/base/src/assets/icon/favicon.png b/packages/ionic-angular/src/generators/application/files/base/src/assets/icon/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..51888a7bbdb59f04c29c548523eb2638c1c954f5 GIT binary patch literal 930 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!x&nMcT-^(N+`Ik{1{5}NM-k9f zx+Ot=!3-}y{#<)Uok@}X^0T)Mjw~(h@l#Ir^NC7r=_#0-8E$a3RKVL~nc3p~*UxA# z4bjg_XJBBO<>}%W5^;EK_{&+V40u?Vtzk_Oy;*YMVqw~ozwz&rPG6d~>D#mR`SK=; zww9K@s-5|}%Dy=+ak|}>#qwwKGH>ZO4~|`P_r2LJy1RYqyXB`=?Mw?@F8Z!h{rcpz z^y94Mdt1KFIr?nR|NE2g?N}2vO^d(4;=OB>WP0Plul!REN;cgwUAJuA?C`^98NGCJ zuf=eS_OHmETd)0azdLJ6Z^FIm6*YNHw|4%lGf`stp1;dK$1sNYdj7ec{*dYEN(RM7|LFZWoy#R9733Kz`kee` zcsH&1+JCz2|7qRT%bgpNUdZ3E%i6T)I?vY6{p)ga_qlB<;GAPn(!{OF;x_wm_K%n( zW67=BbK}Hx+Mo2yW_)0K?|;#s9f!Uw=S;9NQ)S^>UOs1+lefL)nQKa6oJzg9f7^uT zr^QQJHL|;hJ!n29P`>r{pI$??E8ll+Vp%D3sqgGAQ?16Ir>}307i!n%dGB~BKleRm zV`}#;lUe7&`Rm%PqCLs%HOEe${KnWk%jlG>GM}cUf9>%Jt~^m(q1U%2$4$<)xHgTq zd0EM;Wjbazr!IcCcJ{`1i$kvS+;+RTmT^vJdf^@OKlARE7bo`3-BEDmtJB75>uhqr zB>Z2>{qec~lUw13i#jzoi~HY diff --git a/packages/ionic-angular/src/generators/application/files/base/src/index.html.template b/packages/ionic-angular/src/generators/application/files/base/src/index.html.template new file mode 100644 index 000000000..87447aaa0 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base/src/index.html.template @@ -0,0 +1,26 @@ + + + + + + Ionic App + + + + + + + + + + + + + + + + + <<%= prefix %>-root>-root> + + + diff --git a/packages/ionic-angular/src/generators/application/files/base/src/styles.scss.template b/packages/ionic-angular/src/generators/application/files/base/src/styles.scss.template new file mode 100644 index 000000000..097cf6dea --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base/src/styles.scss.template @@ -0,0 +1,10 @@ +/* + * App Global CSS + * ---------------------------------------------------------------------------- + * Put style rules here that you want to apply globally. These styles are for + * the entire app and not just one component. Additionally, this file can be + * used as an entry point to import other CSS/Sass files to be included in the + * output CSS. + * For more information on global stylesheets, visit the documentation: + * https://ionicframework.com/docs/layout/global-stylesheets + */ diff --git a/packages/ionic-angular/src/generators/application/files/base/src/theme/variables.scss.template b/packages/ionic-angular/src/generators/application/files/base/src/theme/variables.scss.template new file mode 100644 index 000000000..eae592599 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/base/src/theme/variables.scss.template @@ -0,0 +1,236 @@ +// Ionic Variables and Theming. For more info, please see: +// http://ionicframework.com/docs/theming/ + +/** Ionic CSS Variables **/ +:root { + /** primary **/ + --ion-color-primary: #3880ff; + --ion-color-primary-rgb: 56, 128, 255; + --ion-color-primary-contrast: #ffffff; + --ion-color-primary-contrast-rgb: 255, 255, 255; + --ion-color-primary-shade: #3171e0; + --ion-color-primary-tint: #4c8dff; + + /** secondary **/ + --ion-color-secondary: #3dc2ff; + --ion-color-secondary-rgb: 61, 194, 255; + --ion-color-secondary-contrast: #ffffff; + --ion-color-secondary-contrast-rgb: 255, 255, 255; + --ion-color-secondary-shade: #36abe0; + --ion-color-secondary-tint: #50c8ff; + + /** tertiary **/ + --ion-color-tertiary: #5260ff; + --ion-color-tertiary-rgb: 82, 96, 255; + --ion-color-tertiary-contrast: #ffffff; + --ion-color-tertiary-contrast-rgb: 255, 255, 255; + --ion-color-tertiary-shade: #4854e0; + --ion-color-tertiary-tint: #6370ff; + + /** success **/ + --ion-color-success: #2dd36f; + --ion-color-success-rgb: 45, 211, 111; + --ion-color-success-contrast: #ffffff; + --ion-color-success-contrast-rgb: 255, 255, 255; + --ion-color-success-shade: #28ba62; + --ion-color-success-tint: #42d77d; + + /** warning **/ + --ion-color-warning: #ffc409; + --ion-color-warning-rgb: 255, 196, 9; + --ion-color-warning-contrast: #000000; + --ion-color-warning-contrast-rgb: 0, 0, 0; + --ion-color-warning-shade: #e0ac08; + --ion-color-warning-tint: #ffca22; + + /** danger **/ + --ion-color-danger: #eb445a; + --ion-color-danger-rgb: 235, 68, 90; + --ion-color-danger-contrast: #ffffff; + --ion-color-danger-contrast-rgb: 255, 255, 255; + --ion-color-danger-shade: #cf3c4f; + --ion-color-danger-tint: #ed576b; + + /** dark **/ + --ion-color-dark: #222428; + --ion-color-dark-rgb: 34, 36, 40; + --ion-color-dark-contrast: #ffffff; + --ion-color-dark-contrast-rgb: 255, 255, 255; + --ion-color-dark-shade: #1e2023; + --ion-color-dark-tint: #383a3e; + + /** medium **/ + --ion-color-medium: #92949c; + --ion-color-medium-rgb: 146, 148, 156; + --ion-color-medium-contrast: #ffffff; + --ion-color-medium-contrast-rgb: 255, 255, 255; + --ion-color-medium-shade: #808289; + --ion-color-medium-tint: #9d9fa6; + + /** light **/ + --ion-color-light: #f4f5f8; + --ion-color-light-rgb: 244, 245, 248; + --ion-color-light-contrast: #000000; + --ion-color-light-contrast-rgb: 0, 0, 0; + --ion-color-light-shade: #d7d8da; + --ion-color-light-tint: #f5f6f9; +} + +@media (prefers-color-scheme: dark) { + /* + * Dark Colors + * ------------------------------------------- + */ + + body { + --ion-color-primary: #428cff; + --ion-color-primary-rgb: 66,140,255; + --ion-color-primary-contrast: #ffffff; + --ion-color-primary-contrast-rgb: 255,255,255; + --ion-color-primary-shade: #3a7be0; + --ion-color-primary-tint: #5598ff; + + --ion-color-secondary: #50c8ff; + --ion-color-secondary-rgb: 80,200,255; + --ion-color-secondary-contrast: #ffffff; + --ion-color-secondary-contrast-rgb: 255,255,255; + --ion-color-secondary-shade: #46b0e0; + --ion-color-secondary-tint: #62ceff; + + --ion-color-tertiary: #6a64ff; + --ion-color-tertiary-rgb: 106,100,255; + --ion-color-tertiary-contrast: #ffffff; + --ion-color-tertiary-contrast-rgb: 255,255,255; + --ion-color-tertiary-shade: #5d58e0; + --ion-color-tertiary-tint: #7974ff; + + --ion-color-success: #2fdf75; + --ion-color-success-rgb: 47,223,117; + --ion-color-success-contrast: #000000; + --ion-color-success-contrast-rgb: 0,0,0; + --ion-color-success-shade: #29c467; + --ion-color-success-tint: #44e283; + + --ion-color-warning: #ffd534; + --ion-color-warning-rgb: 255,213,52; + --ion-color-warning-contrast: #000000; + --ion-color-warning-contrast-rgb: 0,0,0; + --ion-color-warning-shade: #e0bb2e; + --ion-color-warning-tint: #ffd948; + + --ion-color-danger: #ff4961; + --ion-color-danger-rgb: 255,73,97; + --ion-color-danger-contrast: #ffffff; + --ion-color-danger-contrast-rgb: 255,255,255; + --ion-color-danger-shade: #e04055; + --ion-color-danger-tint: #ff5b71; + + --ion-color-dark: #f4f5f8; + --ion-color-dark-rgb: 244,245,248; + --ion-color-dark-contrast: #000000; + --ion-color-dark-contrast-rgb: 0,0,0; + --ion-color-dark-shade: #d7d8da; + --ion-color-dark-tint: #f5f6f9; + + --ion-color-medium: #989aa2; + --ion-color-medium-rgb: 152,154,162; + --ion-color-medium-contrast: #000000; + --ion-color-medium-contrast-rgb: 0,0,0; + --ion-color-medium-shade: #86888f; + --ion-color-medium-tint: #a2a4ab; + + --ion-color-light: #222428; + --ion-color-light-rgb: 34,36,40; + --ion-color-light-contrast: #ffffff; + --ion-color-light-contrast-rgb: 255,255,255; + --ion-color-light-shade: #1e2023; + --ion-color-light-tint: #383a3e; + } + + /* + * iOS Dark Theme + * ------------------------------------------- + */ + + .ios body { + --ion-background-color: #000000; + --ion-background-color-rgb: 0,0,0; + + --ion-text-color: #ffffff; + --ion-text-color-rgb: 255,255,255; + + --ion-color-step-50: #0d0d0d; + --ion-color-step-100: #1a1a1a; + --ion-color-step-150: #262626; + --ion-color-step-200: #333333; + --ion-color-step-250: #404040; + --ion-color-step-300: #4d4d4d; + --ion-color-step-350: #595959; + --ion-color-step-400: #666666; + --ion-color-step-450: #737373; + --ion-color-step-500: #808080; + --ion-color-step-550: #8c8c8c; + --ion-color-step-600: #999999; + --ion-color-step-650: #a6a6a6; + --ion-color-step-700: #b3b3b3; + --ion-color-step-750: #bfbfbf; + --ion-color-step-800: #cccccc; + --ion-color-step-850: #d9d9d9; + --ion-color-step-900: #e6e6e6; + --ion-color-step-950: #f2f2f2; + + --ion-item-background: #000000; + + --ion-card-background: #1c1c1d; + } + + .ios ion-modal { + --ion-background-color: var(--ion-color-step-100); + --ion-toolbar-background: var(--ion-color-step-150); + --ion-toolbar-border-color: var(--ion-color-step-250); + } + + + /* + * Material Design Dark Theme + * ------------------------------------------- + */ + + .md body { + --ion-background-color: #121212; + --ion-background-color-rgb: 18,18,18; + + --ion-text-color: #ffffff; + --ion-text-color-rgb: 255,255,255; + + --ion-border-color: #222222; + + --ion-color-step-50: #1e1e1e; + --ion-color-step-100: #2a2a2a; + --ion-color-step-150: #363636; + --ion-color-step-200: #414141; + --ion-color-step-250: #4d4d4d; + --ion-color-step-300: #595959; + --ion-color-step-350: #656565; + --ion-color-step-400: #717171; + --ion-color-step-450: #7d7d7d; + --ion-color-step-500: #898989; + --ion-color-step-550: #949494; + --ion-color-step-600: #a0a0a0; + --ion-color-step-650: #acacac; + --ion-color-step-700: #b8b8b8; + --ion-color-step-750: #c4c4c4; + --ion-color-step-800: #d0d0d0; + --ion-color-step-850: #dbdbdb; + --ion-color-step-900: #e7e7e7; + --ion-color-step-950: #f3f3f3; + + --ion-item-background: #1e1e1e; + + --ion-toolbar-background: #1f1f1f; + + --ion-tab-bar-background: #1f1f1f; + + --ion-card-background: #1e1e1e; + } +} diff --git a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.component.ts.template new file mode 100644 index 000000000..232695bd0 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.component.ts.template @@ -0,0 +1,17 @@ +import {Component} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {IonicModule} from '@ionic/angular'; + +@Component({ + selector: '<%= prefix %>-root', + standalone: true, + imports: [CommonModule, IonicModule], + template: ` + + + + `, + styles: `` +}) + +export class AppComponent {} \ No newline at end of file diff --git a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.config.ts.template b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.config.ts.template new file mode 100644 index 000000000..8c60f9f66 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.config.ts.template @@ -0,0 +1,14 @@ +import { ApplicationConfig, importProvidersFrom } from '@angular/core'; +import { provideRouter } from '@angular/router'; +import { appRoutes } from './app.routes'; +import {IonicModule} from '@ionic/angular'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideRouter(appRoutes), + importProvidersFrom( + IonicModule.forRoot() + ) + + ], +}; diff --git a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.routes.ts.template b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.routes.ts.template new file mode 100644 index 000000000..57b546b26 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.routes.ts.template @@ -0,0 +1,14 @@ +import { Routes } from '@angular/router'; + +export const appRoutes: Routes = [ + { + path: 'home', + loadChildren: () => import('./home/home.routes').then(r => r.routes) + }, + { + path: '', + redirectTo: 'home', + pathMatch: 'full' + }, +]; + diff --git a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.page.ts.template b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.page.ts.template new file mode 100644 index 000000000..d98fe1000 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.page.ts.template @@ -0,0 +1,66 @@ +import { Component } from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {IonicModule} from '@ionic/angular'; + +@Component({ + selector: '<%= prefix %>-home', + standalone: true, + imports: [CommonModule, IonicModule], + template: ` + + + + Blank + + + + + + + + Blank + + + +
+

Welcome <%= appProjectName %>!

+ Ready to create an app? +

Start with Ionic UI Components

+
+
+ `, + styles: ` + #container { + text-align: center; + + position: absolute; + left: 0; + right: 0; + top: 50%; + transform: translateY(-50%); + } + + #container strong { + font-size: 20px; + line-height: 26px; + } + + #container p { + font-size: 16px; + line-height: 22px; + + color: #8c8c8c; + + margin: 0; + } + + #container a { + text-decoration: none; + } + ` +}) +export class HomePage { + + constructor() {} + +} diff --git a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.routes.ts.template b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.routes.ts.template new file mode 100644 index 000000000..2fb6d6926 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.routes.ts.template @@ -0,0 +1,9 @@ +import { Routes } from '@angular/router'; + +export const routes: Routes = [ + { + path: '', + loadComponent: () => import('./home.page').then(p => p.HomePage) + } +]; + diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/app-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/app-routing.module.ts.template new file mode 100644 index 000000000..e7b0d5af7 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank/src/app/app-routing.module.ts.template @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; + +const routes: Routes = [ + { + path: 'home', + loadChildren: () => import('./home/home.module').then( m => m.HomePageModule) + }, + { + path: '', + redirectTo: 'home', + pathMatch: 'full' + }, +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) + ], + exports: [RouterModule] +}) +export class AppRoutingModule { } diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/app.component.html.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/app.component.html.template new file mode 100644 index 000000000..13b96776e --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank/src/app/app.component.html.template @@ -0,0 +1,3 @@ + + + diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/app.module.ts.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/app.module.ts.template new file mode 100644 index 000000000..4255dd891 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank/src/app/app.module.ts.template @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouteReuseStrategy } from '@angular/router'; + +import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; + +@NgModule({ + declarations: [AppComponent], + imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], + providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }], + bootstrap: [AppComponent], +}) +export class AppModule {} diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home-routing.module.ts.template new file mode 100644 index 000000000..29c3f6000 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home-routing.module.ts.template @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { HomePage } from './home.page'; + +const routes: Routes = [ + { + path: '', + component: HomePage, + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class HomePageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.module.ts.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.module.ts.template new file mode 100644 index 000000000..a554f017a --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.module.ts.template @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { IonicModule } from '@ionic/angular'; +import { FormsModule } from '@angular/forms'; +import { HomePage } from './home.page'; + +import { HomePageRoutingModule } from './home-routing.module'; + + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + HomePageRoutingModule + ], + declarations: [HomePage] +}) +export class HomePageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.html.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.html.template new file mode 100644 index 000000000..b5dce640e --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.html.template @@ -0,0 +1,21 @@ + + + + Blank + + + + + + + + Blank + + + +
+

Welcome <%= appProjectName %>!

+ Ready to create an app? +

Start with Ionic UI Components

+
+
diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.scss.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.scss.template new file mode 100644 index 000000000..8993e7ca0 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.scss.template @@ -0,0 +1,27 @@ +#container { + text-align: center; + + position: absolute; + left: 0; + right: 0; + top: 50%; + transform: translateY(-50%); +} + +#container strong { + font-size: 20px; + line-height: 26px; +} + +#container p { + font-size: 16px; + line-height: 22px; + + color: #8c8c8c; + + margin: 0; +} + +#container a { + text-decoration: none; +} \ No newline at end of file diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.ts.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.ts.template new file mode 100644 index 000000000..ea75a71e3 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.ts.template @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: '<%= prefix %>-home', + templateUrl: 'home.page.html', + styleUrls: ['home.page.scss'], +}) +export class HomePage { + + constructor() {} + +} diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.component.ts.template new file mode 100644 index 000000000..b8e4893e4 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.component.ts.template @@ -0,0 +1,18 @@ +import {Component} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {IonicModule} from '@ionic/angular'; + +@Component({ + selector: '<%= prefix %>-root', + standalone: true, + imports: [CommonModule, IonicModule], + template: ` + + + + `, + styles: ` + ` +}) +export class AppComponent { +} diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.config.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.config.ts.template new file mode 100644 index 000000000..8c60f9f66 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.config.ts.template @@ -0,0 +1,14 @@ +import { ApplicationConfig, importProvidersFrom } from '@angular/core'; +import { provideRouter } from '@angular/router'; +import { appRoutes } from './app.routes'; +import {IonicModule} from '@ionic/angular'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideRouter(appRoutes), + importProvidersFrom( + IonicModule.forRoot() + ) + + ], +}; diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.routes.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.routes.ts.template new file mode 100644 index 000000000..3225d07c7 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.routes.ts.template @@ -0,0 +1,18 @@ +import {Routes} from '@angular/router'; + +export const appRoutes: Routes = [ + { + path: 'home', + loadChildren: () => import('./home/home.routes').then( r => r.routes) + }, + { + path: 'message/:id', + loadChildren: () => import('./view-message/view-message.routes').then( r => r.routes) + }, + { + path: '', + redirectTo: 'home', + pathMatch: 'full' + }, +]; + diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.page.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.page.ts.template new file mode 100644 index 000000000..75642c74a --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.page.ts.template @@ -0,0 +1,54 @@ +import { Component, inject } from '@angular/core'; +import {CommonModule} from '@angular/common'; +import { RefresherCustomEvent, IonicModule } from '@ionic/angular'; +import { DataService, Message } from '../services/data.service'; +import {MessageComponent} from '../message/message.component'; + +@Component({ + selector: '<%= prefix %>-home', + standalone: true, + imports: [CommonModule, IonicModule, MessageComponent], + template: ` + + + + Inbox + + + + + + + + + + + + + Inbox + + + + + + <<%= prefix %>-message *ngFor="let message of getMessages()" [message]="message">-message> + + + `, + styles: ` + ` +}) +export class HomePage { + private data = inject(DataService); + constructor() {} + + refresh(ev: any) { + setTimeout(() => { + (ev as RefresherCustomEvent).detail.complete(); + }, 3000); + } + + getMessages(): Message[] { + return this.data.getMessages(); + } +} diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.routes.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.routes.ts.template new file mode 100644 index 000000000..e738d765e --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.routes.ts.template @@ -0,0 +1,8 @@ +import {Routes} from '@angular/router'; + +export const routes: Routes = [ + { + path: '', + loadComponent: () => import('./home.page').then(p => p.HomePage) + } +]; diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.spec.ts.template new file mode 100644 index 000000000..054a66d30 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.spec.ts.template @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterModule } from '@angular/router'; +import { IonicModule } from '@ionic/angular'; + +import { MessageComponentModule } from '../message/message.module'; + +import { HomePage } from './home.page'; + +describe('HomePage', () => { + let component: HomePage; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [HomePage], + imports: [IonicModule.forRoot(), MessageComponentModule, RouterModule.forRoot([])] + }).compileComponents(); + + fixture = TestBed.createComponent(HomePage); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.spec.ts.template new file mode 100644 index 000000000..ba40d5bcc --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.spec.ts.template @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterModule } from '@angular/router'; +import { IonicModule } from '@ionic/angular'; + +import { MessageComponent } from './message.component'; + +describe('MessageComponent', () => { + let component: MessageComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [MessageComponent], + imports: [IonicModule.forRoot(), RouterModule.forRoot([])] + }).compileComponents(); + + fixture = TestBed.createComponent(MessageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.ts.template new file mode 100644 index 000000000..495b859b4 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.ts.template @@ -0,0 +1,98 @@ +import { ChangeDetectionStrategy, Component, inject, Input } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import {RouterModule} from '@angular/router'; +import { Platform, IonicModule } from '@ionic/angular'; +import { Message } from '../services/data.service'; + +@Component({ + selector: '<%= prefix %>-message', + standalone: true, + imports: [CommonModule, IonicModule, RouterModule], + template: ` + +
+ +

+ {{ message.fromName }} + + {{ message.date }} + + +

+

{{ message.subject }}

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+ `, + styles: ` + ion-item { + --padding-start: 0; + --inner-padding-end: 0; + } + + ion-label { + margin-top: 12px; + margin-bottom: 12px; + } + + ion-item h2 { + font-weight: 600; + margin: 0; + } + + ion-item p { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + width: 95%; + } + + ion-item .date { + float: right; + align-items: center; + display: flex; + } + + ion-item ion-icon { + color: #c9c9ca; + } + + ion-item ion-note { + font-size: 15px; + margin-right: 8px; + font-weight: normal; + } + + ion-item ion-note.md { + margin-right: 14px; + } + + .dot { + display: block; + height: 12px; + width: 12px; + border-radius: 50%; + align-self: start; + margin: 16px 10px 16px 16px; + } + + .dot-unread { + background: var(--ion-color-primary); + } + + ion-footer ion-title { + font-size: 11px; + font-weight: normal; + } + `, + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class MessageComponent { + private platform = inject(Platform); + @Input() message?: Message; + isIos() { + return this.platform.is('ios') + } +} diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.spec.ts.template new file mode 100644 index 000000000..a5283fc69 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.spec.ts.template @@ -0,0 +1,12 @@ +import { TestBed } from '@angular/core/testing'; + +import { DataService } from './data.service'; + +describe('DataService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: DataService = TestBed.get(DataService); + expect(service).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.ts.template new file mode 100644 index 000000000..2fb24a271 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.ts.template @@ -0,0 +1,83 @@ +import { Injectable } from '@angular/core'; + +export interface Message { + fromName: string; + subject: string; + date: string; + id: number; + read: boolean; +} + +@Injectable({ + providedIn: 'root' +}) +export class DataService { + public messages: Message[] = [ + { + fromName: 'Matt Chorsey', + subject: 'New event: Trip to Vegas', + date: '9:32 AM', + id: 0, + read: false + }, + { + fromName: 'Lauren Ruthford', + subject: 'Long time no chat', + date: '6:12 AM', + id: 1, + read: false + }, + { + fromName: 'Jordan Firth', + subject: 'Report Results', + date: '4:55 AM', + id: 2, + read: false + }, + { + fromName: 'Bill Thomas', + subject: 'The situation', + date: 'Yesterday', + id: 3, + read: false + }, + { + fromName: 'Joanne Pollan', + subject: 'Updated invitation: Swim lessons', + date: 'Yesterday', + id: 4, + read: false + }, + { + fromName: 'Andrea Cornerston', + subject: 'Last minute ask', + date: 'Yesterday', + id: 5, + read: false + }, + { + fromName: 'Moe Chamont', + subject: 'Family Calendar - Version 1', + date: 'Last Week', + id: 6, + read: false + }, + { + fromName: 'Kelly Richardson', + subject: 'Placeholder Headhots', + date: 'Last Week', + id: 7, + read: false + } + ]; + + constructor() { } + + public getMessages(): Message[] { + return this.messages; + } + + public getMessageById(id: number): Message { + return this.messages[id]; + } +} diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/vierw-message.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/vierw-message.page.spec.ts.template new file mode 100644 index 000000000..0e99d6619 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/vierw-message.page.spec.ts.template @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; +import { RouterModule } from '@angular/router'; + +import { ViewMessagePageRoutingModule } from './view-message-routing.module'; +import { ViewMessagePage } from './view-message.page'; + +describe('ViewMessagePage', () => { + let component: ViewMessagePage; + let fixture: ComponentFixture; + + beforeEach(async () => { + TestBed.configureTestingModule({ + declarations: [ViewMessagePage], + imports: [IonicModule.forRoot(), ViewMessagePageRoutingModule, RouterModule.forRoot([])] + }).compileComponents(); + + fixture = TestBed.createComponent(ViewMessagePage); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.page.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.page.ts.template new file mode 100644 index 000000000..447d817b6 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.page.ts.template @@ -0,0 +1,106 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import {CommonModule} from '@angular/common'; +import {IonicModule} from '@ionic/angular'; +import { DataService, Message } from '../services/data.service'; + +@Component({ + selector: '<%= prefix %>-view-message', + standalone: true, + imports: [CommonModule, IonicModule], + template: ` + + + + + + + + + + + + +

+ {{ message.fromName }} + + {{ message.date }} + +

+

To: Me

+
+
+ +
+

{{ message.subject }}

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+ `, + styles: ` + ion-item { + --inner-padding-end: 0; + --background: transparent; + } + + ion-label { + margin-top: 12px; + margin-bottom: 12px; + } + + ion-item h2 { + font-weight: 600; + } + + ion-item .date { + float: right; + align-items: center; + display: flex; + } + + ion-item ion-icon { + font-size: 42px; + margin-right: 8px; + } + + ion-item ion-note { + font-size: 15px; + margin-right: 12px; + font-weight: normal; + } + + h1 { + margin: 0; + font-weight: bold; + font-size: 22px; + } + + p { + line-height: 22px; + } + ` +}) +export class ViewMessagePage implements OnInit { + public message!: Message; + + constructor( + private data: DataService, + private activatedRoute: ActivatedRoute + ) { } + + ngOnInit() { + const id = this.activatedRoute.snapshot.paramMap.get('id'); + + if (id) { + this.message = this.data.getMessageById(parseInt(id, 10)); + } + } + + getBackButtonText() { + const win = window as any; + const mode = win && win.Ionic && win.Ionic.mode; + return mode === 'ios' ? 'Inbox' : ''; + } +} diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.routes.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.routes.ts.template new file mode 100644 index 000000000..0e29f081a --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.routes.ts.template @@ -0,0 +1,8 @@ +import {Routes} from '@angular/router'; + +export const routes: Routes = [ + { + path: '', + loadComponent: () => import('./view-message.page').then(p => p.ViewMessagePage) + } +]; diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/app-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/app-routing.module.ts.template new file mode 100644 index 000000000..a2b2e0f72 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/app-routing.module.ts.template @@ -0,0 +1,26 @@ +import { NgModule } from '@angular/core'; +import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; + +const routes: Routes = [ + { + path: 'home', + loadChildren: () => import('./home/home.module').then( m => m.HomePageModule) + }, + { + path: 'message/:id', + loadChildren: () => import('./view-message/view-message.module').then( m => m.ViewMessagePageModule) + }, + { + path: '', + redirectTo: 'home', + pathMatch: 'full' + }, +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) + ], + exports: [RouterModule] +}) +export class AppRoutingModule { } diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/app.component.html.template b/packages/ionic-angular/src/generators/application/files/list/src/app/app.component.html.template new file mode 100644 index 000000000..13b96776e --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/app.component.html.template @@ -0,0 +1,3 @@ + + + diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/app.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/app.module.ts.template new file mode 100644 index 000000000..34b715b6c --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/app.module.ts.template @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouteReuseStrategy } from '@angular/router'; + +import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; + +import { AppComponent } from './app.component'; +import { AppRoutingModule } from './app-routing.module'; + +@NgModule({ + declarations: [AppComponent], + imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], + providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }], + bootstrap: [AppComponent], +}) +export class AppModule {} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home-routing.module.ts.template new file mode 100644 index 000000000..720fb1c2a --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home-routing.module.ts.template @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { HomePage } from './home.page'; + +const routes: Routes = [ + { + path: '', + component: HomePage + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class HomePageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.module.ts.template new file mode 100644 index 000000000..53aa867e8 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.module.ts.template @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { IonicModule } from '@ionic/angular'; +import { FormsModule } from '@angular/forms'; + +import { HomePage } from './home.page'; +import { HomePageRoutingModule } from './home-routing.module'; +import { MessageComponentModule } from '../message/message.module'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + MessageComponentModule, + HomePageRoutingModule + ], + declarations: [HomePage] +}) +export class HomePageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.html.template b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.html.template new file mode 100644 index 000000000..6b82d6717 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.html.template @@ -0,0 +1,25 @@ + + + + Inbox + + + + + + + + + + + + + Inbox + + + + + + <<%= prefix %>-message *ngFor="let message of getMessages()" [message]="message">-message> + + diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.scss.template b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.scss.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.ts.template new file mode 100644 index 000000000..8c11216cc --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.ts.template @@ -0,0 +1,24 @@ +import { Component, inject } from '@angular/core'; +import { RefresherCustomEvent } from '@ionic/angular'; + +import { DataService, Message } from '../services/data.service'; + +@Component({ + selector: '<%= prefix %>-home', + templateUrl: 'home.page.html', + styleUrls: ['home.page.scss'], +}) +export class HomePage { + private data = inject(DataService); + constructor() {} + + refresh(ev: any) { + setTimeout(() => { + (ev as RefresherCustomEvent).detail.complete(); + }, 3000); + } + + getMessages(): Message[] { + return this.data.getMessages(); + } +} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.spec.ts.template new file mode 100644 index 000000000..054a66d30 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.spec.ts.template @@ -0,0 +1,27 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterModule } from '@angular/router'; +import { IonicModule } from '@ionic/angular'; + +import { MessageComponentModule } from '../message/message.module'; + +import { HomePage } from './home.page'; + +describe('HomePage', () => { + let component: HomePage; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [HomePage], + imports: [IonicModule.forRoot(), MessageComponentModule, RouterModule.forRoot([])] + }).compileComponents(); + + fixture = TestBed.createComponent(HomePage); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.html.template b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.html.template new file mode 100644 index 000000000..167a43036 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.html.template @@ -0,0 +1,16 @@ + +
+ +

+ {{ message.fromName }} + + {{ message.date }} + + +

+

{{ message.subject }}

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.scss.template b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.scss.template new file mode 100644 index 000000000..1174b05b7 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.scss.template @@ -0,0 +1,59 @@ +ion-item { + --padding-start: 0; + --inner-padding-end: 0; +} + +ion-label { + margin-top: 12px; + margin-bottom: 12px; +} + +ion-item h2 { + font-weight: 600; + margin: 0; +} + +ion-item p { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + width: 95%; +} + +ion-item .date { + float: right; + align-items: center; + display: flex; +} + +ion-item ion-icon { + color: #c9c9ca; +} + +ion-item ion-note { + font-size: 15px; + margin-right: 8px; + font-weight: normal; +} + +ion-item ion-note.md { + margin-right: 14px; +} + +.dot { + display: block; + height: 12px; + width: 12px; + border-radius: 50%; + align-self: start; + margin: 16px 10px 16px 16px; +} + +.dot-unread { + background: var(--ion-color-primary); +} + +ion-footer ion-title { + font-size: 11px; + font-weight: normal; +} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.spec.ts.template new file mode 100644 index 000000000..ba40d5bcc --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.spec.ts.template @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterModule } from '@angular/router'; +import { IonicModule } from '@ionic/angular'; + +import { MessageComponent } from './message.component'; + +describe('MessageComponent', () => { + let component: MessageComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [MessageComponent], + imports: [IonicModule.forRoot(), RouterModule.forRoot([])] + }).compileComponents(); + + fixture = TestBed.createComponent(MessageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.ts.template new file mode 100644 index 000000000..dcbd61789 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.ts.template @@ -0,0 +1,17 @@ +import { ChangeDetectionStrategy, Component, inject, Input } from '@angular/core'; +import { Platform } from '@ionic/angular'; +import { Message } from '../services/data.service'; + +@Component({ + selector: '<%= prefix %>-message', + templateUrl: './message.component.html', + styleUrls: ['./message.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class MessageComponent { + private platform = inject(Platform); + @Input() message?: Message; + isIos() { + return this.platform.is('ios') + } +} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.module.ts.template new file mode 100644 index 000000000..3299ebf74 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.module.ts.template @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; + +import { IonicModule } from '@ionic/angular'; + +import { MessageComponent } from './message.component'; + +@NgModule({ + imports: [ CommonModule, FormsModule, IonicModule, RouterModule], + declarations: [MessageComponent], + exports: [MessageComponent] +}) +export class MessageComponentModule {} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.spec.ts.template new file mode 100644 index 000000000..a5283fc69 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.spec.ts.template @@ -0,0 +1,12 @@ +import { TestBed } from '@angular/core/testing'; + +import { DataService } from './data.service'; + +describe('DataService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: DataService = TestBed.get(DataService); + expect(service).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.ts.template new file mode 100644 index 000000000..2fb24a271 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.ts.template @@ -0,0 +1,83 @@ +import { Injectable } from '@angular/core'; + +export interface Message { + fromName: string; + subject: string; + date: string; + id: number; + read: boolean; +} + +@Injectable({ + providedIn: 'root' +}) +export class DataService { + public messages: Message[] = [ + { + fromName: 'Matt Chorsey', + subject: 'New event: Trip to Vegas', + date: '9:32 AM', + id: 0, + read: false + }, + { + fromName: 'Lauren Ruthford', + subject: 'Long time no chat', + date: '6:12 AM', + id: 1, + read: false + }, + { + fromName: 'Jordan Firth', + subject: 'Report Results', + date: '4:55 AM', + id: 2, + read: false + }, + { + fromName: 'Bill Thomas', + subject: 'The situation', + date: 'Yesterday', + id: 3, + read: false + }, + { + fromName: 'Joanne Pollan', + subject: 'Updated invitation: Swim lessons', + date: 'Yesterday', + id: 4, + read: false + }, + { + fromName: 'Andrea Cornerston', + subject: 'Last minute ask', + date: 'Yesterday', + id: 5, + read: false + }, + { + fromName: 'Moe Chamont', + subject: 'Family Calendar - Version 1', + date: 'Last Week', + id: 6, + read: false + }, + { + fromName: 'Kelly Richardson', + subject: 'Placeholder Headhots', + date: 'Last Week', + id: 7, + read: false + } + ]; + + constructor() { } + + public getMessages(): Message[] { + return this.messages; + } + + public getMessageById(id: number): Message { + return this.messages[id]; + } +} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/vierw-message.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/vierw-message.page.spec.ts.template new file mode 100644 index 000000000..0e99d6619 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/vierw-message.page.spec.ts.template @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; +import { RouterModule } from '@angular/router'; + +import { ViewMessagePageRoutingModule } from './view-message-routing.module'; +import { ViewMessagePage } from './view-message.page'; + +describe('ViewMessagePage', () => { + let component: ViewMessagePage; + let fixture: ComponentFixture; + + beforeEach(async () => { + TestBed.configureTestingModule({ + declarations: [ViewMessagePage], + imports: [IonicModule.forRoot(), ViewMessagePageRoutingModule, RouterModule.forRoot([])] + }).compileComponents(); + + fixture = TestBed.createComponent(ViewMessagePage); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message-routing.module.ts.template new file mode 100644 index 000000000..3a829f784 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message-routing.module.ts.template @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { ViewMessagePage } from './view-message.page'; + +const routes: Routes = [ + { + path: '', + component: ViewMessagePage + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class ViewMessagePageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.module.ts.template new file mode 100644 index 000000000..6e00f8872 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.module.ts.template @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { ViewMessagePage } from './view-message.page'; + +import { IonicModule } from '@ionic/angular'; + +import { ViewMessagePageRoutingModule } from './view-message-routing.module'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + ViewMessagePageRoutingModule + ], + declarations: [ViewMessagePage] +}) +export class ViewMessagePageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.html.template b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.html.template new file mode 100644 index 000000000..b4ce2f3fe --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.html.template @@ -0,0 +1,29 @@ + + + + + + + + + + + + +

+ {{ message.fromName }} + + {{ message.date }} + +

+

To: Me

+
+
+ +
+

{{ message.subject }}

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.scss.template b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.scss.template new file mode 100644 index 000000000..ff703f07f --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.scss.template @@ -0,0 +1,40 @@ +ion-item { + --inner-padding-end: 0; + --background: transparent; +} + +ion-label { + margin-top: 12px; + margin-bottom: 12px; +} + +ion-item h2 { + font-weight: 600; +} + +ion-item .date { + float: right; + align-items: center; + display: flex; +} + +ion-item ion-icon { + font-size: 42px; + margin-right: 8px; +} + +ion-item ion-note { + font-size: 15px; + margin-right: 12px; + font-weight: normal; +} + +h1 { + margin: 0; + font-weight: bold; + font-size: 22px; +} + +p { + line-height: 22px; +} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.ts.template new file mode 100644 index 000000000..4e515d4e9 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.ts.template @@ -0,0 +1,31 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { DataService, Message } from '../services/data.service'; + +@Component({ + selector: '<%= prefix %>-view-message', + templateUrl: './view-message.page.html', + styleUrls: ['./view-message.page.scss'], +}) +export class ViewMessagePage implements OnInit { + public message!: Message; + + constructor( + private data: DataService, + private activatedRoute: ActivatedRoute + ) { } + + ngOnInit() { + const id = this.activatedRoute.snapshot.paramMap.get('id'); + + if (id) { + this.message = this.data.getMessageById(parseInt(id, 10)); + } + } + + getBackButtonText() { + const win = window as any; + const mode = win && win.Ionic && win.Ionic.mode; + return mode === 'ios' ? 'Inbox' : ''; + } +} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.spec.ts.template new file mode 100644 index 000000000..6672357dd --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.spec.ts.template @@ -0,0 +1,46 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { TestBed } from '@angular/core/testing'; + +import { RouterTestingModule } from '@angular/router/testing'; + +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + + + beforeEach(async () => { + + await TestBed.configureTestingModule({ + declarations: [AppComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + imports: [RouterTestingModule.withRoutes([])], + }).compileComponents(); + }); + + it('should create the app', async () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it('should have menu labels', async () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const app = fixture.nativeElement; + const menuItems = app.querySelectorAll('ion-label'); + expect(menuItems.length).toEqual(12); + expect(menuItems[0].textContent).toContain('Inbox'); + expect(menuItems[1].textContent).toContain('Outbox'); + }); + + it('should have urls', async () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const app = fixture.nativeElement; + const menuItems = app.querySelectorAll('ion-item'); + expect(menuItems.length).toEqual(12); + expect(menuItems[0].getAttribute('ng-reflect-router-link')).toEqual('/folder/inbox'); + expect(menuItems[1].getAttribute('ng-reflect-router-link')).toEqual('/folder/outbox'); + }); + +}); diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.ts.template new file mode 100644 index 000000000..56a35b271 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.ts.template @@ -0,0 +1,174 @@ +import { Component } from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {RouterModule} from '@angular/router'; +import {IonicModule} from '@ionic/angular'; + +@Component({ + selector: '<%= prefix %>-root', + standalone: true, + imports: [CommonModule, IonicModule, RouterModule], + template: ` + + + + + + Inbox + hi@ionicframework.com + + + + + {{ p.title }} + + + + + + Labels + + + + {{ label }} + + + + + + + + `, + styles: ` + ion-menu ion-content { + --background: var(--ion-item-background, var(--ion-background-color, #fff)); + } + + ion-menu.md ion-content { + --padding-start: 8px; + --padding-end: 8px; + --padding-top: 20px; + --padding-bottom: 20px; + } + + ion-menu.md ion-list { + padding: 20px 0; + } + + ion-menu.md ion-note { + margin-bottom: 30px; + } + + ion-menu.md ion-list-header, + ion-menu.md ion-note { + padding-left: 10px; + } + + ion-menu.md ion-list#inbox-list { + border-bottom: 1px solid var(--ion-color-step-150, #d7d8da); + } + + ion-menu.md ion-list#inbox-list ion-list-header { + font-size: 22px; + font-weight: 600; + + min-height: 20px; + } + + ion-menu.md ion-list#labels-list ion-list-header { + font-size: 16px; + + margin-bottom: 18px; + + color: #757575; + + min-height: 26px; + } + + ion-menu.md ion-item { + --padding-start: 10px; + --padding-end: 10px; + border-radius: 4px; + } + + ion-menu.md ion-item.selected { + --background: rgba(var(--ion-color-primary-rgb), 0.14); + } + + ion-menu.md ion-item.selected ion-icon { + color: var(--ion-color-primary); + } + + ion-menu.md ion-item ion-icon { + color: #616e7e; + } + + ion-menu.md ion-item ion-label { + font-weight: 500; + } + + ion-menu.ios ion-content { + --padding-bottom: 20px; + } + + ion-menu.ios ion-list { + padding: 20px 0 0 0; + } + + ion-menu.ios ion-note { + line-height: 24px; + margin-bottom: 20px; + } + + ion-menu.ios ion-item { + --padding-start: 16px; + --padding-end: 16px; + --min-height: 50px; + } + + ion-menu.ios ion-item.selected ion-icon { + color: var(--ion-color-primary); + } + + ion-menu.ios ion-item ion-icon { + font-size: 24px; + color: #73849a; + } + + ion-menu.ios ion-list#labels-list ion-list-header { + margin-bottom: 8px; + } + + ion-menu.ios ion-list-header, + ion-menu.ios ion-note { + padding-left: 16px; + padding-right: 16px; + } + + ion-menu.ios ion-note { + margin-bottom: 8px; + } + + ion-note { + display: inline-block; + font-size: 16px; + + color: var(--ion-color-medium-shade); + } + + ion-item.selected { + --color: var(--ion-color-primary); + } + `, +}) +export class AppComponent { + public appPages = [ + { title: 'Inbox', url: '/folder/inbox', icon: 'mail' }, + { title: 'Outbox', url: '/folder/outbox', icon: 'paper-plane' }, + { title: 'Favorites', url: '/folder/favorites', icon: 'heart' }, + { title: 'Archived', url: '/folder/archived', icon: 'archive' }, + { title: 'Trash', url: '/folder/trash', icon: 'trash' }, + { title: 'Spam', url: '/folder/spam', icon: 'warning' }, + ]; + public labels = ['Family', 'Friends', 'Notes', 'Work', 'Travel', 'Reminders']; + constructor() {} +} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.config.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.config.ts.template new file mode 100644 index 000000000..8c60f9f66 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.config.ts.template @@ -0,0 +1,14 @@ +import { ApplicationConfig, importProvidersFrom } from '@angular/core'; +import { provideRouter } from '@angular/router'; +import { appRoutes } from './app.routes'; +import {IonicModule} from '@ionic/angular'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideRouter(appRoutes), + importProvidersFrom( + IonicModule.forRoot() + ) + + ], +}; diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.routes.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.routes.ts.template new file mode 100644 index 000000000..c7732364e --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.routes.ts.template @@ -0,0 +1,13 @@ +import { Routes } from '@angular/router'; + +export const appRoutes: Routes = [ + { + path: '', + redirectTo: 'folder/Inbox', + pathMatch: 'full' + }, + { + path: 'folder/:id', + loadChildren: () => import('./folder/folder.routes').then( r => r.routes) + } +]; diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.page.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.page.ts.template new file mode 100644 index 000000000..f1960db1c --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.page.ts.template @@ -0,0 +1,78 @@ + +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import {CommonModule} from '@angular/common'; +import {IonicModule} from '@ionic/angular'; + +@Component({ + selector: '<%= prefix %>-folder', + standalone: true, + imports: [CommonModule, IonicModule], + template: ` + + + + + + {{ folder }} + + + + + + + {{ folder }} + + + +
+ {{ folder }} +

Explore UI Components

+
+
+ `, + styles: ` + ion-menu-button { + color: var(--ion-color-primary); + } + + #container { + text-align: center; + position: absolute; + left: 0; + right: 0; + top: 50%; + transform: translateY(-50%); + } + + #container strong { + font-size: 20px; + line-height: 26px; + } + + #container p { + font-size: 16px; + line-height: 22px; + color: #8c8c8c; + margin: 0; + } + + #container a { + text-decoration: none; + } + ` +}) +export class FolderPage implements OnInit { + public folder!: string; + + constructor(private activatedRoute: ActivatedRoute) { } + + ngOnInit() { + const id = this.activatedRoute.snapshot.paramMap.get('id'); + + if (id) { + this.folder = id; + } + } + +} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.routes.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.routes.ts.template new file mode 100644 index 000000000..3204c09f7 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.routes.ts.template @@ -0,0 +1,8 @@ +import { Routes } from '@angular/router'; + +export const routes: Routes = [ + { + path: '', + loadComponent: () => import('./folder.page').then(p => p.FolderPage) + } +]; diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app-routing.module.ts.template new file mode 100644 index 000000000..bf907a727 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app-routing.module.ts.template @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; + +const routes: Routes = [ + { + path: '', + redirectTo: 'folder/Inbox', + pathMatch: 'full' + }, + { + path: 'folder/:id', + loadChildren: () => import('./folder/folder.module').then( m => m.FolderPageModule) + } +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) + ], + exports: [RouterModule] +}) +export class AppRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.html.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.html.template new file mode 100644 index 000000000..cd12488d5 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.html.template @@ -0,0 +1,29 @@ + + + + + + Inbox + hi@ionicframework.com + + + + + {{ p.title }} + + + + + + Labels + + + + {{ label }} + + + + + + + diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.scss.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.scss.template new file mode 100644 index 000000000..5d5501533 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.scss.template @@ -0,0 +1,119 @@ +ion-menu ion-content { + --background: var(--ion-item-background, var(--ion-background-color, #fff)); +} + +ion-menu.md ion-content { + --padding-start: 8px; + --padding-end: 8px; + --padding-top: 20px; + --padding-bottom: 20px; +} + +ion-menu.md ion-list { + padding: 20px 0; +} + +ion-menu.md ion-note { + margin-bottom: 30px; +} + +ion-menu.md ion-list-header, +ion-menu.md ion-note { + padding-left: 10px; +} + +ion-menu.md ion-list#inbox-list { + border-bottom: 1px solid var(--ion-color-step-150, #d7d8da); +} + +ion-menu.md ion-list#inbox-list ion-list-header { + font-size: 22px; + font-weight: 600; + + min-height: 20px; +} + +ion-menu.md ion-list#labels-list ion-list-header { + font-size: 16px; + + margin-bottom: 18px; + + color: #757575; + + min-height: 26px; +} + +ion-menu.md ion-item { + --padding-start: 10px; + --padding-end: 10px; + border-radius: 4px; +} + +ion-menu.md ion-item.selected { + --background: rgba(var(--ion-color-primary-rgb), 0.14); +} + +ion-menu.md ion-item.selected ion-icon { + color: var(--ion-color-primary); +} + +ion-menu.md ion-item ion-icon { + color: #616e7e; +} + +ion-menu.md ion-item ion-label { + font-weight: 500; +} + +ion-menu.ios ion-content { + --padding-bottom: 20px; +} + +ion-menu.ios ion-list { + padding: 20px 0 0 0; +} + +ion-menu.ios ion-note { + line-height: 24px; + margin-bottom: 20px; +} + +ion-menu.ios ion-item { + --padding-start: 16px; + --padding-end: 16px; + --min-height: 50px; +} + +ion-menu.ios ion-item.selected ion-icon { + color: var(--ion-color-primary); +} + +ion-menu.ios ion-item ion-icon { + font-size: 24px; + color: #73849a; +} + +ion-menu.ios ion-list#labels-list ion-list-header { + margin-bottom: 8px; +} + +ion-menu.ios ion-list-header, +ion-menu.ios ion-note { + padding-left: 16px; + padding-right: 16px; +} + +ion-menu.ios ion-note { + margin-bottom: 8px; +} + +ion-note { + display: inline-block; + font-size: 16px; + + color: var(--ion-color-medium-shade); +} + +ion-item.selected { + --color: var(--ion-color-primary); +} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.spec.ts.template new file mode 100644 index 000000000..6672357dd --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.spec.ts.template @@ -0,0 +1,46 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { TestBed } from '@angular/core/testing'; + +import { RouterTestingModule } from '@angular/router/testing'; + +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + + + beforeEach(async () => { + + await TestBed.configureTestingModule({ + declarations: [AppComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + imports: [RouterTestingModule.withRoutes([])], + }).compileComponents(); + }); + + it('should create the app', async () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it('should have menu labels', async () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const app = fixture.nativeElement; + const menuItems = app.querySelectorAll('ion-label'); + expect(menuItems.length).toEqual(12); + expect(menuItems[0].textContent).toContain('Inbox'); + expect(menuItems[1].textContent).toContain('Outbox'); + }); + + it('should have urls', async () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const app = fixture.nativeElement; + const menuItems = app.querySelectorAll('ion-item'); + expect(menuItems.length).toEqual(12); + expect(menuItems[0].getAttribute('ng-reflect-router-link')).toEqual('/folder/inbox'); + expect(menuItems[1].getAttribute('ng-reflect-router-link')).toEqual('/folder/outbox'); + }); + +}); diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.ts.template new file mode 100644 index 000000000..6a6f8e7df --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.ts.template @@ -0,0 +1,18 @@ +import { Component } from '@angular/core'; +@Component({ + selector: '<%= prefix %>-root', + templateUrl: 'app.component.html', + styleUrls: ['app.component.scss'], +}) +export class AppComponent { + public appPages = [ + { title: 'Inbox', url: '/folder/inbox', icon: 'mail' }, + { title: 'Outbox', url: '/folder/outbox', icon: 'paper-plane' }, + { title: 'Favorites', url: '/folder/favorites', icon: 'heart' }, + { title: 'Archived', url: '/folder/archived', icon: 'archive' }, + { title: 'Trash', url: '/folder/trash', icon: 'trash' }, + { title: 'Spam', url: '/folder/spam', icon: 'warning' }, + ]; + public labels = ['Family', 'Friends', 'Notes', 'Work', 'Travel', 'Reminders']; + constructor() {} +} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.module.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.module.ts.template new file mode 100644 index 000000000..34b715b6c --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.module.ts.template @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouteReuseStrategy } from '@angular/router'; + +import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; + +import { AppComponent } from './app.component'; +import { AppRoutingModule } from './app-routing.module'; + +@NgModule({ + declarations: [AppComponent], + imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], + providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }], + bootstrap: [AppComponent], +}) +export class AppModule {} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder-routing.module.ts.template new file mode 100644 index 000000000..200d4407e --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder-routing.module.ts.template @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { FolderPage } from './folder.page'; + +const routes: Routes = [ + { + path: '', + component: FolderPage + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class FolderPageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.module.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.module.ts.template new file mode 100644 index 000000000..172c9f810 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.module.ts.template @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { IonicModule } from '@ionic/angular'; + +import { FolderPageRoutingModule } from './folder-routing.module'; + +import { FolderPage } from './folder.page'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + FolderPageRoutingModule + ], + declarations: [FolderPage] +}) +export class FolderPageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.html.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.html.template new file mode 100644 index 000000000..39aaa6a05 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.html.template @@ -0,0 +1,21 @@ + + + + + + {{ folder }} + + + + + + + {{ folder }} + + + +
+ {{ folder }} +

Explore UI Components

+
+
diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.scss.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.scss.template new file mode 100644 index 000000000..cceaa7529 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.scss.template @@ -0,0 +1,28 @@ +ion-menu-button { + color: var(--ion-color-primary); +} + +#container { + text-align: center; + position: absolute; + left: 0; + right: 0; + top: 50%; + transform: translateY(-50%); +} + +#container strong { + font-size: 20px; + line-height: 26px; +} + +#container p { + font-size: 16px; + line-height: 22px; + color: #8c8c8c; + margin: 0; +} + +#container a { + text-decoration: none; +} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.ts.template new file mode 100644 index 000000000..1eefe9e37 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.ts.template @@ -0,0 +1,23 @@ + +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +@Component({ + selector: '<%= prefix %>-folder', + templateUrl: './folder.page.html', + styleUrls: ['./folder.page.scss'], +}) +export class FolderPage implements OnInit { + public folder!: string; + + constructor(private activatedRoute: ActivatedRoute) { } + + ngOnInit() { + const id = this.activatedRoute.snapshot.paramMap.get('id'); + + if (id) { + this.folder = id; + } + } + +} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.html.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.html.template new file mode 100644 index 000000000..13b96776e --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.html.template @@ -0,0 +1,3 @@ + + + diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.ts.template new file mode 100644 index 000000000..7ca24ea0e --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.ts.template @@ -0,0 +1,17 @@ +import {Component} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {IonicModule} from '@ionic/angular'; + +@Component({ + selector: '<%= prefix %>-root', + standalone: true, + imports: [CommonModule, IonicModule], + template: ` + + + + `, + styles: `` +}) + +export class AppComponent {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.config.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.config.ts.template new file mode 100644 index 000000000..8c60f9f66 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.config.ts.template @@ -0,0 +1,14 @@ +import { ApplicationConfig, importProvidersFrom } from '@angular/core'; +import { provideRouter } from '@angular/router'; +import { appRoutes } from './app.routes'; +import {IonicModule} from '@ionic/angular'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideRouter(appRoutes), + importProvidersFrom( + IonicModule.forRoot() + ) + + ], +}; diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.routes.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.routes.ts.template new file mode 100644 index 000000000..4f484391a --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.routes.ts.template @@ -0,0 +1,9 @@ +import { NgModule } from '@angular/core'; +import {Routes} from '@angular/router'; + +export const appRoutes: Routes = [ + { + path: '', + loadChildren: () => import('./tabs/tabs.routes').then(r => r.routes) + } +]; diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.spec.ts.template new file mode 100644 index 000000000..caa9a7cdf --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.spec.ts.template @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { ExploreContainerComponent } from './explore-container.component'; + +describe('ExploreContainerComponent', () => { + let component: ExploreContainerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ExploreContainerComponent], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(ExploreContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.ts.template new file mode 100644 index 000000000..b375cd250 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.ts.template @@ -0,0 +1,50 @@ +import { Component, Input } from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {IonicModule} from '@ionic/angular'; + +@Component({ + selector: '<%= prefix %>-explore-container', + standalone: true, + imports: [ CommonModule, FormsModule, IonicModule ], + template: ` +
+ {{ name }} +

Explore UI Components

+
+ `, + styles: ` + #container { + text-align: center; + + position: absolute; + left: 0; + right: 0; + top: 50%; + transform: translateY(-50%); + } + + #container strong { + font-size: 20px; + line-height: 26px; + } + + #container p { + font-size: 16px; + line-height: 22px; + + color: #8c8c8c; + + margin: 0; + } + + #container a { + text-decoration: none; + } + ` +}) +export class ExploreContainerComponent { + + @Input() name?: string; + +} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.spec.ts.template new file mode 100644 index 000000000..0dbb7c0ad --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.spec.ts.template @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; + +import { Tab1Page } from './tab1.page'; + +describe('Tab1Page', () => { + let component: Tab1Page; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [Tab1Page], + imports: [IonicModule.forRoot(), ExploreContainerComponentModule] + }).compileComponents(); + + fixture = TestBed.createComponent(Tab1Page); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.ts.template new file mode 100644 index 000000000..485eec68b --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.ts.template @@ -0,0 +1,43 @@ +import { Component } from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {IonicModule} from '@ionic/angular'; +import {ExploreContainerComponent} from '../explore-container/explore-container.component'; + +@Component({ + selector: '<%= prefix %>-tab1', + standalone: true, + imports: [ + IonicModule, + CommonModule, + FormsModule, + ExploreContainerComponent + ], + template: ` + + + + Tab 1 + + + + + + + + Tab 1 + + + + <<%= prefix %>-explore-container name="Tab 1 page">-explore-container> + + `, + styles: ` + + ` +}) +export class Tab1Page { + + constructor() {} + +} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.routes.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.routes.ts.template new file mode 100644 index 000000000..3a27bf36c --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.routes.ts.template @@ -0,0 +1,10 @@ +import { Tab1Page } from './tab1.page'; +import {Routes} from '@angular/router'; + +export const routes: Routes = [ + { + path: '', + loadComponent: () => import('./tab1.page').then(p => p.Tab1Page) + } +]; + diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.spec.ts.template new file mode 100644 index 000000000..70bd876ed --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.spec.ts.template @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; + +import { Tab2Page } from './tab2.page'; + +describe('Tab2Page', () => { + let component: Tab2Page; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [Tab2Page], + imports: [IonicModule.forRoot(), ExploreContainerComponentModule] + }).compileComponents(); + + fixture = TestBed.createComponent(Tab2Page); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.ts.template new file mode 100644 index 000000000..efc017583 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.ts.template @@ -0,0 +1,42 @@ +import { Component } from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {IonicModule} from '@ionic/angular'; +import {ExploreContainerComponent} from '../explore-container/explore-container.component'; + +@Component({ + selector: '<%= prefix %>-tab2', + standalone: true, + imports: [ + IonicModule, + CommonModule, + FormsModule, + ExploreContainerComponent, + ], + template: ` + + + + Tab 2 + + + + + + + + Tab 2 + + + + <<%= prefix %>-explore-container name="Tab 2 page">-explore-container> + + + `, + styles: `` +}) +export class Tab2Page { + + constructor() {} + +} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.routes.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.routes.ts.template new file mode 100644 index 000000000..e9f94ce5f --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.routes.ts.template @@ -0,0 +1,10 @@ +import { Tab2Page } from './tab2.page'; +import {Routes} from '@angular/router'; + +export const routes: Routes = [ + { + path: '', + loadComponent: () => import('./tab2.page').then(p => p.Tab2Page), + } +]; + diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.spec.ts.template new file mode 100644 index 000000000..28d86196c --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.spec.ts.template @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; + +import { Tab3Page } from './tab3.page'; + +describe('Tab3Page', () => { + let component: Tab3Page; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [Tab3Page], + imports: [IonicModule.forRoot(), ExploreContainerComponentModule] + }).compileComponents(); + + fixture = TestBed.createComponent(Tab3Page); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.ts.template new file mode 100644 index 000000000..b8b972909 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.ts.template @@ -0,0 +1,41 @@ +import { Component } from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {IonicModule} from '@ionic/angular'; +import {ExploreContainerComponent} from '../explore-container/explore-container.component'; + +@Component({ + selector: '<%= prefix %>-tab3', + standalone: true, + imports: [ + IonicModule, + CommonModule, + FormsModule, + ExploreContainerComponent, + ], + template: ` + + + + Tab 3 + + + + + + + + Tab 3 + + + + <<%= prefix %>-explore-container name="Tab 3 page">-explore-container> + + `, + styles: `` +}) +export class Tab3Page { + + constructor() {} + +} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.routes.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.routes.ts.template new file mode 100644 index 000000000..c53591dd3 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.routes.ts.template @@ -0,0 +1,10 @@ +import { Tab3Page } from './tab3.page'; +import {Routes} from '@angular/router'; + +export const routes: Routes = [ + { + path: '', + loadComponent: () => import('./tab3.page').then(p => p.Tab3Page) + } +]; + diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.spec.ts.template new file mode 100644 index 000000000..40a3de8b7 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.spec.ts.template @@ -0,0 +1,26 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TabsPage } from './tabs.page'; + +describe('TabsPage', () => { + let component: TabsPage; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [TabsPage], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(TabsPage); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.ts.template new file mode 100644 index 000000000..1516e0ec9 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.ts.template @@ -0,0 +1,43 @@ +import { Component } from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {IonicModule} from '@ionic/angular'; + +@Component({ + selector: '<%= prefix %>-tabs', + standalone: true, + imports: [ + IonicModule, + CommonModule, + FormsModule + ], + template: ` + + + + + + Tab 1 + + + + + Tab 2 + + + + + Tab 3 + + + + + + `, + styles: `` +}) +export class TabsPage { + + constructor() {} + +} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.routes.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.routes.ts.template new file mode 100644 index 000000000..4f778aba6 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.routes.ts.template @@ -0,0 +1,34 @@ +import { TabsPage } from './tabs.page'; +import {Routes} from '@angular/router'; + +export const routes: Routes = [ + { + path: 'tabs', + loadComponent: () => import('./tabs.page').then(p => p.TabsPage), + children: [ + { + path: 'tab1', + loadChildren: () => import('../tab1/tab1.routes').then(r => r.routes) + }, + { + path: 'tab2', + loadChildren: () => import('../tab2/tab2.routes').then(r => r.routes) + }, + { + path: 'tab3', + loadChildren: () => import('../tab3/tab3.routes').then(r => r.routes) + }, + { + path: '', + redirectTo: '/tabs/tab1', + pathMatch: 'full' + } + ] + }, + { + path: '', + redirectTo: '/tabs/tab1', + pathMatch: 'full' + } +]; + diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/app-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/app-routing.module.ts.template new file mode 100644 index 000000000..48fc28da4 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/app-routing.module.ts.template @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; + +const routes: Routes = [ + { + path: '', + loadChildren: () => import('./tabs/tabs.module').then(m => m.TabsPageModule) + } +]; +@NgModule({ + imports: [ + RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) + ], + exports: [RouterModule] +}) +export class AppRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/app.component.html.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/app.component.html.template new file mode 100644 index 000000000..13b96776e --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/app.component.html.template @@ -0,0 +1,3 @@ + + + diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/app.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/app.module.ts.template new file mode 100644 index 000000000..4255dd891 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/app.module.ts.template @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouteReuseStrategy } from '@angular/router'; + +import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; + +@NgModule({ + declarations: [AppComponent], + imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], + providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }], + bootstrap: [AppComponent], +}) +export class AppModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.html.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.html.template new file mode 100644 index 000000000..bbadb7d64 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.html.template @@ -0,0 +1,4 @@ +
+ {{ name }} +

Explore UI Components

+
\ No newline at end of file diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.scss.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.scss.template new file mode 100644 index 000000000..8993e7ca0 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.scss.template @@ -0,0 +1,27 @@ +#container { + text-align: center; + + position: absolute; + left: 0; + right: 0; + top: 50%; + transform: translateY(-50%); +} + +#container strong { + font-size: 20px; + line-height: 26px; +} + +#container p { + font-size: 16px; + line-height: 22px; + + color: #8c8c8c; + + margin: 0; +} + +#container a { + text-decoration: none; +} \ No newline at end of file diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.spec.ts.template new file mode 100644 index 000000000..caa9a7cdf --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.spec.ts.template @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { ExploreContainerComponent } from './explore-container.component'; + +describe('ExploreContainerComponent', () => { + let component: ExploreContainerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ExploreContainerComponent], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(ExploreContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.ts.template new file mode 100644 index 000000000..cd455b789 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.ts.template @@ -0,0 +1,12 @@ +import { Component, Input } from '@angular/core'; + +@Component({ + selector: '<%= prefix %>-explore-container', + templateUrl: './explore-container.component.html', + styleUrls: ['./explore-container.component.scss'], +}) +export class ExploreContainerComponent { + + @Input() name?: string; + +} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.module.ts.template new file mode 100644 index 000000000..43762961f --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.module.ts.template @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { IonicModule } from '@ionic/angular'; + +import { ExploreContainerComponent } from './explore-container.component'; + +@NgModule({ + imports: [ CommonModule, FormsModule, IonicModule], + declarations: [ExploreContainerComponent], + exports: [ExploreContainerComponent] +}) +export class ExploreContainerComponentModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1-routing.module.ts.template new file mode 100644 index 000000000..8c1cf5b35 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1-routing.module.ts.template @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { Tab1Page } from './tab1.page'; + +const routes: Routes = [ + { + path: '', + component: Tab1Page, + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class Tab1PageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.module.ts.template new file mode 100644 index 000000000..135eeae1a --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.module.ts.template @@ -0,0 +1,20 @@ +import { IonicModule } from '@ionic/angular'; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { Tab1Page } from './tab1.page'; +import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; + +import { Tab1PageRoutingModule } from './tab1-routing.module'; + +@NgModule({ + imports: [ + IonicModule, + CommonModule, + FormsModule, + ExploreContainerComponentModule, + Tab1PageRoutingModule + ], + declarations: [Tab1Page] +}) +export class Tab1PageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.html.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.html.template new file mode 100644 index 000000000..7335f8c36 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.html.template @@ -0,0 +1,17 @@ + + + + Tab 1 + + + + + + + + Tab 1 + + + + <<%= prefix %>-explore-container name="Tab 1 page">-explore-container> + diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.scss.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.scss.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.spec.ts.template new file mode 100644 index 000000000..0dbb7c0ad --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.spec.ts.template @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; + +import { Tab1Page } from './tab1.page'; + +describe('Tab1Page', () => { + let component: Tab1Page; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [Tab1Page], + imports: [IonicModule.forRoot(), ExploreContainerComponentModule] + }).compileComponents(); + + fixture = TestBed.createComponent(Tab1Page); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.ts.template new file mode 100644 index 000000000..45feb83ac --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.ts.template @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: '<%= prefix %>-tab1', + templateUrl: 'tab1.page.html', + styleUrls: ['tab1.page.scss'] +}) +export class Tab1Page { + + constructor() {} + +} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2-routing.module.ts.template new file mode 100644 index 000000000..e96ec099b --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2-routing.module.ts.template @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { Tab2Page } from './tab2.page'; + +const routes: Routes = [ + { + path: '', + component: Tab2Page, + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class Tab2PageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.module.ts.template new file mode 100644 index 000000000..723bac16a --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.module.ts.template @@ -0,0 +1,20 @@ +import { IonicModule } from '@ionic/angular'; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { Tab2Page } from './tab2.page'; +import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; + +import { Tab2PageRoutingModule } from './tab2-routing.module'; + +@NgModule({ + imports: [ + IonicModule, + CommonModule, + FormsModule, + ExploreContainerComponentModule, + Tab2PageRoutingModule + ], + declarations: [Tab2Page] +}) +export class Tab2PageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.html.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.html.template new file mode 100644 index 000000000..37b3a4f2a --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.html.template @@ -0,0 +1,17 @@ + + + + Tab 2 + + + + + + + + Tab 2 + + + + <<%= prefix %>-explore-container name="Tab 2 page">-explore-container> + diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.scss.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.scss.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.spec.ts.template new file mode 100644 index 000000000..70bd876ed --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.spec.ts.template @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; + +import { Tab2Page } from './tab2.page'; + +describe('Tab2Page', () => { + let component: Tab2Page; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [Tab2Page], + imports: [IonicModule.forRoot(), ExploreContainerComponentModule] + }).compileComponents(); + + fixture = TestBed.createComponent(Tab2Page); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.ts.template new file mode 100644 index 000000000..7eac24a99 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.ts.template @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: '<%= prefix %>-tab2', + templateUrl: 'tab2.page.html', + styleUrls: ['tab2.page.scss'] +}) +export class Tab2Page { + + constructor() {} + +} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3-routing.module.ts.template new file mode 100644 index 000000000..5d6abde97 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3-routing.module.ts.template @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { Tab3Page } from './tab3.page'; + +const routes: Routes = [ + { + path: '', + component: Tab3Page, + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class Tab3PageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.module.ts.template new file mode 100644 index 000000000..2599fc6a5 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.module.ts.template @@ -0,0 +1,20 @@ +import { IonicModule } from '@ionic/angular'; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { Tab3Page } from './tab3.page'; +import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; + +import { Tab3PageRoutingModule } from './tab3-routing.module'; + +@NgModule({ + imports: [ + IonicModule, + CommonModule, + FormsModule, + ExploreContainerComponentModule, + Tab3PageRoutingModule + ], + declarations: [Tab3Page] +}) +export class Tab3PageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.html.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.html.template new file mode 100644 index 000000000..9f4c061a0 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.html.template @@ -0,0 +1,17 @@ + + + + Tab 3 + + + + + + + + Tab 3 + + + + <<%= prefix %>-explore-container name="Tab 3 page">-explore-container> + diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.scss.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.scss.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.spec.ts.template new file mode 100644 index 000000000..28d86196c --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.spec.ts.template @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; + +import { Tab3Page } from './tab3.page'; + +describe('Tab3Page', () => { + let component: Tab3Page; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [Tab3Page], + imports: [IonicModule.forRoot(), ExploreContainerComponentModule] + }).compileComponents(); + + fixture = TestBed.createComponent(Tab3Page); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.ts.template new file mode 100644 index 000000000..ec12b5654 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.ts.template @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: '<%= prefix %>-tab3', + templateUrl: 'tab3.page.html', + styleUrls: ['tab3.page.scss'] +}) +export class Tab3Page { + + constructor() {} + +} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs-routing.module.ts.template new file mode 100644 index 000000000..770e87e99 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs-routing.module.ts.template @@ -0,0 +1,39 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { TabsPage } from './tabs.page'; + +const routes: Routes = [ + { + path: 'tabs', + component: TabsPage, + children: [ + { + path: 'tab1', + loadChildren: () => import('../tab1/tab1.module').then(m => m.Tab1PageModule) + }, + { + path: 'tab2', + loadChildren: () => import('../tab2/tab2.module').then(m => m.Tab2PageModule) + }, + { + path: 'tab3', + loadChildren: () => import('../tab3/tab3.module').then(m => m.Tab3PageModule) + }, + { + path: '', + redirectTo: '/tabs/tab1', + pathMatch: 'full' + } + ] + }, + { + path: '', + redirectTo: '/tabs/tab1', + pathMatch: 'full' + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], +}) +export class TabsPageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.module.ts.template new file mode 100644 index 000000000..de4184a79 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.module.ts.template @@ -0,0 +1,19 @@ +import { IonicModule } from '@ionic/angular'; +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { TabsPageRoutingModule } from './tabs-routing.module'; + +import { TabsPage } from './tabs.page'; + +@NgModule({ + imports: [ + IonicModule, + CommonModule, + FormsModule, + TabsPageRoutingModule + ], + declarations: [TabsPage] +}) +export class TabsPageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.html.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.html.template new file mode 100644 index 000000000..e3f60c3fa --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.html.template @@ -0,0 +1,20 @@ + + + + + + Tab 1 + + + + + Tab 2 + + + + + Tab 3 + + + + diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.scss.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.scss.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.spec.ts.template new file mode 100644 index 000000000..40a3de8b7 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.spec.ts.template @@ -0,0 +1,26 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TabsPage } from './tabs.page'; + +describe('TabsPage', () => { + let component: TabsPage; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [TabsPage], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(TabsPage); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.ts.template new file mode 100644 index 000000000..8d045b71e --- /dev/null +++ b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.ts.template @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: '<%= prefix %>-tabs', + templateUrl: 'tabs.page.html', + styleUrls: ['tabs.page.scss'] +}) +export class TabsPage { + + constructor() {} + +} diff --git a/packages/ionic-angular/src/generators/application/generator.spec.ts b/packages/ionic-angular/src/generators/application/generator.spec.ts new file mode 100644 index 000000000..57dc7cac1 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/generator.spec.ts @@ -0,0 +1,217 @@ +import { readJson, readProjectConfiguration, Tree } from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import { applicationGenerator } from './generator'; +import { ApplicationGeneratorSchema } from './schema'; + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const devkit = require('@nx/devkit'); + +xdescribe('application schematic', () => { + jest.spyOn(devkit, 'ensurePackage').mockReturnValue(Promise.resolve()); + + let host: Tree; + const options: ApplicationGeneratorSchema = { + name: 'my-app', + template: 'blank', + unitTestRunner: 'jest', + e2eTestRunner: 'cypress', + capacitor: false, + skipFormat: false, + }; + const projectRoot = `apps/${options.name}`; + + beforeEach(() => { + host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + }); + + it('should add dependencies to package.json', async () => { + await applicationGenerator(host, options); + + const packageJson = readJson(host, 'package.json'); + expect(packageJson.dependencies['@ionic/angular']).toBeDefined(); + expect(packageJson.devDependencies['@nx/angular']).toBeDefined(); + }); + + it('should update assets in project configuration', async () => { + await applicationGenerator(host, options); + const project = readProjectConfiguration(host, options.name); + + const assets = project.targets.build.options.assets; + const styles = project.targets.build.options.styles; + + expect(assets).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + input: 'node_modules/ionicons/dist/ionicons/svg', + }), + ]) + ); + expect(assets).not.toContain(`${projectRoot}/src/favicon.ico`); + + expect(styles).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + input: `${projectRoot}/src/theme/variables.scss`, + }), + ]) + ); + }); + + describe('--linter', () => { + it('should update .eslintrc.json', async () => { + await applicationGenerator(host, options); + + const eslintrcJson = readJson( + host, + `apps/${options.name}/.eslintrc.json` + ); + const tsOverride = eslintrcJson.overrides.find( + (override: { files: string | string[] }) => + override.files.includes('*.ts') + ); + + expect( + tsOverride.rules['@angular-eslint/component-class-suffix'] + ).toEqual([ + 'error', + { + suffixes: ['Page', 'Component'], + }, + ]); + expect( + tsOverride.rules['@angular-eslint/no-empty-lifecycle-method'] + ).toEqual(0); + expect(tsOverride.rules['@typescript-eslint/no-empty-function']).toEqual( + 0 + ); + }); + }); + + describe('--template', () => { + it('should add base template files', async () => { + await applicationGenerator(host, options); + + expect(host.exists(`${projectRoot}/ionic.config.json`)).toBeTruthy(); + + expect(host.exists(`${projectRoot}/src/favicon.ico`)).toBeFalsy(); + expect(host.exists(`${projectRoot}/src/assets/shapes.svg`)).toBeTruthy(); + expect( + host.exists(`${projectRoot}/src/assets/icon/favicon.png`) + ).toBeTruthy(); + + expect( + host.exists(`${projectRoot}/src/theme/variables.scss`) + ).toBeTruthy(); + + expect(host.exists(`${projectRoot}/src/app/app.module.ts`)).toBeTruthy(); + }); + + it('--blank', async () => { + await applicationGenerator(host, { ...options, template: 'blank' }); + + expect( + host.exists(`${projectRoot}/src/app/home/home.module.ts`) + ).toBeTruthy(); + }); + + it('--list', async () => { + await applicationGenerator(host, { ...options, template: 'list' }); + + expect( + host.exists( + `${projectRoot}/src/app/view-message/view-message.module.ts` + ) + ).toBeTruthy(); + }); + + it('--sidemenu', async () => { + await applicationGenerator(host, { ...options, template: 'sidemenu' }); + + expect( + host.exists(`${projectRoot}/src/app/folder/folder.module.ts`) + ).toBeTruthy(); + }); + + it('--tabs', async () => { + await applicationGenerator(host, { ...options, template: 'tabs' }); + + expect( + host.exists(`${projectRoot}/src/app/tabs/tabs.module.ts`) + ).toBeTruthy(); + }); + }); + + describe('--directory', () => { + it('should update workspace.json', async () => { + await applicationGenerator(host, { ...options, directory: 'myDir' }); + const project = readProjectConfiguration(host, `my-dir-${options.name}`); + const projectE2e = readProjectConfiguration( + host, + `my-dir-${options.name}-e2e` + ); + + expect(project.root).toEqual('apps/my-dir/my-app'); + expect(projectE2e.root).toEqual('apps/my-dir/my-app-e2e'); + }); + + it('should generate files', async () => { + await applicationGenerator(host, { ...options, directory: 'myDir' }); + + expect(host.exists('apps/my-dir/my-app/src/main.ts')); + }); + + it('should generate Capacitor project', async () => { + await applicationGenerator(host, { + ...options, + directory: 'my-dir', + capacitor: true, + }); + + expect( + host.exists(`apps/my-dir/my-app/capacitor.config.ts`) + ).toBeDefined(); + }); + }); + + describe('--unitTestRunner', () => { + it('none', async () => { + await applicationGenerator(host, { + ...options, + unitTestRunner: 'none', + }); + + expect(host.read(`package.json`).includes('jest')).toBeFalsy(); + expect( + host.exists(`${projectRoot}/src/app/home/home.page.spec.ts`) + ).toBeFalsy(); + }); + + it('jest', async () => { + await applicationGenerator(host, { + ...options, + unitTestRunner: 'jest', + }); + + expect(host.read(`package.json`).includes('jest')).toBeTruthy(); + }); + }); + + describe('--tags', () => { + it('should update nx.json', async () => { + await applicationGenerator(host, { ...options, tags: 'one,two' }); + + const projectConfiguration = readProjectConfiguration(host, options.name); + expect(projectConfiguration.tags).toEqual(['one', 'two']); + }); + }); + + describe('--capacitor', () => { + describe('true', () => { + it('should generate Capacitor project', async () => { + await applicationGenerator(host, { ...options, capacitor: true }); + + expect(host.exists(`${projectRoot}/capacitor.config.ts`)).toBeDefined(); + }); + }); + }); +}); diff --git a/packages/ionic-angular/src/generators/application/generator.ts b/packages/ionic-angular/src/generators/application/generator.ts new file mode 100644 index 000000000..63a160acf --- /dev/null +++ b/packages/ionic-angular/src/generators/application/generator.ts @@ -0,0 +1,37 @@ +import { + convertNxGenerator, + formatFiles, + runTasksInSerial, + Tree, +} from '@nx/devkit'; +import { addAngular } from './lib/add-angular'; +import { addCapacitor } from './lib/add-capacitor'; +import { addDependencies } from './lib/add-dependencies'; +import { addFiles, removeFiles } from './lib/files'; +import { normalizeOptions } from './lib/normalize-options'; +import { updateWorkspace } from './lib/update-workspace'; +import { ApplicationGeneratorSchema } from './schema'; + +export async function applicationGenerator( + host: Tree, + schema: ApplicationGeneratorSchema +) { + const options = await normalizeOptions(host, schema); + + const installTask = addDependencies(host); + const angularTask = await addAngular(host, options); + addFiles(host, options); + removeFiles(host, options); + updateWorkspace(host, options); + + const capacitorTask = await addCapacitor(host, options); + + if (!options.skipFormat) { + await formatFiles(host); + } + + return runTasksInSerial(installTask, angularTask, capacitorTask); +} + +export default applicationGenerator; +export const applicationSchematic = convertNxGenerator(applicationGenerator); diff --git a/packages/ionic-angular/src/generators/application/lib/add-angular.ts b/packages/ionic-angular/src/generators/application/lib/add-angular.ts new file mode 100644 index 000000000..37052e523 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/lib/add-angular.ts @@ -0,0 +1,25 @@ +import { ensurePackage, NX_VERSION, Tree } from '@nx/devkit'; +import { Linter } from '@nx/eslint'; +import { ApplicationGeneratorSchema } from '../schema'; + +export async function addAngular( + host: Tree, + options: ApplicationGeneratorSchema +) { + ensurePackage('@nx/angular', NX_VERSION); + const { applicationGenerator } = await import('@nx/angular/generators'); + return await applicationGenerator(host, { + ...options, + name: options.name, + directory: options.directory, + skipFormat: true, + routing: true, + style: 'scss', + linter: Linter.EsLint, + unitTestRunner: options.unitTestRunner, + e2eTestRunner: options.e2eTestRunner, + standalone: options.standalone, + minimal: true, + bundler: 'webpack', + }); +} diff --git a/packages/ionic-angular/src/generators/application/lib/add-capacitor.ts b/packages/ionic-angular/src/generators/application/lib/add-capacitor.ts new file mode 100644 index 000000000..3a6aaee76 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/lib/add-capacitor.ts @@ -0,0 +1,17 @@ +import { Tree } from '@nx/devkit'; +import { capacitorProjectGenerator } from '@nxext/capacitor'; +import { NormalizedSchema } from '../schema'; + +export async function addCapacitor(host: Tree, options: NormalizedSchema) { + if (options.capacitor) { + return await capacitorProjectGenerator(host, { + project: options.appProjectName, + appName: options.appName, + appId: 'io.ionic.starter', + skipFormat: options.skipFormat, + }); + } else { + // eslint-disable-next-line @typescript-eslint/no-empty-function + return () => {}; + } +} diff --git a/packages/ionic-angular/src/generators/application/lib/add-dependencies.ts b/packages/ionic-angular/src/generators/application/lib/add-dependencies.ts new file mode 100644 index 000000000..f32397f7d --- /dev/null +++ b/packages/ionic-angular/src/generators/application/lib/add-dependencies.ts @@ -0,0 +1,20 @@ +import { addDependenciesToPackageJson, Tree } from '@nx/devkit'; +import { + ionicAngularVersion, + ioniconsVersion, + capacitorPluginVersion, +} from '../../../utils/versions'; + +export function addDependencies(host: Tree) { + return addDependenciesToPackageJson( + host, + { + '@ionic/angular': ionicAngularVersion, + ionicons: ioniconsVersion, + '@capacitor/haptics': capacitorPluginVersion, + '@capacitor/keyboard': capacitorPluginVersion, + '@capacitor/status-bar': capacitorPluginVersion, + }, + {} + ); +} diff --git a/packages/ionic-angular/src/generators/application/lib/files.ts b/packages/ionic-angular/src/generators/application/lib/files.ts new file mode 100644 index 000000000..b59faa4b5 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/lib/files.ts @@ -0,0 +1,55 @@ +import { + generateFiles, + names, + normalizePath, + offsetFromRoot, + Tree, +} from '@nx/devkit'; +import { NormalizedSchema } from '../schema'; + +function addBaseFiles(host: Tree, options: NormalizedSchema) { + const templateOptions = { + ...options, + ...names(options.name), + offsetFromRoot: offsetFromRoot(options.appProjectRoot), + template: options.standalone ? '-standalone' : '', + }; + + const filesDir = options.standalone + ? normalizePath(__dirname + '/../files/base-standalone') + : normalizePath(__dirname + '/../files/base'); + + generateFiles(host, filesDir, options.appProjectRoot, templateOptions); +} + +function addTemplateFiles(host: Tree, options: NormalizedSchema) { + const templateOptions = { + ...options, + ...names(options.name), + offsetFromRoot: offsetFromRoot(options.appProjectRoot), + template: options.standalone ? '-standalone' : '', + }; + + const filesDir = options.standalone + ? normalizePath(__dirname + `/../files/${options.template}-standalone`) + : normalizePath(__dirname + `/../files/${options.template}`); + + generateFiles(host, filesDir, options.appProjectRoot, templateOptions); +} + +export function addFiles(host: Tree, options: NormalizedSchema) { + addBaseFiles(host, options); + addTemplateFiles(host, options); + + if (options.unitTestRunner === 'none') { + host.delete(`${options.appProjectRoot}/src/app/app.component.spec.ts`); + } +} + +export function removeFiles(host: Tree, options: NormalizedSchema) { + host.delete(`${options.appProjectRoot}/src/favicon.ico`); + if (options.standalone) { + host.delete(`${options.appProjectRoot}/src/app/app.component.html`); + host.delete(`${options.appProjectRoot}/src/app/app.component.scss`); + } +} diff --git a/packages/ionic-angular/src/generators/application/lib/normalize-options.ts b/packages/ionic-angular/src/generators/application/lib/normalize-options.ts new file mode 100644 index 000000000..f0c270209 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/lib/normalize-options.ts @@ -0,0 +1,41 @@ +import { + ensurePackage, + getWorkspaceLayout, + names, + normalizePath, + NX_VERSION, + Tree, +} from '@nx/devkit'; +import { ApplicationGeneratorSchema, NormalizedSchema } from '../schema'; + +export async function normalizeOptions( + host: Tree, + options: ApplicationGeneratorSchema +): Promise { + ensurePackage('@nx/js', NX_VERSION); + const { getNpmScope } = await import( + '@nx/js/src/utils/package-json/get-npm-scope' + ); + + const appName = options.name; + + const appDirectory = options.directory + ? `${names(options.directory).fileName}/${names(options.name).fileName}` + : names(options.name).fileName; + + const appProjectName = appDirectory.replace(new RegExp('/', 'g'), '-'); + + const { appsDir } = getWorkspaceLayout(host); + const appProjectRoot = normalizePath(`${appsDir}/${appDirectory}`); + const npmScope = getNpmScope(host); + + return { + ...options, + appName, + name: names(options.name).fileName, + prefix: npmScope, + appProjectName, + appProjectRoot, + standalone: options.standalone, + }; +} diff --git a/packages/ionic-angular/src/generators/application/lib/update-workspace.ts b/packages/ionic-angular/src/generators/application/lib/update-workspace.ts new file mode 100644 index 000000000..3a823192c --- /dev/null +++ b/packages/ionic-angular/src/generators/application/lib/update-workspace.ts @@ -0,0 +1,69 @@ +import { + normalizePath, + readProjectConfiguration, + Tree, + updateProjectConfiguration, +} from '@nx/devkit'; +import { NormalizedSchema } from '../schema'; + +export function updateWorkspace(host: Tree, options: NormalizedSchema) { + const project = readProjectConfiguration(host, options.appProjectName); + project.targets.build.options.assets = [ + ...project.targets.build.options.assets.filter( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (asset: any) => !asset.toString().includes('src/favicon.ico') + ), + { + glob: '**/*.svg', + input: 'node_modules/ionicons/dist/ionicons/svg', + output: './svg', + }, + ]; + + project.targets.build.options.styles = [ + ...project.targets.build.options.styles, + { + input: normalizePath( + `${options.appProjectRoot}/src/theme/variables.scss` + ), + }, + { + input: normalizePath('node_modules/@ionic/angular/css/core.css'), + }, + { + input: normalizePath('node_modules/@ionic/angular/css/normalize.css'), + }, + { + input: normalizePath('node_modules/@ionic/angular/css/structure.css'), + }, + { + input: normalizePath('node_modules/@ionic/angular/css/typography.css'), + }, + { + input: normalizePath('node_modules/@ionic/angular/css/display.css'), + }, + { + input: normalizePath('node_modules/@ionic/angular/css/padding.css'), + }, + { + input: normalizePath( + 'node_modules/@ionic/angular/css/float-elements.css' + ), + }, + { + input: normalizePath( + 'node_modules/@ionic/angular/css/text-alignment.css' + ), + }, + { + input: normalizePath( + 'node_modules/@ionic/angular/css/text-transformation.css' + ), + }, + { + input: normalizePath('node_modules/@ionic/angular/css/flex-utils.css'), + }, + ]; + + updateProjectConfiguration(host, options.appProjectName, project); +} diff --git a/packages/ionic-angular/src/generators/application/schema.d.ts b/packages/ionic-angular/src/generators/application/schema.d.ts new file mode 100644 index 000000000..e5647d7e6 --- /dev/null +++ b/packages/ionic-angular/src/generators/application/schema.d.ts @@ -0,0 +1,20 @@ +import { E2eTestRunner, UnitTestRunner } from '@nx/angular'; + +export interface ApplicationGeneratorSchema { + name: string; + directory?: string; + unitTestRunner: UnitTestRunner; + e2eTestRunner: E2eTestRunner; + tags?: string; + template: string; + capacitor: boolean; + skipFormat: boolean; + standalone?: boolean; +} + +export interface NormalizedSchema extends ApplicationGeneratorSchema { + appName: string; + prefix: string; + appProjectName: string; + appProjectRoot: string; +} diff --git a/packages/ionic-angular/src/generators/application/schema.json b/packages/ionic-angular/src/generators/application/schema.json new file mode 100644 index 000000000..b7dde76fd --- /dev/null +++ b/packages/ionic-angular/src/generators/application/schema.json @@ -0,0 +1,82 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "IonicAngularApp", + "title": "Create an Ionic Angular Application for Nx", + "type": "object", + "properties": { + "name": { + "description": "The name of the application.", + "type": "string", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "What name would you like to use for the application?", + "pattern": "^[a-zA-Z]{1}.*$" + }, + "directory": { + "description": "The directory of the new application.", + "type": "string", + "alias": "d" + }, + "unitTestRunner": { + "type": "string", + "enum": ["jest", "none"], + "description": "Test runner to use for unit tests.", + "default": "jest" + }, + "e2eTestRunner": { + "type": "string", + "enum": ["cypress", "none"], + "description": "Test runner to use for end to end (e2e) tests.", + "default": "cypress" + }, + "tags": { + "type": "string", + "description": "Add tags to the application (used for linting)." + }, + "template": { + "description": "The starter template to use.", + "type": "string", + "default": "blank", + "x-prompt": { + "message": "Which starter template would you like to use?", + "type": "list", + "items": [ + { + "value": "blank", + "label": "blank | A blank starter project" + }, + { + "value": "list", + "label": "list | A starting project with a list" + }, + { + "value": "sidemenu", + "label": "sidemenu | A starting project with a list" + }, + { + "value": "tabs", + "label": "tabs | A starting project with a simple tabbed interface" + } + ] + } + }, + "capacitor": { + "type": "boolean", + "description": "Generate a Capacitor project.", + "default": true + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false + }, + "standalone": { + "description": "Create a standalone application.", + "type": "boolean", + "default": false + } + }, + "required": ["name"] +} diff --git a/packages/ionic-angular/src/generators/page/files/__name__-routing.module.ts.template b/packages/ionic-angular/src/generators/page/files/__name__-routing.module.ts.template new file mode 100644 index 000000000..7eea4833d --- /dev/null +++ b/packages/ionic-angular/src/generators/page/files/__name__-routing.module.ts.template @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { <%= className %>Page } from './<%= fileName %>.page'; + +const routes: Routes = [ + { + path: '', + component: <%= className %>Page + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class <%= className %>PageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/page/files/__name__.module.ts.template b/packages/ionic-angular/src/generators/page/files/__name__.module.ts.template new file mode 100644 index 000000000..59e41383c --- /dev/null +++ b/packages/ionic-angular/src/generators/page/files/__name__.module.ts.template @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { IonicModule } from '@ionic/angular'; + +import { <%= className %>PageRoutingModule } from './<%= fileName %>-routing.module'; + +import { <%= className %>Page } from './<%= fileName %>.page'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + <%= className %>PageRoutingModule + ], + declarations: [<%= className %>Page] +}) +export class <%= className %>PageModule {} diff --git a/packages/ionic-angular/src/generators/page/files/__name__.page.html.template b/packages/ionic-angular/src/generators/page/files/__name__.page.html.template new file mode 100644 index 000000000..83afec302 --- /dev/null +++ b/packages/ionic-angular/src/generators/page/files/__name__.page.html.template @@ -0,0 +1,9 @@ + + + <%= className %> + + + + + + diff --git a/packages/ionic-angular/src/generators/page/files/__name__.page.scss.template b/packages/ionic-angular/src/generators/page/files/__name__.page.scss.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-angular/src/generators/page/files/__name__.page.spec.ts.template b/packages/ionic-angular/src/generators/page/files/__name__.page.spec.ts.template new file mode 100644 index 000000000..1a48c3422 --- /dev/null +++ b/packages/ionic-angular/src/generators/page/files/__name__.page.spec.ts.template @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { <%= className %>Page } from './<%= fileName %>.page'; + +describe('<%= className %>Page', () => { + let component: <%= className %>Page; + let fixture: ComponentFixture<<%= className %>Page>; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ <%= className %>Page ], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(<%= className %>Page); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/page/files/__name__.page.ts.template b/packages/ionic-angular/src/generators/page/files/__name__.page.ts.template new file mode 100644 index 000000000..9b2757da7 --- /dev/null +++ b/packages/ionic-angular/src/generators/page/files/__name__.page.ts.template @@ -0,0 +1,12 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: '<%= prefix %>-<%= fileName %>', + templateUrl: './<%= fileName %>.page.html', + styleUrls: ['./<%= fileName %>.page.scss'], +}) +export class <%= className %>Page { + + constructor() { } + +} diff --git a/packages/ionic-angular/src/generators/page/generator.spec.ts b/packages/ionic-angular/src/generators/page/generator.spec.ts new file mode 100644 index 000000000..dc36143eb --- /dev/null +++ b/packages/ionic-angular/src/generators/page/generator.spec.ts @@ -0,0 +1,115 @@ +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import { Tree, updateJson } from '@nx/devkit'; + +import { pageGenerator } from './generator'; +import { PageGeneratorSchema } from './schema'; +import { ApplicationGeneratorSchema } from '../application/schema'; +import { applicationGenerator } from '../application/generator'; + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const devkit = require('@nx/devkit'); + +xdescribe('page generator', () => { + jest.spyOn(devkit, 'ensurePackage').mockReturnValue(Promise.resolve()); + + let host: Tree; + + const projectOptions: ApplicationGeneratorSchema = { + name: 'my-app', + template: 'blank', + unitTestRunner: 'jest', + e2eTestRunner: 'cypress', + capacitor: false, + skipFormat: false, + }; + + const options: PageGeneratorSchema = { project: 'my-app', name: 'test' }; + const projectRoot = `apps/${options.project}`; + + beforeEach(async () => { + host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + await applicationGenerator(host, projectOptions); + }); + + it('should create page files', async () => { + await pageGenerator(host, options); + + expect( + host.exists( + `${projectRoot}/src/app/${options.name}/${options.name}-routing.module.ts` + ) + ).toBeTruthy(); + + expect( + host.exists( + `${projectRoot}/src/app/${options.name}/${options.name}.page.html` + ) + ).toBeTruthy(); + + expect( + host.exists( + `${projectRoot}/src/app/${options.name}/${options.name}.page.spec.ts` + ) + ).toBeTruthy(); + + expect( + host.exists( + `${projectRoot}/src/app/${options.name}/${options.name}.module.ts` + ) + ).toBeTruthy(); + + expect( + host.exists( + `${projectRoot}/src/app/${options.name}/${options.name}.page.scss` + ) + ).toBeTruthy(); + + expect( + host.exists( + `${projectRoot}/src/app/${options.name}/${options.name}.page.ts` + ) + ).toBeTruthy(); + }); + + describe('--directory', () => { + it('should create page files inside directory', async () => { + await pageGenerator(host, { ...options, directory: 'myDir' }); + + expect( + host.exists( + `${projectRoot}/src/app/myDir/${options.name}/${options.name}-routing.module.ts` + ) + ).toBeTruthy(); + + expect( + host.exists( + `${projectRoot}/src/app/myDir/${options.name}/${options.name}.page.html` + ) + ).toBeTruthy(); + + expect( + host.exists( + `${projectRoot}/src/app/myDir/${options.name}/${options.name}.page.spec.ts` + ) + ).toBeTruthy(); + + expect( + host.exists( + `${projectRoot}/src/app/myDir/${options.name}/${options.name}.module.ts` + ) + ).toBeTruthy(); + + expect( + host.exists( + `${projectRoot}/src/app/myDir/${options.name}/${options.name}.page.scss` + ) + ).toBeTruthy(); + + expect( + host.exists( + `${projectRoot}/src/app/myDir/${options.name}/${options.name}.page.ts` + ) + ).toBeTruthy(); + }); + }); +}); diff --git a/packages/ionic-angular/src/generators/page/generator.ts b/packages/ionic-angular/src/generators/page/generator.ts new file mode 100644 index 000000000..ab59aa1a1 --- /dev/null +++ b/packages/ionic-angular/src/generators/page/generator.ts @@ -0,0 +1,66 @@ +import { + convertNxGenerator, + ensurePackage, + formatFiles, + generateFiles, + getWorkspaceLayout, + names, + NX_VERSION, + offsetFromRoot, + Tree, +} from '@nx/devkit'; +import * as path from 'path'; +import { updateAppRoutingModule } from './lib/update-routing-file'; +import { NormalizedSchema, PageGeneratorSchema } from './schema'; + +async function normalizeOptions( + tree: Tree, + options: PageGeneratorSchema +): Promise { + ensurePackage('@nx/js', NX_VERSION); + const { getNpmScope } = await import( + '@nx/js/src/utils/package-json/get-npm-scope' + ); + const { appsDir } = getWorkspaceLayout(tree); + const projectRoot = `${appsDir}/${options.project}`; + const npmScope = getNpmScope(tree); + + return { + ...options, + projectRoot, + prefix: npmScope, + }; +} + +function addFiles(tree: Tree, options: NormalizedSchema) { + const templateOptions = { + ...options, + ...names(options.name), + name: names(options.name).fileName, + offsetFromRoot: offsetFromRoot(options.projectRoot), + template: '', + }; + + const pageDir = options.directory + ? path.join( + options.projectRoot, + `/src/app/${options.directory}/${names(options.name).fileName}` + ) + : path.join( + options.projectRoot, + `/src/app/${names(options.name).fileName}` + ); + + generateFiles(tree, path.join(__dirname, 'files'), pageDir, templateOptions); +} + +export async function pageGenerator(tree: Tree, options: PageGeneratorSchema) { + const normalizedOptions = await normalizeOptions(tree, options); + addFiles(tree, normalizedOptions); + updateAppRoutingModule(tree, normalizedOptions); + + await formatFiles(tree); +} + +export default pageGenerator; +export const pageSchematic = convertNxGenerator(pageGenerator); diff --git a/packages/ionic-angular/src/generators/page/lib/update-routing-file.ts b/packages/ionic-angular/src/generators/page/lib/update-routing-file.ts new file mode 100644 index 000000000..0686240f0 --- /dev/null +++ b/packages/ionic-angular/src/generators/page/lib/update-routing-file.ts @@ -0,0 +1,74 @@ +import { names, Tree } from '@nx/devkit'; +import { tsquery } from '@phenomnomnominal/tsquery'; +import { NormalizedSchema } from '../schema'; +import { + ArrayLiteralExpression, + Identifier, + TypeReferenceNode, + VariableStatement, +} from 'typescript'; +import * as path from 'path'; + +export function updateAppRoutingModule(tree: Tree, options: NormalizedSchema) { + const appRoutingModuleFilePath = path.join( + options.projectRoot, + `/src/app/app-routing.module.ts` + ); + + let appRoutingModule: string; + if (tree.exists(appRoutingModuleFilePath)) { + appRoutingModule = tree.read(appRoutingModuleFilePath, 'utf-8'); + } + + if (appRoutingModule !== '') { + const newContents = tsquery.replace( + appRoutingModule, + 'VariableStatement', + (node) => { + let modifiedNode = node.getFullText(); + + const vsNode = node as VariableStatement; + + vsNode.declarationList.declarations.forEach((declaration) => { + const typeNode = declaration.type as TypeReferenceNode; + const identifier = typeNode.typeName as Identifier; + if (identifier.escapedText === 'Routes') { + const pageNames = names(options.name); + const importPath = options.directory + ? `./${options.directory}/${pageNames.fileName}/${pageNames.fileName}.module` + : `./${pageNames.fileName}/${pageNames.fileName}.module`; + + const toInsert = `{ + path: '${pageNames.fileName}', + loadChildren: () => + import('${importPath}').then((m) => m.${pageNames.className}PageModule), + }, + `; + + const arrLiteral = + declaration.initializer as ArrayLiteralExpression; + + if (arrLiteral.elements.length > 0) { + const nodeArray = arrLiteral.elements; + + const insertPosition = nodeArray[0].getStart(); + + const previousRoutes = vsNode.getFullText(); + const prefix = previousRoutes.substring(0, insertPosition); + const suffix = previousRoutes.substring(insertPosition); + const newRoutes = `${prefix}${toInsert}${suffix}`; + + modifiedNode = newRoutes; + } + } + }); + + return modifiedNode; + } + ); + + if (newContents !== appRoutingModule) { + tree.write(appRoutingModuleFilePath, newContents); + } + } +} diff --git a/packages/ionic-angular/src/generators/page/schema.d.ts b/packages/ionic-angular/src/generators/page/schema.d.ts new file mode 100644 index 000000000..f76fa4aed --- /dev/null +++ b/packages/ionic-angular/src/generators/page/schema.d.ts @@ -0,0 +1,10 @@ +export interface PageGeneratorSchema { + name: string; + project: string; + directory?: string; +} + +export interface NormalizedSchema extends PageGeneratorSchema { + projectRoot: string; + prefix: string; +} diff --git a/packages/ionic-angular/src/generators/page/schema.json b/packages/ionic-angular/src/generators/page/schema.json new file mode 100644 index 000000000..a83231a12 --- /dev/null +++ b/packages/ionic-angular/src/generators/page/schema.json @@ -0,0 +1,32 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "Page", + "title": "", + "type": "object", + "properties": { + "project": { + "type": "string", + "description": "The name of the project.", + "alias": "p", + "$default": { + "$source": "projectName" + }, + "x-prompt": "What is the name of the project for this page?" + }, + "name": { + "type": "string", + "description": "", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "What name would you like to use?" + }, + "directory": { + "type": "string", + "description": "A directory where the page is created", + "alias": "d" + } + }, + "required": ["project", "name"] +} diff --git a/packages/ionic-angular/src/index.ts b/packages/ionic-angular/src/index.ts new file mode 100644 index 000000000..1697adbed --- /dev/null +++ b/packages/ionic-angular/src/index.ts @@ -0,0 +1,2 @@ +export { applicationGenerator } from './generators/application/generator'; +export { ApplicationGeneratorSchema } from './generators/application/schema'; diff --git a/packages/ionic-angular/src/utils/versions.ts b/packages/ionic-angular/src/utils/versions.ts new file mode 100644 index 000000000..469ff0607 --- /dev/null +++ b/packages/ionic-angular/src/utils/versions.ts @@ -0,0 +1,3 @@ +export const ionicAngularVersion = '^7.0.0'; +export const ioniconsVersion = '^7.0.0'; +export const capacitorPluginVersion = '^5.0.0'; diff --git a/packages/ionic-angular/tsconfig.json b/packages/ionic-angular/tsconfig.json new file mode 100644 index 000000000..19b9eece4 --- /dev/null +++ b/packages/ionic-angular/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/packages/ionic-angular/tsconfig.lib.json b/packages/ionic-angular/tsconfig.lib.json new file mode 100644 index 000000000..7bfc80f73 --- /dev/null +++ b/packages/ionic-angular/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/packages/ionic-angular/tsconfig.spec.json b/packages/ionic-angular/tsconfig.spec.json new file mode 100644 index 000000000..546f12877 --- /dev/null +++ b/packages/ionic-angular/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] +} diff --git a/packages/ionic-react/CHANGELOG.md b/packages/ionic-react/CHANGELOG.md new file mode 100644 index 000000000..e37258412 --- /dev/null +++ b/packages/ionic-react/CHANGELOG.md @@ -0,0 +1,201 @@ +# Changelog + +# 14.0.0 + +## Features + +- generate applications with Ionic v6 + +# 13.0.0 + +## Features + +- support Nx 13 + +# 12.1.0 + +## Features + +- restore Angular CLI support +- add `--standaloneConfig` to application generator to generate a `package.json` instead of updating the `workspace.json` + +# 12.0.0 + +## Features + +- support Nx 12 +- plugin rewritten with `@nx/devkit` for better maintainability and future proofing for future Nx versions +- update Ionic to 5.8.3 +- update list starter template + +## BREAKING CHANGES + +- Angular CLI is no longer officially supported +- the `init` generator has been removed and the functionaltiy has been moved to the `application` schematic + +# 11.0.3 + +## Bug Fixes + +- support Node 15 and npm 7 + +# 11.0.2 + +## Bug Fixes + +- support Nx 11.3.0 + +# 11.0.1 + +## Bug Fixes + +- support `angular.json` as well as `workspace.json` during migrations + +# 11.0.0 + +## Features + +- Nx 11 support (Nx 11 now required) +- add additional Ionic starter templates to application schematic +- support custom Nx layouts +- update Ionic to 5.5.2 + +## Bug Fixes + +- fix generating an application in a sub-directory with Capacitor enabled + +## BREAKING CHANGES + +- remove `classComponent` option from `application` schematic (now defaults to functional components) +- remove `style` option from the `application` schematic (now defaults to CSS) +- remove `pascalCaseComponent` option from the `application` schematic (now defaults to true) +- remove `skipFormat` option from the `application` schematic (now defaults to false) +- remove `linter` option from the `application` schematic (now defaults to ESLint) +- remove `js` option from the `application` schematic (now defaults to true) + +# 4.1.0 + +- initialize plugin with `@nxext/capacitor` 2.0.2 + +# 4.0.0 + +# Features + +- update Ionic to 5.4.1 +- add `ionic.config.json` to application +- update starter template + +# BREAKING CHANGES + +- don't install and configure Cypress Testing Library +- removed `disableSanitizer` flag from `application` schematic + +# 3.1.0 + +# Features + +- update `@nxext/capacitor` to 1.1.0 +- update Ionic to 5.3.2 +- update Ionicons to 5.1.2 +- update `@testing-library/cypress` to 7.0.0 +- update `@testing-library/jest-dom` to 5.11.4 +- update `@testing-library/user-event` to 12.1.5 + +# BREAKING CHANGES + +- `@testing-library/cypress` + - `get` and `query` queries (which have been deprecated) have now been removed. Use `find` queries only. + - **TS**: TypeScript type definitions have been brought into this module and no longer needs to be referenced from DefinitelyTyped + +# 3.0.5 + +## Bug Fixes + +- improve null checks when updating `tsconfig.json` in application schematic to support Nx 10 + +# 3.0.4 + +## Bug Fixes + +- fix `Collection @nx/react not found` error if `@nx/react` is not added manually + +# 3.0.3 + +## Bug Fixes + +- add `@nx/react` version based on the users Nx version +- don't unnecessarily add `@nxext/ionic-react` dependency in `init` schematic +- add `@nxext/capacitor` 1.0.0 instead of `*` + +# 3.0.2 + +## Bug Fixes + +- properly initialize Capacitor plugin + +# 3.0.1 + +## Features + +- upgrade Ionic to 5.2.3 + +# 3.0.0 + +## Features + +- generate Capacitor project with application by default +- upgrade `@testing-library/jest-dom` to 5.11.0 +- upgrade `@testing-library/user-event` to 12.0.11 + +## Breaking Changes + +- `@testing-library/user-event` was upgraded two major versions ([11.0.0](https://github.com/testing-library/user-event/releases/tag/v12.0.0)) ([12.0.0](https://github.com/testing-library/user-event/releases/tag/v12.0.0)) + +# 2.2.0 + +## Bug Fixes + +- fix pascal case generate App unit test +- fix generating global styles for Emotion + +## Features + +- upgrade Ionic to 5.2.2 +- add `--disableSanitizer` flag to application schematic to disable the [Ionic sanitizer](https://ionicframework.com/docs/techniques/security#sanitizing-user-input) + +# 2.1.0 + +## Bug Fixes + +- fix styled-components styles + +## Features + +- generate applications with ESLint by default + +# 2.0.0 + +## Features + +- extend `@nx/react` schematics +- import `@testing-library/jest-dom` commands for unit tests +- upgrade `@testing-library/jest-dom` to 5.5.0 +- upgrade `@testing-library/cypress` to 6.0.0 +- upgrade `@testing-library/user-event` to 10.0.1 +- honor `unitTestRunner` flag +- set `@nxext/ionic-react` as the default collection if one is not set when generating an application +- honor `skipFormat` flag +- update Ionic starter template + - [#1201](https://github.com/ionic-team/starters/pull/1201) + - [#1202](https://github.com/ionic-team/starters/pull/1202) + - [#1237](https://github.com/ionic-team/starters/pull/1237) + +# 1.0.2 + +## Bug Fixes + +- fix home page style import for pascal file name generated apps + +## Features + +- upgrade Ionic to 5.0.7 diff --git a/packages/ionic-react/MIGRATION.md b/packages/ionic-react/MIGRATION.md new file mode 100644 index 000000000..a801e6f3c --- /dev/null +++ b/packages/ionic-react/MIGRATION.md @@ -0,0 +1,109 @@ +# Migration + +# 1.x.x - 2.0.0 + +## Updated Ionic Starter Templates + +The Ionic starter templates have been updated, and while these changes are not necessary, you may want to apply them. + +### Add color-scheme Meta Tag + +The `color-scheme` meta tag was added to `index.html` in the Ionic React base starter template. Add this meta tag inside the head tag of your `index.html`: + +``` + +``` + +https://github.com/ionic-team/starters/pull/1201/files#diff-18fbed2ce2b3ac6650ea6b56540f0612 + +### Update Theming Vars + +The theme variables have been updated in the Ionic React base starter template. Update the iOS and Material Design dark theme variables: + +``` + /* + * iOS Dark Theme + * ------------------------------------------- + */ + .ios body { + --ion-background-color: #000000; + --ion-background-color-rgb: 0,0,0; + --ion-text-color: #ffffff; + --ion-text-color-rgb: 255,255,255; + --ion-color-step-50: #0d0d0d; + --ion-color-step-100: #1a1a1a; + --ion-color-step-150: #262626; + --ion-color-step-200: #333333; + --ion-color-step-250: #404040; + --ion-color-step-300: #4d4d4d; + --ion-color-step-350: #595959; + --ion-color-step-400: #666666; + --ion-color-step-450: #737373; + --ion-color-step-500: #808080; + --ion-color-step-550: #8c8c8c; + --ion-color-step-600: #999999; + --ion-color-step-650: #a6a6a6; + --ion-color-step-700: #b3b3b3; + --ion-color-step-750: #bfbfbf; + --ion-color-step-800: #cccccc; + --ion-color-step-850: #d9d9d9; + --ion-color-step-900: #e6e6e6; + --ion-color-step-950: #f2f2f2; + + --ion-toolbar-background: #0d0d0d; + + --ion-item-background: #000000; + } + + + /* + * Material Design Dark Theme + * ------------------------------------------- + */ + .md body { + --ion-background-color: #121212; + --ion-background-color-rgb: 18,18,18; + --ion-text-color: #ffffff; + --ion-text-color-rgb: 255,255,255; + --ion-border-color: #222222; + --ion-color-step-50: #1e1e1e; + --ion-color-step-100: #2a2a2a; + --ion-color-step-150: #363636; + --ion-color-step-200: #414141; + --ion-color-step-250: #4d4d4d; + --ion-color-step-300: #595959; + --ion-color-step-350: #656565; + --ion-color-step-400: #717171; + --ion-color-step-450: #7d7d7d; + --ion-color-step-500: #898989; + --ion-color-step-550: #949494; + --ion-color-step-600: #a0a0a0; + --ion-color-step-650: #acacac; + --ion-color-step-700: #b8b8b8; + --ion-color-step-750: #c4c4c4; + --ion-color-step-800: #d0d0d0; + --ion-color-step-850: #dbdbdb; + --ion-color-step-900: #e7e7e7; + --ion-color-step-950: #f3f3f3; + + --ion-item-background: #1e1e1e; + + --ion-toolbar-background: #1f1f1f; + + --ion-tab-bar-background: #1f1f1f; + } +``` + +https://github.com/ionic-team/starters/pull/1202/files#diff-55074cec577e0428be6a1c0b2187de47 + +### Remove Unneeded Toolbar and Large Title Patches + +There was an unresolved issue when Ionic 5.0 was released that required addional CSS to properly display the toolbar and large title. You can safely remove this style from all pages: + +``` +ion-content ion-toolbar { + --background: transparent; +} +``` + +https://github.com/ionic-team/starters/blob/fb440a44b234989eaf6d11ed4091590308e8bb72/react/official/blank/src/pages/Home.css diff --git a/packages/ionic-react/README.md b/packages/ionic-react/README.md new file mode 100644 index 000000000..d355d89eb --- /dev/null +++ b/packages/ionic-react/README.md @@ -0,0 +1,34 @@ +# @nxext/ionic-react + +[![standard-readme compliant](https://img.shields.io/badge/standard--readme-OK-green.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) + +An Nx plugin for developing [Ionic](https://ionicframework.com/docs) React applications and libraries. + +For more complete documentation, visit [nxext.github.io](https://nxext.github.io/nx-extensions-ionic/docs/ionic-react/overview.html). + +## Table of Contents + +- [Usage](#usage) +- [Maintainers](#maintainers) +- [Contributing](#contributing) +- [License](#license) + +## Usage + +Visit the official [Getting Started](https://nxext.github.io/nx-extensions-ionic/docs/ionic-react/getting-started.html) documentation. + +## Maintainers + +[@devinshoemaker](https://github.com/devinshoemaker) + +## Contributing + +See [the contributing file](../../contributing.md)! + +PRs accepted. + +Small note: If editing the README, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification. + +## License + +MIT © 2020 Devin Shoemaker diff --git a/packages/ionic-react/eslint.config.js b/packages/ionic-react/eslint.config.js new file mode 100644 index 000000000..cf5f8637d --- /dev/null +++ b/packages/ionic-react/eslint.config.js @@ -0,0 +1,39 @@ +const { FlatCompat } = require('@eslint/eslintrc'); +const baseConfig = require('../../eslint.config.js'); +const js = require('@eslint/js'); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, +}); +module.exports = [ + ...baseConfig, + { + files: [ + 'packages/ionic-react/**/*.ts', + 'packages/ionic-react/**/*.tsx', + 'packages/ionic-react/**/*.js', + 'packages/ionic-react/**/*.jsx', + ], + rules: {}, + }, + { + files: ['packages/ionic-react/**/*.ts', 'packages/ionic-react/**/*.tsx'], + rules: {}, + }, + { + files: ['packages/ionic-react/**/*.js', 'packages/ionic-react/**/*.jsx'], + rules: {}, + }, + ...compat.config({ parser: 'jsonc-eslint-parser' }).map((config) => ({ + ...config, + files: [ + 'packages/ionic-react/package.json', + 'packages/ionic-react/generators.json', + 'packages/ionic-react/executors.json', + 'packages/ionic-react/generators.json', + 'packages/ionic-react/executors.json', + 'packages/ionic-react/migrations.json', + ], + rules: { '@nx/nx-plugin-checks': 'error' }, + })), +]; diff --git a/packages/ionic-react/executors.json b/packages/ionic-react/executors.json new file mode 100644 index 000000000..9978addc1 --- /dev/null +++ b/packages/ionic-react/executors.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json-schema.org/schema", + "executors": {}, + "builders": {} +} diff --git a/packages/ionic-react/generators.json b/packages/ionic-react/generators.json new file mode 100644 index 000000000..80544dd6c --- /dev/null +++ b/packages/ionic-react/generators.json @@ -0,0 +1,21 @@ +{ + "$schema": "http://json-schema.org/schema", + "name": "IonicReact", + "version": "0.0.1", + "generators": { + "application": { + "factory": "./src/generators/application/generator", + "schema": "./src/generators/application/schema.json", + "aliases": ["app"], + "description": "Create an Ionic React application." + } + }, + "schematics": { + "application": { + "factory": "./src/generators/application/generator", + "schema": "./src/generators/application/schema.json", + "aliases": ["app"], + "description": "Create an Ionic React application." + } + } +} diff --git a/packages/ionic-react/jest.config.ts b/packages/ionic-react/jest.config.ts new file mode 100644 index 000000000..ee0297464 --- /dev/null +++ b/packages/ionic-react/jest.config.ts @@ -0,0 +1,16 @@ +/* eslint-disable */ +module.exports = { + displayName: 'ionic-react', + preset: '../../jest.preset.js', + globals: {}, + transform: { + '^.+\\.[tj]s$': [ + 'ts-jest', + { + tsconfig: '/tsconfig.spec.json', + }, + ], + }, + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html', 'json'], + coverageDirectory: '../../coverage/packages/ionic-react', +}; diff --git a/packages/ionic-react/package.json b/packages/ionic-react/package.json new file mode 100644 index 000000000..5d6163445 --- /dev/null +++ b/packages/ionic-react/package.json @@ -0,0 +1,32 @@ +{ + "name": "@nxext/ionic-react", + "version": "19.0.0", + "description": "An Nx plugin for developing Ionic React applications and libraries", + "homepage": "https://nxext.github.io/nx-extensions/docs/ionic-react/overview.html", + "repository": { + "type": "git", + "url": "https://github.com/nxext/nx-extensions", + "directory": "packages/ionic-react" + }, + "bugs": { + "url": "https://github.com/nxext/nx-extensions/issues" + }, + "license": "MIT", + "generators": "./generators.json", + "executors": "./executors.json", + "nx-migrations": { + "migrations": "./migrations.json" + }, + "schematics": "./generators.json", + "builders": "./executors.json", + "dependencies": { + "@nxext/capacitor": "^19.0.0", + "@nx/devkit": "^19.0.0", + "@nx/eslint": "^19.0.0", + "@nx/react": "^19.0.0", + "typescript": "5.4.5", + "@phenomnomnominal/tsquery": "~5.0.1", + "tslib": "^2.3.0" + }, + "peerDependencies": {} +} diff --git a/packages/ionic-react/project.json b/packages/ionic-react/project.json new file mode 100644 index 000000000..728f68b1e --- /dev/null +++ b/packages/ionic-react/project.json @@ -0,0 +1,57 @@ +{ + "name": "ionic-react", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/ionic-react/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/packages/ionic-react", + "main": "packages/ionic-react/src/index.ts", + "packageJson": "packages/ionic-react/package.json", + "tsConfig": "packages/ionic-react/tsconfig.lib.json", + "assets": [ + "packages/ionic-react/*.md", + { + "input": "./packages/ionic-react/src", + "glob": "**/!(*.ts)", + "output": "./src" + }, + { + "input": "./packages/ionic-react/src", + "glob": "**/*.d.ts", + "output": "./src" + }, + { + "input": "./packages/ionic-react", + "glob": "generators.json", + "output": "." + }, + { + "input": "./packages/ionic-react", + "glob": "executors.json", + "output": "." + } + ] + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/packages/ionic-react"], + "options": { + "jestConfig": "packages/ionic-react/jest.config.ts" + } + }, + "publish": { + "command": "node tools/scripts/publish.mjs ionic-react {args.ver} {args.tag}", + "dependsOn": ["build"] + } + }, + "tags": [] +} diff --git a/packages/ionic-react/src/generators/application/files/base/ionic.config.json.template b/packages/ionic-react/src/generators/application/files/base/ionic.config.json.template new file mode 100644 index 000000000..70a029142 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/base/ionic.config.json.template @@ -0,0 +1,7 @@ +{ + "name": "<%= appName %>", + "integrations": { + "capacitor": {} + }, + "type": "react" +} diff --git a/packages/ionic-react/src/generators/application/files/base/src/App.spec.tsx.template b/packages/ionic-react/src/generators/application/files/base/src/App.spec.tsx.template new file mode 100644 index 000000000..8c927a8d7 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/base/src/App.spec.tsx.template @@ -0,0 +1,8 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import App from './App'; + +test('renders without crashing', () => { + const { baseElement } = render(); + expect(baseElement).toBeDefined(); +}); diff --git a/packages/ionic-react/src/generators/application/files/base/src/App.tsx.template b/packages/ionic-react/src/generators/application/files/base/src/App.tsx.template new file mode 100644 index 000000000..ab2bc3163 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/base/src/App.tsx.template @@ -0,0 +1,30 @@ +import React, { Component } from 'react'; +/* Core CSS required for Ionic components to work properly */ +import '@ionic/react/css/core.css'; + +/* Basic CSS for apps built with Ionic */ +import '@ionic/react/css/normalize.css'; +import '@ionic/react/css/structure.css'; +import '@ionic/react/css/typography.css'; + +/* Optional CSS utils that can be commented out */ +import '@ionic/react/css/padding.css'; +import '@ionic/react/css/float-elements.css'; +import '@ionic/react/css/text-alignment.css'; +import '@ionic/react/css/text-transformation.css'; +import '@ionic/react/css/flex-utils.css'; +import '@ionic/react/css/display.css'; + +/* Theme variables */ +import './theme/variables.css'; + +const App: React.FunctionComponent = () => { + return ( +
+
+
+
+ ); +} + +export default App; diff --git a/packages/ionic-react/src/generators/application/files/base/src/assets/icon/favicon.png b/packages/ionic-react/src/generators/application/files/base/src/assets/icon/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..51888a7bbdb59f04c29c548523eb2638c1c954f5 GIT binary patch literal 930 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!x&nMcT-^(N+`Ik{1{5}NM-k9f zx+Ot=!3-}y{#<)Uok@}X^0T)Mjw~(h@l#Ir^NC7r=_#0-8E$a3RKVL~nc3p~*UxA# z4bjg_XJBBO<>}%W5^;EK_{&+V40u?Vtzk_Oy;*YMVqw~ozwz&rPG6d~>D#mR`SK=; zww9K@s-5|}%Dy=+ak|}>#qwwKGH>ZO4~|`P_r2LJy1RYqyXB`=?Mw?@F8Z!h{rcpz z^y94Mdt1KFIr?nR|NE2g?N}2vO^d(4;=OB>WP0Plul!REN;cgwUAJuA?C`^98NGCJ zuf=eS_OHmETd)0azdLJ6Z^FIm6*YNHw|4%lGf`stp1;dK$1sNYdj7ec{*dYEN(RM7|LFZWoy#R9733Kz`kee` zcsH&1+JCz2|7qRT%bgpNUdZ3E%i6T)I?vY6{p)ga_qlB<;GAPn(!{OF;x_wm_K%n( zW67=BbK}Hx+Mo2yW_)0K?|;#s9f!Uw=S;9NQ)S^>UOs1+lefL)nQKa6oJzg9f7^uT zr^QQJHL|;hJ!n29P`>r{pI$??E8ll+Vp%D3sqgGAQ?16Ir>}307i!n%dGB~BKleRm zV`}#;lUe7&`Rm%PqCLs%HOEe${KnWk%jlG>GM}cUf9>%Jt~^m(q1U%2$4$<)xHgTq zd0EM;Wjbazr!IcCcJ{`1i$kvS+;+RTmT^vJdf^@OKlARE7bo`3-BEDmtJB75>uhqr zB>Z2>{qec~lUw13i#jzoi~HY + + + + <%= className %> + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/packages/ionic-react/src/generators/application/files/base/src/main.tsx.template b/packages/ionic-react/src/generators/application/files/base/src/main.tsx.template new file mode 100644 index 000000000..3b2d1ef99 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/base/src/main.tsx.template @@ -0,0 +1,12 @@ +import React from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './App'; + +const container = document.getElementById('root'); +// eslint-disable-next-line @typescript-eslint/no-non-null-assertion +const root = createRoot(container!); +root.render( + + + +); diff --git a/packages/ionic-react/src/generators/application/files/base/src/manifest.json.template b/packages/ionic-react/src/generators/application/files/base/src/manifest.json.template new file mode 100644 index 000000000..356d04632 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/base/src/manifest.json.template @@ -0,0 +1,21 @@ +{ + "short_name": "<%= className %>", + "name": "<%= className %>", + "icons": [ + { + "src": "assets/icon/favicon.png", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "assets/icon/icon.png", + "type": "image/png", + "sizes": "512x512", + "purpose": "maskable" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#ffffff", + "background_color": "#ffffff" +} diff --git a/packages/ionic-react/src/generators/application/files/base/src/setupTests.ts.template b/packages/ionic-react/src/generators/application/files/base/src/setupTests.ts.template new file mode 100644 index 000000000..497168372 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/base/src/setupTests.ts.template @@ -0,0 +1,16 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom/extend-expect'; + +// Mock matchmedia +window.matchMedia = window.matchMedia || function() { + return { + matches: false, + // eslint-disable-next-line @typescript-eslint/no-empty-function + addListener: function() {}, + // eslint-disable-next-line @typescript-eslint/no-empty-function + removeListener: function() {} + }; +}; diff --git a/packages/ionic-react/src/generators/application/files/base/src/theme/variables.css.template b/packages/ionic-react/src/generators/application/files/base/src/theme/variables.css.template new file mode 100644 index 000000000..a44fcdd01 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/base/src/theme/variables.css.template @@ -0,0 +1,236 @@ +/* Ionic Variables and Theming. For more info, please see: +http://ionicframework.com/docs/theming/ */ + +/** Ionic CSS Variables **/ +:root { + /** primary **/ + --ion-color-primary: #3880ff; + --ion-color-primary-rgb: 56, 128, 255; + --ion-color-primary-contrast: #ffffff; + --ion-color-primary-contrast-rgb: 255, 255, 255; + --ion-color-primary-shade: #3171e0; + --ion-color-primary-tint: #4c8dff; + + /** secondary **/ + --ion-color-secondary: #3dc2ff; + --ion-color-secondary-rgb: 61, 194, 255; + --ion-color-secondary-contrast: #ffffff; + --ion-color-secondary-contrast-rgb: 255, 255, 255; + --ion-color-secondary-shade: #36abe0; + --ion-color-secondary-tint: #50c8ff; + + /** tertiary **/ + --ion-color-tertiary: #5260ff; + --ion-color-tertiary-rgb: 82, 96, 255; + --ion-color-tertiary-contrast: #ffffff; + --ion-color-tertiary-contrast-rgb: 255, 255, 255; + --ion-color-tertiary-shade: #4854e0; + --ion-color-tertiary-tint: #6370ff; + + /** success **/ + --ion-color-success: #2dd36f; + --ion-color-success-rgb: 45, 211, 111; + --ion-color-success-contrast: #ffffff; + --ion-color-success-contrast-rgb: 255, 255, 255; + --ion-color-success-shade: #28ba62; + --ion-color-success-tint: #42d77d; + + /** warning **/ + --ion-color-warning: #ffc409; + --ion-color-warning-rgb: 255, 196, 9; + --ion-color-warning-contrast: #000000; + --ion-color-warning-contrast-rgb: 0, 0, 0; + --ion-color-warning-shade: #e0ac08; + --ion-color-warning-tint: #ffca22; + + /** danger **/ + --ion-color-danger: #eb445a; + --ion-color-danger-rgb: 235, 68, 90; + --ion-color-danger-contrast: #ffffff; + --ion-color-danger-contrast-rgb: 255, 255, 255; + --ion-color-danger-shade: #cf3c4f; + --ion-color-danger-tint: #ed576b; + + /** dark **/ + --ion-color-dark: #222428; + --ion-color-dark-rgb: 34, 36, 40; + --ion-color-dark-contrast: #ffffff; + --ion-color-dark-contrast-rgb: 255, 255, 255; + --ion-color-dark-shade: #1e2023; + --ion-color-dark-tint: #383a3e; + + /** medium **/ + --ion-color-medium: #92949c; + --ion-color-medium-rgb: 146, 148, 156; + --ion-color-medium-contrast: #ffffff; + --ion-color-medium-contrast-rgb: 255, 255, 255; + --ion-color-medium-shade: #808289; + --ion-color-medium-tint: #9d9fa6; + + /** light **/ + --ion-color-light: #f4f5f8; + --ion-color-light-rgb: 244, 245, 248; + --ion-color-light-contrast: #000000; + --ion-color-light-contrast-rgb: 0, 0, 0; + --ion-color-light-shade: #d7d8da; + --ion-color-light-tint: #f5f6f9; +} + +@media (prefers-color-scheme: dark) { + /* + * Dark Colors + * ------------------------------------------- + */ + + body { + --ion-color-primary: #428cff; + --ion-color-primary-rgb: 66,140,255; + --ion-color-primary-contrast: #ffffff; + --ion-color-primary-contrast-rgb: 255,255,255; + --ion-color-primary-shade: #3a7be0; + --ion-color-primary-tint: #5598ff; + + --ion-color-secondary: #50c8ff; + --ion-color-secondary-rgb: 80,200,255; + --ion-color-secondary-contrast: #ffffff; + --ion-color-secondary-contrast-rgb: 255,255,255; + --ion-color-secondary-shade: #46b0e0; + --ion-color-secondary-tint: #62ceff; + + --ion-color-tertiary: #6a64ff; + --ion-color-tertiary-rgb: 106,100,255; + --ion-color-tertiary-contrast: #ffffff; + --ion-color-tertiary-contrast-rgb: 255,255,255; + --ion-color-tertiary-shade: #5d58e0; + --ion-color-tertiary-tint: #7974ff; + + --ion-color-success: #2fdf75; + --ion-color-success-rgb: 47,223,117; + --ion-color-success-contrast: #000000; + --ion-color-success-contrast-rgb: 0,0,0; + --ion-color-success-shade: #29c467; + --ion-color-success-tint: #44e283; + + --ion-color-warning: #ffd534; + --ion-color-warning-rgb: 255,213,52; + --ion-color-warning-contrast: #000000; + --ion-color-warning-contrast-rgb: 0,0,0; + --ion-color-warning-shade: #e0bb2e; + --ion-color-warning-tint: #ffd948; + + --ion-color-danger: #ff4961; + --ion-color-danger-rgb: 255,73,97; + --ion-color-danger-contrast: #ffffff; + --ion-color-danger-contrast-rgb: 255,255,255; + --ion-color-danger-shade: #e04055; + --ion-color-danger-tint: #ff5b71; + + --ion-color-dark: #f4f5f8; + --ion-color-dark-rgb: 244,245,248; + --ion-color-dark-contrast: #000000; + --ion-color-dark-contrast-rgb: 0,0,0; + --ion-color-dark-shade: #d7d8da; + --ion-color-dark-tint: #f5f6f9; + + --ion-color-medium: #989aa2; + --ion-color-medium-rgb: 152,154,162; + --ion-color-medium-contrast: #000000; + --ion-color-medium-contrast-rgb: 0,0,0; + --ion-color-medium-shade: #86888f; + --ion-color-medium-tint: #a2a4ab; + + --ion-color-light: #222428; + --ion-color-light-rgb: 34,36,40; + --ion-color-light-contrast: #ffffff; + --ion-color-light-contrast-rgb: 255,255,255; + --ion-color-light-shade: #1e2023; + --ion-color-light-tint: #383a3e; + } + + /* + * iOS Dark Theme + * ------------------------------------------- + */ + + .ios body { + --ion-background-color: #000000; + --ion-background-color-rgb: 0,0,0; + + --ion-text-color: #ffffff; + --ion-text-color-rgb: 255,255,255; + + --ion-color-step-50: #0d0d0d; + --ion-color-step-100: #1a1a1a; + --ion-color-step-150: #262626; + --ion-color-step-200: #333333; + --ion-color-step-250: #404040; + --ion-color-step-300: #4d4d4d; + --ion-color-step-350: #595959; + --ion-color-step-400: #666666; + --ion-color-step-450: #737373; + --ion-color-step-500: #808080; + --ion-color-step-550: #8c8c8c; + --ion-color-step-600: #999999; + --ion-color-step-650: #a6a6a6; + --ion-color-step-700: #b3b3b3; + --ion-color-step-750: #bfbfbf; + --ion-color-step-800: #cccccc; + --ion-color-step-850: #d9d9d9; + --ion-color-step-900: #e6e6e6; + --ion-color-step-950: #f2f2f2; + + --ion-item-background: #000000; + + --ion-card-background: #1c1c1d; + } + + .ios ion-modal { + --ion-background-color: var(--ion-color-step-100); + --ion-toolbar-background: var(--ion-color-step-150); + --ion-toolbar-border-color: var(--ion-color-step-250); + } + + + /* + * Material Design Dark Theme + * ------------------------------------------- + */ + + .md body { + --ion-background-color: #121212; + --ion-background-color-rgb: 18,18,18; + + --ion-text-color: #ffffff; + --ion-text-color-rgb: 255,255,255; + + --ion-border-color: #222222; + + --ion-color-step-50: #1e1e1e; + --ion-color-step-100: #2a2a2a; + --ion-color-step-150: #363636; + --ion-color-step-200: #414141; + --ion-color-step-250: #4d4d4d; + --ion-color-step-300: #595959; + --ion-color-step-350: #656565; + --ion-color-step-400: #717171; + --ion-color-step-450: #7d7d7d; + --ion-color-step-500: #898989; + --ion-color-step-550: #949494; + --ion-color-step-600: #a0a0a0; + --ion-color-step-650: #acacac; + --ion-color-step-700: #b8b8b8; + --ion-color-step-750: #c4c4c4; + --ion-color-step-800: #d0d0d0; + --ion-color-step-850: #dbdbdb; + --ion-color-step-900: #e7e7e7; + --ion-color-step-950: #f3f3f3; + + --ion-item-background: #1e1e1e; + + --ion-toolbar-background: #1f1f1f; + + --ion-tab-bar-background: #1f1f1f; + + --ion-card-background: #1e1e1e; + } +} diff --git a/packages/ionic-react/src/generators/application/files/blank/src/App.test.tsx.template b/packages/ionic-react/src/generators/application/files/blank/src/App.test.tsx.template new file mode 100644 index 000000000..8c927a8d7 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/blank/src/App.test.tsx.template @@ -0,0 +1,8 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import App from './App'; + +test('renders without crashing', () => { + const { baseElement } = render(); + expect(baseElement).toBeDefined(); +}); diff --git a/packages/ionic-react/src/generators/application/files/blank/src/App.tsx.template b/packages/ionic-react/src/generators/application/files/blank/src/App.tsx.template new file mode 100644 index 000000000..6033a6a60 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/blank/src/App.tsx.template @@ -0,0 +1,42 @@ +import { Redirect, Route } from 'react-router-dom'; +import { IonApp, IonRouterOutlet, setupIonicReact } from '@ionic/react'; +import { IonReactRouter } from '@ionic/react-router'; +import Home from './pages/Home'; + +/* Core CSS required for Ionic components to work properly */ +import '@ionic/react/css/core.css'; + +/* Basic CSS for apps built with Ionic */ +import '@ionic/react/css/normalize.css'; +import '@ionic/react/css/structure.css'; +import '@ionic/react/css/typography.css'; + +/* Optional CSS utils that can be commented out */ +import '@ionic/react/css/padding.css'; +import '@ionic/react/css/float-elements.css'; +import '@ionic/react/css/text-alignment.css'; +import '@ionic/react/css/text-transformation.css'; +import '@ionic/react/css/flex-utils.css'; +import '@ionic/react/css/display.css'; + +/* Theme variables */ +import './theme/variables.css'; + +setupIonicReact(); + +const App: React.FC = () => ( + + + + + + + + + + + + +); + +export default App; diff --git a/packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.css.template b/packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.css.template new file mode 100644 index 000000000..11d2f90d9 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.css.template @@ -0,0 +1,24 @@ +.container { + text-align: center; + position: absolute; + left: 0; + right: 0; + top: 50%; + transform: translateY(-50%); +} + +.container strong { + font-size: 20px; + line-height: 26px; +} + +.container p { + font-size: 16px; + line-height: 22px; + color: #8c8c8c; + margin: 0; +} + +.container a { + text-decoration: none; +} diff --git a/packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.tsx.template b/packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.tsx.template new file mode 100644 index 000000000..239c682da --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.tsx.template @@ -0,0 +1,15 @@ +import './ExploreContainer.css'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +interface ContainerProps { } + +const ExploreContainer: React.FC = () => { + return ( +
+ Ready to create an app? +

Start with Ionic UI Components

+
+ ); +}; + +export default ExploreContainer; diff --git a/packages/ionic-react/src/generators/application/files/blank/src/pages/Home.css.template b/packages/ionic-react/src/generators/application/files/blank/src/pages/Home.css.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-react/src/generators/application/files/blank/src/pages/Home.tsx.template b/packages/ionic-react/src/generators/application/files/blank/src/pages/Home.tsx.template new file mode 100644 index 000000000..922267da7 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/blank/src/pages/Home.tsx.template @@ -0,0 +1,25 @@ +import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react'; +import ExploreContainer from '../components/ExploreContainer'; +import './Home.css'; + +const Home: React.FC = () => { + return ( + + + + Blank + + + + + + Blank + + + + + + ); +}; + +export default Home; diff --git a/packages/ionic-react/src/generators/application/files/list/src/App.test.tsx.template b/packages/ionic-react/src/generators/application/files/list/src/App.test.tsx.template new file mode 100644 index 000000000..8c927a8d7 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/list/src/App.test.tsx.template @@ -0,0 +1,8 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import App from './App'; + +test('renders without crashing', () => { + const { baseElement } = render(); + expect(baseElement).toBeDefined(); +}); diff --git a/packages/ionic-react/src/generators/application/files/list/src/App.tsx.template b/packages/ionic-react/src/generators/application/files/list/src/App.tsx.template new file mode 100644 index 000000000..6450e1045 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/list/src/App.tsx.template @@ -0,0 +1,46 @@ +import { Redirect, Route } from 'react-router-dom'; +import { IonApp, IonRouterOutlet, setupIonicReact } from '@ionic/react'; +import { IonReactRouter } from '@ionic/react-router'; +import Home from './pages/Home'; +import ViewMessage from './pages/ViewMessage'; + +/* Core CSS required for Ionic components to work properly */ +import '@ionic/react/css/core.css'; + +/* Basic CSS for apps built with Ionic */ +import '@ionic/react/css/normalize.css'; +import '@ionic/react/css/structure.css'; +import '@ionic/react/css/typography.css'; + +/* Optional CSS utils that can be commented out */ +import '@ionic/react/css/padding.css'; +import '@ionic/react/css/float-elements.css'; +import '@ionic/react/css/text-alignment.css'; +import '@ionic/react/css/text-transformation.css'; +import '@ionic/react/css/flex-utils.css'; +import '@ionic/react/css/display.css'; + +/* Theme variables */ +import './theme/variables.css'; + +setupIonicReact(); + +const App: React.FC = () => ( + + + + + + + + + + + + + + + +); + +export default App; diff --git a/packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.css.template b/packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.css.template new file mode 100644 index 000000000..da6b0c791 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.css.template @@ -0,0 +1,59 @@ +ion-item { + --padding-start: 0; + --inner-padding-end: 0; +} + +ion-label { + margin-top: 12px; + margin-bottom: 12px; +} + +ion-item h2 { + font-weight: 600; + margin: 0; +} + +ion-item p { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + width: 95%; +} + +ion-item .date { + float: right; + align-items: center; + display: flex; +} + +ion-item ion-icon { + color: #c9c9ca; +} + +ion-item ion-note { + font-size: 15px; + margin-right: 8px; + font-weight: normal; +} + +ion-item ion-note.md { + margin-right: 14px; +} + +.dot { + display: block; + height: 12px; + width: 12px; + border-radius: 50%; + align-self: start; + margin: 16px 10px 16px 16px; +} + +.dot-unread { + background: var(--ion-color-primary); +} + +ion-footer ion-title { + font-size: 11px; + font-weight: normal; +} \ No newline at end of file diff --git a/packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.tsx.template b/packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.tsx.template new file mode 100644 index 000000000..d489cb515 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.tsx.template @@ -0,0 +1,33 @@ +import { + IonItem, + IonLabel, + IonNote + } from '@ionic/react'; +import { Message } from '../data/messages'; +import './MessageListItem.css'; + +interface MessageListItemProps { + message: Message; +} + +const MessageListItem: React.FC = ({ message }) => { + return ( + +
+ +

+ {message.fromName} + + {message.date} + +

+

{message.subject}

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+ ); +}; + +export default MessageListItem; diff --git a/packages/ionic-react/src/generators/application/files/list/src/data/messages.ts.template b/packages/ionic-react/src/generators/application/files/list/src/data/messages.ts.template new file mode 100644 index 000000000..d98995845 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/list/src/data/messages.ts.template @@ -0,0 +1,62 @@ +export interface Message { + fromName: string; + subject: string; + date: string; + id: number; +} + +const messages: Message[] = [ + { + fromName: 'Matt Chorsey', + subject: 'New event: Trip to Vegas', + date: '9:32 AM', + id: 0 + }, + { + fromName: 'Lauren Ruthford', + subject: 'Long time no chat', + date: '6:12 AM', + id: 1 + }, + { + fromName: 'Jordan Firth', + subject: 'Report Results', + date: '4:55 AM', + id: 2 + + }, + { + fromName: 'Bill Thomas', + subject: 'The situation', + date: 'Yesterday', + id: 3 + }, + { + fromName: 'Joanne Pollan', + subject: 'Updated invitation: Swim lessons', + date: 'Yesterday', + id: 4 + }, + { + fromName: 'Andrea Cornerston', + subject: 'Last minute ask', + date: 'Yesterday', + id: 5 + }, + { + fromName: 'Moe Chamont', + subject: 'Family Calendar - Version 1', + date: 'Last Week', + id: 6 + }, + { + fromName: 'Kelly Richardson', + subject: 'Placeholder Headhots', + date: 'Last Week', + id: 7 + } +]; + +export const getMessages = () => messages; + +export const getMessage = (id: number) => messages.find(m => m.id === id); diff --git a/packages/ionic-react/src/generators/application/files/list/src/pages/Home.css.template b/packages/ionic-react/src/generators/application/files/list/src/pages/Home.css.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-react/src/generators/application/files/list/src/pages/Home.tsx.template b/packages/ionic-react/src/generators/application/files/list/src/pages/Home.tsx.template new file mode 100644 index 000000000..9395c4ff2 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/list/src/pages/Home.tsx.template @@ -0,0 +1,60 @@ +import MessageListItem from '../components/MessageListItem'; +import { useState } from 'react'; +import { Message, getMessages } from '../data/messages'; +import { + IonContent, + IonHeader, + IonList, + IonPage, + IonRefresher, + IonRefresherContent, + IonTitle, + IonToolbar, + useIonViewWillEnter +} from '@ionic/react'; +import './Home.css'; + +const Home: React.FC = () => { + + const [messages, setMessages] = useState([]); + + useIonViewWillEnter(() => { + const msgs = getMessages(); + setMessages(msgs); + }); + + const refresh = (e: CustomEvent) => { + setTimeout(() => { + e.detail.complete(); + }, 3000); + }; + + return ( + + + + Inbox + + + + + + + + + + + Inbox + + + + + + {messages.map(m => )} + + + + ); +}; + +export default Home; diff --git a/packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.css.template b/packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.css.template new file mode 100644 index 000000000..1a77b1c68 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.css.template @@ -0,0 +1,40 @@ +#view-message-page ion-item { + --inner-padding-end: 0; + --background: transparent; +} + +#view-message-page ion-label { + margin-top: 12px; + margin-bottom: 12px; +} + +#view-message-page ion-item h2 { + font-weight: 600; +} + +#view-message-page ion-item .date { + float: right; + align-items: center; + display: flex; +} + +#view-message-page ion-item ion-icon { + font-size: 42px; + margin-right: 8px; +} + +#view-message-page ion-item ion-note { + font-size: 15px; + margin-right: 12px; + font-weight: normal; +} + +#view-message-page h1 { + margin: 0; + font-weight: bold; + font-size: 22px; +} + +#view-message-page p { + line-height: 22px; +} \ No newline at end of file diff --git a/packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.tsx.template b/packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.tsx.template new file mode 100644 index 000000000..e7f7e6094 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.tsx.template @@ -0,0 +1,78 @@ +import { useState } from 'react'; +import { Message, getMessage } from '../data/messages'; +import { + IonBackButton, + IonButtons, + IonContent, + IonHeader, + IonIcon, + IonItem, + IonLabel, + IonNote, + IonPage, + IonToolbar, + useIonViewWillEnter, +} from '@ionic/react'; +import { personCircle } from 'ionicons/icons'; +import { useParams } from 'react-router'; +import './ViewMessage.css'; + +function ViewMessage() { + const [message, setMessage] = useState(); + const params = useParams<{ id: string }>(); + + useIonViewWillEnter(() => { + const msg = getMessage(parseInt(params.id, 10)); + setMessage(msg); + }); + + return ( + + + + + + + + + + + {message ? ( + <> + + + +

+ {message.fromName} + + {message.date} + +

+

+ To: Me +

+
+
+ +
+

{message.subject}

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut + enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor + in reprehenderit in voluptate velit esse cillum dolore eu fugiat + nulla pariatur. Excepteur sint occaecat cupidatat non proident, + sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+ + ) : ( +
Message not found
+ )} +
+
+ ); +} + +export default ViewMessage; diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/App.test.tsx.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/App.test.tsx.template new file mode 100644 index 000000000..8c927a8d7 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/sidemenu/src/App.test.tsx.template @@ -0,0 +1,8 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import App from './App'; + +test('renders without crashing', () => { + const { baseElement } = render(); + expect(baseElement).toBeDefined(); +}); diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/App.tsx.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/App.tsx.template new file mode 100644 index 000000000..178ec67f2 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/sidemenu/src/App.tsx.template @@ -0,0 +1,48 @@ +import { IonApp, IonRouterOutlet, IonSplitPane, setupIonicReact } from '@ionic/react'; +import { IonReactRouter } from '@ionic/react-router'; +import { Redirect, Route } from 'react-router-dom'; +import Menu from './components/Menu'; +import Page from './pages/Page'; + +/* Core CSS required for Ionic components to work properly */ +import '@ionic/react/css/core.css'; + +/* Basic CSS for apps built with Ionic */ +import '@ionic/react/css/normalize.css'; +import '@ionic/react/css/structure.css'; +import '@ionic/react/css/typography.css'; + +/* Optional CSS utils that can be commented out */ +import '@ionic/react/css/padding.css'; +import '@ionic/react/css/float-elements.css'; +import '@ionic/react/css/text-alignment.css'; +import '@ionic/react/css/text-transformation.css'; +import '@ionic/react/css/flex-utils.css'; +import '@ionic/react/css/display.css'; + +/* Theme variables */ +import './theme/variables.css'; + +setupIonicReact(); + +const App: React.FC = () => { + return ( + + + + + + + + + + + + + + + + ); +}; + +export default App; diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.css.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.css.template new file mode 100644 index 000000000..bdb7b9917 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.css.template @@ -0,0 +1,24 @@ +#container { + text-align: center; + position: absolute; + left: 0; + right: 0; + top: 50%; + transform: translateY(-50%); +} + +#container strong { + font-size: 20px; + line-height: 26px; +} + +#container p { + font-size: 16px; + line-height: 22px; + color: #8c8c8c; + margin: 0; +} + +#container a { + text-decoration: none; +} diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.tsx.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.tsx.template new file mode 100644 index 000000000..0711cabd7 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.tsx.template @@ -0,0 +1,16 @@ +import './ExploreContainer.css'; + +interface ContainerProps { + name: string; +} + +const ExploreContainer: React.FC = ({ name }) => { + return ( +
+ {name} +

Explore UI Components

+
+ ); +}; + +export default ExploreContainer; diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.css.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.css.template new file mode 100644 index 000000000..0ca47a267 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.css.template @@ -0,0 +1,113 @@ +ion-menu ion-content { + --background: var(--ion-item-background, var(--ion-background-color, #fff)); +} + +ion-menu.md ion-content { + --padding-start: 8px; + --padding-end: 8px; + --padding-top: 20px; + --padding-bottom: 20px; +} + +ion-menu.md ion-list { + padding: 20px 0; +} + +ion-menu.md ion-note { + margin-bottom: 30px; +} + +ion-menu.md ion-list-header, ion-menu.md ion-note { + padding-left: 10px; +} + +ion-menu.md ion-list#inbox-list { + border-bottom: 1px solid var(--ion-color-step-150, #d7d8da); +} + +ion-menu.md ion-list#inbox-list ion-list-header { + font-size: 22px; + font-weight: 600; + min-height: 20px; +} + +ion-menu.md ion-list#labels-list ion-list-header { + font-size: 16px; + margin-bottom: 18px; + color: #757575; + min-height: 26px; +} + +ion-menu.md ion-item { + --padding-start: 10px; + --padding-end: 10px; + border-radius: 4px; +} + +ion-menu.md ion-item.selected { + --background: rgba(var(--ion-color-primary-rgb), 0.14); +} + +ion-menu.md ion-item.selected ion-icon { + color: var(--ion-color-primary); +} + +ion-menu.md ion-item ion-icon { + color: #616e7e; +} + +ion-menu.md ion-item ion-label { + font-weight: 500; +} + +ion-menu.ios ion-content { + --padding-bottom: 20px; +} + +ion-menu.ios ion-list { + padding: 20px 0 0 0; +} + +ion-menu.ios ion-note { + line-height: 24px; + margin-bottom: 20px; +} + +ion-menu.ios ion-item { + --padding-start: 16px; + --padding-end: 16px; + --min-height: 50px; +} + +ion-menu.ios ion-item ion-icon { + font-size: 24px; + color: #73849a; +} + +ion-menu.ios ion-item .selected ion-icon { + color: var(--ion-color-primary); +} + +ion-menu.ios ion-list#labels-list ion-list-header { + margin-bottom: 8px; +} + +ion-menu.ios ion-list-header, +ion-menu.ios ion-note { + padding-left: 16px; + padding-right: 16px; +} + +ion-menu.ios ion-note { + margin-bottom: 8px; +} + +ion-note { + display: inline-block; + font-size: 16px; + color: var(--ion-color-medium-shade); +} + +ion-item.selected { + --color: var(--ion-color-primary); +} \ No newline at end of file diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.tsx.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.tsx.template new file mode 100644 index 000000000..31e99c335 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.tsx.template @@ -0,0 +1,100 @@ +import { + IonContent, + IonIcon, + IonItem, + IonLabel, + IonList, + IonListHeader, + IonMenu, + IonMenuToggle, + IonNote, +} from '@ionic/react'; + +import { useLocation } from 'react-router-dom'; +import { archiveOutline, archiveSharp, bookmarkOutline, heartOutline, heartSharp, mailOutline, mailSharp, paperPlaneOutline, paperPlaneSharp, trashOutline, trashSharp, warningOutline, warningSharp } from 'ionicons/icons'; +import './Menu.css'; + +interface AppPage { + url: string; + iosIcon: string; + mdIcon: string; + title: string; +} + +const appPages: AppPage[] = [ + { + title: 'Inbox', + url: '/page/Inbox', + iosIcon: mailOutline, + mdIcon: mailSharp + }, + { + title: 'Outbox', + url: '/page/Outbox', + iosIcon: paperPlaneOutline, + mdIcon: paperPlaneSharp + }, + { + title: 'Favorites', + url: '/page/Favorites', + iosIcon: heartOutline, + mdIcon: heartSharp + }, + { + title: 'Archived', + url: '/page/Archived', + iosIcon: archiveOutline, + mdIcon: archiveSharp + }, + { + title: 'Trash', + url: '/page/Trash', + iosIcon: trashOutline, + mdIcon: trashSharp + }, + { + title: 'Spam', + url: '/page/Spam', + iosIcon: warningOutline, + mdIcon: warningSharp + } +]; + +const labels = ['Family', 'Friends', 'Notes', 'Work', 'Travel', 'Reminders']; + +const Menu: React.FC = () => { + const location = useLocation(); + + return ( + + + + Inbox + hi@ionicframework.com + {appPages.map((appPage, index) => { + return ( + + + + + ); + })} + + + + Labels + {labels.map((label, index) => ( + + + ))} + + + + ); +}; + +export default Menu; diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.css.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.css.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.tsx.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.tsx.template new file mode 100644 index 000000000..24ac77a87 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.tsx.template @@ -0,0 +1,33 @@ +import { IonButtons, IonContent, IonHeader, IonMenuButton, IonPage, IonTitle, IonToolbar } from '@ionic/react'; +import { useParams } from 'react-router'; +import ExploreContainer from '../components/ExploreContainer'; +import './Page.css'; + +const Page: React.FC = () => { + + const { name } = useParams<{ name: string; }>(); + + return ( + + + + + + + {name} + + + + + + + {name} + + + + + + ); +}; + +export default Page; diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/App.test.tsx.template b/packages/ionic-react/src/generators/application/files/tabs/src/App.test.tsx.template new file mode 100644 index 000000000..8c927a8d7 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/tabs/src/App.test.tsx.template @@ -0,0 +1,8 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import App from './App'; + +test('renders without crashing', () => { + const { baseElement } = render(); + expect(baseElement).toBeDefined(); +}); diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/App.tsx.template b/packages/ionic-react/src/generators/application/files/tabs/src/App.tsx.template new file mode 100644 index 000000000..18d5ad367 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/tabs/src/App.tsx.template @@ -0,0 +1,76 @@ +import { Redirect, Route } from 'react-router-dom'; +import { + IonApp, + IonIcon, + IonLabel, + IonRouterOutlet, + IonTabBar, + IonTabButton, + IonTabs, + setupIonicReact +} from '@ionic/react'; +import { IonReactRouter } from '@ionic/react-router'; +import { ellipse, square, triangle } from 'ionicons/icons'; +import Tab1 from './pages/Tab1'; +import Tab2 from './pages/Tab2'; +import Tab3 from './pages/Tab3'; + +/* Core CSS required for Ionic components to work properly */ +import '@ionic/react/css/core.css'; + +/* Basic CSS for apps built with Ionic */ +import '@ionic/react/css/normalize.css'; +import '@ionic/react/css/structure.css'; +import '@ionic/react/css/typography.css'; + +/* Optional CSS utils that can be commented out */ +import '@ionic/react/css/padding.css'; +import '@ionic/react/css/float-elements.css'; +import '@ionic/react/css/text-alignment.css'; +import '@ionic/react/css/text-transformation.css'; +import '@ionic/react/css/flex-utils.css'; +import '@ionic/react/css/display.css'; + +/* Theme variables */ +import './theme/variables.css'; + +setupIonicReact(); + +const App: React.FC = () => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); + +export default App; diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.css.template b/packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.css.template new file mode 100644 index 000000000..e99f514fb --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.css.template @@ -0,0 +1,24 @@ +.container { + text-align: center; + position: absolute; + left: 0; + right: 0; + top: 50%; + transform: translateY(-50%); +} + +.container strong { + font-size: 20px; + line-height: 26px; +} + +.container p { + font-size: 16px; + line-height: 22px; + color: #8c8c8c; + margin: 0; +} + +.container a { + text-decoration: none; +} \ No newline at end of file diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.tsx.template b/packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.tsx.template new file mode 100644 index 000000000..354df7b7b --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.tsx.template @@ -0,0 +1,16 @@ +import './ExploreContainer.css'; + +interface ContainerProps { + name: string; +} + +const ExploreContainer: React.FC = ({ name }) => { + return ( +
+ {name} +

Explore UI Components

+
+ ); +}; + +export default ExploreContainer; diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.css.template b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.css.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.tsx.template b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.tsx.template new file mode 100644 index 000000000..97aa72d86 --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.tsx.template @@ -0,0 +1,25 @@ +import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react'; +import ExploreContainer from '../components/ExploreContainer'; +import './Tab1.css'; + +const Tab1: React.FC = () => { + return ( + + + + Tab 1 + + + + + + Tab 1 + + + + + + ); +}; + +export default Tab1; diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.css.template b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.css.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.tsx.template b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.tsx.template new file mode 100644 index 000000000..05458aa0a --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.tsx.template @@ -0,0 +1,25 @@ +import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react'; +import ExploreContainer from '../components/ExploreContainer'; +import './Tab2.css'; + +const Tab2: React.FC = () => { + return ( + + + + Tab 2 + + + + + + Tab 2 + + + + + + ); +}; + +export default Tab2; diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.css.template b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.css.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.tsx.template b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.tsx.template new file mode 100644 index 000000000..3a29b8a5c --- /dev/null +++ b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.tsx.template @@ -0,0 +1,25 @@ +import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react'; +import ExploreContainer from '../components/ExploreContainer'; +import './Tab3.css'; + +const Tab3: React.FC = () => { + return ( + + + + Tab 3 + + + + + + Tab 3 + + + + + + ); +}; + +export default Tab3; diff --git a/packages/ionic-react/src/generators/application/generator.spec.ts b/packages/ionic-react/src/generators/application/generator.spec.ts new file mode 100644 index 000000000..b78d1fa34 --- /dev/null +++ b/packages/ionic-react/src/generators/application/generator.spec.ts @@ -0,0 +1,200 @@ +import { readJson, readProjectConfiguration, Tree } from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import { applicationGenerator } from './generator'; +import { ApplicationGeneratorSchema } from './schema'; + +describe('application', () => { + let host: Tree; + + const options: ApplicationGeneratorSchema = { + name: 'my-app', + unitTestRunner: 'jest', + e2eTestRunner: 'cypress', + template: 'blank', + capacitor: false, + skipFormat: true, + }; + + const projectRoot = `apps/${options.name}`; + + function testGeneratedFiles(tree: Tree, options: ApplicationGeneratorSchema) { + // Common files + expect(tree.exists(`${projectRoot}/.eslintrc.json`)).toBeTruthy(); + expect(tree.exists(`${projectRoot}/src/index.html`)).toBeTruthy(); + expect(tree.exists(`${projectRoot}/src/manifest.json`)).toBeTruthy(); + expect( + tree.exists(`${projectRoot}/src/assets/icon/favicon.png`) + ).toBeTruthy(); + + // Starter templates + expect(tree.exists(`${projectRoot}/src/App.tsx`)).toBeTruthy(); + expect(tree.exists(`${projectRoot}/src/pages/Home.tsx`)).toBeTruthy(); + expect( + tree.exists(`${projectRoot}/src/components/ExploreContainer.tsx`) + ).toBeTruthy(); + + expect( + tree.exists(`${projectRoot}/src/components/ExploreContainer.css`) + ).toBeTruthy(); + expect(tree.exists(`${projectRoot}/src/pages/Home.css`)).toBeTruthy(); + + // Capacitor files + if (options.capacitor) { + expect(tree.exists(`${projectRoot}/capacitor.config.ts`)).toBeTruthy(); + } + } + + beforeEach(() => { + host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + }); + + it('should add dependencies to package.json', async () => { + await applicationGenerator(host, options); + + const packageJson = readJson(host, 'package.json'); + expect(packageJson.dependencies['@ionic/react']).toBeDefined(); + expect(packageJson.dependencies['@ionic/react-router']).toBeDefined(); + expect(packageJson.devDependencies['@nx/react']).toBeDefined(); + }); + + it('should generate application', async () => { + await applicationGenerator(host, options); + + testGeneratedFiles(host, { ...options }); + }); + + it('should delete unused @nx/react files', async () => { + await applicationGenerator(host, options); + + expect(host.exists(`${projectRoot}/src/app/app.css`)).toBeFalsy(); + expect(host.exists(`${projectRoot}/src/favicon.ico`)).toBeFalsy(); + }); + + it('should update assets in project configuration', async () => { + await applicationGenerator(host, options); + const project = readProjectConfiguration(host, options.name); + + expect(project.targets.build.options.assets).not.toContain( + `${projectRoot}/src/favicon.ico` + ); + expect(project.targets.build.options.assets).toContain( + `${projectRoot}/src/manifest.json` + ); + }); + + describe('--template', () => { + it('should add base template files', async () => { + await applicationGenerator(host, options); + + expect(host.exists(`${projectRoot}/ionic.config.json`)).toBeTruthy(); + expect( + host.exists(`${projectRoot}/src/theme/variables.css`) + ).toBeTruthy(); + }); + + it('should add blank template files', async () => { + await applicationGenerator(host, { ...options, template: 'blank' }); + + expect( + host.exists(`${projectRoot}/src/components/ExploreContainer.tsx`) + ).toBeTruthy(); + }); + + it('should add list template files', async () => { + await applicationGenerator(host, { ...options, template: 'list' }); + + expect( + host.exists(`${projectRoot}/src/pages/ViewMessage.tsx`) + ).toBeTruthy(); + }); + + it('should add sidemenu template files', async () => { + await applicationGenerator(host, { ...options, template: 'sidemenu' }); + + expect(host.exists(`${projectRoot}/src/pages/Page.tsx`)).toBeTruthy(); + }); + + it('should add tabs template files', async () => { + await applicationGenerator(host, { ...options, template: 'tabs' }); + + expect(host.exists(`${projectRoot}/src/pages/Tab1.tsx`)).toBeTruthy(); + }); + }); + + describe('--directory', () => { + it('should update project configuration with directory', async () => { + await applicationGenerator(host, { ...options, directory: 'myDir' }); + const project = readProjectConfiguration(host, `my-dir-${options.name}`); + const projectE2e = readProjectConfiguration( + host, + `my-dir-${options.name}-e2e` + ); + + expect(project.root).toEqual('apps/my-dir/my-app'); + expect(projectE2e.root).toEqual('apps/my-dir/my-app-e2e'); + }); + + it('should generate files', async () => { + await applicationGenerator(host, { ...options, directory: 'myDir' }); + + expect(host.exists('apps/my-dir/my-app/src/main.ts')); + }); + + it('should generate Capacitor project', async () => { + await applicationGenerator(host, { + ...options, + directory: 'my-dir', + capacitor: true, + }); + + expect( + host.exists(`apps/my-dir/my-app/capacitor.config.ts`) + ).toBeDefined(); + }); + }); + + describe('--unitTestRunner', () => { + it('none', async () => { + await applicationGenerator(host, { + ...options, + unitTestRunner: 'none', + }); + + expect(host.exists(`${projectRoot}/src/app/App.spec.tsx`)).toBeFalsy(); + }); + }); + + describe('--capacitor', () => { + describe('true', () => { + it('should generate Capacitor project', async () => { + await applicationGenerator(host, { ...options, capacitor: true }); + + testGeneratedFiles(host, { ...options, capacitor: true }); + }); + }); + }); + + describe('--standaloneConfig', () => { + describe('true', () => { + it('should generate package.json', async () => { + await applicationGenerator(host, { + ...options, + standaloneConfig: true, + }); + + expect(host.exists(`${projectRoot}/package.json`)).toBeDefined(); + }); + }); + + describe('false', () => { + it('should not generate package.json', async () => { + await applicationGenerator(host, { + ...options, + standaloneConfig: false, + }); + + expect(host.exists(`${projectRoot}/package.json`)).toBeFalsy(); + }); + }); + }); +}); diff --git a/packages/ionic-react/src/generators/application/generator.ts b/packages/ionic-react/src/generators/application/generator.ts new file mode 100644 index 000000000..cede8d0ce --- /dev/null +++ b/packages/ionic-react/src/generators/application/generator.ts @@ -0,0 +1,49 @@ +import { + convertNxGenerator, + formatFiles, + GeneratorCallback, + runTasksInSerial, + Tree, +} from '@nx/devkit'; +import { addCapacitor } from './lib/add-capacitor'; +import { addDependencies } from './lib/add-dependencies'; +import { addReact } from './lib/add-react'; +import { addFiles, deleteUnusedFiles } from './lib/files'; +import { normalizeOptions } from './lib/normalize-options'; +import { updateWorkspace } from './lib/update-workspace'; +import { ApplicationGeneratorSchema } from './schema'; +import { changeReactRouter } from './lib/change-react-router'; +import { removePlainReactapp } from './lib/remove-plain-reactapp'; +import { updateJestBabelSetup } from './lib/update-jest-babel-setup'; +import { updateCypressSetup } from './lib/update-cypress-setup'; + +export async function applicationGenerator( + host: Tree, + options: ApplicationGeneratorSchema +) { + const normalizedOptions = normalizeOptions(host, options); + const installTask = addDependencies(host); + const reactTask = await addReact(host, options); + const routerTask = changeReactRouter(host); + addFiles(host, normalizedOptions); + deleteUnusedFiles(host, normalizedOptions); + updateWorkspace(host, normalizedOptions); + removePlainReactapp(host, normalizedOptions); + updateJestBabelSetup(host, normalizedOptions); + updateCypressSetup(host, normalizedOptions); + + // eslint-disable-next-line @typescript-eslint/no-empty-function + let capacitorTask: GeneratorCallback = () => {}; + if (options.capacitor) { + capacitorTask = await addCapacitor(host, normalizedOptions); + } + + if (!options.skipFormat) { + await formatFiles(host); + } + + return runTasksInSerial(installTask, reactTask, routerTask, capacitorTask); +} + +export default applicationGenerator; +export const applicationSchematic = convertNxGenerator(applicationGenerator); diff --git a/packages/ionic-react/src/generators/application/lib/add-capacitor.ts b/packages/ionic-react/src/generators/application/lib/add-capacitor.ts new file mode 100644 index 000000000..25388ef05 --- /dev/null +++ b/packages/ionic-react/src/generators/application/lib/add-capacitor.ts @@ -0,0 +1,12 @@ +import { Tree } from '@nx/devkit'; +import { capacitorProjectGenerator } from '@nxext/capacitor'; +import { NormalizedSchema } from '../schema'; + +export async function addCapacitor(host: Tree, options: NormalizedSchema) { + return await capacitorProjectGenerator(host, { + project: options.appProjectName, + appName: options.appName, + appId: 'io.ionic.starter', + skipFormat: options.skipFormat, + }); +} diff --git a/packages/ionic-react/src/generators/application/lib/add-dependencies.ts b/packages/ionic-react/src/generators/application/lib/add-dependencies.ts new file mode 100644 index 000000000..0846e5139 --- /dev/null +++ b/packages/ionic-react/src/generators/application/lib/add-dependencies.ts @@ -0,0 +1,35 @@ +import { addDependenciesToPackageJson, Tree } from '@nx/devkit'; +import { + ionicReactRouterVersion, + ionicReactVersion, + webVitalsVersion, + workboxVersion, + capacitorPluginVersion, +} from '../../../utils/versions'; + +export function addDependencies(host: Tree) { + return addDependenciesToPackageJson( + host, + { + '@ionic/react': ionicReactVersion, + '@ionic/react-router': ionicReactRouterVersion, + 'web-vitals': webVitalsVersion, + '@capacitor/haptics': capacitorPluginVersion, + '@capacitor/keyboard': capacitorPluginVersion, + '@capacitor/status-bar': capacitorPluginVersion, + 'workbox-background-sync': workboxVersion, + 'workbox-broadcast-update': workboxVersion, + 'workbox-cacheable-response': workboxVersion, + 'workbox-core': workboxVersion, + 'workbox-expiration': workboxVersion, + 'workbox-google-analytics': workboxVersion, + 'workbox-navigation-preload': workboxVersion, + 'workbox-precaching': workboxVersion, + 'workbox-range-requests': workboxVersion, + 'workbox-routing': workboxVersion, + 'workbox-strategies': workboxVersion, + 'workbox-streams': workboxVersion, + }, + {} + ); +} diff --git a/packages/ionic-react/src/generators/application/lib/add-react.ts b/packages/ionic-react/src/generators/application/lib/add-react.ts new file mode 100644 index 000000000..6d419d7f5 --- /dev/null +++ b/packages/ionic-react/src/generators/application/lib/add-react.ts @@ -0,0 +1,26 @@ +import { Tree, ensurePackage, NX_VERSION } from '@nx/devkit'; +import { Linter } from '@nx/eslint'; +import { ApplicationGeneratorSchema } from '../schema'; + +export async function addReact( + host: Tree, + options: ApplicationGeneratorSchema +) { + ensurePackage('@nx/react', NX_VERSION); + const { applicationGenerator } = await import('@nx/react'); + return await applicationGenerator(host, { + ...options, + name: options.name, + style: 'css', + skipFormat: options.skipFormat, + directory: options.directory, + unitTestRunner: options.unitTestRunner, + e2eTestRunner: options.e2eTestRunner, + linter: Linter.EsLint, + pascalCaseFiles: true, + classComponent: false, + routing: true, + globalCss: true, + bundler: options.bundler, + }); +} diff --git a/packages/ionic-react/src/generators/application/lib/change-react-router.ts b/packages/ionic-react/src/generators/application/lib/change-react-router.ts new file mode 100644 index 000000000..ac70c1bbe --- /dev/null +++ b/packages/ionic-react/src/generators/application/lib/change-react-router.ts @@ -0,0 +1,26 @@ +import { + addDependenciesToPackageJson, + removeDependenciesFromPackageJson, + Tree, + runTasksInSerial, +} from '@nx/devkit'; +import { + reactRouterDomVersion, + typesReactRouterDomVersion, +} from '../../../utils/versions'; + +export function changeReactRouter(host: Tree) { + const removeTask = removeDependenciesFromPackageJson( + host, + ['react-router-dom'], + [] + ); + + const routerTask = addDependenciesToPackageJson( + host, + { 'react-router-dom': reactRouterDomVersion }, + { '@types/react-router-dom': typesReactRouterDomVersion } + ); + + return runTasksInSerial(removeTask, routerTask); +} diff --git a/packages/ionic-react/src/generators/application/lib/files.ts b/packages/ionic-react/src/generators/application/lib/files.ts new file mode 100644 index 000000000..9cae03dfe --- /dev/null +++ b/packages/ionic-react/src/generators/application/lib/files.ts @@ -0,0 +1,58 @@ +import { + generateFiles, + names, + normalizePath, + offsetFromRoot, + Tree, +} from '@nx/devkit'; +import { NormalizedSchema } from '../schema'; + +export function addBaseFiles(host: Tree, options: NormalizedSchema) { + const templateOptions = { + ...options, + ...names(options.name), + offsetFromRoot: offsetFromRoot(options.appProjectRoot), + template: '', + }; + + generateFiles( + host, + normalizePath(__dirname + '/../files/base'), + options.appProjectRoot, + templateOptions + ); +} + +export function addTemplateFiles(host: Tree, options: NormalizedSchema) { + const templateOptions = { + ...options, + ...names(options.name), + offsetFromRoot: offsetFromRoot(options.appProjectRoot), + template: '', + }; + + generateFiles( + host, + normalizePath(__dirname + `/../files/${options.template}`), + options.appProjectRoot, + templateOptions + ); +} + +export function addFiles(host: Tree, options: NormalizedSchema) { + addBaseFiles(host, options); + addTemplateFiles(host, options); + + if (options.unitTestRunner === 'none') { + host.delete(`${options.appProjectRoot}/src/app/App.spec.tsx`); + } +} + +export function deleteUnusedFiles(host: Tree, options: NormalizedSchema) { + host.delete(options.appProjectRoot + '/src/favicon.ico'); + host.delete(options.appProjectRoot + `/src/app/App.css`); + host.delete(options.appProjectRoot + `/src/app/logo.svg`); + host.delete(options.appProjectRoot + `/src/app/star.svg`); + + return host; +} diff --git a/packages/ionic-react/src/generators/application/lib/normalize-options.ts b/packages/ionic-react/src/generators/application/lib/normalize-options.ts new file mode 100644 index 000000000..32468aee6 --- /dev/null +++ b/packages/ionic-react/src/generators/application/lib/normalize-options.ts @@ -0,0 +1,27 @@ +import { getWorkspaceLayout, names, normalizePath, Tree } from '@nx/devkit'; +import { ApplicationGeneratorSchema, NormalizedSchema } from '../schema'; + +export function normalizeOptions( + host: Tree, + options: ApplicationGeneratorSchema +): NormalizedSchema { + const appName = options.name; + + const appDirectory = options.directory + ? `${names(options.directory).fileName}/${names(options.name).fileName}` + : names(options.name).fileName; + + const appProjectName = appDirectory.replace(new RegExp('/', 'g'), '-'); + + const { appsDir } = getWorkspaceLayout(host); + const appProjectRoot = normalizePath(`${appsDir}/${appDirectory}`); + + return { + ...options, + appName, + name: names(options.name).fileName, + appProjectName, + appProjectRoot, + bundler: 'webpack', + }; +} diff --git a/packages/ionic-react/src/generators/application/lib/remove-plain-reactapp.ts b/packages/ionic-react/src/generators/application/lib/remove-plain-reactapp.ts new file mode 100644 index 000000000..0dcf60bc8 --- /dev/null +++ b/packages/ionic-react/src/generators/application/lib/remove-plain-reactapp.ts @@ -0,0 +1,6 @@ +import { joinPathFragments, Tree } from '@nx/devkit'; +import { NormalizedSchema } from '../schema'; + +export function removePlainReactapp(host: Tree, options: NormalizedSchema) { + host.delete(joinPathFragments(options.appProjectRoot, 'src/app')); +} diff --git a/packages/ionic-react/src/generators/application/lib/update-cypress-setup.ts b/packages/ionic-react/src/generators/application/lib/update-cypress-setup.ts new file mode 100644 index 000000000..1bef81260 --- /dev/null +++ b/packages/ionic-react/src/generators/application/lib/update-cypress-setup.ts @@ -0,0 +1,62 @@ +import { getWorkspaceLayout, joinPathFragments, names, Tree } from '@nx/devkit'; +import { NormalizedSchema } from '../schema'; + +function getParameters(options: NormalizedSchema) { + const files = { + blank: { elem: 'strong', title: 'Ready to create an app?' }, + list: { elem: 'ion-title', title: 'Inbox' }, + sidemenu: { elem: 'ion-title', title: 'Inbox' }, + tabs: { elem: 'strong', title: 'Tab 1' }, + }; + + return files[options.template]; +} + +export function updateCypressSetup(tree: Tree, options: NormalizedSchema) { + if (options.e2eTestRunner !== 'cypress') { + return; + } + + updateFiles(tree, options); +} + +function updateFiles(tree: Tree, options: NormalizedSchema) { + const { appsDir } = getWorkspaceLayout(tree); + + const name = `${options.name}-e2e`; + const e2eProjectRoot = options.directory + ? joinPathFragments(appsDir, names(options.directory).fileName, name) + : joinPathFragments(appsDir, name); + + const { elem, title } = getParameters(options); + + tree.write( + joinPathFragments(e2eProjectRoot, 'src/support/app.po.ts'), + `export const getGreeting = () => cy.get('${elem}');` + ); + + const testContent = ` +import { getGreeting } from '../support/app.po'; + +describe('app-blank', () => { + beforeEach(() => cy.visit('/')); + + it('should display welcome message', () => { + // Custom command example, see \`../support/commands.ts\` file + cy.login('my-email@something.com', 'myPassword'); + + // Function helper example, see \`../support/app.po.ts\` file + getGreeting().contains('${title}'); + }); +}); + `; + const testFiles = [ + joinPathFragments(e2eProjectRoot, 'src/integration/app.spec.ts'), + joinPathFragments(e2eProjectRoot, 'src/e2e/app.cy.ts'), + ]; + for (const testFile of testFiles) { + if (tree.exists(testFile)) { + tree.write(testFile, testContent); + } + } +} diff --git a/packages/ionic-react/src/generators/application/lib/update-jest-babel-setup.ts b/packages/ionic-react/src/generators/application/lib/update-jest-babel-setup.ts new file mode 100644 index 000000000..20ec18d7f --- /dev/null +++ b/packages/ionic-react/src/generators/application/lib/update-jest-babel-setup.ts @@ -0,0 +1,94 @@ +import type { Node, PropertyAssignment } from 'typescript'; +import { Tree, joinPathFragments } from '@nx/devkit'; +import { tsquery } from '@phenomnomnominal/tsquery'; +import { NormalizedSchema } from '../schema'; + +export function updateJestBabelSetup(tree: Tree, options: NormalizedSchema) { + if (options.unitTestRunner !== 'jest' || options.bundler === 'vite') { + return; + } + + const jestConfigPath = joinPathFragments( + options.appProjectRoot, + 'jest.config.ts' + ); + const jestFileContents = tree.read(jestConfigPath, 'utf-8'); + const changedFileContents = + replaceTransformAndAddIgnorePattern(jestFileContents); + tree.write(jestConfigPath, changedFileContents); + tree.delete(joinPathFragments(options.appProjectRoot, 'src/App.spec.tsx')); +} + +export function replaceTransformAndAddIgnorePattern(fileContents: string) { + let updatedFileContents = updateTransformProperty(fileContents); + updatedFileContents = updateTransformIgnorePattern(updatedFileContents); + + if (fileContents === updatedFileContents) { + return updatedFileContents; + } + + return updatedFileContents; +} + +function updateTransformProperty(fileContents: string) { + const JEST_PRESET_AST_QUERY = + 'Identifier[name=transform] ~ ObjectLiteralExpression > PropertyAssignment:has(StringLiteral[value=babel-jest])'; + + const TRANSFORMER_STRING = + "'^.+\\\\.[tj]sx?$': ['babel-jest', {configFile: path.resolve(__dirname, '.babelrc')}]"; + + const ast = tsquery.ast(fileContents); + const transformerExpressionNode = tsquery(ast, JEST_PRESET_AST_QUERY, { + visitAllChildren: true, + })[0] as Node; + + if (!transformerExpressionNode) { + return fileContents; + } + + const transformerIndex = transformerExpressionNode.pos; + const transformerEndIndex = transformerExpressionNode.end; + + return `${fileContents.slice( + 0, + transformerIndex + )}\n${TRANSFORMER_STRING}${fileContents.slice(transformerEndIndex)}`; +} + +function updateTransformIgnorePattern(fileContents: string) { + const TRANSFORM_OBJECT_AST_QUERY = + 'PropertyAssignment:has(Identifier[name=transform])'; + let TRANSFORM_IGNORE_PATTERN_STRING = + "transformIgnorePatterns: ['node_modules/(?!(@ionic/react|@ionic/react-router|@ionic/core|@stencil/core|ionicons)/)'],"; + + if ( + fileContents.includes( + "transformIgnorePatterns: ['node_modules/(?!(@ionic/react|@ionic/react-router|@ionic/core|@stencil/core|ionicons)/)']" + ) + ) { + return fileContents; + } + + const ast = tsquery.ast(fileContents); + + const transformObjectNode = tsquery(ast, TRANSFORM_OBJECT_AST_QUERY, { + visitAllChildren: true, + })[0] as PropertyAssignment; + + if (!transformObjectNode) { + return fileContents; + } + + let transformEndIndex = transformObjectNode.getEnd(); + if (fileContents.charAt(transformEndIndex) == ',') { + transformEndIndex = transformObjectNode.getEnd() + 1; + TRANSFORM_IGNORE_PATTERN_STRING = `\n${TRANSFORM_IGNORE_PATTERN_STRING}`; + } else { + TRANSFORM_IGNORE_PATTERN_STRING = `,\n${TRANSFORM_IGNORE_PATTERN_STRING}`; + } + + return `import * as path from 'path';\n\n${fileContents.slice( + 0, + transformEndIndex + )}${TRANSFORM_IGNORE_PATTERN_STRING}${fileContents.slice(transformEndIndex)}`; +} diff --git a/packages/ionic-react/src/generators/application/lib/update-workspace.ts b/packages/ionic-react/src/generators/application/lib/update-workspace.ts new file mode 100644 index 000000000..ae05758a8 --- /dev/null +++ b/packages/ionic-react/src/generators/application/lib/update-workspace.ts @@ -0,0 +1,31 @@ +import { + normalizePath, + readProjectConfiguration, + Tree, + updateProjectConfiguration, +} from '@nx/devkit'; +import { NormalizedSchema } from '../schema'; +export function updateWorkspace(host: Tree, options: NormalizedSchema) { + const project = readProjectConfiguration(host, options.appProjectName); + project.targets.build.options.assets = [ + ...project.targets.build.options.assets.filter( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (asset: any) => !asset.toString().includes('src/favicon.ico') + ), + options.appProjectRoot + '/src/manifest.json', + { + glob: '**/*.svg', + input: 'node_modules/ionicons/dist/ionicons/svg', + output: './svg', + }, + ]; + + project.targets.build.options.styles = [ + ...project.targets.build.options.styles, + { + input: normalizePath(`${options.appProjectRoot}/src/theme/variables.css`), + }, + ]; + + updateProjectConfiguration(host, options.appProjectName, project); +} diff --git a/packages/ionic-react/src/generators/application/schema.d.ts b/packages/ionic-react/src/generators/application/schema.d.ts new file mode 100644 index 000000000..622be9d5e --- /dev/null +++ b/packages/ionic-react/src/generators/application/schema.d.ts @@ -0,0 +1,18 @@ +export interface ApplicationGeneratorSchema { + name: string; + directory?: string; + unitTestRunner: 'jest' | 'none'; + e2eTestRunner: 'cypress' | 'none'; + tags?: string; + template: 'blank' | 'list' | 'sidemenu' | 'tabs'; + capacitor: boolean; + skipFormat: boolean; + standaloneConfig?: boolean; + bundler?: 'webpack' | 'vite'; +} + +export interface NormalizedSchema extends ApplicationGeneratorSchema { + appName: string; + appProjectName: string; + appProjectRoot: string; +} diff --git a/packages/ionic-react/src/generators/application/schema.json b/packages/ionic-react/src/generators/application/schema.json new file mode 100644 index 000000000..fd1a9360a --- /dev/null +++ b/packages/ionic-react/src/generators/application/schema.json @@ -0,0 +1,87 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "Application", + "title": "Create an Ionic React Application for Nx", + "examples": [ + { + "command": "g app myapp --directory=myorg", + "description": "Generate apps/myorg/myapp and apps/myorg/myapp-e2e" + } + ], + "type": "object", + "properties": { + "name": { + "description": "The name of the application.", + "type": "string", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "What name would you like to use for the application?" + }, + "directory": { + "description": "The directory of the new application.", + "type": "string", + "alias": "d" + }, + "unitTestRunner": { + "type": "string", + "enum": ["jest", "none"], + "description": "Test runner to use for unit tests.", + "default": "jest" + }, + "e2eTestRunner": { + "type": "string", + "enum": ["cypress", "none"], + "description": "Test runner to use for end to end (e2e) tests.", + "default": "cypress" + }, + "tags": { + "type": "string", + "description": "Add tags to the application (used for linting).", + "alias": "t" + }, + "template": { + "description": "The starter template to use.", + "type": "string", + "default": "blank", + "x-prompt": { + "message": "Which starter template would you like to use?", + "type": "list", + "items": [ + { + "value": "blank", + "label": "blank | A blank starter project" + }, + { + "value": "list", + "label": "list | A starting project with a list" + }, + { + "value": "sidemenu", + "label": "sidemenu | A starting project with a list" + }, + { + "value": "tabs", + "label": "tabs | A starting project with a simple tabbed interface" + } + ] + } + }, + "capacitor": { + "type": "boolean", + "description": "Generate a Capacitor project.", + "default": true + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false + }, + "standaloneConfig": { + "description": "Split the project configuration into `/project.json` rather than including it inside `workspace.json`.", + "type": "boolean" + } + }, + "required": ["name"] +} diff --git a/packages/ionic-react/src/index.ts b/packages/ionic-react/src/index.ts new file mode 100644 index 000000000..1697adbed --- /dev/null +++ b/packages/ionic-react/src/index.ts @@ -0,0 +1,2 @@ +export { applicationGenerator } from './generators/application/generator'; +export { ApplicationGeneratorSchema } from './generators/application/schema'; diff --git a/packages/ionic-react/src/utils/versions.ts b/packages/ionic-react/src/utils/versions.ts new file mode 100644 index 000000000..e71544f71 --- /dev/null +++ b/packages/ionic-react/src/utils/versions.ts @@ -0,0 +1,7 @@ +export const ionicReactVersion = '^7.0.0'; +export const ionicReactRouterVersion = '^7.0.0'; +export const webVitalsVersion = '^0.2.4'; +export const workboxVersion = '^5.1.4'; +export const reactRouterDomVersion = '5.3.3'; +export const typesReactRouterDomVersion = '5.3.3'; +export const capacitorPluginVersion = '5.0.2'; diff --git a/packages/ionic-react/tsconfig.json b/packages/ionic-react/tsconfig.json new file mode 100644 index 000000000..19b9eece4 --- /dev/null +++ b/packages/ionic-react/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/packages/ionic-react/tsconfig.lib.json b/packages/ionic-react/tsconfig.lib.json new file mode 100644 index 000000000..7bfc80f73 --- /dev/null +++ b/packages/ionic-react/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/packages/ionic-react/tsconfig.spec.json b/packages/ionic-react/tsconfig.spec.json new file mode 100644 index 000000000..546f12877 --- /dev/null +++ b/packages/ionic-react/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index befa41f6a..373033933 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,7 @@ settings: excludeLinksFromLockfile: false importers: + .: dependencies: rxjs: @@ -31,7 +32,7 @@ importers: version: 8.49.0 '@nx/angular': specifier: 19.3.0 - version: 19.3.0(@angular-devkit/build-angular@16.2.0(@angular/compiler-cli@16.2.2(@angular/compiler@16.2.2)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(jest-environment-jsdom@29.5.0)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(stylus@0.59.0)(typescript@5.4.5))(@angular-devkit/core@16.0.0(chokidar@3.5.3))(@angular-devkit/schematics@16.0.0(chokidar@3.5.3))(@babel/traverse@7.24.0)(@schematics/angular@16.0.0(chokidar@3.5.3))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(esbuild@0.20.2)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) + version: 19.3.0(@angular-devkit/build-angular@16.2.0(@angular/compiler-cli@16.2.2(@angular/compiler@16.2.2)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(jest-environment-jsdom@29.5.0)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(stylus@0.59.0)(typescript@5.4.5))(@angular-devkit/core@16.0.0(chokidar@3.5.3))(@angular-devkit/schematics@16.0.0(chokidar@3.5.3))(@babel/traverse@7.24.0)(@schematics/angular@16.0.0(chokidar@3.5.3))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) '@nx/cypress': specifier: 19.3.0 version: 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) @@ -61,7 +62,7 @@ importers: version: 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) '@nx/react': specifier: 19.3.0 - version: 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + version: 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) '@nx/storybook': specifier: 19.3.0 version: 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) @@ -171,8 +172,8 @@ importers: specifier: ^8.0.0 version: 8.0.3 ignore: - specifier: ^5.2.4 - version: 5.2.4 + specifier: ^5.3.1 + version: 5.3.1 is-ci: specifier: ^3.0.1 version: 3.0.1 @@ -217,7 +218,7 @@ importers: version: 1.0.2 ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.0)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.24.0))(esbuild@0.20.2)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.0)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.24.0))(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5) @@ -250,165 +251,87 @@ importers: version: 21.1.1 packages: + '@aashutoshrathi/word-wrap@1.2.6': - resolution: - { - integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} '@adobe/css-tools@4.3.2': - resolution: - { - integrity: sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==, - } + resolution: {integrity: sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==} '@algolia/autocomplete-core@1.9.3': - resolution: - { - integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==, - } + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} '@algolia/autocomplete-plugin-algolia-insights@1.9.3': - resolution: - { - integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==, - } + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} peerDependencies: search-insights: '>= 1 < 3' '@algolia/autocomplete-preset-algolia@1.9.3': - resolution: - { - integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==, - } + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' '@algolia/autocomplete-shared@1.9.3': - resolution: - { - integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==, - } + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' '@algolia/cache-browser-local-storage@4.19.1': - resolution: - { - integrity: sha512-FYAZWcGsFTTaSAwj9Std8UML3Bu8dyWDncM7Ls8g+58UOe4XYdlgzXWbrIgjaguP63pCCbMoExKr61B+ztK3tw==, - } + resolution: {integrity: sha512-FYAZWcGsFTTaSAwj9Std8UML3Bu8dyWDncM7Ls8g+58UOe4XYdlgzXWbrIgjaguP63pCCbMoExKr61B+ztK3tw==} '@algolia/cache-common@4.19.1': - resolution: - { - integrity: sha512-XGghi3l0qA38HiqdoUY+wvGyBsGvKZ6U3vTiMBT4hArhP3fOGLXpIINgMiiGjTe4FVlTa5a/7Zf2bwlIHfRqqg==, - } + resolution: {integrity: sha512-XGghi3l0qA38HiqdoUY+wvGyBsGvKZ6U3vTiMBT4hArhP3fOGLXpIINgMiiGjTe4FVlTa5a/7Zf2bwlIHfRqqg==} '@algolia/cache-in-memory@4.19.1': - resolution: - { - integrity: sha512-+PDWL+XALGvIginigzu8oU6eWw+o76Z8zHbBovWYcrtWOEtinbl7a7UTt3x3lthv+wNuFr/YD1Gf+B+A9V8n5w==, - } + resolution: {integrity: sha512-+PDWL+XALGvIginigzu8oU6eWw+o76Z8zHbBovWYcrtWOEtinbl7a7UTt3x3lthv+wNuFr/YD1Gf+B+A9V8n5w==} '@algolia/client-account@4.19.1': - resolution: - { - integrity: sha512-Oy0ritA2k7AMxQ2JwNpfaEcgXEDgeyKu0V7E7xt/ZJRdXfEpZcwp9TOg4TJHC7Ia62gIeT2Y/ynzsxccPw92GA==, - } + resolution: {integrity: sha512-Oy0ritA2k7AMxQ2JwNpfaEcgXEDgeyKu0V7E7xt/ZJRdXfEpZcwp9TOg4TJHC7Ia62gIeT2Y/ynzsxccPw92GA==} '@algolia/client-analytics@4.19.1': - resolution: - { - integrity: sha512-5QCq2zmgdZLIQhHqwl55ZvKVpLM3DNWjFI4T+bHr3rGu23ew2bLO4YtyxaZeChmDb85jUdPDouDlCumGfk6wOg==, - } + resolution: {integrity: sha512-5QCq2zmgdZLIQhHqwl55ZvKVpLM3DNWjFI4T+bHr3rGu23ew2bLO4YtyxaZeChmDb85jUdPDouDlCumGfk6wOg==} '@algolia/client-common@4.19.1': - resolution: - { - integrity: sha512-3kAIVqTcPrjfS389KQvKzliC559x+BDRxtWamVJt8IVp7LGnjq+aVAXg4Xogkur1MUrScTZ59/AaUd5EdpyXgA==, - } + resolution: {integrity: sha512-3kAIVqTcPrjfS389KQvKzliC559x+BDRxtWamVJt8IVp7LGnjq+aVAXg4Xogkur1MUrScTZ59/AaUd5EdpyXgA==} '@algolia/client-personalization@4.19.1': - resolution: - { - integrity: sha512-8CWz4/H5FA+krm9HMw2HUQenizC/DxUtsI5oYC0Jxxyce1vsr8cb1aEiSJArQT6IzMynrERif1RVWLac1m36xw==, - } + resolution: {integrity: sha512-8CWz4/H5FA+krm9HMw2HUQenizC/DxUtsI5oYC0Jxxyce1vsr8cb1aEiSJArQT6IzMynrERif1RVWLac1m36xw==} '@algolia/client-search@4.19.1': - resolution: - { - integrity: sha512-mBecfMFS4N+yK/p0ZbK53vrZbL6OtWMk8YmnOv1i0LXx4pelY8TFhqKoTit3NPVPwoSNN0vdSN9dTu1xr1XOVw==, - } + resolution: {integrity: sha512-mBecfMFS4N+yK/p0ZbK53vrZbL6OtWMk8YmnOv1i0LXx4pelY8TFhqKoTit3NPVPwoSNN0vdSN9dTu1xr1XOVw==} '@algolia/logger-common@4.19.1': - resolution: - { - integrity: sha512-i6pLPZW/+/YXKis8gpmSiNk1lOmYCmRI6+x6d2Qk1OdfvX051nRVdalRbEcVTpSQX6FQAoyeaui0cUfLYW5Elw==, - } + resolution: {integrity: sha512-i6pLPZW/+/YXKis8gpmSiNk1lOmYCmRI6+x6d2Qk1OdfvX051nRVdalRbEcVTpSQX6FQAoyeaui0cUfLYW5Elw==} '@algolia/logger-console@4.19.1': - resolution: - { - integrity: sha512-jj72k9GKb9W0c7TyC3cuZtTr0CngLBLmc8trzZlXdfvQiigpUdvTi1KoWIb2ZMcRBG7Tl8hSb81zEY3zI2RlXg==, - } + resolution: {integrity: sha512-jj72k9GKb9W0c7TyC3cuZtTr0CngLBLmc8trzZlXdfvQiigpUdvTi1KoWIb2ZMcRBG7Tl8hSb81zEY3zI2RlXg==} '@algolia/requester-browser-xhr@4.19.1': - resolution: - { - integrity: sha512-09K/+t7lptsweRTueHnSnmPqIxbHMowejAkn9XIcJMLdseS3zl8ObnS5GWea86mu3vy4+8H+ZBKkUN82Zsq/zg==, - } + resolution: {integrity: sha512-09K/+t7lptsweRTueHnSnmPqIxbHMowejAkn9XIcJMLdseS3zl8ObnS5GWea86mu3vy4+8H+ZBKkUN82Zsq/zg==} '@algolia/requester-common@4.19.1': - resolution: - { - integrity: sha512-BisRkcWVxrDzF1YPhAckmi2CFYK+jdMT60q10d7z3PX+w6fPPukxHRnZwooiTUrzFe50UBmLItGizWHP5bDzVQ==, - } + resolution: {integrity: sha512-BisRkcWVxrDzF1YPhAckmi2CFYK+jdMT60q10d7z3PX+w6fPPukxHRnZwooiTUrzFe50UBmLItGizWHP5bDzVQ==} '@algolia/requester-node-http@4.19.1': - resolution: - { - integrity: sha512-6DK52DHviBHTG2BK/Vv2GIlEw7i+vxm7ypZW0Z7vybGCNDeWzADx+/TmxjkES2h15+FZOqVf/Ja677gePsVItA==, - } + resolution: {integrity: sha512-6DK52DHviBHTG2BK/Vv2GIlEw7i+vxm7ypZW0Z7vybGCNDeWzADx+/TmxjkES2h15+FZOqVf/Ja677gePsVItA==} '@algolia/transporter@4.19.1': - resolution: - { - integrity: sha512-nkpvPWbpuzxo1flEYqNIbGz7xhfhGOKGAZS7tzC+TELgEmi7z99qRyTfNSUlW7LZmB3ACdnqAo+9A9KFBENviQ==, - } + resolution: {integrity: sha512-nkpvPWbpuzxo1flEYqNIbGz7xhfhGOKGAZS7tzC+TELgEmi7z99qRyTfNSUlW7LZmB3ACdnqAo+9A9KFBENviQ==} '@ampproject/remapping@2.2.1': - resolution: - { - integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} '@angular-devkit/architect@0.1602.0': - resolution: - { - integrity: sha512-ZRmUTBeD+uGr605eOHnsovEn6f1mOBI+kxP64DRvagNweX5TN04s3iyQ8jmLSAHQD9ush31LFxv3dVNxv3ceXQ==, - } - engines: - { - node: ^16.14.0 || >=18.10.0, - npm: ^6.11.0 || ^7.5.6 || >=8.0.0, - yarn: '>= 1.13.0', - } + resolution: {integrity: sha512-ZRmUTBeD+uGr605eOHnsovEn6f1mOBI+kxP64DRvagNweX5TN04s3iyQ8jmLSAHQD9ush31LFxv3dVNxv3ceXQ==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@angular-devkit/build-angular@16.2.0': - resolution: - { - integrity: sha512-miylwjOqvlKmYrzS84bjRaJrecZxOXH9xsPVvQE8VBe8UKePJjRAL6yyOqXUOGtzlch2YmT98RAnuni7y0FEAw==, - } - engines: - { - node: ^16.14.0 || >=18.10.0, - npm: ^6.11.0 || ^7.5.6 || >=8.0.0, - yarn: '>= 1.13.0', - } + resolution: {integrity: sha512-miylwjOqvlKmYrzS84bjRaJrecZxOXH9xsPVvQE8VBe8UKePJjRAL6yyOqXUOGtzlch2YmT98RAnuni7y0FEAw==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: '@angular/compiler-cli': ^16.0.0 '@angular/localize': ^16.0.0 @@ -442,31 +365,15 @@ packages: optional: true '@angular-devkit/build-webpack@0.1602.0': - resolution: - { - integrity: sha512-KdSr6iAcO30i/LIGL8mYi+d1buVXuDCp2dptzEJ4vxReOMFJca90KLwb+tVHEqqnDb0WkNfWm8Ii2QYh2FrNyA==, - } - engines: - { - node: ^16.14.0 || >=18.10.0, - npm: ^6.11.0 || ^7.5.6 || >=8.0.0, - yarn: '>= 1.13.0', - } + resolution: {integrity: sha512-KdSr6iAcO30i/LIGL8mYi+d1buVXuDCp2dptzEJ4vxReOMFJca90KLwb+tVHEqqnDb0WkNfWm8Ii2QYh2FrNyA==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: webpack: ^5.30.0 webpack-dev-server: ^4.0.0 '@angular-devkit/core@16.0.0': - resolution: - { - integrity: sha512-YJKvAJlg4/lfP93pQNawlOTQalynWGpoatZU+1aXBgRh5YCTKu2S/A3gtQ71DBuhac76gJe1RpxDoq41kB2KlQ==, - } - engines: - { - node: ^16.14.0 || >=18.10.0, - npm: ^6.11.0 || ^7.5.6 || >=8.0.0, - yarn: '>= 1.13.0', - } + resolution: {integrity: sha512-YJKvAJlg4/lfP93pQNawlOTQalynWGpoatZU+1aXBgRh5YCTKu2S/A3gtQ71DBuhac76gJe1RpxDoq41kB2KlQ==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: chokidar: ^3.5.2 peerDependenciesMeta: @@ -474,16 +381,8 @@ packages: optional: true '@angular-devkit/core@16.2.0': - resolution: - { - integrity: sha512-l1k6Rqm3YM16BEn3CWyQKrk9xfu+2ux7Bw3oS+h1TO4/RoxO2PgHj8LLRh/WNrYVarhaqO7QZ5ePBkXNMkzJ1g==, - } - engines: - { - node: ^16.14.0 || >=18.10.0, - npm: ^6.11.0 || ^7.5.6 || >=8.0.0, - yarn: '>= 1.13.0', - } + resolution: {integrity: sha512-l1k6Rqm3YM16BEn3CWyQKrk9xfu+2ux7Bw3oS+h1TO4/RoxO2PgHj8LLRh/WNrYVarhaqO7QZ5ePBkXNMkzJ1g==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: chokidar: ^3.5.2 peerDependenciesMeta: @@ -491,34 +390,20 @@ packages: optional: true '@angular-devkit/schematics@16.0.0': - resolution: - { - integrity: sha512-9uFOqjOQdhnpxU5mku2LvBkV5Ave2ihHBFaQCH7vQ7DD+p4NpLHu93bMSh+f7k9W7F0lY18g9qrihRgK/7wfuA==, - } - engines: - { - node: ^16.14.0 || >=18.10.0, - npm: ^6.11.0 || ^7.5.6 || >=8.0.0, - yarn: '>= 1.13.0', - } + resolution: {integrity: sha512-9uFOqjOQdhnpxU5mku2LvBkV5Ave2ihHBFaQCH7vQ7DD+p4NpLHu93bMSh+f7k9W7F0lY18g9qrihRgK/7wfuA==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@angular/compiler-cli@16.2.2': - resolution: - { - integrity: sha512-+4i7o0yBc6xSljO8rdYL1G9AiZr2OW5dJAHfPuO21yNhp9BjIJ/TW+Sw1+o/WH4Gnim9adtnonL18UM+vuYeXg==, - } - engines: { node: ^16.14.0 || >=18.10.0 } + resolution: {integrity: sha512-+4i7o0yBc6xSljO8rdYL1G9AiZr2OW5dJAHfPuO21yNhp9BjIJ/TW+Sw1+o/WH4Gnim9adtnonL18UM+vuYeXg==} + engines: {node: ^16.14.0 || >=18.10.0} hasBin: true peerDependencies: '@angular/compiler': 16.2.2 typescript: '>=4.9.3 <5.2' '@angular/compiler@16.2.2': - resolution: - { - integrity: sha512-0X9i5NsqjX++0gmFy0fy2Uc5dHJMxDq6Yu/j1L3RdbvycL1GW+P8GgPfIvD/+v/YiDqpOHQswQXLbkcHw1+svA==, - } - engines: { node: ^16.14.0 || >=18.10.0 } + resolution: {integrity: sha512-0X9i5NsqjX++0gmFy0fy2Uc5dHJMxDq6Yu/j1L3RdbvycL1GW+P8GgPfIvD/+v/YiDqpOHQswQXLbkcHw1+svA==} + engines: {node: ^16.14.0 || >=18.10.0} peerDependencies: '@angular/core': 16.2.2 peerDependenciesMeta: @@ -526,1296 +411,819 @@ packages: optional: true '@assemblyscript/loader@0.10.1': - resolution: - { - integrity: sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==, - } + resolution: {integrity: sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==} '@babel/code-frame@7.22.10': - resolution: - { - integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==} + engines: {node: '>=6.9.0'} '@babel/code-frame@7.23.5': - resolution: - { - integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} '@babel/compat-data@7.23.5': - resolution: - { - integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} '@babel/core@7.22.5': - resolution: - { - integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} + engines: {node: '>=6.9.0'} '@babel/core@7.22.9': - resolution: - { - integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==} + engines: {node: '>=6.9.0'} '@babel/core@7.24.0': - resolution: - { - integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} + engines: {node: '>=6.9.0'} '@babel/generator@7.22.9': - resolution: - { - integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} + engines: {node: '>=6.9.0'} '@babel/generator@7.23.6': - resolution: - { - integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.22.5': - resolution: - { - integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': - resolution: - { - integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.23.6': - resolution: - { - integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} '@babel/helper-create-class-features-plugin@7.24.0': - resolution: - { - integrity: sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-create-regexp-features-plugin@7.22.15': - resolution: - { - integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-define-polyfill-provider@0.4.2': - resolution: - { - integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==, - } + resolution: {integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 '@babel/helper-define-polyfill-provider@0.5.0': - resolution: - { - integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==, - } + resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 '@babel/helper-define-polyfill-provider@0.6.0': - resolution: - { - integrity: sha512-efwOM90nCG6YeT8o3PCyBVSxRfmILxCNL+TNI8CGQl7a62M0Wd9VkV+XHwIlkOz1r4b+lxu6gBjdWiOMdUCrCQ==, - } + resolution: {integrity: sha512-efwOM90nCG6YeT8o3PCyBVSxRfmILxCNL+TNI8CGQl7a62M0Wd9VkV+XHwIlkOz1r4b+lxu6gBjdWiOMdUCrCQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 '@babel/helper-environment-visitor@7.22.20': - resolution: - { - integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} '@babel/helper-function-name@7.23.0': - resolution: - { - integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} '@babel/helper-hoist-variables@7.22.5': - resolution: - { - integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} '@babel/helper-member-expression-to-functions@7.23.0': - resolution: - { - integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.18.6': - resolution: - { - integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.22.15': - resolution: - { - integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} '@babel/helper-module-transforms@7.23.3': - resolution: - { - integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-optimise-call-expression@7.22.5': - resolution: - { - integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} '@babel/helper-plugin-utils@7.24.0': - resolution: - { - integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} + engines: {node: '>=6.9.0'} '@babel/helper-remap-async-to-generator@7.22.20': - resolution: - { - integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-replace-supers@7.22.20': - resolution: - { - integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/helper-simple-access@7.22.5': - resolution: - { - integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - resolution: - { - integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} '@babel/helper-split-export-declaration@7.22.6': - resolution: - { - integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.23.4': - resolution: - { - integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.22.20': - resolution: - { - integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} '@babel/helper-validator-option@7.23.5': - resolution: - { - integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} '@babel/helper-wrap-function@7.22.20': - resolution: - { - integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} '@babel/helpers@7.24.0': - resolution: - { - integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} + engines: {node: '>=6.9.0'} '@babel/highlight@7.23.4': - resolution: - { - integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} '@babel/parser@7.24.0': - resolution: - { - integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} + engines: {node: '>=6.0.0'} hasBin: true '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3': - resolution: - { - integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3': - resolution: - { - integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7': - resolution: - { - integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-proposal-async-generator-functions@7.20.7': - resolution: - { - integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-decorators@7.22.7': - resolution: - { - integrity: sha512-omXqPF7Onq4Bb7wHxXjM3jSMSJvUUbvDvmmds7KI5n9Cq6Ln5I05I1W2nRlRof1rGdiUxJrxwe285WF96XlBXQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-omXqPF7Onq4Bb7wHxXjM3jSMSJvUUbvDvmmds7KI5n9Cq6Ln5I05I1W2nRlRof1rGdiUxJrxwe285WF96XlBXQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': - resolution: - { - integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-unicode-property-regex@7.16.7': - resolution: - { - integrity: sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==} + engines: {node: '>=4'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-async-generators@7.8.4': - resolution: - { - integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, - } + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-bigint@7.8.3': - resolution: - { - integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==, - } + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-properties@7.12.13': - resolution: - { - integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, - } + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: - { - integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-decorators@7.22.5': - resolution: - { - integrity: sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-dynamic-import@7.8.3': - resolution: - { - integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==, - } + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-export-namespace-from@7.8.3': - resolution: - { - integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==, - } + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-assertions@7.23.3': - resolution: - { - integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-attributes@7.23.3': - resolution: - { - integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-import-meta@7.10.4': - resolution: - { - integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, - } + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-json-strings@7.8.3': - resolution: - { - integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, - } + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-jsx@7.23.3': - resolution: - { - integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: - { - integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, - } + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: - { - integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, - } + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: - { - integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, - } + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: - { - integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, - } + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: - { - integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, - } + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: - { - integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, - } + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: - { - integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: - { - integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-typescript@7.22.5': - resolution: - { - integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-syntax-unicode-sets-regex@7.18.6': - resolution: - { - integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-transform-arrow-functions@7.23.3': - resolution: - { - integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-async-generator-functions@7.23.9': - resolution: - { - integrity: sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-async-to-generator@7.22.5': - resolution: - { - integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-async-to-generator@7.23.3': - resolution: - { - integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-block-scoped-functions@7.23.3': - resolution: - { - integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-block-scoping@7.23.4': - resolution: - { - integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-class-properties@7.23.3': - resolution: - { - integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-class-static-block@7.23.4': - resolution: - { - integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 '@babel/plugin-transform-classes@7.23.8': - resolution: - { - integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-computed-properties@7.23.3': - resolution: - { - integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-destructuring@7.23.3': - resolution: - { - integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-dotall-regex@7.23.3': - resolution: - { - integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-duplicate-keys@7.23.3': - resolution: - { - integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-dynamic-import@7.23.4': - resolution: - { - integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-exponentiation-operator@7.23.3': - resolution: - { - integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-export-namespace-from@7.23.4': - resolution: - { - integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-for-of@7.23.6': - resolution: - { - integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-function-name@7.23.3': - resolution: - { - integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-json-strings@7.23.4': - resolution: - { - integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-literals@7.23.3': - resolution: - { - integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-logical-assignment-operators@7.23.4': - resolution: - { - integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-member-expression-literals@7.23.3': - resolution: - { - integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-modules-amd@7.23.3': - resolution: - { - integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-modules-commonjs@7.23.3': - resolution: - { - integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-modules-systemjs@7.23.9': - resolution: - { - integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-modules-umd@7.23.3': - resolution: - { - integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-named-capturing-groups-regex@7.22.5': - resolution: - { - integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/plugin-transform-new-target@7.23.3': - resolution: - { - integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-nullish-coalescing-operator@7.23.4': - resolution: - { - integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-numeric-separator@7.23.4': - resolution: - { - integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-object-rest-spread@7.24.0': - resolution: - { - integrity: sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-object-super@7.23.3': - resolution: - { - integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-optional-catch-binding@7.23.4': - resolution: - { - integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-optional-chaining@7.23.4': - resolution: - { - integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-parameters@7.23.3': - resolution: - { - integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-private-methods@7.23.3': - resolution: - { - integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-private-property-in-object@7.23.4': - resolution: - { - integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-property-literals@7.23.3': - resolution: - { - integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-react-constant-elements@7.22.3': - resolution: - { - integrity: sha512-b5J6muxQYp4H7loAQv/c7GO5cPuRA6H5hx4gO+/Hn+Cu9MRQU0PNiUoWq1L//8sq6kFSNxGXFb2XTaUfa9y+Pg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-b5J6muxQYp4H7loAQv/c7GO5cPuRA6H5hx4gO+/Hn+Cu9MRQU0PNiUoWq1L//8sq6kFSNxGXFb2XTaUfa9y+Pg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-react-display-name@7.18.6': - resolution: - { - integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-react-jsx-development@7.22.5': - resolution: - { - integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-react-jsx@7.23.4': - resolution: - { - integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-react-pure-annotations@7.18.6': - resolution: - { - integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-regenerator@7.23.3': - resolution: - { - integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-reserved-words@7.23.3': - resolution: - { - integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-runtime@7.22.9': - resolution: - { - integrity: sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-runtime@7.24.0': - resolution: - { - integrity: sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-shorthand-properties@7.23.3': - resolution: - { - integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-spread@7.23.3': - resolution: - { - integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-sticky-regex@7.23.3': - resolution: - { - integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-template-literals@7.23.3': - resolution: - { - integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-typeof-symbol@7.23.3': - resolution: - { - integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-typescript@7.22.10': - resolution: - { - integrity: sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-unicode-escapes@7.23.3': - resolution: - { - integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-unicode-property-regex@7.23.3': - resolution: - { - integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-unicode-regex@7.23.3': - resolution: - { - integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-unicode-sets-regex@7.23.3': - resolution: - { - integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 '@babel/preset-env@7.22.9': - resolution: - { - integrity: sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/preset-env@7.24.0': - resolution: - { - integrity: sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/preset-modules@0.1.5': - resolution: - { - integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==, - } + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/preset-modules@0.1.6-no-external-plugins': - resolution: - { - integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, - } + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 '@babel/preset-react@7.18.6': - resolution: - { - integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/preset-typescript@7.22.5': - resolution: - { - integrity: sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 '@babel/regjsgen@0.8.0': - resolution: - { - integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==, - } + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} '@babel/runtime@7.22.6': - resolution: - { - integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==} + engines: {node: '>=6.9.0'} '@babel/template@7.22.5': - resolution: - { - integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} '@babel/template@7.24.0': - resolution: - { - integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + engines: {node: '>=6.9.0'} '@babel/traverse@7.24.0': - resolution: - { - integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} + engines: {node: '>=6.9.0'} '@babel/types@7.24.0': - resolution: - { - integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': - resolution: - { - integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, - } + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} '@commitlint/cli@17.8.1': - resolution: - { - integrity: sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==} + engines: {node: '>=v14'} hasBin: true '@commitlint/config-conventional@17.8.1': - resolution: - { - integrity: sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==} + engines: {node: '>=v14'} '@commitlint/config-validator@17.8.1': - resolution: - { - integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==} + engines: {node: '>=v14'} '@commitlint/ensure@17.8.1': - resolution: - { - integrity: sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==} + engines: {node: '>=v14'} '@commitlint/execute-rule@17.8.1': - resolution: - { - integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==} + engines: {node: '>=v14'} '@commitlint/format@17.8.1': - resolution: - { - integrity: sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==} + engines: {node: '>=v14'} '@commitlint/is-ignored@17.8.1': - resolution: - { - integrity: sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==} + engines: {node: '>=v14'} '@commitlint/lint@17.8.1': - resolution: - { - integrity: sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==} + engines: {node: '>=v14'} '@commitlint/load@17.8.1': - resolution: - { - integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==} + engines: {node: '>=v14'} '@commitlint/message@17.8.1': - resolution: - { - integrity: sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==} + engines: {node: '>=v14'} '@commitlint/parse@17.8.1': - resolution: - { - integrity: sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==} + engines: {node: '>=v14'} '@commitlint/read@17.8.1': - resolution: - { - integrity: sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==} + engines: {node: '>=v14'} '@commitlint/resolve-extends@17.8.1': - resolution: - { - integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==} + engines: {node: '>=v14'} '@commitlint/rules@17.8.1': - resolution: - { - integrity: sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==} + engines: {node: '>=v14'} '@commitlint/to-lines@17.8.1': - resolution: - { - integrity: sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==} + engines: {node: '>=v14'} '@commitlint/top-level@17.8.1': - resolution: - { - integrity: sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==} + engines: {node: '>=v14'} '@commitlint/types@17.8.1': - resolution: - { - integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==, - } - engines: { node: '>=v14' } + resolution: {integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==} + engines: {node: '>=v14'} '@cspotcode/source-map-support@0.8.1': - resolution: - { - integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} '@discoveryjs/json-ext@0.5.7': - resolution: - { - integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==, - } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} '@docsearch/css@3.6.0': - resolution: - { - integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==, - } + resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} '@docsearch/js@3.6.0': - resolution: - { - integrity: sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==, - } + resolution: {integrity: sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==} '@docsearch/react@3.6.0': - resolution: - { - integrity: sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==, - } + resolution: {integrity: sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -1832,706 +1240,463 @@ packages: optional: true '@esbuild/aix-ppc64@0.20.2': - resolution: - { - integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} cpu: [ppc64] os: [aix] '@esbuild/android-arm64@0.18.17': - resolution: - { - integrity: sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==} + engines: {node: '>=12'} cpu: [arm64] os: [android] '@esbuild/android-arm64@0.18.20': - resolution: - { - integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} cpu: [arm64] os: [android] '@esbuild/android-arm64@0.20.2': - resolution: - { - integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} cpu: [arm64] os: [android] '@esbuild/android-arm@0.18.17': - resolution: - { - integrity: sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==} + engines: {node: '>=12'} cpu: [arm] os: [android] '@esbuild/android-arm@0.18.20': - resolution: - { - integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} cpu: [arm] os: [android] '@esbuild/android-arm@0.20.2': - resolution: - { - integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} cpu: [arm] os: [android] '@esbuild/android-x64@0.18.17': - resolution: - { - integrity: sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==} + engines: {node: '>=12'} cpu: [x64] os: [android] '@esbuild/android-x64@0.18.20': - resolution: - { - integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} cpu: [x64] os: [android] '@esbuild/android-x64@0.20.2': - resolution: - { - integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} cpu: [x64] os: [android] '@esbuild/darwin-arm64@0.18.17': - resolution: - { - integrity: sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] '@esbuild/darwin-arm64@0.18.20': - resolution: - { - integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] '@esbuild/darwin-arm64@0.20.2': - resolution: - { - integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.18.17': - resolution: - { - integrity: sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] '@esbuild/darwin-x64@0.18.20': - resolution: - { - integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] '@esbuild/darwin-x64@0.20.2': - resolution: - { - integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] '@esbuild/freebsd-arm64@0.18.17': - resolution: - { - integrity: sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] '@esbuild/freebsd-arm64@0.18.20': - resolution: - { - integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] '@esbuild/freebsd-arm64@0.20.2': - resolution: - { - integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.18.17': - resolution: - { - integrity: sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] '@esbuild/freebsd-x64@0.18.20': - resolution: - { - integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] '@esbuild/freebsd-x64@0.20.2': - resolution: - { - integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] '@esbuild/linux-arm64@0.18.17': - resolution: - { - integrity: sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] '@esbuild/linux-arm64@0.18.20': - resolution: - { - integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] '@esbuild/linux-arm64@0.20.2': - resolution: - { - integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.18.17': - resolution: - { - integrity: sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==} + engines: {node: '>=12'} cpu: [arm] os: [linux] '@esbuild/linux-arm@0.18.20': - resolution: - { - integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} cpu: [arm] os: [linux] '@esbuild/linux-arm@0.20.2': - resolution: - { - integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.18.17': - resolution: - { - integrity: sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] '@esbuild/linux-ia32@0.18.20': - resolution: - { - integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] '@esbuild/linux-ia32@0.20.2': - resolution: - { - integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.18.17': - resolution: - { - integrity: sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] '@esbuild/linux-loong64@0.18.20': - resolution: - { - integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] '@esbuild/linux-loong64@0.20.2': - resolution: - { - integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.18.17': - resolution: - { - integrity: sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] '@esbuild/linux-mips64el@0.18.20': - resolution: - { - integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] '@esbuild/linux-mips64el@0.20.2': - resolution: - { - integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.18.17': - resolution: - { - integrity: sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] '@esbuild/linux-ppc64@0.18.20': - resolution: - { - integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] '@esbuild/linux-ppc64@0.20.2': - resolution: - { - integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.18.17': - resolution: - { - integrity: sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] '@esbuild/linux-riscv64@0.18.20': - resolution: - { - integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] '@esbuild/linux-riscv64@0.20.2': - resolution: - { - integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.18.17': - resolution: - { - integrity: sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] '@esbuild/linux-s390x@0.18.20': - resolution: - { - integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] '@esbuild/linux-s390x@0.20.2': - resolution: - { - integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.18.17': - resolution: - { - integrity: sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==} + engines: {node: '>=12'} cpu: [x64] os: [linux] '@esbuild/linux-x64@0.18.20': - resolution: - { - integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} cpu: [x64] os: [linux] '@esbuild/linux-x64@0.20.2': - resolution: - { - integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} cpu: [x64] os: [linux] '@esbuild/netbsd-x64@0.18.17': - resolution: - { - integrity: sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] '@esbuild/netbsd-x64@0.18.20': - resolution: - { - integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] '@esbuild/netbsd-x64@0.20.2': - resolution: - { - integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] '@esbuild/openbsd-x64@0.18.17': - resolution: - { - integrity: sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] '@esbuild/openbsd-x64@0.18.20': - resolution: - { - integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] '@esbuild/openbsd-x64@0.20.2': - resolution: - { - integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] '@esbuild/sunos-x64@0.18.17': - resolution: - { - integrity: sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] '@esbuild/sunos-x64@0.18.20': - resolution: - { - integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] '@esbuild/sunos-x64@0.20.2': - resolution: - { - integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] '@esbuild/win32-arm64@0.18.17': - resolution: - { - integrity: sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] '@esbuild/win32-arm64@0.18.20': - resolution: - { - integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] '@esbuild/win32-arm64@0.20.2': - resolution: - { - integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.18.17': - resolution: - { - integrity: sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] '@esbuild/win32-ia32@0.18.20': - resolution: - { - integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] '@esbuild/win32-ia32@0.20.2': - resolution: - { - integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.18.17': - resolution: - { - integrity: sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==} + engines: {node: '>=12'} cpu: [x64] os: [win32] '@esbuild/win32-x64@0.18.20': - resolution: - { - integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} cpu: [x64] os: [win32] '@esbuild/win32-x64@0.20.2': - resolution: - { - integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} cpu: [x64] os: [win32] '@eslint-community/eslint-utils@4.4.0': - resolution: - { - integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 '@eslint-community/regexpp@4.10.0': - resolution: - { - integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==, - } - engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint-community/regexpp@4.6.2': - resolution: - { - integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==, - } - engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/eslintrc@2.1.2': - resolution: - { - integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@eslint/eslintrc@2.1.4': - resolution: - { - integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@eslint/js@8.49.0': - resolution: - { - integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@eslint/js@8.57.0': - resolution: - { - integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@humanwhocodes/config-array@0.11.14': - resolution: - { - integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==, - } - engines: { node: '>=10.10.0' } + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} '@humanwhocodes/module-importer@1.0.1': - resolution: - { - integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, - } - engines: { node: '>=12.22' } + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} '@humanwhocodes/object-schema@2.0.3': - resolution: - { - integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==, - } + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} '@istanbuljs/load-nyc-config@1.1.0': - resolution: - { - integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} '@istanbuljs/schema@0.1.3': - resolution: - { - integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} '@jest/console@29.5.0': - resolution: - { - integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/core@29.5.0': - resolution: - { - integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -2539,53 +1704,32 @@ packages: optional: true '@jest/create-cache-key-function@29.7.0': - resolution: - { - integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/environment@29.6.3': - resolution: - { - integrity: sha512-u/u3cCztYCfgBiGHsamqP5x+XvucftOGPbf5RJQxfpeC1y4AL8pCjKvPDA3oCmdhZYPgk5AE0VOD/flweR69WA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-u/u3cCztYCfgBiGHsamqP5x+XvucftOGPbf5RJQxfpeC1y4AL8pCjKvPDA3oCmdhZYPgk5AE0VOD/flweR69WA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/expect-utils@29.5.0': - resolution: - { - integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/expect@29.5.0': - resolution: - { - integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/fake-timers@29.6.3': - resolution: - { - integrity: sha512-pa1wmqvbj6eX0nMvOM2VDAWvJOI5A/Mk3l8O7n7EsAh71sMZblaKO9iT4GjIj0LwwK3CP/Jp1ypEV0x3m89RvA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-pa1wmqvbj6eX0nMvOM2VDAWvJOI5A/Mk3l8O7n7EsAh71sMZblaKO9iT4GjIj0LwwK3CP/Jp1ypEV0x3m89RvA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/globals@29.5.0': - resolution: - { - integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/reporters@29.5.0': - resolution: - { - integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -2593,244 +1737,131 @@ packages: optional: true '@jest/schemas@29.6.3': - resolution: - { - integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/source-map@29.4.3': - resolution: - { - integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/test-result@29.5.0': - resolution: - { - integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/test-sequencer@29.5.0': - resolution: - { - integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/transform@29.5.0': - resolution: - { - integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jest/types@29.6.3': - resolution: - { - integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} '@jridgewell/gen-mapping@0.3.2': - resolution: - { - integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + engines: {node: '>=6.0.0'} '@jridgewell/resolve-uri@3.1.0': - resolution: - { - integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} '@jridgewell/set-array@1.1.2': - resolution: - { - integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} '@jridgewell/source-map@0.3.5': - resolution: - { - integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==, - } + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} '@jridgewell/sourcemap-codec@1.4.14': - resolution: - { - integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==, - } + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} '@jridgewell/sourcemap-codec@1.4.15': - resolution: - { - integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, - } + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} '@jridgewell/trace-mapping@0.3.18': - resolution: - { - integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==, - } + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} '@jridgewell/trace-mapping@0.3.9': - resolution: - { - integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, - } + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} '@leichtgewicht/ip-codec@2.0.4': - resolution: - { - integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==, - } + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} '@mole-inc/bin-wrapper@8.0.1': - resolution: - { - integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} '@ngtools/webpack@16.2.0': - resolution: - { - integrity: sha512-c9jv4r7GnLTpnPOeF+a9yAm/3/2wwl9lMBU32i9hlY+q/Hqde4PiL95bUOLnRRL1I64DV7BFTlSZqSPgDpFXZQ==, - } - engines: - { - node: ^16.14.0 || >=18.10.0, - npm: ^6.11.0 || ^7.5.6 || >=8.0.0, - yarn: '>= 1.13.0', - } + resolution: {integrity: sha512-c9jv4r7GnLTpnPOeF+a9yAm/3/2wwl9lMBU32i9hlY+q/Hqde4PiL95bUOLnRRL1I64DV7BFTlSZqSPgDpFXZQ==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: '@angular/compiler-cli': ^16.0.0 typescript: '>=4.9.3 <5.2' webpack: ^5.54.0 '@nodelib/fs.scandir@2.1.5': - resolution: - { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} '@nodelib/fs.stat@2.0.5': - resolution: - { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} '@nodelib/fs.walk@1.2.8': - resolution: - { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} '@nrwl/angular@19.3.0': - resolution: - { - integrity: sha512-bZ6d+x4mvt5H5S/kVVQjJGv+G/4nFsrxp+5T3o4JZInBZICXNnv12qnAsLxtP9QigdqLskZshqYNdlkdKNq6Eg==, - } + resolution: {integrity: sha512-bZ6d+x4mvt5H5S/kVVQjJGv+G/4nFsrxp+5T3o4JZInBZICXNnv12qnAsLxtP9QigdqLskZshqYNdlkdKNq6Eg==} '@nrwl/cypress@19.3.0': - resolution: - { - integrity: sha512-K7isE85sYZMp5FV/1o8GzwXmCqLmeb67c0p5y1Ea/qLB0X8XpE4SQXhZsUhqG2x4fuA8FX+yugB6edPeceFV3w==, - } + resolution: {integrity: sha512-K7isE85sYZMp5FV/1o8GzwXmCqLmeb67c0p5y1Ea/qLB0X8XpE4SQXhZsUhqG2x4fuA8FX+yugB6edPeceFV3w==} '@nrwl/devkit@19.3.0': - resolution: - { - integrity: sha512-WRcph/7U37HkTLIRzQ2oburZVfEFkPHJUn7vmo46gCq+N2cAKy3qwONO0RbthhjFIsG94YPXqFWFlV6k4nXpxA==, - } + resolution: {integrity: sha512-WRcph/7U37HkTLIRzQ2oburZVfEFkPHJUn7vmo46gCq+N2cAKy3qwONO0RbthhjFIsG94YPXqFWFlV6k4nXpxA==} '@nrwl/eslint-plugin-nx@19.3.0': - resolution: - { - integrity: sha512-urquS7aYwCnXeTqCVb7bpjfBkcvrm84igOP+S59rDhmw4sNxSbI0iFJrLwdVnO8oPFFP1BR4DMUYSWRvdP8NZQ==, - } + resolution: {integrity: sha512-urquS7aYwCnXeTqCVb7bpjfBkcvrm84igOP+S59rDhmw4sNxSbI0iFJrLwdVnO8oPFFP1BR4DMUYSWRvdP8NZQ==} '@nrwl/jest@19.3.0': - resolution: - { - integrity: sha512-21J8Rj7tEQFlMxQTYmt5VEyeWIuEN3VNAkTtTuFLM95KKYONhuFC0ppiYiy+RTA1R3RyTJZLyln/hqH74BPx/g==, - } + resolution: {integrity: sha512-21J8Rj7tEQFlMxQTYmt5VEyeWIuEN3VNAkTtTuFLM95KKYONhuFC0ppiYiy+RTA1R3RyTJZLyln/hqH74BPx/g==} '@nrwl/js@19.3.0': - resolution: - { - integrity: sha512-G+7nvAlfwnnlcPnoAhpcCrsOZTwa7hRd6WoqSrYuG/9Ge1NZ3H+rwvS5wX+bTKn8/hKHQdDuJUTomyOTpt1I1g==, - } + resolution: {integrity: sha512-G+7nvAlfwnnlcPnoAhpcCrsOZTwa7hRd6WoqSrYuG/9Ge1NZ3H+rwvS5wX+bTKn8/hKHQdDuJUTomyOTpt1I1g==} '@nrwl/node@19.3.0': - resolution: - { - integrity: sha512-BhbY1k0eS//BIdzU8iblsbIVIm3gxa+2WqpBYNoLZr95qU2QJD20VmmNBIehUTJn4fj58KbdbHzW4jbw7Zf4pA==, - } + resolution: {integrity: sha512-BhbY1k0eS//BIdzU8iblsbIVIm3gxa+2WqpBYNoLZr95qU2QJD20VmmNBIehUTJn4fj58KbdbHzW4jbw7Zf4pA==} '@nrwl/nx-plugin@19.3.0': - resolution: - { - integrity: sha512-GMkLft8BBZHtteXJPhjAGdAg/uWJb+ZYV1I3gQDzT7UjhhQsGQh5EWUmdwy7H+woPpbt9zVucQN07tFcViSGmA==, - } + resolution: {integrity: sha512-GMkLft8BBZHtteXJPhjAGdAg/uWJb+ZYV1I3gQDzT7UjhhQsGQh5EWUmdwy7H+woPpbt9zVucQN07tFcViSGmA==} '@nrwl/react@19.3.0': - resolution: - { - integrity: sha512-Yb7CEVKB2Ebso+uY3OTV9FStNpzXPggC4mzVJZRm7KcoMSE3Md+fvkAB1LVkHc8WFye4mULMog+tfeGysk79Yw==, - } + resolution: {integrity: sha512-Yb7CEVKB2Ebso+uY3OTV9FStNpzXPggC4mzVJZRm7KcoMSE3Md+fvkAB1LVkHc8WFye4mULMog+tfeGysk79Yw==} '@nrwl/storybook@19.3.0': - resolution: - { - integrity: sha512-qyX2oWK+vovhvD0RKOpFpeeJUetiWEblGbIl99DLt0bJpH+DHHZIAUEeQSRB1fhFlzEXdMhsYNZmYir1DQzYlw==, - } + resolution: {integrity: sha512-qyX2oWK+vovhvD0RKOpFpeeJUetiWEblGbIl99DLt0bJpH+DHHZIAUEeQSRB1fhFlzEXdMhsYNZmYir1DQzYlw==} '@nrwl/tao@19.3.0': - resolution: - { - integrity: sha512-MyGYeHbh9O4Tv9xmz3Du+/leY5sKUHaPy4ancfNyShHgYi21hemX0/YYjzzoYHi44D8GzSc1XG2rAuwba7Kilw==, - } + resolution: {integrity: sha512-MyGYeHbh9O4Tv9xmz3Du+/leY5sKUHaPy4ancfNyShHgYi21hemX0/YYjzzoYHi44D8GzSc1XG2rAuwba7Kilw==} hasBin: true '@nrwl/vite@19.3.0': - resolution: - { - integrity: sha512-gvzySN1OUmp5D3iT9nHxYvrdB9c0xf5xdq9BMsCV1nn7VY5VioF5tmksP89s3nMSWyoqoFY6e5eJNPsTySLgZA==, - } + resolution: {integrity: sha512-gvzySN1OUmp5D3iT9nHxYvrdB9c0xf5xdq9BMsCV1nn7VY5VioF5tmksP89s3nMSWyoqoFY6e5eJNPsTySLgZA==} '@nrwl/web@19.3.0': - resolution: - { - integrity: sha512-LDHqYVqdLSRvNrUCKDOIenaO//UjLElX3LL+Fr14dqzCKR26T8R+ZiwLcCPlre2cfskoDOvYdIHY/4pmebGW/w==, - } + resolution: {integrity: sha512-LDHqYVqdLSRvNrUCKDOIenaO//UjLElX3LL+Fr14dqzCKR26T8R+ZiwLcCPlre2cfskoDOvYdIHY/4pmebGW/w==} '@nrwl/webpack@19.3.0': - resolution: - { - integrity: sha512-8ztyou5kLOajLTVpi7lbliL8DezZH1kBByuo1xeqrh8ef75egOAAikoGMcbwuFVx/XMMD7jE2ZOBQheZqa+Pbw==, - } + resolution: {integrity: sha512-8ztyou5kLOajLTVpi7lbliL8DezZH1kBByuo1xeqrh8ef75egOAAikoGMcbwuFVx/XMMD7jE2ZOBQheZqa+Pbw==} '@nrwl/workspace@19.3.0': - resolution: - { - integrity: sha512-h/kMImLdX5NMg0lXB6PmYIxBYI6WU7ATcOI3tGl8z48HHfyfwu87vTQlxFi3jaZv2qj/mE5VFpd+tGADEPNvCw==, - } + resolution: {integrity: sha512-h/kMImLdX5NMg0lXB6PmYIxBYI6WU7ATcOI3tGl8z48HHfyfwu87vTQlxFi3jaZv2qj/mE5VFpd+tGADEPNvCw==} '@nx/angular@19.3.0': - resolution: - { - integrity: sha512-OA5FSALbIjn/OnXQXT5bLopUdJ92nUWv8lykEDSS92Z3L/gpiMow0sWn+Nz00Wdw/WGuPXG4TtQo7pvP/9/YBA==, - } + resolution: {integrity: sha512-OA5FSALbIjn/OnXQXT5bLopUdJ92nUWv8lykEDSS92Z3L/gpiMow0sWn+Nz00Wdw/WGuPXG4TtQo7pvP/9/YBA==} peerDependencies: '@angular-devkit/build-angular': '>= 16.0.0 < 19.0.0' '@angular-devkit/core': '>= 16.0.0 < 19.0.0' @@ -2843,10 +1874,7 @@ packages: optional: true '@nx/cypress@19.3.0': - resolution: - { - integrity: sha512-xFzBq/O8+L94QW0KgOlssJkn/Vurfp5k9SN2ALCYtiBynlmpcxJ84Hl9luFzoCqMPzIK1bOTR6/4QvguYajvCA==, - } + resolution: {integrity: sha512-xFzBq/O8+L94QW0KgOlssJkn/Vurfp5k9SN2ALCYtiBynlmpcxJ84Hl9luFzoCqMPzIK1bOTR6/4QvguYajvCA==} peerDependencies: cypress: '>= 3 < 14' peerDependenciesMeta: @@ -2854,18 +1882,12 @@ packages: optional: true '@nx/devkit@19.3.0': - resolution: - { - integrity: sha512-Natya5nzvHH0qTOIL1w/EZtwMgDx87Dgz0LgeY7te2fULaNFcj5fVrP+mUKEJZR+NccO7GPumT2RPhuEl9rPnQ==, - } + resolution: {integrity: sha512-Natya5nzvHH0qTOIL1w/EZtwMgDx87Dgz0LgeY7te2fULaNFcj5fVrP+mUKEJZR+NccO7GPumT2RPhuEl9rPnQ==} peerDependencies: nx: '>= 17 <= 20' '@nx/eslint-plugin@19.3.0': - resolution: - { - integrity: sha512-NZ966Wy4mF34lLi+QOgY9mpOiiAL5UiJ+QqOZcg22QIVz0zPY5HbtbYDZTu8OmR4O/S+3ylguaP1O1P2xiYMBQ==, - } + resolution: {integrity: sha512-NZ966Wy4mF34lLi+QOgY9mpOiiAL5UiJ+QqOZcg22QIVz0zPY5HbtbYDZTu8OmR4O/S+3ylguaP1O1P2xiYMBQ==} peerDependencies: '@typescript-eslint/parser': ^6.13.2 || ^7.0.0 eslint-config-prettier: ^9.0.0 @@ -2874,10 +1896,7 @@ packages: optional: true '@nx/eslint@19.3.0': - resolution: - { - integrity: sha512-x4SrQMnLnX+jM7KGsj+ReOvEHo5S0chLPfJhf0KFnXnzWoWcrq18z0lZ33JaAWWBsjexozDTld2wHj7nkvcjCg==, - } + resolution: {integrity: sha512-x4SrQMnLnX+jM7KGsj+ReOvEHo5S0chLPfJhf0KFnXnzWoWcrq18z0lZ33JaAWWBsjexozDTld2wHj7nkvcjCg==} peerDependencies: '@zkochan/js-yaml': 0.0.7 eslint: ^8.0.0 || ^9.0.0 @@ -2886,16 +1905,10 @@ packages: optional: true '@nx/jest@19.3.0': - resolution: - { - integrity: sha512-XgtMw7QHD1wni3EZd3YS4UgoskRZh264tJf/8QRQ8XxWJCFjNM3IEQHDUycIt09Vzz5rql5NwuZ9ct9CNZveNw==, - } + resolution: {integrity: sha512-XgtMw7QHD1wni3EZd3YS4UgoskRZh264tJf/8QRQ8XxWJCFjNM3IEQHDUycIt09Vzz5rql5NwuZ9ct9CNZveNw==} '@nx/js@19.3.0': - resolution: - { - integrity: sha512-bZuV8sXR5kZ2FJzqnjSZqWs21W7AlZKgjzYB7Rt1u1ap4KcVR32NNAUVFjnTuI1A/6rhO39IShTyMhswnBV9qA==, - } + resolution: {integrity: sha512-bZuV8sXR5kZ2FJzqnjSZqWs21W7AlZKgjzYB7Rt1u1ap4KcVR32NNAUVFjnTuI1A/6rhO39IShTyMhswnBV9qA==} peerDependencies: verdaccio: ^5.0.4 peerDependenciesMeta: @@ -2903,112 +1916,73 @@ packages: optional: true '@nx/linter@19.3.0': - resolution: - { - integrity: sha512-+bpDyXjHBTuVHvbQ7m2hG86m1jJNAPOmnoad/2ZPoQM4LjBTOW8M7s2upZPewjnAJs8Fv02281mO+ORbhW7L9A==, - } + resolution: {integrity: sha512-+bpDyXjHBTuVHvbQ7m2hG86m1jJNAPOmnoad/2ZPoQM4LjBTOW8M7s2upZPewjnAJs8Fv02281mO+ORbhW7L9A==} '@nx/node@19.3.0': - resolution: - { - integrity: sha512-haa2YBNv2FLKcV6X4wAIhzVLOhn9f6i+AJGRUzlgNOqEtGlrRWpnuO2kGBtFco9PmI7avyUxySlwXppYWDOBRQ==, - } + resolution: {integrity: sha512-haa2YBNv2FLKcV6X4wAIhzVLOhn9f6i+AJGRUzlgNOqEtGlrRWpnuO2kGBtFco9PmI7avyUxySlwXppYWDOBRQ==} '@nx/nx-darwin-arm64@19.3.0': - resolution: - { - integrity: sha512-TMTxjrN7Y/UsKFjmz0YfhVItLTGWqvud8cmQchw5NEjdNakfjXk0mREufO5/5PwoiRIsen6MbThoTprLpjOUiQ==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-TMTxjrN7Y/UsKFjmz0YfhVItLTGWqvud8cmQchw5NEjdNakfjXk0mREufO5/5PwoiRIsen6MbThoTprLpjOUiQ==} + engines: {node: '>= 10'} cpu: [arm64] os: [darwin] '@nx/nx-darwin-x64@19.3.0': - resolution: - { - integrity: sha512-GH2L6ftnzdIs7JEdv7ZPCdbpAdB5sW6NijK07riYZSONzq5fEruD1yDWDkyZbYBb8RTxsparUWJnq8q1qxEPHQ==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-GH2L6ftnzdIs7JEdv7ZPCdbpAdB5sW6NijK07riYZSONzq5fEruD1yDWDkyZbYBb8RTxsparUWJnq8q1qxEPHQ==} + engines: {node: '>= 10'} cpu: [x64] os: [darwin] '@nx/nx-freebsd-x64@19.3.0': - resolution: - { - integrity: sha512-1ow7Xku1yyjHviCKsWiuHCAnTd3fD+5O5c+e4DXHVthT8wnadKSotvBIWf38DMbMthl7na82e72OzxcdSbrVqQ==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-1ow7Xku1yyjHviCKsWiuHCAnTd3fD+5O5c+e4DXHVthT8wnadKSotvBIWf38DMbMthl7na82e72OzxcdSbrVqQ==} + engines: {node: '>= 10'} cpu: [x64] os: [freebsd] '@nx/nx-linux-arm-gnueabihf@19.3.0': - resolution: - { - integrity: sha512-mYQMIUvNr2gww8vbg766uk/C1RxoC1fwioeP87bmV5NRUKSzJ8WEJVxAsqc9RGhAOUaNXOgEuKYrMcVhKyIKJQ==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-mYQMIUvNr2gww8vbg766uk/C1RxoC1fwioeP87bmV5NRUKSzJ8WEJVxAsqc9RGhAOUaNXOgEuKYrMcVhKyIKJQ==} + engines: {node: '>= 10'} cpu: [arm] os: [linux] '@nx/nx-linux-arm64-gnu@19.3.0': - resolution: - { - integrity: sha512-rHL3eQ0RHkeAXnhHHu/NIyouN/ykiXvgyNU3TuCd50+2MZcAbjB+Xq3mwL0MwiP+BQuptiE+snTuxFUJp4ZH6A==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-rHL3eQ0RHkeAXnhHHu/NIyouN/ykiXvgyNU3TuCd50+2MZcAbjB+Xq3mwL0MwiP+BQuptiE+snTuxFUJp4ZH6A==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] '@nx/nx-linux-arm64-musl@19.3.0': - resolution: - { - integrity: sha512-im0+OgOD6ShpTkI9ZRz7BjzxhQ/Lk3xjYmmCu+PFGmaybEnkNNDFwsgS0iEVKMdWZ/EQoQvJrqOYsX125iIBuQ==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-im0+OgOD6ShpTkI9ZRz7BjzxhQ/Lk3xjYmmCu+PFGmaybEnkNNDFwsgS0iEVKMdWZ/EQoQvJrqOYsX125iIBuQ==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] '@nx/nx-linux-x64-gnu@19.3.0': - resolution: - { - integrity: sha512-k8q/d6WBSXOeUpBq6Mw69yMKL4n9LaX3o4LBNwBkVCEZ8p6s0njwKefLtjwnKlai0g/k5f0NcilU2zTwP/Ex8g==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-k8q/d6WBSXOeUpBq6Mw69yMKL4n9LaX3o4LBNwBkVCEZ8p6s0njwKefLtjwnKlai0g/k5f0NcilU2zTwP/Ex8g==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] '@nx/nx-linux-x64-musl@19.3.0': - resolution: - { - integrity: sha512-sahEV99glBlpGKG1TIQ5PkJ0QvpHp69wWsBFK2DKtCETxOtsWqwvIjemxTCXRirTqeHiP7BiR6VWsf2YqqqBdw==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-sahEV99glBlpGKG1TIQ5PkJ0QvpHp69wWsBFK2DKtCETxOtsWqwvIjemxTCXRirTqeHiP7BiR6VWsf2YqqqBdw==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] '@nx/nx-win32-arm64-msvc@19.3.0': - resolution: - { - integrity: sha512-w03gFwLijStmhUji70QJHYo/U16ovybNczxGO7+5TT330X8/y+ihw9FCGHiIcujAjTAE88h0DKGn05WlNqRmfg==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-w03gFwLijStmhUji70QJHYo/U16ovybNczxGO7+5TT330X8/y+ihw9FCGHiIcujAjTAE88h0DKGn05WlNqRmfg==} + engines: {node: '>= 10'} cpu: [arm64] os: [win32] '@nx/nx-win32-x64-msvc@19.3.0': - resolution: - { - integrity: sha512-M7e2zXGfTjH8NLiwqKLdWC9VlfMSQDYlI4/SM4OSpPqhUTfPlRPa+wNKNTG7perKfDXxE9ei8yjocujknXJk/A==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-M7e2zXGfTjH8NLiwqKLdWC9VlfMSQDYlI4/SM4OSpPqhUTfPlRPa+wNKNTG7perKfDXxE9ei8yjocujknXJk/A==} + engines: {node: '>= 10'} cpu: [x64] os: [win32] '@nx/playwright@19.3.0': - resolution: - { - integrity: sha512-Q9/H848tSk8mudKhYiJOsOIDtdmak8/pSAI1sKw+UZguLCz+yFswohMv8pr0+cuQBywBe5fZY+lfzl0wxyvZdQ==, - } + resolution: {integrity: sha512-Q9/H848tSk8mudKhYiJOsOIDtdmak8/pSAI1sKw+UZguLCz+yFswohMv8pr0+cuQBywBe5fZY+lfzl0wxyvZdQ==} peerDependencies: '@playwright/test': ^1.36.0 peerDependenciesMeta: @@ -3016,439 +1990,266 @@ packages: optional: true '@nx/plugin@19.3.0': - resolution: - { - integrity: sha512-wAb/0qdpd0bYEPMaHfRShBK5sBeMt3dBRu74I9ETrUF0lQ6u2sUaF03JZ+Wg+/D+gV+ulgWuB1cZGlT+8X5hEQ==, - } + resolution: {integrity: sha512-wAb/0qdpd0bYEPMaHfRShBK5sBeMt3dBRu74I9ETrUF0lQ6u2sUaF03JZ+Wg+/D+gV+ulgWuB1cZGlT+8X5hEQ==} '@nx/react@19.3.0': - resolution: - { - integrity: sha512-kT0kOp5JjTqPxiBHjIi2LhI4gxPRghC9iitMsG3orD847KG2cP+ONRJWcq9e5lJFgeppiTr7EP3fg/Q5b2ZS1g==, - } + resolution: {integrity: sha512-kT0kOp5JjTqPxiBHjIi2LhI4gxPRghC9iitMsG3orD847KG2cP+ONRJWcq9e5lJFgeppiTr7EP3fg/Q5b2ZS1g==} '@nx/storybook@19.3.0': - resolution: - { - integrity: sha512-BntgtHnfEG/RLPQQvk163vyUpyQcNwDGQG6mx4z73aaHWWGfvSR/mHps1p/+RIf/pD/afpA+oGJFPDKamF+EaA==, - } + resolution: {integrity: sha512-BntgtHnfEG/RLPQQvk163vyUpyQcNwDGQG6mx4z73aaHWWGfvSR/mHps1p/+RIf/pD/afpA+oGJFPDKamF+EaA==} '@nx/vite@19.3.0': - resolution: - { - integrity: sha512-EAAzSNiCi7iP82xqliqoCgOfLCbsgZkr3xWG4JPEw6CJKBf22XmdIb4POr4NhEdDW7ewGAz0oMtu2sYMuPKzAA==, - } + resolution: {integrity: sha512-EAAzSNiCi7iP82xqliqoCgOfLCbsgZkr3xWG4JPEw6CJKBf22XmdIb4POr4NhEdDW7ewGAz0oMtu2sYMuPKzAA==} peerDependencies: vite: ^5.0.0 vitest: ^1.3.1 '@nx/web@19.3.0': - resolution: - { - integrity: sha512-kK+jpUKhWflpKHegkNPBDkH3XYjpdEwCKr6izqJU7nvV0P9EHT/jVWRxfic/imTAoC9IZpHwAW9bYSd0LKpe1A==, - } + resolution: {integrity: sha512-kK+jpUKhWflpKHegkNPBDkH3XYjpdEwCKr6izqJU7nvV0P9EHT/jVWRxfic/imTAoC9IZpHwAW9bYSd0LKpe1A==} '@nx/webpack@19.3.0': - resolution: - { - integrity: sha512-wc0woE2wrqmMA7IhAVzIJtHXt0aTdD9JMRctGH5ygAcZ9PMm0QL/rRr+u4o6m8RN7hegvy4C21/Pj9c3FUXOhg==, - } + resolution: {integrity: sha512-wc0woE2wrqmMA7IhAVzIJtHXt0aTdD9JMRctGH5ygAcZ9PMm0QL/rRr+u4o6m8RN7hegvy4C21/Pj9c3FUXOhg==} '@nx/workspace@19.3.0': - resolution: - { - integrity: sha512-mhhQIXPGOysg/1vqGnXzwB3ODckpwi2OxQm4x4R1rX8tnS7I4+K2MZFyQzpa13vPf4h4Y4yxdDUl+TfZa7lVhQ==, - } + resolution: {integrity: sha512-mhhQIXPGOysg/1vqGnXzwB3ODckpwi2OxQm4x4R1rX8tnS7I4+K2MZFyQzpa13vPf4h4Y4yxdDUl+TfZa7lVhQ==} '@phenomnomnominal/tsquery@5.0.1': - resolution: - { - integrity: sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==, - } + resolution: {integrity: sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==} peerDependencies: typescript: ^3 || ^4 || ^5 '@preact/preset-vite@2.8.2': - resolution: - { - integrity: sha512-m3tl+M8IO8jgiHnk+7LSTFl8axdPXloewi7iGVLdmCwf34XOzEUur0bZVewW4DUbUipFjTS2CXu27+5f/oexBA==, - } + resolution: {integrity: sha512-m3tl+M8IO8jgiHnk+7LSTFl8axdPXloewi7iGVLdmCwf34XOzEUur0bZVewW4DUbUipFjTS2CXu27+5f/oexBA==} peerDependencies: '@babel/core': 7.x vite: 2.x || 3.x || 4.x || 5.x '@prefresh/babel-plugin@0.5.1': - resolution: - { - integrity: sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==, - } + resolution: {integrity: sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==} '@prefresh/core@1.5.2': - resolution: - { - integrity: sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==, - } + resolution: {integrity: sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==} peerDependencies: preact: ^10.0.0 '@prefresh/utils@1.2.0': - resolution: - { - integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==, - } + resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==} '@prefresh/vite@2.4.5': - resolution: - { - integrity: sha512-iForDVJ2M8gQYnm5pHumvTEJjGGc7YNYC0GVKnHFL+GvFfKHfH9Rpq67nUAzNbjuLEpqEOUuQVQajMazWu2ZNQ==, - } + resolution: {integrity: sha512-iForDVJ2M8gQYnm5pHumvTEJjGGc7YNYC0GVKnHFL+GvFfKHfH9Rpq67nUAzNbjuLEpqEOUuQVQajMazWu2ZNQ==} peerDependencies: preact: ^10.4.0 vite: '>=2.0.0' '@rollup/pluginutils@4.2.1': - resolution: - { - integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==, - } - engines: { node: '>= 8.0.0' } + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} '@rollup/rollup-android-arm-eabi@4.14.3': - resolution: - { - integrity: sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==, - } + resolution: {integrity: sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==} cpu: [arm] os: [android] '@rollup/rollup-android-arm64@4.14.3': - resolution: - { - integrity: sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==, - } + resolution: {integrity: sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==} cpu: [arm64] os: [android] '@rollup/rollup-darwin-arm64@4.14.3': - resolution: - { - integrity: sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==, - } + resolution: {integrity: sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==} cpu: [arm64] os: [darwin] '@rollup/rollup-darwin-x64@4.14.3': - resolution: - { - integrity: sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==, - } + resolution: {integrity: sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==} cpu: [x64] os: [darwin] '@rollup/rollup-linux-arm-gnueabihf@4.14.3': - resolution: - { - integrity: sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==, - } + resolution: {integrity: sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==} cpu: [arm] os: [linux] '@rollup/rollup-linux-arm-musleabihf@4.14.3': - resolution: - { - integrity: sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==, - } + resolution: {integrity: sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==} cpu: [arm] os: [linux] '@rollup/rollup-linux-arm64-gnu@4.14.3': - resolution: - { - integrity: sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==, - } + resolution: {integrity: sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==} cpu: [arm64] os: [linux] '@rollup/rollup-linux-arm64-musl@4.14.3': - resolution: - { - integrity: sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==, - } + resolution: {integrity: sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==} cpu: [arm64] os: [linux] '@rollup/rollup-linux-powerpc64le-gnu@4.14.3': - resolution: - { - integrity: sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==, - } + resolution: {integrity: sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==} cpu: [ppc64] os: [linux] '@rollup/rollup-linux-riscv64-gnu@4.14.3': - resolution: - { - integrity: sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==, - } + resolution: {integrity: sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==} cpu: [riscv64] os: [linux] '@rollup/rollup-linux-s390x-gnu@4.14.3': - resolution: - { - integrity: sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==, - } + resolution: {integrity: sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==} cpu: [s390x] os: [linux] '@rollup/rollup-linux-x64-gnu@4.14.3': - resolution: - { - integrity: sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==, - } + resolution: {integrity: sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==} cpu: [x64] os: [linux] '@rollup/rollup-linux-x64-musl@4.14.3': - resolution: - { - integrity: sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==, - } + resolution: {integrity: sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==} cpu: [x64] os: [linux] '@rollup/rollup-win32-arm64-msvc@4.14.3': - resolution: - { - integrity: sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==, - } + resolution: {integrity: sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==} cpu: [arm64] os: [win32] '@rollup/rollup-win32-ia32-msvc@4.14.3': - resolution: - { - integrity: sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==, - } + resolution: {integrity: sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==} cpu: [ia32] os: [win32] '@rollup/rollup-win32-x64-msvc@4.14.3': - resolution: - { - integrity: sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==, - } + resolution: {integrity: sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==} cpu: [x64] os: [win32] '@schematics/angular@16.0.0': - resolution: - { - integrity: sha512-Ao1Y0hEDa30JjWDLnUfOsD+9nnfdBFclfKFzR+7pvvFYCpSUhH1u+8e+7noruIxlP26+SpqPn3AF5+IRTGza8w==, - } - engines: - { - node: ^16.14.0 || >=18.10.0, - npm: ^6.11.0 || ^7.5.6 || >=8.0.0, - yarn: '>= 1.13.0', - } + resolution: {integrity: sha512-Ao1Y0hEDa30JjWDLnUfOsD+9nnfdBFclfKFzR+7pvvFYCpSUhH1u+8e+7noruIxlP26+SpqPn3AF5+IRTGza8w==} + engines: {node: ^16.14.0 || >=18.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@shikijs/core@1.3.0': - resolution: - { - integrity: sha512-7fedsBfuILDTBmrYZNFI8B6ATTxhQAasUHllHmjvSZPnoq4bULWoTpHwmuQvZ8Aq03/tAa2IGo6RXqWtHdWaCA==, - } + resolution: {integrity: sha512-7fedsBfuILDTBmrYZNFI8B6ATTxhQAasUHllHmjvSZPnoq4bULWoTpHwmuQvZ8Aq03/tAa2IGo6RXqWtHdWaCA==} '@shikijs/transformers@1.3.0': - resolution: - { - integrity: sha512-3mlpg2I9CjhjE96dEWQOGeCWoPcyTov3s4aAsHmgvnTHa8MBknEnCQy8/xivJPSpD+olqOqIEoHnLfbNJK29AA==, - } + resolution: {integrity: sha512-3mlpg2I9CjhjE96dEWQOGeCWoPcyTov3s4aAsHmgvnTHa8MBknEnCQy8/xivJPSpD+olqOqIEoHnLfbNJK29AA==} '@sinclair/typebox@0.27.8': - resolution: - { - integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, - } + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} '@sindresorhus/is@4.6.0': - resolution: - { - integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} '@sinonjs/commons@2.0.0': - resolution: - { - integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==, - } + resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} '@sinonjs/fake-timers@10.0.2': - resolution: - { - integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==, - } + resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} '@stencil/core@4.12.6': - resolution: - { - integrity: sha512-15JO2TdaxGVKNdLZb/2TtDa+juj3XGD/V0y/disgdzYYSnajgSh06nwODfdHz9eTUh1Hisz+KIo857I1rCZrfg==, - } - engines: { node: '>=16.0.0', npm: '>=7.10.0' } + resolution: {integrity: sha512-15JO2TdaxGVKNdLZb/2TtDa+juj3XGD/V0y/disgdzYYSnajgSh06nwODfdHz9eTUh1Hisz+KIo857I1rCZrfg==} + engines: {node: '>=16.0.0', npm: '>=7.10.0'} hasBin: true '@svgr/babel-plugin-add-jsx-attribute@8.0.0': - resolution: - { - integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': - resolution: - { - integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': - resolution: - { - integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0': - resolution: - { - integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-svg-dynamic-title@8.0.0': - resolution: - { - integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-svg-em-dimensions@8.0.0': - resolution: - { - integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-transform-react-native-svg@8.0.0': - resolution: - { - integrity: sha512-UKrY3860AQICgH7g+6h2zkoxeVEPLYwX/uAjmqo4PIq2FIHppwhIqZstIyTz0ZtlwreKR41O3W3BzsBBiJV2Aw==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-UKrY3860AQICgH7g+6h2zkoxeVEPLYwX/uAjmqo4PIq2FIHppwhIqZstIyTz0ZtlwreKR41O3W3BzsBBiJV2Aw==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-transform-svg-component@8.0.0': - resolution: - { - integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} + engines: {node: '>=12'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-preset@8.0.0': - resolution: - { - integrity: sha512-KLcjiZychInVrhs86OvcYPLTFu9L5XV2vj0XAaE1HwE3J3jLmIzRY8ttdeAg/iFyp8nhavJpafpDZTt+1LIpkQ==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-KLcjiZychInVrhs86OvcYPLTFu9L5XV2vj0XAaE1HwE3J3jLmIzRY8ttdeAg/iFyp8nhavJpafpDZTt+1LIpkQ==} + engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/core@8.0.0': - resolution: - { - integrity: sha512-aJKtc+Pie/rFYsVH/unSkDaZGvEeylNv/s2cP+ta9/rYWxRVvoV/S4Qw65Kmrtah4CBK5PM6ISH9qUH7IJQCng==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-aJKtc+Pie/rFYsVH/unSkDaZGvEeylNv/s2cP+ta9/rYWxRVvoV/S4Qw65Kmrtah4CBK5PM6ISH9qUH7IJQCng==} + engines: {node: '>=14'} '@svgr/hast-util-to-babel-ast@8.0.0': - resolution: - { - integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} + engines: {node: '>=14'} '@svgr/plugin-jsx@8.0.1': - resolution: - { - integrity: sha512-bfCFb+4ZsM3UuKP2t7KmDwn6YV8qVn9HIQJmau6xeQb/iV65Rpi7NBNBWA2hcCd4GKoCqG8hpaaDk5FDR0eH+g==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-bfCFb+4ZsM3UuKP2t7KmDwn6YV8qVn9HIQJmau6xeQb/iV65Rpi7NBNBWA2hcCd4GKoCqG8hpaaDk5FDR0eH+g==} + engines: {node: '>=14'} peerDependencies: '@svgr/core': '*' '@svgr/plugin-svgo@8.0.1': - resolution: - { - integrity: sha512-29OJ1QmJgnohQHDAgAuY2h21xWD6TZiXji+hnx+W635RiXTAlHTbjrZDktfqzkN0bOeQEtNe+xgq73/XeWFfSg==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-29OJ1QmJgnohQHDAgAuY2h21xWD6TZiXji+hnx+W635RiXTAlHTbjrZDktfqzkN0bOeQEtNe+xgq73/XeWFfSg==} + engines: {node: '>=14'} peerDependencies: '@svgr/core': '*' '@svgr/webpack@8.0.1': - resolution: - { - integrity: sha512-zSoeKcbCmfMXjA11uDuCJb+1LWNb3vy6Qw/VHj0Nfcl3UuqwuoZWknHsBIhCWvi4wU9vPui3aq054qjVyZqY4A==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-zSoeKcbCmfMXjA11uDuCJb+1LWNb3vy6Qw/VHj0Nfcl3UuqwuoZWknHsBIhCWvi4wU9vPui3aq054qjVyZqY4A==} + engines: {node: '>=14'} '@swc-node/core@1.13.1': - resolution: - { - integrity: sha512-emB5l2nZsXjUEAuusqjYvWnQMLWZp6K039Mv8aq5SX1rsNM/N7DNhw1i4/DX7AyzNZ0tT+ASWyTvqEURldp5HA==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-emB5l2nZsXjUEAuusqjYvWnQMLWZp6K039Mv8aq5SX1rsNM/N7DNhw1i4/DX7AyzNZ0tT+ASWyTvqEURldp5HA==} + engines: {node: '>= 10'} peerDependencies: '@swc/core': '>= 1.4.13' '@swc/types': '>= 0.1' '@swc-node/register@1.9.2': - resolution: - { - integrity: sha512-BBjg0QNuEEmJSoU/++JOXhrjWdu3PTyYeJWsvchsI0Aqtj8ICkz/DqlwtXbmZVZ5vuDPpTfFlwDBZe81zgShMA==, - } + resolution: {integrity: sha512-BBjg0QNuEEmJSoU/++JOXhrjWdu3PTyYeJWsvchsI0Aqtj8ICkz/DqlwtXbmZVZ5vuDPpTfFlwDBZe81zgShMA==} peerDependencies: '@swc/core': '>= 1.4.13' typescript: '>= 4.3' '@swc-node/sourcemap-support@0.5.0': - resolution: - { - integrity: sha512-fbhjL5G0YvFoWwNhWleuBUfotiX+USiA9oJqu9STFw+Hb0Cgnddn+HVS/K5fI45mn92e8V+cHD2jgFjk4w2T9Q==, - } + resolution: {integrity: sha512-fbhjL5G0YvFoWwNhWleuBUfotiX+USiA9oJqu9STFw+Hb0Cgnddn+HVS/K5fI45mn92e8V+cHD2jgFjk4w2T9Q==} '@swc/cli@0.3.12': - resolution: - { - integrity: sha512-h7bvxT+4+UDrLWJLFHt6V+vNAcUNii2G4aGSSotKz1ECEk4MyEh5CWxmeSscwuz5K3i+4DWTgm4+4EyMCQKn+g==, - } - engines: { node: '>= 16.14.0' } + resolution: {integrity: sha512-h7bvxT+4+UDrLWJLFHt6V+vNAcUNii2G4aGSSotKz1ECEk4MyEh5CWxmeSscwuz5K3i+4DWTgm4+4EyMCQKn+g==} + engines: {node: '>= 16.14.0'} hasBin: true peerDependencies: '@swc/core': ^1.2.66 @@ -3458,101 +2259,68 @@ packages: optional: true '@swc/core-darwin-arm64@1.5.7': - resolution: - { - integrity: sha512-bZLVHPTpH3h6yhwVl395k0Mtx8v6CGhq5r4KQdAoPbADU974Mauz1b6ViHAJ74O0IVE5vyy7tD3OpkQxL/vMDQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-bZLVHPTpH3h6yhwVl395k0Mtx8v6CGhq5r4KQdAoPbADU974Mauz1b6ViHAJ74O0IVE5vyy7tD3OpkQxL/vMDQ==} + engines: {node: '>=10'} cpu: [arm64] os: [darwin] '@swc/core-darwin-x64@1.5.7': - resolution: - { - integrity: sha512-RpUyu2GsviwTc2qVajPL0l8nf2vKj5wzO3WkLSHAHEJbiUZk83NJrZd1RVbEknIMO7+Uyjh54hEh8R26jSByaw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-RpUyu2GsviwTc2qVajPL0l8nf2vKj5wzO3WkLSHAHEJbiUZk83NJrZd1RVbEknIMO7+Uyjh54hEh8R26jSByaw==} + engines: {node: '>=10'} cpu: [x64] os: [darwin] '@swc/core-linux-arm-gnueabihf@1.5.7': - resolution: - { - integrity: sha512-cTZWTnCXLABOuvWiv6nQQM0hP6ZWEkzdgDvztgHI/+u/MvtzJBN5lBQ2lue/9sSFYLMqzqff5EHKlFtrJCA9dQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-cTZWTnCXLABOuvWiv6nQQM0hP6ZWEkzdgDvztgHI/+u/MvtzJBN5lBQ2lue/9sSFYLMqzqff5EHKlFtrJCA9dQ==} + engines: {node: '>=10'} cpu: [arm] os: [linux] '@swc/core-linux-arm64-gnu@1.5.7': - resolution: - { - integrity: sha512-hoeTJFBiE/IJP30Be7djWF8Q5KVgkbDtjySmvYLg9P94bHg9TJPSQoC72tXx/oXOgXvElDe/GMybru0UxhKx4g==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-hoeTJFBiE/IJP30Be7djWF8Q5KVgkbDtjySmvYLg9P94bHg9TJPSQoC72tXx/oXOgXvElDe/GMybru0UxhKx4g==} + engines: {node: '>=10'} cpu: [arm64] os: [linux] '@swc/core-linux-arm64-musl@1.5.7': - resolution: - { - integrity: sha512-+NDhK+IFTiVK1/o7EXdCeF2hEzCiaRSrb9zD7X2Z7inwWlxAntcSuzZW7Y6BRqGQH89KA91qYgwbnjgTQ22PiQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-+NDhK+IFTiVK1/o7EXdCeF2hEzCiaRSrb9zD7X2Z7inwWlxAntcSuzZW7Y6BRqGQH89KA91qYgwbnjgTQ22PiQ==} + engines: {node: '>=10'} cpu: [arm64] os: [linux] '@swc/core-linux-x64-gnu@1.5.7': - resolution: - { - integrity: sha512-25GXpJmeFxKB+7pbY7YQLhWWjkYlR+kHz5I3j9WRl3Lp4v4UD67OGXwPe+DIcHqcouA1fhLhsgHJWtsaNOMBNg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-25GXpJmeFxKB+7pbY7YQLhWWjkYlR+kHz5I3j9WRl3Lp4v4UD67OGXwPe+DIcHqcouA1fhLhsgHJWtsaNOMBNg==} + engines: {node: '>=10'} cpu: [x64] os: [linux] '@swc/core-linux-x64-musl@1.5.7': - resolution: - { - integrity: sha512-0VN9Y5EAPBESmSPPsCJzplZHV26akC0sIgd3Hc/7S/1GkSMoeuVL+V9vt+F/cCuzr4VidzSkqftdP3qEIsXSpg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-0VN9Y5EAPBESmSPPsCJzplZHV26akC0sIgd3Hc/7S/1GkSMoeuVL+V9vt+F/cCuzr4VidzSkqftdP3qEIsXSpg==} + engines: {node: '>=10'} cpu: [x64] os: [linux] '@swc/core-win32-arm64-msvc@1.5.7': - resolution: - { - integrity: sha512-RtoNnstBwy5VloNCvmvYNApkTmuCe4sNcoYWpmY7C1+bPR+6SOo8im1G6/FpNem8AR5fcZCmXHWQ+EUmRWJyuA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-RtoNnstBwy5VloNCvmvYNApkTmuCe4sNcoYWpmY7C1+bPR+6SOo8im1G6/FpNem8AR5fcZCmXHWQ+EUmRWJyuA==} + engines: {node: '>=10'} cpu: [arm64] os: [win32] '@swc/core-win32-ia32-msvc@1.5.7': - resolution: - { - integrity: sha512-Xm0TfvcmmspvQg1s4+USL3x8D+YPAfX2JHygvxAnCJ0EHun8cm2zvfNBcsTlnwYb0ybFWXXY129aq1wgFC9TpQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Xm0TfvcmmspvQg1s4+USL3x8D+YPAfX2JHygvxAnCJ0EHun8cm2zvfNBcsTlnwYb0ybFWXXY129aq1wgFC9TpQ==} + engines: {node: '>=10'} cpu: [ia32] os: [win32] '@swc/core-win32-x64-msvc@1.5.7': - resolution: - { - integrity: sha512-tp43WfJLCsKLQKBmjmY/0vv1slVywR5Q4qKjF5OIY8QijaEW7/8VwPyUyVoJZEnDgv9jKtUTG5PzqtIYPZGnyg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-tp43WfJLCsKLQKBmjmY/0vv1slVywR5Q4qKjF5OIY8QijaEW7/8VwPyUyVoJZEnDgv9jKtUTG5PzqtIYPZGnyg==} + engines: {node: '>=10'} cpu: [x64] os: [win32] '@swc/core@1.5.7': - resolution: - { - integrity: sha512-U4qJRBefIJNJDRCCiVtkfa/hpiZ7w0R6kASea+/KLp+vkus3zcLSB8Ub8SvKgTIxjWpwsKcZlPf5nrv4ls46SQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-U4qJRBefIJNJDRCCiVtkfa/hpiZ7w0R6kASea+/KLp+vkus3zcLSB8Ub8SvKgTIxjWpwsKcZlPf5nrv4ls46SQ==} + engines: {node: '>=10'} peerDependencies: '@swc/helpers': ^0.5.0 peerDependenciesMeta: @@ -3560,438 +2328,225 @@ packages: optional: true '@swc/counter@0.1.3': - resolution: - { - integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==, - } + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} '@swc/helpers@0.5.11': - resolution: - { - integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==, - } + resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} '@swc/jest@0.2.36': - resolution: - { - integrity: sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw==, - } - engines: { npm: '>= 7.0.0' } + resolution: {integrity: sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw==} + engines: {npm: '>= 7.0.0'} peerDependencies: '@swc/core': '*' '@swc/types@0.1.7': - resolution: - { - integrity: sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==, - } + resolution: {integrity: sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==} '@szmarczak/http-timer@4.0.6': - resolution: - { - integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} '@tokenizer/token@0.3.0': - resolution: - { - integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==, - } + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} '@tootallnate/once@1.1.2': - resolution: - { - integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} '@tootallnate/once@2.0.0': - resolution: - { - integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} '@trysound/sax@0.2.0': - resolution: - { - integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==, - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} '@tsconfig/node10@1.0.8': - resolution: - { - integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==, - } + resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==} '@tsconfig/node12@1.0.9': - resolution: - { - integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==, - } + resolution: {integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==} '@tsconfig/node14@1.0.1': - resolution: - { - integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==, - } + resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==} '@tsconfig/node16@1.0.2': - resolution: - { - integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==, - } + resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==} '@types/babel__core@7.20.5': - resolution: - { - integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, - } + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} '@types/babel__generator@7.6.4': - resolution: - { - integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==, - } + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} '@types/babel__template@7.4.1': - resolution: - { - integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==, - } + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} '@types/babel__traverse@7.14.2': - resolution: - { - integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==, - } + resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==} '@types/body-parser@1.19.2': - resolution: - { - integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==, - } + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} '@types/bonjour@3.5.10': - resolution: - { - integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==, - } + resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} '@types/cacheable-request@6.0.3': - resolution: - { - integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==, - } + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} '@types/connect-history-api-fallback@1.3.5': - resolution: - { - integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==, - } + resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} '@types/connect@3.4.35': - resolution: - { - integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==, - } + resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} '@types/eslint-scope@3.7.3': - resolution: - { - integrity: sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==, - } + resolution: {integrity: sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==} '@types/eslint@8.4.1': - resolution: - { - integrity: sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==, - } + resolution: {integrity: sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==} '@types/estree@1.0.1': - resolution: - { - integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==, - } + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} '@types/estree@1.0.5': - resolution: - { - integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==, - } + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} '@types/express-serve-static-core@4.17.28': - resolution: - { - integrity: sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==, - } + resolution: {integrity: sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==} '@types/express@4.17.13': - resolution: - { - integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==, - } + resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==} '@types/fs-extra@11.0.4': - resolution: - { - integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==, - } + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} '@types/glob@8.1.0': - resolution: - { - integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==, - } + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} '@types/globrex@0.1.2': - resolution: - { - integrity: sha512-W+8iW69LnEae5H09PxjpmI3CdJyKUTBAoDyqWx6T5ewhX5unBHYYQsGYXlXQP8l3HE/Y71vswPAvxkJC92FQhQ==, - } + resolution: {integrity: sha512-W+8iW69LnEae5H09PxjpmI3CdJyKUTBAoDyqWx6T5ewhX5unBHYYQsGYXlXQP8l3HE/Y71vswPAvxkJC92FQhQ==} '@types/graceful-fs@4.1.5': - resolution: - { - integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==, - } + resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} '@types/http-cache-semantics@4.0.1': - resolution: - { - integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==, - } + resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} '@types/http-proxy@1.17.11': - resolution: - { - integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==, - } + resolution: {integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==} '@types/is-ci@3.0.4': - resolution: - { - integrity: sha512-AkCYCmwlXeuH89DagDCzvCAyltI2v9lh3U3DqSg/GrBYoReAaWwxfXCqMx9UV5MajLZ4ZFwZzV4cABGIxk2XRw==, - } + resolution: {integrity: sha512-AkCYCmwlXeuH89DagDCzvCAyltI2v9lh3U3DqSg/GrBYoReAaWwxfXCqMx9UV5MajLZ4ZFwZzV4cABGIxk2XRw==} '@types/istanbul-lib-coverage@2.0.4': - resolution: - { - integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==, - } + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} '@types/istanbul-lib-report@3.0.0': - resolution: - { - integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==, - } + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} '@types/istanbul-reports@3.0.1': - resolution: - { - integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==, - } + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} '@types/jest@29.5.12': - resolution: - { - integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==, - } + resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} '@types/jsdom@20.0.1': - resolution: - { - integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==, - } + resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} '@types/json-schema@7.0.15': - resolution: - { - integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, - } + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/jsonfile@6.1.4': - resolution: - { - integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==, - } + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} '@types/keyv@3.1.4': - resolution: - { - integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==, - } + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} '@types/linkify-it@3.0.3': - resolution: - { - integrity: sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==, - } + resolution: {integrity: sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==} '@types/markdown-it@13.0.7': - resolution: - { - integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==, - } + resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==} '@types/mdurl@1.0.3': - resolution: - { - integrity: sha512-T5k6kTXak79gwmIOaDF2UUQXFbnBE0zBUzF20pz7wDYu0RQMzWg+Ml/Pz50214NsFHBITkoi5VtdjFZnJ2ijjA==, - } + resolution: {integrity: sha512-T5k6kTXak79gwmIOaDF2UUQXFbnBE0zBUzF20pz7wDYu0RQMzWg+Ml/Pz50214NsFHBITkoi5VtdjFZnJ2ijjA==} '@types/mime@1.3.2': - resolution: - { - integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==, - } + resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} '@types/minimatch@3.0.5': - resolution: - { - integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==, - } + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} '@types/minimatch@5.1.2': - resolution: - { - integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==, - } + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} '@types/minimist@1.2.5': - resolution: - { - integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==, - } + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} '@types/node@18.16.9': - resolution: - { - integrity: sha512-IeB32oIV4oGArLrd7znD2rkHQ6EDCM+2Sr76dJnrHwv9OHBTTM6nuDLK9bmikXzPa0ZlWMWtRGo/Uw4mrzQedA==, - } + resolution: {integrity: sha512-IeB32oIV4oGArLrd7znD2rkHQ6EDCM+2Sr76dJnrHwv9OHBTTM6nuDLK9bmikXzPa0ZlWMWtRGo/Uw4mrzQedA==} '@types/node@20.5.1': - resolution: - { - integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==, - } + resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} '@types/normalize-package-data@2.4.4': - resolution: - { - integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==, - } + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} '@types/parse-json@4.0.0': - resolution: - { - integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==, - } + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} '@types/prettier@2.4.4': - resolution: - { - integrity: sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==, - } + resolution: {integrity: sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==} '@types/pug@2.0.6': - resolution: - { - integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==, - } + resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} '@types/qs@6.9.7': - resolution: - { - integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==, - } + resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} '@types/range-parser@1.2.4': - resolution: - { - integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==, - } + resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} '@types/responselike@1.0.0': - resolution: - { - integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==, - } + resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} '@types/retry@0.12.1': - resolution: - { - integrity: sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==, - } + resolution: {integrity: sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==} '@types/semver@7.5.8': - resolution: - { - integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==, - } + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} '@types/serve-index@1.9.1': - resolution: - { - integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==, - } + resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} '@types/serve-static@1.13.10': - resolution: - { - integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==, - } + resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==} '@types/sockjs@0.3.33': - resolution: - { - integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==, - } + resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} '@types/stack-utils@2.0.1': - resolution: - { - integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==, - } + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} '@types/tough-cookie@4.0.2': - resolution: - { - integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==, - } + resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} '@types/web-bluetooth@0.0.20': - resolution: - { - integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==, - } + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} '@types/ws@8.5.5': - resolution: - { - integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==, - } + resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} '@types/yargs-parser@21.0.0': - resolution: - { - integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==, - } + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} '@types/yargs@17.0.32': - resolution: - { - integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==, - } + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} '@typescript-eslint/eslint-plugin@7.6.0': - resolution: - { - integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==, - } - engines: { node: ^18.18.0 || >=20.0.0 } + resolution: {integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 eslint: ^8.56.0 @@ -4001,11 +2556,8 @@ packages: optional: true '@typescript-eslint/parser@7.6.0': - resolution: - { - integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==, - } - engines: { node: ^18.18.0 || >=20.0.0 } + resolution: {integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 typescript: '*' @@ -4014,18 +2566,12 @@ packages: optional: true '@typescript-eslint/scope-manager@7.6.0': - resolution: - { - integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==, - } - engines: { node: ^18.18.0 || >=20.0.0 } + resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==} + engines: {node: ^18.18.0 || >=20.0.0} '@typescript-eslint/type-utils@7.6.0': - resolution: - { - integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==, - } - engines: { node: ^18.18.0 || >=20.0.0 } + resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 typescript: '*' @@ -4034,18 +2580,12 @@ packages: optional: true '@typescript-eslint/types@7.6.0': - resolution: - { - integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==, - } - engines: { node: ^18.18.0 || >=20.0.0 } + resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==} + engines: {node: ^18.18.0 || >=20.0.0} '@typescript-eslint/typescript-estree@7.6.0': - resolution: - { - integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==, - } - engines: { node: ^18.18.0 || >=20.0.0 } + resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -4053,197 +2593,110 @@ packages: optional: true '@typescript-eslint/utils@7.6.0': - resolution: - { - integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==, - } - engines: { node: ^18.18.0 || >=20.0.0 } + resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 '@typescript-eslint/visitor-keys@7.6.0': - resolution: - { - integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==, - } - engines: { node: ^18.18.0 || >=20.0.0 } + resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==} + engines: {node: ^18.18.0 || >=20.0.0} '@ungap/structured-clone@1.2.0': - resolution: - { - integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==, - } + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} '@verdaccio/commons-api@10.2.0': - resolution: - { - integrity: sha512-F/YZANu4DmpcEV0jronzI7v2fGVWkQ5Mwi+bVmV+ACJ+EzR0c9Jbhtbe5QyLUuzR97t8R5E/Xe53O0cc2LukdQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-F/YZANu4DmpcEV0jronzI7v2fGVWkQ5Mwi+bVmV+ACJ+EzR0c9Jbhtbe5QyLUuzR97t8R5E/Xe53O0cc2LukdQ==} + engines: {node: '>=8'} '@verdaccio/file-locking@10.3.0': - resolution: - { - integrity: sha512-FE5D5H4wy/nhgR/d2J5e1Na9kScj2wMjlLPBHz7XF4XZAVSRdm45+kL3ZmrfA6b2HTADP/uH7H05/cnAYW8bhw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-FE5D5H4wy/nhgR/d2J5e1Na9kScj2wMjlLPBHz7XF4XZAVSRdm45+kL3ZmrfA6b2HTADP/uH7H05/cnAYW8bhw==} + engines: {node: '>=8'} '@verdaccio/local-storage@10.3.1': - resolution: - { - integrity: sha512-f3oArjXPOAwUAA2dsBhfL/rSouqJ2sfml8k97RtnBPKOzisb28bgyAQW0mqwQvN4MTK5S/2xudmobFpvJAIatg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-f3oArjXPOAwUAA2dsBhfL/rSouqJ2sfml8k97RtnBPKOzisb28bgyAQW0mqwQvN4MTK5S/2xudmobFpvJAIatg==} + engines: {node: '>=8'} '@verdaccio/streams@10.2.0': - resolution: - { - integrity: sha512-FaIzCnDg0x0Js5kSQn1Le3YzDHl7XxrJ0QdIw5LrDUmLsH3VXNi4/NMlSHnw5RiTTMs4UbEf98V3RJRB8exqJA==, - } - engines: { node: '>=8', npm: '>=5' } + resolution: {integrity: sha512-FaIzCnDg0x0Js5kSQn1Le3YzDHl7XxrJ0QdIw5LrDUmLsH3VXNi4/NMlSHnw5RiTTMs4UbEf98V3RJRB8exqJA==} + engines: {node: '>=8', npm: '>=5'} '@verdaccio/ui-theme@6.0.0-6-next.51': - resolution: - { - integrity: sha512-koDx4VeTXdAz51XAjrNc3cQO/LeyNl3aQHmYGviozMVPly/nXj2XXqVdPfPZZDMtbmtMRJ+ychCkhqrJPN3Vng==, - } + resolution: {integrity: sha512-koDx4VeTXdAz51XAjrNc3cQO/LeyNl3aQHmYGviozMVPly/nXj2XXqVdPfPZZDMtbmtMRJ+ychCkhqrJPN3Vng==} '@vitejs/plugin-basic-ssl@1.0.1': - resolution: - { - integrity: sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==, - } - engines: { node: '>=14.6.0' } + resolution: {integrity: sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==} + engines: {node: '>=14.6.0'} peerDependencies: vite: ^3.0.0 || ^4.0.0 '@vitejs/plugin-vue@5.0.4': - resolution: - { - integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==, - } - engines: { node: ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} + engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 vue: ^3.2.25 '@vitest/expect@1.3.1': - resolution: - { - integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==, - } + resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} '@vitest/runner@1.3.1': - resolution: - { - integrity: sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==, - } + resolution: {integrity: sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==} '@vitest/snapshot@1.3.1': - resolution: - { - integrity: sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==, - } + resolution: {integrity: sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==} '@vitest/spy@1.3.1': - resolution: - { - integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==, - } + resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} '@vitest/utils@1.3.1': - resolution: - { - integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==, - } + resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} '@vue/compiler-core@3.4.21': - resolution: - { - integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==, - } + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} '@vue/compiler-dom@3.4.21': - resolution: - { - integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==, - } + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} '@vue/compiler-sfc@3.4.21': - resolution: - { - integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==, - } + resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} '@vue/compiler-ssr@3.4.21': - resolution: - { - integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==, - } + resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} '@vue/devtools-api@7.0.27': - resolution: - { - integrity: sha512-BFCFCusSDcw2UcOFD/QeK7OxD1x2C/m+uAN30Q7jLKECSW53hmz0urzJmX834GuWDZX/hIxkyUKnLLfEIP1c/w==, - } + resolution: {integrity: sha512-BFCFCusSDcw2UcOFD/QeK7OxD1x2C/m+uAN30Q7jLKECSW53hmz0urzJmX834GuWDZX/hIxkyUKnLLfEIP1c/w==} '@vue/devtools-kit@7.0.27': - resolution: - { - integrity: sha512-/A5xM38pPCFX5Yhl/lRFAzjyK6VNsH670nww2WbjFKWqlu3I+lMxWKzQkCW6A1V8bduITgl2kHORfg2gTw6QaA==, - } + resolution: {integrity: sha512-/A5xM38pPCFX5Yhl/lRFAzjyK6VNsH670nww2WbjFKWqlu3I+lMxWKzQkCW6A1V8bduITgl2kHORfg2gTw6QaA==} peerDependencies: vue: ^3.0.0 '@vue/devtools-shared@7.0.27': - resolution: - { - integrity: sha512-4VxtmZ6yjhiSloqZZq2UYU0TBGxOJ8GxWvp5OlAH70zYqi0FIAyWGPkOhvfoZ7DKQyv2UU0mmKzFHjsEkelGyQ==, - } + resolution: {integrity: sha512-4VxtmZ6yjhiSloqZZq2UYU0TBGxOJ8GxWvp5OlAH70zYqi0FIAyWGPkOhvfoZ7DKQyv2UU0mmKzFHjsEkelGyQ==} '@vue/reactivity@3.4.21': - resolution: - { - integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==, - } + resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==} '@vue/runtime-core@3.4.21': - resolution: - { - integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==, - } + resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==} '@vue/runtime-dom@3.4.21': - resolution: - { - integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==, - } + resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==} '@vue/server-renderer@3.4.21': - resolution: - { - integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==, - } + resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==} peerDependencies: vue: 3.4.21 '@vue/shared@3.4.21': - resolution: - { - integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==, - } + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} '@vueuse/core@10.9.0': - resolution: - { - integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==, - } + resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} '@vueuse/integrations@10.9.0': - resolution: - { - integrity: sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==, - } + resolution: {integrity: sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==} peerDependencies: async-validator: '*' axios: '*' @@ -4284,260 +2737,143 @@ packages: optional: true '@vueuse/metadata@10.9.0': - resolution: - { - integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==, - } + resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==} '@vueuse/shared@10.9.0': - resolution: - { - integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==, - } + resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} '@webassemblyjs/ast@1.11.5': - resolution: - { - integrity: sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==, - } + resolution: {integrity: sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==} '@webassemblyjs/floating-point-hex-parser@1.11.5': - resolution: - { - integrity: sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==, - } + resolution: {integrity: sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==} '@webassemblyjs/helper-api-error@1.11.5': - resolution: - { - integrity: sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==, - } + resolution: {integrity: sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==} '@webassemblyjs/helper-buffer@1.11.5': - resolution: - { - integrity: sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==, - } + resolution: {integrity: sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==} '@webassemblyjs/helper-numbers@1.11.5': - resolution: - { - integrity: sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==, - } + resolution: {integrity: sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==} '@webassemblyjs/helper-wasm-bytecode@1.11.5': - resolution: - { - integrity: sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==, - } + resolution: {integrity: sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==} '@webassemblyjs/helper-wasm-section@1.11.5': - resolution: - { - integrity: sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==, - } + resolution: {integrity: sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==} '@webassemblyjs/ieee754@1.11.5': - resolution: - { - integrity: sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==, - } + resolution: {integrity: sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==} '@webassemblyjs/leb128@1.11.5': - resolution: - { - integrity: sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==, - } + resolution: {integrity: sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==} '@webassemblyjs/utf8@1.11.5': - resolution: - { - integrity: sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==, - } + resolution: {integrity: sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==} '@webassemblyjs/wasm-edit@1.11.5': - resolution: - { - integrity: sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==, - } + resolution: {integrity: sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==} '@webassemblyjs/wasm-gen@1.11.5': - resolution: - { - integrity: sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==, - } + resolution: {integrity: sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==} '@webassemblyjs/wasm-opt@1.11.5': - resolution: - { - integrity: sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==, - } + resolution: {integrity: sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==} '@webassemblyjs/wasm-parser@1.11.5': - resolution: - { - integrity: sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==, - } + resolution: {integrity: sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==} '@webassemblyjs/wast-printer@1.11.5': - resolution: - { - integrity: sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==, - } + resolution: {integrity: sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==} '@wessberg/ts-evaluator@0.0.27': - resolution: - { - integrity: sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA==, - } - engines: { node: '>=10.1.0' } + resolution: {integrity: sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA==} + engines: {node: '>=10.1.0'} deprecated: this package has been renamed to ts-evaluator. Please install ts-evaluator instead peerDependencies: typescript: '>=3.2.x || >= 4.x' '@xtuc/ieee754@1.2.0': - resolution: - { - integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, - } + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} '@xtuc/long@4.2.2': - resolution: - { - integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, - } + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} '@yarnpkg/lockfile@1.1.0': - resolution: - { - integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==, - } + resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} '@yarnpkg/parsers@3.0.0-rc.46': - resolution: - { - integrity: sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==, - } - engines: { node: '>=14.15.0' } + resolution: {integrity: sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==} + engines: {node: '>=14.15.0'} '@zkochan/js-yaml@0.0.7': - resolution: - { - integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==, - } + resolution: {integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==} hasBin: true JSONStream@1.3.5: - resolution: - { - integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==, - } + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true abab@2.0.6: - resolution: - { - integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==, - } + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} accepts@1.3.8: - resolution: - { - integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} acorn-globals@6.0.0: - resolution: - { - integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==, - } + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} acorn-globals@7.0.1: - resolution: - { - integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==, - } + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} acorn-import-assertions@1.9.0: - resolution: - { - integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==, - } + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 acorn-jsx@5.3.2: - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, - } + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn-walk@7.2.0: - resolution: - { - integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==, - } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} acorn-walk@8.3.2: - resolution: - { - integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==, - } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} acorn@7.4.1: - resolution: - { - integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==, - } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} hasBin: true acorn@8.10.0: - resolution: - { - integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==, - } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} hasBin: true address@1.2.2: - resolution: - { - integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==, - } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} adjust-sourcemap-loader@4.0.0: - resolution: - { - integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==, - } - engines: { node: '>=8.9' } + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} agent-base@6.0.2: - resolution: - { - integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==, - } - engines: { node: '>= 6.0.0' } + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} aggregate-error@3.1.0: - resolution: - { - integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} ajv-formats@2.1.1: - resolution: - { - integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==, - } + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: @@ -4545,410 +2881,236 @@ packages: optional: true ajv-keywords@3.5.2: - resolution: - { - integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==, - } + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: ajv: ^6.9.1 ajv-keywords@5.1.0: - resolution: - { - integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==, - } + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 ajv@6.12.6: - resolution: - { - integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, - } + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} ajv@8.12.0: - resolution: - { - integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==, - } + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} algoliasearch@4.19.1: - resolution: - { - integrity: sha512-IJF5b93b2MgAzcE/tuzW0yOPnuUyRgGAtaPv5UUywXM8kzqfdwZTO4sPJBzoGz1eOy6H9uEchsJsBFTELZSu+g==, - } + resolution: {integrity: sha512-IJF5b93b2MgAzcE/tuzW0yOPnuUyRgGAtaPv5UUywXM8kzqfdwZTO4sPJBzoGz1eOy6H9uEchsJsBFTELZSu+g==} all-contributors-cli@6.26.1: - resolution: - { - integrity: sha512-Ymgo3FJACRBEd1eE653FD1J/+uD0kqpUNYfr9zNC1Qby0LgbhDBzB3EF6uvkAbYpycStkk41J+0oo37Lc02yEw==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-Ymgo3FJACRBEd1eE653FD1J/+uD0kqpUNYfr9zNC1Qby0LgbhDBzB3EF6uvkAbYpycStkk41J+0oo37Lc02yEw==} + engines: {node: '>=4'} hasBin: true ansi-colors@4.1.3: - resolution: - { - integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} ansi-escapes@4.3.2: - resolution: - { - integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} ansi-html-community@0.0.8: - resolution: - { - integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==, - } - engines: { '0': node >= 0.8.0 } + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} hasBin: true ansi-regex@5.0.1: - resolution: - { - integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} ansi-regex@6.0.1: - resolution: - { - integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} ansi-styles@3.2.1: - resolution: - { - integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} ansi-styles@4.3.0: - resolution: - { - integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} ansi-styles@5.2.0: - resolution: - { - integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} ansi-styles@6.1.0: - resolution: - { - integrity: sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==} + engines: {node: '>=12'} anymatch@3.1.3: - resolution: - { - integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} apache-md5@1.1.8: - resolution: - { - integrity: sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==} + engines: {node: '>=8'} arch@2.2.0: - resolution: - { - integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==, - } + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} arg@4.1.3: - resolution: - { - integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, - } + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} argparse@1.0.10: - resolution: - { - integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, - } + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} argparse@2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, - } + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} aria-query@5.3.0: - resolution: - { - integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==, - } + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} array-differ@3.0.0: - resolution: - { - integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} + engines: {node: '>=8'} array-flatten@1.1.1: - resolution: - { - integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==, - } + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} array-flatten@2.1.2: - resolution: - { - integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==, - } + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} array-ify@1.0.0: - resolution: - { - integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==, - } + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} array-union@2.1.0: - resolution: - { - integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} array-union@3.0.1: - resolution: - { - integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} + engines: {node: '>=12'} arrify@1.0.1: - resolution: - { - integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} arrify@2.0.1: - resolution: - { - integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} asn1@0.2.6: - resolution: - { - integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==, - } + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} assert-plus@1.0.0: - resolution: - { - integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==, - } - engines: { node: '>=0.8' } + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} assertion-error@1.1.0: - resolution: - { - integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==, - } + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} astral-regex@2.0.0: - resolution: - { - integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} async@2.6.4: - resolution: - { - integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==, - } + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} async@3.2.4: - resolution: - { - integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==, - } + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} asynckit@0.4.0: - resolution: - { - integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, - } + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} at-least-node@1.0.0: - resolution: - { - integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==, - } - engines: { node: '>= 4.0.0' } + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} atomic-sleep@1.0.0: - resolution: - { - integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==, - } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} autoprefixer@10.4.14: - resolution: - { - integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 autoprefixer@10.4.15: - resolution: - { - integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} + engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 aws-sign2@0.7.0: - resolution: - { - integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==, - } + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} aws4@1.11.0: - resolution: - { - integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==, - } + resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==} axios@1.6.7: - resolution: - { - integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==, - } + resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} axobject-query@4.0.0: - resolution: - { - integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==, - } + resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} babel-jest@29.5.0: - resolution: - { - integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 babel-loader@9.1.3: - resolution: - { - integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==, - } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} + engines: {node: '>= 14.15.0'} peerDependencies: '@babel/core': ^7.12.0 webpack: '>=5' babel-plugin-const-enum@1.2.0: - resolution: - { - integrity: sha512-o1m/6iyyFnp9MRsK1dHF3bneqyf3AlM2q3A/YbgQr2pCat6B6XJVDv2TXqzfY2RYUi4mak6WAksSBPlyYGx9dg==, - } + resolution: {integrity: sha512-o1m/6iyyFnp9MRsK1dHF3bneqyf3AlM2q3A/YbgQr2pCat6B6XJVDv2TXqzfY2RYUi4mak6WAksSBPlyYGx9dg==} peerDependencies: '@babel/core': ^7.0.0-0 babel-plugin-istanbul@6.1.1: - resolution: - { - integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} babel-plugin-jest-hoist@29.5.0: - resolution: - { - integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} babel-plugin-jsx-dom-expressions@0.37.17: - resolution: - { - integrity: sha512-1bv8rOTzs6TR3DVyVZ7ElxyPEhnS556FMWRIsB3gBPfkn/cSKaLvXLGk+X1lvI+SzcUo4G+UcmJrn3vr1ig8mQ==, - } + resolution: {integrity: sha512-1bv8rOTzs6TR3DVyVZ7ElxyPEhnS556FMWRIsB3gBPfkn/cSKaLvXLGk+X1lvI+SzcUo4G+UcmJrn3vr1ig8mQ==} peerDependencies: '@babel/core': ^7.20.12 babel-plugin-macros@2.8.0: - resolution: - { - integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==, - } + resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} babel-plugin-polyfill-corejs2@0.4.9: - resolution: - { - integrity: sha512-BXIWIaO3MewbXWdJdIGDWZurv5OGJlFNo7oy20DpB3kWDVJLcY2NRypRsRUbRe5KMqSNLuOGnWTFQQtY5MAsRw==, - } + resolution: {integrity: sha512-BXIWIaO3MewbXWdJdIGDWZurv5OGJlFNo7oy20DpB3kWDVJLcY2NRypRsRUbRe5KMqSNLuOGnWTFQQtY5MAsRw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 babel-plugin-polyfill-corejs3@0.8.3: - resolution: - { - integrity: sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==, - } + resolution: {integrity: sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 babel-plugin-polyfill-corejs3@0.9.0: - resolution: - { - integrity: sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==, - } + resolution: {integrity: sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 babel-plugin-polyfill-regenerator@0.5.5: - resolution: - { - integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==, - } + resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 babel-plugin-transform-hook-names@1.0.2: - resolution: - { - integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==, - } + resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==} peerDependencies: '@babel/core': ^7.12.10 babel-plugin-transform-typescript-metadata@0.3.2: - resolution: - { - integrity: sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg==, - } + resolution: {integrity: sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg==} peerDependencies: '@babel/core': ^7 '@babel/traverse': ^7 @@ -4957,757 +3119,427 @@ packages: optional: true babel-preset-current-node-syntax@1.0.1: - resolution: - { - integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==, - } + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 babel-preset-jest@29.5.0: - resolution: - { - integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 babel-preset-solid@1.8.15: - resolution: - { - integrity: sha512-P2yOQbB7Hn/m4YvpXV6ExHIMcgNWXWXcvY4kJzG3yqAB3hKS58OZRsvJ7RObsZWqXRvZTITBIwnpK0BMGu+ZIQ==, - } + resolution: {integrity: sha512-P2yOQbB7Hn/m4YvpXV6ExHIMcgNWXWXcvY4kJzG3yqAB3hKS58OZRsvJ7RObsZWqXRvZTITBIwnpK0BMGu+ZIQ==} peerDependencies: '@babel/core': ^7.0.0 balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, - } + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} base64-js@1.5.1: - resolution: - { - integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, - } + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} basic-auth@2.0.1: - resolution: - { - integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} batch@0.6.1: - resolution: { integrity: sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= } + resolution: {integrity: sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=} bcrypt-pbkdf@1.0.2: - resolution: - { - integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==, - } + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} bcryptjs@2.4.3: - resolution: { integrity: sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms= } + resolution: {integrity: sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=} big.js@5.2.2: - resolution: - { - integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==, - } + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} bin-check@4.1.0: - resolution: - { - integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==} + engines: {node: '>=4'} bin-version-check@5.0.0: - resolution: - { - integrity: sha512-Q3FMQnS5eZmrBGqmDXLs4dbAn/f+52voP6ykJYmweSA60t6DyH4UTSwZhtbK5UH+LBoWvDljILUQMLRUtsynsA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-Q3FMQnS5eZmrBGqmDXLs4dbAn/f+52voP6ykJYmweSA60t6DyH4UTSwZhtbK5UH+LBoWvDljILUQMLRUtsynsA==} + engines: {node: '>=12'} bin-version@6.0.0: - resolution: - { - integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==} + engines: {node: '>=12'} binary-extensions@2.2.0: - resolution: - { - integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} bl@4.1.0: - resolution: - { - integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, - } + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} body-parser@1.20.1: - resolution: - { - integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==, - } - engines: { node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16 } + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} bonjour-service@1.0.13: - resolution: - { - integrity: sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==, - } + resolution: {integrity: sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==} boolbase@1.0.0: - resolution: - { - integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, - } + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} brace-expansion@1.1.11: - resolution: - { - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, - } + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} brace-expansion@2.0.1: - resolution: - { - integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, - } + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} braces@3.0.2: - resolution: - { - integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} browser-process-hrtime@1.0.0: - resolution: - { - integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==, - } + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} browserslist@4.23.0: - resolution: - { - integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==, - } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true bs-logger@0.2.6: - resolution: - { - integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} bser@2.1.1: - resolution: - { - integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, - } + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} buffer-crc32@0.2.13: - resolution: - { - integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==, - } + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} buffer-equal-constant-time@1.0.1: - resolution: { integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= } + resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=} buffer-from@1.1.2: - resolution: - { - integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, - } + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} buffer@5.7.1: - resolution: - { - integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, - } + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} builtin-modules@1.1.1: - resolution: - { - integrity: sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==} + engines: {node: '>=0.10.0'} builtins@5.0.1: - resolution: - { - integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==, - } + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} bytes@3.0.0: - resolution: - { - integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} bytes@3.1.2: - resolution: - { - integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} cac@6.7.14: - resolution: - { - integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} cacheable-lookup@5.0.4: - resolution: - { - integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==, - } - engines: { node: '>=10.6.0' } + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} cacheable-request@7.0.2: - resolution: - { - integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==} + engines: {node: '>=8'} cachedir@2.3.0: - resolution: - { - integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} + engines: {node: '>=6'} call-bind@1.0.2: - resolution: - { - integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, - } + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} callsites@3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} camelcase-keys@6.2.2: - resolution: - { - integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} camelcase@5.3.1: - resolution: - { - integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} camelcase@6.3.0: - resolution: - { - integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} caniuse-api@3.0.0: - resolution: - { - integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==, - } + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} caniuse-lite@1.0.30001597: - resolution: - { - integrity: sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==, - } + resolution: {integrity: sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==} caseless@0.12.0: - resolution: - { - integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==, - } + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} chai@4.3.10: - resolution: - { - integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + engines: {node: '>=4'} chalk@2.4.2: - resolution: - { - integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} chalk@3.0.0: - resolution: - { - integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} chalk@4.1.0: - resolution: - { - integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==} + engines: {node: '>=10'} chalk@4.1.2: - resolution: - { - integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} chalk@5.2.0: - resolution: - { - integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==, - } - engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} char-regex@1.0.2: - resolution: - { - integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} chardet@0.7.0: - resolution: - { - integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, - } + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} check-error@1.0.3: - resolution: - { - integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==, - } + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} chokidar@3.5.3: - resolution: - { - integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, - } - engines: { node: '>= 8.10.0' } + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} chrome-trace-event@1.0.3: - resolution: - { - integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==, - } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} ci-info@3.8.0: - resolution: - { - integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} cjs-module-lexer@1.2.2: - resolution: - { - integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==, - } + resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} clean-stack@2.2.0: - resolution: - { - integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} cli-cursor@3.1.0: - resolution: - { - integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} cli-spinners@2.6.1: - resolution: - { - integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} + engines: {node: '>=6'} cli-truncate@2.1.0: - resolution: - { - integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} cli-truncate@3.1.0: - resolution: - { - integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} cli-width@3.0.0: - resolution: - { - integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} clipanion@3.1.0: - resolution: - { - integrity: sha512-v025Hz+IDQ15FpOyK8p02h5bFznMu6rLFsJSyOPR+7WrbSnZ1Ek6pblPukV7K5tC/dsWfncQPIrJ4iUy2PXkbw==, - } + resolution: {integrity: sha512-v025Hz+IDQ15FpOyK8p02h5bFznMu6rLFsJSyOPR+7WrbSnZ1Ek6pblPukV7K5tC/dsWfncQPIrJ4iUy2PXkbw==} peerDependencies: typanion: '*' cliui@6.0.0: - resolution: - { - integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, - } + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} cliui@8.0.1: - resolution: - { - integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} clone-deep@4.0.1: - resolution: - { - integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} clone-response@1.0.3: - resolution: - { - integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==, - } + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} clone@1.0.4: - resolution: - { - integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, - } - engines: { node: '>=0.8' } + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} co@4.6.0: - resolution: - { - integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==, - } - engines: { iojs: '>= 1.0.0', node: '>= 0.12.0' } + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} code-red@1.0.4: - resolution: - { - integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==, - } + resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} collect-v8-coverage@1.0.1: - resolution: - { - integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==, - } + resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} color-convert@1.9.3: - resolution: - { - integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, - } + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} color-convert@2.0.1: - resolution: - { - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, - } - engines: { node: '>=7.0.0' } + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} color-name@1.1.3: - resolution: - { - integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, - } + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} color-name@1.1.4: - resolution: - { - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, - } + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} colord@2.9.2: - resolution: - { - integrity: sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==, - } + resolution: {integrity: sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==} colorette@2.0.19: - resolution: - { - integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==, - } + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} colorette@2.0.20: - resolution: - { - integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, - } + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} columnify@1.6.0: - resolution: - { - integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==, - } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==} + engines: {node: '>=8.0.0'} combined-stream@1.0.8: - resolution: - { - integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} commander@10.0.1: - resolution: - { - integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} commander@2.20.3: - resolution: - { - integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, - } + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} commander@7.2.0: - resolution: - { - integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} commander@8.3.0: - resolution: - { - integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, - } - engines: { node: '>= 12' } + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} commitizen@4.3.0: - resolution: - { - integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==, - } - engines: { node: '>= 12' } + resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} + engines: {node: '>= 12'} hasBin: true common-path-prefix@3.0.0: - resolution: - { - integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==, - } + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} commondir@1.0.1: - resolution: - { - integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, - } + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} compare-func@2.0.0: - resolution: - { - integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==, - } + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} compressible@2.0.18: - resolution: - { - integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} compression@1.7.4: - resolution: - { - integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} concat-map@0.0.1: - resolution: { integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= } + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} confusing-browser-globals@1.0.11: - resolution: - { - integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==, - } + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} connect-history-api-fallback@2.0.0: - resolution: - { - integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==, - } - engines: { node: '>=0.8' } + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} content-disposition@0.5.4: - resolution: - { - integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} content-type@1.0.4: - resolution: - { - integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + engines: {node: '>= 0.6'} conventional-changelog-angular@6.0.0: - resolution: - { - integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==} + engines: {node: '>=14'} conventional-changelog-conventionalcommits@6.1.0: - resolution: - { - integrity: sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==} + engines: {node: '>=14'} conventional-commit-types@3.0.0: - resolution: - { - integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==, - } + resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} conventional-commits-parser@4.0.0: - resolution: - { - integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} + engines: {node: '>=14'} hasBin: true convert-source-map@1.8.0: - resolution: - { - integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==, - } + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} convert-source-map@2.0.0: - resolution: - { - integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, - } + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} cookie-signature@1.0.6: - resolution: { integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw= } + resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} cookie@0.5.0: - resolution: - { - integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} cookies@0.8.0: - resolution: - { - integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==} + engines: {node: '>= 0.8'} copy-anything@2.0.6: - resolution: - { - integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==, - } + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} copy-webpack-plugin@10.2.4: - resolution: - { - integrity: sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==, - } - engines: { node: '>= 12.20.0' } + resolution: {integrity: sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==} + engines: {node: '>= 12.20.0'} peerDependencies: webpack: ^5.1.0 copy-webpack-plugin@11.0.0: - resolution: - { - integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==, - } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} + engines: {node: '>= 14.15.0'} peerDependencies: webpack: ^5.1.0 core-js-compat@3.36.0: - resolution: - { - integrity: sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==, - } + resolution: {integrity: sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==} core-util-is@1.0.2: - resolution: - { - integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==, - } + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} core-util-is@1.0.3: - resolution: - { - integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, - } + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} cors@2.8.5: - resolution: - { - integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==, - } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} corser@2.0.1: - resolution: - { - integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==, - } - engines: { node: '>= 0.4.0' } + resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} + engines: {node: '>= 0.4.0'} cosmiconfig-typescript-loader@4.4.0: - resolution: - { - integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==, - } - engines: { node: '>=v14.21.3' } + resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} + engines: {node: '>=v14.21.3'} peerDependencies: '@types/node': '*' cosmiconfig: '>=7' @@ -5715,75 +3547,45 @@ packages: typescript: '>=4' cosmiconfig@6.0.0: - resolution: - { - integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} cosmiconfig@7.0.1: - resolution: - { - integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} + engines: {node: '>=10'} cosmiconfig@8.2.0: - resolution: - { - integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} + engines: {node: '>=14'} create-require@1.1.1: - resolution: - { - integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==, - } + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} critters@0.0.20: - resolution: - { - integrity: sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==, - } + resolution: {integrity: sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==} cross-spawn@5.1.0: - resolution: - { - integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==, - } + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} cross-spawn@7.0.3: - resolution: - { - integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} css-declaration-sorter@6.4.0: - resolution: - { - integrity: sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==} + engines: {node: ^10 || ^12 || >=14} peerDependencies: postcss: ^8.0.9 css-loader@6.8.1: - resolution: - { - integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==, - } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} + engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 css-minimizer-webpack-plugin@5.0.1: - resolution: - { - integrity: sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==, - } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==} + engines: {node: '>= 14.15.0'} peerDependencies: '@parcel/css': '*' '@swc/css': '*' @@ -5807,164 +3609,95 @@ packages: optional: true css-select@5.1.0: - resolution: - { - integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==, - } + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} css-tree@2.2.1: - resolution: - { - integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==, - } - engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0' } + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} css-tree@2.3.1: - resolution: - { - integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==, - } - engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0 } + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} css-what@6.1.0: - resolution: - { - integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} cssesc@3.0.0: - resolution: - { - integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} hasBin: true cssnano-preset-default@6.0.1: - resolution: - { - integrity: sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 cssnano-utils@4.0.0: - resolution: - { - integrity: sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 cssnano@6.0.1: - resolution: - { - integrity: sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 csso@5.0.5: - resolution: - { - integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==, - } - engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0' } + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} cssom@0.3.8: - resolution: - { - integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==, - } + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} cssom@0.4.4: - resolution: - { - integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==, - } + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} cssom@0.5.0: - resolution: - { - integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==, - } + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} cssstyle@2.3.0: - resolution: - { - integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} csstype@3.1.3: - resolution: - { - integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==, - } + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} cz-conventional-changelog@3.3.0: - resolution: - { - integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} + engines: {node: '>= 10'} cz-customizable@6.9.1: - resolution: - { - integrity: sha512-syPyuOyV/+cEXbky8x/MIyWvJmzwhucdI1CA3swydxrMz5ey02HQ1zVDkMmtWT/cpKfELCn7uw2w8WUvXkr56g==, - } + resolution: {integrity: sha512-syPyuOyV/+cEXbky8x/MIyWvJmzwhucdI1CA3swydxrMz5ey02HQ1zVDkMmtWT/cpKfELCn7uw2w8WUvXkr56g==} hasBin: true d@1.0.1: - resolution: - { - integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==, - } + resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} dargs@7.0.0: - resolution: - { - integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} dashdash@1.14.1: - resolution: - { - integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==, - } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} data-urls@2.0.0: - resolution: - { - integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} data-urls@3.0.2: - resolution: - { - integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} + engines: {node: '>=12'} dayjs@1.11.6: - resolution: - { - integrity: sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==, - } + resolution: {integrity: sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==} debug@2.6.9: - resolution: - { - integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, - } + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -5972,10 +3705,7 @@ packages: optional: true debug@3.2.7: - resolution: - { - integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, - } + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -5983,11 +3713,8 @@ packages: optional: true debug@4.3.1: - resolution: - { - integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==, - } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -5995,11 +3722,8 @@ packages: optional: true debug@4.3.4: - resolution: - { - integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, - } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -6007,1037 +3731,584 @@ packages: optional: true decamelize-keys@1.1.1: - resolution: - { - integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} decamelize@1.2.0: - resolution: - { - integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} decimal.js@10.4.3: - resolution: - { - integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==, - } + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} decompress-response@6.0.0: - resolution: - { - integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} dedent@0.7.0: - resolution: - { - integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==, - } + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} deep-eql@4.1.3: - resolution: - { - integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} deep-is@0.1.4: - resolution: - { - integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, - } + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} deepmerge@4.3.1: - resolution: - { - integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} default-gateway@6.0.3: - resolution: - { - integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} defaults@1.0.3: - resolution: - { - integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==, - } + resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==} defer-to-connect@2.0.1: - resolution: - { - integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} define-lazy-prop@2.0.0: - resolution: - { - integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} delayed-stream@1.0.0: - resolution: - { - integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, - } - engines: { node: '>=0.4.0' } + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} depd@1.1.2: - resolution: - { - integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} depd@2.0.0: - resolution: - { - integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} dequal@2.0.3: - resolution: - { - integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} destroy@1.2.0: - resolution: - { - integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==, - } - engines: { node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16 } + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} detect-file@1.0.0: - resolution: - { - integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} + engines: {node: '>=0.10.0'} detect-indent@6.1.0: - resolution: - { - integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} detect-newline@3.1.0: - resolution: - { - integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} detect-node@2.1.0: - resolution: - { - integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==, - } + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} detect-port@1.5.1: - resolution: - { - integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==, - } + resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} hasBin: true didyoumean@1.2.2: - resolution: - { - integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==, - } + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} diff-sequences@29.6.3: - resolution: - { - integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} diff@4.0.2: - resolution: - { - integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, - } - engines: { node: '>=0.3.1' } + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} dir-glob@3.0.1: - resolution: - { - integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dns-equal@1.0.0: - resolution: - { - integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==, - } + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} dns-packet@5.3.1: - resolution: - { - integrity: sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw==} + engines: {node: '>=6'} doctrine@3.0.0: - resolution: - { - integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dom-serializer@2.0.0: - resolution: - { - integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==, - } + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} domelementtype@2.3.0: - resolution: - { - integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, - } + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} domexception@2.0.1: - resolution: - { - integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} deprecated: Use your platform's native DOMException instead domexception@4.0.0: - resolution: - { - integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} domhandler@5.0.3: - resolution: - { - integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==, - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} domutils@3.1.0: - resolution: - { - integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==, - } + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} dot-case@3.0.4: - resolution: - { - integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==, - } + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dot-prop@5.3.0: - resolution: - { - integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} dotenv-expand@10.0.0: - resolution: - { - integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} dotenv@16.3.1: - resolution: - { - integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} duplexer@0.1.2: - resolution: - { - integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==, - } + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} eastasianwidth@0.2.0: - resolution: - { - integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, - } + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} ecc-jsbn@0.1.2: - resolution: - { - integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==, - } + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} ecdsa-sig-formatter@1.0.11: - resolution: - { - integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==, - } + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} editor@1.0.0: - resolution: { integrity: sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= } + resolution: {integrity: sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=} ee-first@1.1.1: - resolution: { integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= } + resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} ejs@3.1.7: - resolution: - { - integrity: sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==} + engines: {node: '>=0.10.0'} hasBin: true electron-to-chromium@1.4.699: - resolution: - { - integrity: sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==, - } + resolution: {integrity: sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==} emittery@0.13.1: - resolution: - { - integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} emoji-regex@8.0.0: - resolution: - { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, - } + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: - resolution: - { - integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, - } + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} emojis-list@3.0.0: - resolution: - { - integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==, - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} encodeurl@1.0.2: - resolution: - { - integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} end-of-stream@1.4.4: - resolution: - { - integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, - } + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} enhanced-resolve@5.15.0: - resolution: - { - integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==, - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} enquirer@2.3.6: - resolution: - { - integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==, - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + engines: {node: '>=8.6'} entities@4.5.0: - resolution: - { - integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, - } - engines: { node: '>=0.12' } + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} envinfo@7.8.1: - resolution: - { - integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} + engines: {node: '>=4'} hasBin: true errno@0.1.8: - resolution: - { - integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, - } + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true error-ex@1.3.2: - resolution: - { - integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, - } + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} es-module-lexer@1.2.1: - resolution: - { - integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==, - } + resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} es5-ext@0.10.62: - resolution: - { - integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==, - } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} + engines: {node: '>=0.10'} es6-iterator@2.0.3: - resolution: - { - integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==, - } + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} es6-promise@3.3.1: - resolution: - { - integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==, - } + resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} es6-symbol@3.1.3: - resolution: - { - integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==, - } + resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} es6-weak-map@2.0.3: - resolution: - { - integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==, - } + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} esbuild-wasm@0.18.17: - resolution: - { - integrity: sha512-9OHGcuRzy+I8ziF9FzjfKLWAPbvi0e/metACVg9k6bK+SI4FFxeV6PcZsz8RIVaMD4YNehw+qj6UMR3+qj/EuQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-9OHGcuRzy+I8ziF9FzjfKLWAPbvi0e/metACVg9k6bK+SI4FFxeV6PcZsz8RIVaMD4YNehw+qj6UMR3+qj/EuQ==} + engines: {node: '>=12'} hasBin: true esbuild@0.18.17: - resolution: - { - integrity: sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==} + engines: {node: '>=12'} hasBin: true esbuild@0.18.20: - resolution: - { - integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} hasBin: true esbuild@0.20.2: - resolution: - { - integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} hasBin: true escalade@3.1.1: - resolution: - { - integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} escape-html@1.0.3: - resolution: - { - integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, - } + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} escape-string-regexp@1.0.5: - resolution: - { - integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, - } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} escape-string-regexp@2.0.0: - resolution: - { - integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} escape-string-regexp@4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} escape-string-regexp@5.0.0: - resolution: - { - integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} escodegen@2.0.0: - resolution: - { - integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==, - } - engines: { node: '>=6.0' } + resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + engines: {node: '>=6.0'} hasBin: true eslint-config-prettier@9.0.0: - resolution: - { - integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==, - } + resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' eslint-import-resolver-node@0.3.6: - resolution: - { - integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==, - } + resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} eslint-plugin-cypress@2.14.0: - resolution: - { - integrity: sha512-eW6tv7iIg7xujleAJX4Ujm649Bf5jweqa4ObPEIuueYRyLZt7qXGWhCY/n4bfeFW/j6nQZwbIBHKZt6EKcL/cg==, - } + resolution: {integrity: sha512-eW6tv7iIg7xujleAJX4Ujm649Bf5jweqa4ObPEIuueYRyLZt7qXGWhCY/n4bfeFW/j6nQZwbIBHKZt6EKcL/cg==} peerDependencies: eslint: '>= 3.2.1' eslint-plugin-svelte3@4.0.0: - resolution: - { - integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==, - } + resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==} peerDependencies: eslint: '>=8.0.0' svelte: ^3.2.0 eslint-scope@5.1.1: - resolution: - { - integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, - } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} eslint-scope@7.2.2: - resolution: - { - integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} eslint-visitor-keys@3.4.3: - resolution: - { - integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} eslint@8.57.0: - resolution: - { - integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true espree@9.6.1: - resolution: - { - integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} esprima@4.0.1: - resolution: - { - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true esquery@1.5.0: - resolution: - { - integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, - } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} esrecurse@4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} estraverse@4.3.0: - resolution: - { - integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} estree-walker@2.0.2: - resolution: - { - integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, - } + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} estree-walker@3.0.3: - resolution: - { - integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, - } + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} etag@1.8.1: - resolution: - { - integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} event-emitter@0.3.5: - resolution: - { - integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==, - } + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} eventemitter-asyncresource@1.0.0: - resolution: - { - integrity: sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==, - } + resolution: {integrity: sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==} eventemitter3@4.0.7: - resolution: - { - integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, - } + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} events@3.3.0: - resolution: - { - integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, - } - engines: { node: '>=0.8.x' } + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} execa@0.7.0: - resolution: - { - integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} + engines: {node: '>=4'} execa@4.1.0: - resolution: - { - integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} execa@5.1.1: - resolution: - { - integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} execa@7.2.0: - resolution: - { - integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==, - } - engines: { node: ^14.18.0 || ^16.14.0 || >=18.0.0 } + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} execa@8.0.1: - resolution: - { - integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==, - } - engines: { node: '>=16.17' } + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} executable@4.1.1: - resolution: - { - integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} + engines: {node: '>=4'} exit@0.1.2: - resolution: - { - integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} expand-tilde@2.0.2: - resolution: - { - integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} expect@29.5.0: - resolution: - { - integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} express-rate-limit@5.5.1: - resolution: - { - integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==, - } + resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==} express@4.18.2: - resolution: - { - integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==, - } - engines: { node: '>= 0.10.0' } + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} ext-list@2.2.2: - resolution: - { - integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} + engines: {node: '>=0.10.0'} ext-name@5.0.0: - resolution: - { - integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} + engines: {node: '>=4'} ext@1.7.0: - resolution: - { - integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==, - } + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} extend@3.0.2: - resolution: - { - integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, - } + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} external-editor@3.1.0: - resolution: - { - integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} extsprintf@1.3.0: - resolution: - { - integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==, - } - engines: { '0': node >=0.6.0 } + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} extsprintf@1.4.1: - resolution: - { - integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==, - } - engines: { '0': node >=0.6.0 } + resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} + engines: {'0': node >=0.6.0} fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, - } + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-glob@3.2.7: - resolution: - { - integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} + engines: {node: '>=8'} fast-glob@3.3.1: - resolution: - { - integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, - } - engines: { node: '>=8.6.0' } + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} fast-glob@3.3.2: - resolution: - { - integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, - } - engines: { node: '>=8.6.0' } + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, - } + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: - resolution: - { - integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, - } + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} fast-redact@3.1.1: - resolution: - { - integrity: sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==} + engines: {node: '>=6'} fast-safe-stringify@2.1.1: - resolution: - { - integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==, - } + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} fastq@1.13.0: - resolution: - { - integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==, - } + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} faye-websocket@0.11.4: - resolution: - { - integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==, - } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} fb-watchman@2.0.1: - resolution: - { - integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==, - } + resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} figures@3.2.0: - resolution: - { - integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} file-entry-cache@6.0.1: - resolution: - { - integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} file-loader@6.2.0: - resolution: - { - integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==, - } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 file-type@17.1.6: - resolution: - { - integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} file-type@18.5.0: - resolution: - { - integrity: sha512-yvpl5U868+V6PqXHMmsESpg6unQ5GfnPssl4dxdJudBrr9qy7Fddt7EVX1VLlddFfe8Gj9N7goCZH22FXuSQXQ==, - } - engines: { node: '>=14.16' } + resolution: {integrity: sha512-yvpl5U868+V6PqXHMmsESpg6unQ5GfnPssl4dxdJudBrr9qy7Fddt7EVX1VLlddFfe8Gj9N7goCZH22FXuSQXQ==} + engines: {node: '>=14.16'} filelist@1.0.3: - resolution: - { - integrity: sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==, - } + resolution: {integrity: sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==} filename-reserved-regex@3.0.0: - resolution: - { - integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} filenamify@5.1.1: - resolution: - { - integrity: sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==, - } - engines: { node: '>=12.20' } + resolution: {integrity: sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==} + engines: {node: '>=12.20'} fill-range@7.0.1: - resolution: - { - integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} finalhandler@1.2.0: - resolution: - { - integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} find-cache-dir@3.3.2: - resolution: - { - integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} find-cache-dir@4.0.0: - resolution: - { - integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==, - } - engines: { node: '>=14.16' } + resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} + engines: {node: '>=14.16'} find-config@1.0.0: - resolution: - { - integrity: sha512-Z+suHH+7LSE40WfUeZPIxSxypCWvrzdVc60xAjUShZeT5eMWM0/FQUduq3HjluyfAHWvC/aOBkT1pTZktyF/jg==, - } - engines: { node: '>= 0.12' } + resolution: {integrity: sha512-Z+suHH+7LSE40WfUeZPIxSxypCWvrzdVc60xAjUShZeT5eMWM0/FQUduq3HjluyfAHWvC/aOBkT1pTZktyF/jg==} + engines: {node: '>= 0.12'} find-node-modules@2.1.3: - resolution: - { - integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==, - } + resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} find-root@1.1.0: - resolution: - { - integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==, - } + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} find-up@4.1.0: - resolution: - { - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} find-up@6.3.0: - resolution: - { - integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} find-versions@5.1.0: - resolution: - { - integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} + engines: {node: '>=12'} findup-sync@4.0.0: - resolution: - { - integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} + engines: {node: '>= 8'} flat-cache@3.0.4: - resolution: - { - integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==, - } - engines: { node: ^10.12.0 || >=12.0.0 } + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} flat@5.0.2: - resolution: - { - integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==, - } + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true flatstr@1.0.12: - resolution: - { - integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==, - } + resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==} flatted@3.2.5: - resolution: - { - integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==, - } + resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} focus-trap@7.5.4: - resolution: - { - integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==, - } + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} follow-redirects@1.15.5: - resolution: - { - integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==, - } - engines: { node: '>=4.0' } + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + engines: {node: '>=4.0'} peerDependencies: debug: '*' peerDependenciesMeta: @@ -7045,17 +4316,11 @@ packages: optional: true forever-agent@0.6.1: - resolution: - { - integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==, - } + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} fork-ts-checker-webpack-plugin@7.2.13: - resolution: - { - integrity: sha512-fR3WRkOb4bQdWB/y7ssDUlVdrclvwtyCUIHCfivAoYxq9dF7XfrDKbMdZIfwJ7hxIAqkYSGeU7lLJE6xrxIBdg==, - } - engines: { node: '>=12.13.0', yarn: '>=1.0.0' } + resolution: {integrity: sha512-fR3WRkOb4bQdWB/y7ssDUlVdrclvwtyCUIHCfivAoYxq9dF7XfrDKbMdZIfwJ7hxIAqkYSGeU7lLJE6xrxIBdg==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} peerDependencies: typescript: '>3.6.0' vue-template-compiler: '*' @@ -7065,522 +4330,291 @@ packages: optional: true form-data@2.3.3: - resolution: - { - integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==, - } - engines: { node: '>= 0.12' } + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} form-data@3.0.1: - resolution: - { - integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} form-data@4.0.0: - resolution: - { - integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} forwarded@0.2.0: - resolution: - { - integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} fraction.js@4.2.0: - resolution: - { - integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==, - } + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} fresh@0.5.2: - resolution: { integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= } - engines: { node: '>= 0.6' } + resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} + engines: {node: '>= 0.6'} front-matter@4.0.2: - resolution: - { - integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==, - } + resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} fs-constants@1.0.0: - resolution: - { - integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==, - } + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} fs-extra@10.1.0: - resolution: - { - integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} fs-extra@11.1.1: - resolution: - { - integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==, - } - engines: { node: '>=14.14' } + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} fs-extra@9.1.0: - resolution: - { - integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} fs-monkey@1.0.4: - resolution: - { - integrity: sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==, - } + resolution: {integrity: sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==} fs.realpath@1.0.0: - resolution: - { - integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, - } + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} fsevents@2.3.3: - resolution: - { - integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] function-bind@1.1.1: - resolution: - { - integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, - } + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} gensync@1.0.0-beta.2: - resolution: - { - integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, - } - engines: { node: '>=6.9.0' } + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} get-caller-file@2.0.5: - resolution: - { - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, - } - engines: { node: 6.* || 8.* || >= 10.* } + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} get-func-name@2.0.2: - resolution: - { - integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==, - } + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} get-intrinsic@1.1.1: - resolution: - { - integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==, - } + resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} get-package-type@0.1.0: - resolution: - { - integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==, - } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} get-stream@3.0.0: - resolution: - { - integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} + engines: {node: '>=4'} get-stream@5.2.0: - resolution: - { - integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} get-stream@6.0.1: - resolution: - { - integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} get-stream@8.0.1: - resolution: - { - integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==, - } - engines: { node: '>=16' } + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} get-them-args@1.3.2: - resolution: - { - integrity: sha512-LRn8Jlk+DwZE4GTlDbT3Hikd1wSHgLMme/+7ddlqKd7ldwR6LjJgTVWzBnR01wnYGe4KgrXjg287RaI22UHmAw==, - } + resolution: {integrity: sha512-LRn8Jlk+DwZE4GTlDbT3Hikd1wSHgLMme/+7ddlqKd7ldwR6LjJgTVWzBnR01wnYGe4KgrXjg287RaI22UHmAw==} getpass@0.1.7: - resolution: - { - integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==, - } + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} git-raw-commits@2.0.11: - resolution: - { - integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} hasBin: true glob-parent@5.1.2: - resolution: - { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} glob-parent@6.0.2: - resolution: - { - integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} glob-to-regexp@0.4.1: - resolution: - { - integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, - } + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} glob@6.0.4: - resolution: - { - integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==, - } + resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} glob@7.2.3: - resolution: - { - integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, - } + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} global-dirs@0.1.1: - resolution: - { - integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} + engines: {node: '>=4'} global-modules@1.0.0: - resolution: - { - integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} global-prefix@1.0.2: - resolution: - { - integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} globals@11.12.0: - resolution: - { - integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} globals@13.21.0: - resolution: - { - integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} + engines: {node: '>=8'} globby@11.1.0: - resolution: - { - integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} globby@12.2.0: - resolution: - { - integrity: sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} globby@13.2.2: - resolution: - { - integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} globrex@0.1.2: - resolution: - { - integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==, - } + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} got@11.8.6: - resolution: - { - integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==, - } - engines: { node: '>=10.19.0' } + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} graceful-fs@4.2.10: - resolution: - { - integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, - } + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} graceful-fs@4.2.9: - resolution: - { - integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==, - } + resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} graphemer@1.4.0: - resolution: - { - integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, - } + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} guess-parser@0.4.22: - resolution: - { - integrity: sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg==, - } + resolution: {integrity: sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg==} peerDependencies: typescript: '>=3.7.5' handle-thing@2.0.1: - resolution: - { - integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==, - } + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} handlebars@4.7.7: - resolution: - { - integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==, - } - engines: { node: '>=0.4.7' } + resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + engines: {node: '>=0.4.7'} hasBin: true har-schema@2.0.0: - resolution: - { - integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} har-validator@5.1.5: - resolution: - { - integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} deprecated: this library is no longer supported hard-rejection@2.1.0: - resolution: - { - integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} harmony-reflect@1.6.2: - resolution: - { - integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==, - } + resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} has-flag@3.0.0: - resolution: - { - integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} has-flag@4.0.0: - resolution: - { - integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} has-symbols@1.0.3: - resolution: - { - integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} has@1.0.3: - resolution: - { - integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, - } - engines: { node: '>= 0.4.0' } + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} hdr-histogram-js@2.0.3: - resolution: - { - integrity: sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==, - } + resolution: {integrity: sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==} hdr-histogram-percentiles-obj@3.0.0: - resolution: - { - integrity: sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==, - } + resolution: {integrity: sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==} he@1.2.0: - resolution: - { - integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, - } + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true homedir-polyfill@1.0.3: - resolution: - { - integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} hookable@5.5.3: - resolution: - { - integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==, - } + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} hosted-git-info@2.8.9: - resolution: - { - integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, - } + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} hosted-git-info@4.1.0: - resolution: - { - integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} hosted-git-info@7.0.1: - resolution: - { - integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==, - } - engines: { node: ^16.14.0 || >=18.0.0 } + resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} + engines: {node: ^16.14.0 || >=18.0.0} hpack.js@2.1.6: - resolution: - { - integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==, - } + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} html-encoding-sniffer@2.0.1: - resolution: - { - integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} html-encoding-sniffer@3.0.0: - resolution: - { - integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} html-entities@2.3.3: - resolution: - { - integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==, - } + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} html-escaper@2.0.2: - resolution: - { - integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, - } + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} htmlparser2@8.0.2: - resolution: - { - integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==, - } + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} http-cache-semantics@4.1.1: - resolution: - { - integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==, - } + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} http-deceiver@1.2.7: - resolution: - { - integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==, - } + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} http-errors@1.6.3: - resolution: - { - integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} http-errors@2.0.0: - resolution: - { - integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} http-parser-js@0.5.5: - resolution: - { - integrity: sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==, - } + resolution: {integrity: sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==} http-proxy-agent@4.0.1: - resolution: - { - integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} http-proxy-agent@5.0.0: - resolution: - { - integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} http-proxy-middleware@2.0.6: - resolution: - { - integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==, - } - engines: { node: '>=12.0.0' } + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + engines: {node: '>=12.0.0'} peerDependencies: '@types/express': ^4.17.13 peerDependenciesMeta: @@ -7588,550 +4622,309 @@ packages: optional: true http-proxy@1.18.1: - resolution: - { - integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==, - } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} http-server@14.1.0: - resolution: - { - integrity: sha512-5lYsIcZtf6pdR8tCtzAHTWrAveo4liUlJdWc7YafwK/maPgYHs+VNP6KpCClmUnSorJrARVMXqtT055zBv11Yg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-5lYsIcZtf6pdR8tCtzAHTWrAveo4liUlJdWc7YafwK/maPgYHs+VNP6KpCClmUnSorJrARVMXqtT055zBv11Yg==} + engines: {node: '>=12'} hasBin: true http-signature@1.2.0: - resolution: - { - integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==, - } - engines: { node: '>=0.8', npm: '>=1.3.7' } + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} http-status-codes@2.2.0: - resolution: - { - integrity: sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng==, - } + resolution: {integrity: sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng==} http2-wrapper@1.0.3: - resolution: - { - integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==, - } - engines: { node: '>=10.19.0' } + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} https-proxy-agent@5.0.1: - resolution: - { - integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} human-signals@1.1.1: - resolution: - { - integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==, - } - engines: { node: '>=8.12.0' } + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} human-signals@2.1.0: - resolution: - { - integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, - } - engines: { node: '>=10.17.0' } + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} human-signals@4.3.1: - resolution: - { - integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==, - } - engines: { node: '>=14.18.0' } + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} human-signals@5.0.0: - resolution: - { - integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==, - } - engines: { node: '>=16.17.0' } + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} husky@8.0.3: - resolution: - { - integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} hasBin: true iconv-lite@0.4.24: - resolution: - { - integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} iconv-lite@0.6.3: - resolution: - { - integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} icss-utils@5.1.0: - resolution: - { - integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==, - } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 identity-obj-proxy@3.0.0: - resolution: { integrity: sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= } - engines: { node: '>=4' } + resolution: {integrity: sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=} + engines: {node: '>=4'} ieee754@1.2.1: - resolution: - { - integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, - } - - ignore@5.2.4: - resolution: - { - integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==, - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} ignore@5.3.1: - resolution: - { - integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==, - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} image-size@0.5.5: - resolution: - { - integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} hasBin: true immutable@4.0.0: - resolution: - { - integrity: sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==, - } + resolution: {integrity: sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==} import-fresh@3.3.0: - resolution: - { - integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} import-local@3.1.0: - resolution: - { - integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} hasBin: true imurmurhash@0.1.4: - resolution: - { - integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, - } - engines: { node: '>=0.8.19' } + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} indent-string@4.0.0: - resolution: - { - integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} inflight@1.0.6: - resolution: - { - integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, - } + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} inherits@2.0.3: - resolution: - { - integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==, - } + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} inherits@2.0.4: - resolution: - { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, - } + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} ini@1.3.8: - resolution: - { - integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, - } + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} inquirer@7.3.3: - resolution: - { - integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==, - } - engines: { node: '>=8.0.0' } + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} inquirer@8.2.4: - resolution: - { - integrity: sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==, - } - engines: { node: '>=12.0.0' } + resolution: {integrity: sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==} + engines: {node: '>=12.0.0'} inquirer@8.2.5: - resolution: - { - integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==, - } - engines: { node: '>=12.0.0' } + resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} + engines: {node: '>=12.0.0'} ip-regex@4.3.0: - resolution: - { - integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} + engines: {node: '>=8'} ipaddr.js@1.9.1: - resolution: - { - integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==, - } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} ipaddr.js@2.0.1: - resolution: - { - integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==, - } - engines: { node: '>= 10' } + resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} + engines: {node: '>= 10'} is-arrayish@0.2.1: - resolution: - { - integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, - } + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} is-binary-path@2.1.0: - resolution: - { - integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} is-ci@3.0.1: - resolution: - { - integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==, - } + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true is-core-module@2.13.0: - resolution: - { - integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==, - } + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} is-docker@2.2.1: - resolution: - { - integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} hasBin: true is-extglob@2.1.1: - resolution: - { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} is-fullwidth-code-point@3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} is-fullwidth-code-point@4.0.0: - resolution: - { - integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} is-generator-fn@2.1.0: - resolution: - { - integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} is-glob@4.0.3: - resolution: - { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} is-interactive@1.0.0: - resolution: - { - integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} is-number@7.0.0: - resolution: - { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, - } - engines: { node: '>=0.12.0' } + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} is-obj@2.0.0: - resolution: - { - integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} is-path-inside@3.0.3: - resolution: - { - integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} is-plain-obj@1.1.0: - resolution: - { - integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} is-plain-obj@3.0.0: - resolution: - { - integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} is-plain-object@2.0.4: - resolution: - { - integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} is-potential-custom-element-name@1.0.1: - resolution: - { - integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==, - } + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} is-promise@2.2.2: - resolution: - { - integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==, - } + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} is-reference@3.0.2: - resolution: - { - integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==, - } + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} is-stream@1.1.0: - resolution: - { - integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} is-stream@2.0.1: - resolution: - { - integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} is-stream@3.0.0: - resolution: - { - integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} is-text-path@1.0.1: - resolution: - { - integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} + engines: {node: '>=0.10.0'} is-typedarray@1.0.0: - resolution: - { - integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==, - } + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} is-unicode-supported@0.1.0: - resolution: - { - integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} is-url@1.2.4: - resolution: - { - integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==, - } + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} is-utf8@0.2.1: - resolution: - { - integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==, - } + resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} is-what@3.14.1: - resolution: - { - integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==, - } + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} is-what@4.1.8: - resolution: - { - integrity: sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA==, - } - engines: { node: '>=12.13' } + resolution: {integrity: sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA==} + engines: {node: '>=12.13'} is-windows@1.0.2: - resolution: - { - integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} is-wsl@2.2.0: - resolution: - { - integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} is2@2.0.7: - resolution: - { - integrity: sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA==, - } - engines: { node: '>=v0.10.0' } + resolution: {integrity: sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA==} + engines: {node: '>=v0.10.0'} isarray@1.0.0: - resolution: - { - integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, - } + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, - } + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} isobject@3.0.1: - resolution: - { - integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} isstream@0.1.2: - resolution: - { - integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==, - } + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} istanbul-lib-coverage@3.2.0: - resolution: - { - integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} istanbul-lib-instrument@5.1.0: - resolution: - { - integrity: sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==} + engines: {node: '>=8'} istanbul-lib-report@3.0.0: - resolution: - { - integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} istanbul-lib-source-maps@4.0.1: - resolution: - { - integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} istanbul-reports@3.1.4: - resolution: - { - integrity: sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==} + engines: {node: '>=8'} jake@10.8.5: - resolution: - { - integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} + engines: {node: '>=10'} hasBin: true jest-changed-files@29.5.0: - resolution: - { - integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-circus@29.5.0: - resolution: - { - integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-cli@29.5.0: - resolution: - { - integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -8140,11 +4933,8 @@ packages: optional: true jest-config@29.5.0: - resolution: - { - integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' ts-node: '>=9.0.0' @@ -8155,32 +4945,20 @@ packages: optional: true jest-diff@29.5.0: - resolution: - { - integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-docblock@29.4.3: - resolution: - { - integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-each@29.5.0: - resolution: - { - integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-environment-jsdom@29.5.0: - resolution: - { - integrity: sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: @@ -8188,60 +4966,36 @@ packages: optional: true jest-environment-node@29.6.3: - resolution: - { - integrity: sha512-PKl7upfPJXMYbWpD+60o4HP86KvFO2c9dZ+Zr6wUzsG5xcPx/65o3ArNgHW5M0RFvLYdW4/aieR4JSooD0a2ew==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-PKl7upfPJXMYbWpD+60o4HP86KvFO2c9dZ+Zr6wUzsG5xcPx/65o3ArNgHW5M0RFvLYdW4/aieR4JSooD0a2ew==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-get-type@29.4.3: - resolution: - { - integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-haste-map@29.5.0: - resolution: - { - integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-leak-detector@29.5.0: - resolution: - { - integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-matcher-utils@29.5.0: - resolution: - { - integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-message-util@29.6.3: - resolution: - { - integrity: sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-mock@29.6.3: - resolution: - { - integrity: sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-pnp-resolver@1.2.2: - resolution: - { - integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} + engines: {node: '>=6'} peerDependencies: jest-resolve: '*' peerDependenciesMeta: @@ -8249,88 +5003,52 @@ packages: optional: true jest-regex-util@29.4.3: - resolution: - { - integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-resolve-dependencies@29.5.0: - resolution: - { - integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-resolve@29.5.0: - resolution: - { - integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-runner@29.5.0: - resolution: - { - integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-runtime@29.5.0: - resolution: - { - integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-snapshot@29.5.0: - resolution: - { - integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-util@29.6.3: - resolution: - { - integrity: sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-validate@29.5.0: - resolution: - { - integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-watcher@29.5.0: - resolution: - { - integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest-worker@27.5.1: - resolution: - { - integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, - } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} jest-worker@29.5.0: - resolution: - { - integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} jest@29.4.3: - resolution: - { - integrity: sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -8339,50 +5057,29 @@ packages: optional: true jiti@1.19.3: - resolution: - { - integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==, - } + resolution: {integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==} hasBin: true js-tokens@4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, - } + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} js-tokens@8.0.3: - resolution: - { - integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==, - } + resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==} js-yaml@3.14.1: - resolution: - { - integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, - } + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true js-yaml@4.1.0: - resolution: - { - integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, - } + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true jsbn@0.1.1: - resolution: - { - integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==, - } + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} jsdom@16.7.0: - resolution: - { - integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: @@ -8390,11 +5087,8 @@ packages: optional: true jsdom@20.0.3: - resolution: - { - integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} + engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: @@ -8402,245 +5096,137 @@ packages: optional: true jsesc@0.5.0: - resolution: - { - integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==, - } + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true jsesc@2.5.2: - resolution: - { - integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} hasBin: true json-buffer@3.0.1: - resolution: - { - integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, - } + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} json-fixer@1.6.15: - resolution: - { - integrity: sha512-TuDuZ5KrgyjoCIppdPXBMqiGfota55+odM+j2cQ5rt/XKyKmqGB3Whz1F8SN8+60yYGy/Nu5lbRZ+rx8kBIvBw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-TuDuZ5KrgyjoCIppdPXBMqiGfota55+odM+j2cQ5rt/XKyKmqGB3Whz1F8SN8+60yYGy/Nu5lbRZ+rx8kBIvBw==} + engines: {node: '>=10'} json-parse-even-better-errors@2.3.1: - resolution: - { - integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, - } + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, - } + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-schema-traverse@1.0.0: - resolution: - { - integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, - } + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} json-schema@0.4.0: - resolution: - { - integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==, - } + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} json-stable-stringify-without-jsonify@1.0.1: - resolution: - { - integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, - } + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} json-stringify-safe@5.0.1: - resolution: - { - integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==, - } + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} json5@2.2.3: - resolution: - { - integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} hasBin: true jsonc-eslint-parser@2.3.0: - resolution: - { - integrity: sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==, - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + resolution: {integrity: sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} jsonc-parser@3.2.0: - resolution: - { - integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==, - } + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} jsonc-parser@3.2.1: - resolution: - { - integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==, - } + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} jsonfile@6.1.0: - resolution: - { - integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, - } + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} jsonparse@1.3.1: - resolution: - { - integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==, - } - engines: { '0': node >= 0.2.0 } + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} jsonwebtoken@8.5.1: - resolution: - { - integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==, - } - engines: { node: '>=4', npm: '>=1.4.28' } + resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} + engines: {node: '>=4', npm: '>=1.4.28'} jsprim@1.4.2: - resolution: - { - integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==, - } - engines: { node: '>=0.6.0' } + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} jwa@1.4.1: - resolution: - { - integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==, - } + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} jws@3.2.2: - resolution: - { - integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==, - } + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} karma-source-map-support@1.4.0: - resolution: - { - integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==, - } + resolution: {integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==} keygrip@1.1.0: - resolution: - { - integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} + engines: {node: '>= 0.6'} keyv@4.5.2: - resolution: - { - integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==, - } + resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} kill-port@2.0.1: - resolution: - { - integrity: sha512-e0SVOV5jFo0mx8r7bS29maVWp17qGqLBZ5ricNSajON6//kmb7qqqNnml4twNE8Dtj97UQD+gNFOaipS/q1zzQ==, - } + resolution: {integrity: sha512-e0SVOV5jFo0mx8r7bS29maVWp17qGqLBZ5ricNSajON6//kmb7qqqNnml4twNE8Dtj97UQD+gNFOaipS/q1zzQ==} hasBin: true kind-of@6.0.3: - resolution: - { - integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} kleur@3.0.3: - resolution: - { - integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} kleur@4.1.5: - resolution: - { - integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} klona@2.0.6: - resolution: - { - integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} kolorist@1.8.0: - resolution: - { - integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==, - } + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} launch-editor@2.6.0: - resolution: - { - integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==, - } + resolution: {integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==} less-loader@11.1.0: - resolution: - { - integrity: sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==, - } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==} + engines: {node: '>= 14.15.0'} peerDependencies: less: ^3.5.0 || ^4.0.0 webpack: ^5.0.0 less@4.1.3: - resolution: - { - integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==} + engines: {node: '>=6'} hasBin: true leven@3.1.0: - resolution: - { - integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} levn@0.3.0: - resolution: - { - integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} levn@0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} license-webpack-plugin@4.0.2: - resolution: - { - integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==, - } + resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==} peerDependencies: webpack: '*' peerDependenciesMeta: @@ -8648,39 +5234,24 @@ packages: optional: true lilconfig@2.1.0: - resolution: - { - integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} lines-and-columns@1.2.4: - resolution: - { - integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, - } + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} lines-and-columns@2.0.3: - resolution: - { - integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} lint-staged@13.2.3: - resolution: - { - integrity: sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==, - } - engines: { node: ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==} + engines: {node: ^14.13.1 || >=16.0.0} hasBin: true listr2@5.0.8: - resolution: - { - integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==, - } - engines: { node: ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} + engines: {node: ^14.13.1 || >=16.0.0} peerDependencies: enquirer: '>= 2.3.0 < 3' peerDependenciesMeta: @@ -8688,759 +5259,420 @@ packages: optional: true loader-runner@4.2.0: - resolution: - { - integrity: sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==, - } - engines: { node: '>=6.11.5' } + resolution: {integrity: sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==} + engines: {node: '>=6.11.5'} loader-utils@2.0.4: - resolution: - { - integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==, - } - engines: { node: '>=8.9.0' } + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} loader-utils@3.2.1: - resolution: - { - integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==, - } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + engines: {node: '>= 12.13.0'} local-pkg@0.5.0: - resolution: - { - integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} locate-character@3.0.0: - resolution: - { - integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==, - } + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} locate-path@5.0.0: - resolution: - { - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} locate-path@7.2.0: - resolution: - { - integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} lockfile@1.0.4: - resolution: - { - integrity: sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==, - } + resolution: {integrity: sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==} lodash.camelcase@4.3.0: - resolution: - { - integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==, - } + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} lodash.debounce@4.0.8: - resolution: - { - integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, - } + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} lodash.includes@4.3.0: - resolution: - { - integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==, - } + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} lodash.isboolean@3.0.3: - resolution: - { - integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==, - } + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} lodash.isfunction@3.0.9: - resolution: - { - integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==, - } + resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} lodash.isinteger@4.0.4: - resolution: - { - integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==, - } + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} lodash.isnumber@3.0.3: - resolution: - { - integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==, - } + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} lodash.isplainobject@4.0.6: - resolution: - { - integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==, - } + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} lodash.isstring@4.0.1: - resolution: - { - integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==, - } + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} lodash.kebabcase@4.1.1: - resolution: - { - integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==, - } + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} lodash.map@4.6.0: - resolution: - { - integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==, - } + resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} lodash.memoize@4.1.2: - resolution: - { - integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==, - } + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} lodash.merge@4.6.2: - resolution: - { - integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, - } + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} lodash.mergewith@4.6.2: - resolution: - { - integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==, - } + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} lodash.once@4.1.1: - resolution: - { - integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==, - } + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} lodash.snakecase@4.1.1: - resolution: - { - integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==, - } + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} lodash.startcase@4.4.0: - resolution: - { - integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==, - } + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} lodash.uniq@4.5.0: - resolution: - { - integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==, - } + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} lodash.upperfirst@4.3.1: - resolution: - { - integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==, - } + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} lodash@4.17.21: - resolution: - { - integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, - } + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} log-symbols@4.1.0: - resolution: - { - integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} log-update@4.0.0: - resolution: - { - integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} longest@2.0.1: - resolution: - { - integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} + engines: {node: '>=0.10.0'} loupe@2.3.7: - resolution: - { - integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==, - } + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} lowdb@1.0.0: - resolution: - { - integrity: sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==} + engines: {node: '>=4'} lower-case@2.0.2: - resolution: - { - integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, - } + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} lowercase-keys@2.0.0: - resolution: - { - integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} lru-cache@10.0.1: - resolution: - { - integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==, - } - engines: { node: 14 || >=16.14 } + resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + engines: {node: 14 || >=16.14} lru-cache@4.1.5: - resolution: - { - integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, - } + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} lru-cache@5.1.1: - resolution: - { - integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, - } + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} lru-cache@6.0.0: - resolution: - { - integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} lru-cache@7.14.0: - resolution: - { - integrity: sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==} + engines: {node: '>=12'} lru-queue@0.1.0: - resolution: - { - integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==, - } + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} lunr-mutable-indexes@2.3.2: - resolution: - { - integrity: sha512-Han6cdWAPPFM7C2AigS2Ofl3XjAT0yVMrUixodJEpyg71zCtZ2yzXc3s+suc/OaNt4ca6WJBEzVnEIjxCTwFMw==, - } + resolution: {integrity: sha512-Han6cdWAPPFM7C2AigS2Ofl3XjAT0yVMrUixodJEpyg71zCtZ2yzXc3s+suc/OaNt4ca6WJBEzVnEIjxCTwFMw==} lunr@2.3.9: - resolution: - { - integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==, - } + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} magic-string@0.30.0: - resolution: - { - integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} + engines: {node: '>=12'} magic-string@0.30.1: - resolution: - { - integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==} + engines: {node: '>=12'} magic-string@0.30.5: - resolution: - { - integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} magic-string@0.30.8: - resolution: - { - integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} make-dir@2.1.0: - resolution: - { - integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} make-dir@3.1.0: - resolution: - { - integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} make-error@1.3.6: - resolution: - { - integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, - } + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} makeerror@1.0.12: - resolution: - { - integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==, - } + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} map-obj@1.0.1: - resolution: - { - integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} map-obj@4.3.0: - resolution: - { - integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} mark.js@8.11.1: - resolution: - { - integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==, - } + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} marked@4.2.2: - resolution: - { - integrity: sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==, - } - engines: { node: '>= 12' } + resolution: {integrity: sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==} + engines: {node: '>= 12'} hasBin: true mdn-data@2.0.28: - resolution: - { - integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==, - } + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} mdn-data@2.0.30: - resolution: - { - integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==, - } + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} media-typer@0.3.0: - resolution: { integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= } - engines: { node: '>= 0.6' } + resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} + engines: {node: '>= 0.6'} memfs@3.5.3: - resolution: - { - integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==, - } - engines: { node: '>= 4.0.0' } + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} memoizee@0.4.15: - resolution: - { - integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==, - } + resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} meow@8.1.2: - resolution: - { - integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} merge-anything@5.1.7: - resolution: - { - integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==, - } - engines: { node: '>=12.13' } + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} + engines: {node: '>=12.13'} merge-descriptors@1.0.1: - resolution: { integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= } + resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} merge-stream@2.0.0: - resolution: - { - integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, - } + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} merge2@1.4.1: - resolution: - { - integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} merge@2.1.1: - resolution: - { - integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==, - } + resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} methods@1.1.2: - resolution: - { - integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} micromatch@4.0.5: - resolution: - { - integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} mime-db@1.51.0: - resolution: - { - integrity: sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==} + engines: {node: '>= 0.6'} mime-db@1.52.0: - resolution: - { - integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} mime-types@2.1.34: - resolution: - { - integrity: sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==} + engines: {node: '>= 0.6'} mime@1.6.0: - resolution: - { - integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} hasBin: true mime@3.0.0: - resolution: - { - integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==, - } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} hasBin: true mimic-fn@2.1.0: - resolution: - { - integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} mimic-fn@4.0.0: - resolution: - { - integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} mimic-response@1.0.1: - resolution: - { - integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} mimic-response@3.1.0: - resolution: - { - integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} min-indent@1.0.1: - resolution: - { - integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} mini-css-extract-plugin@2.4.7: - resolution: - { - integrity: sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==, - } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==} + engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 mini-css-extract-plugin@2.7.6: - resolution: - { - integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==, - } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==} + engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 minimalistic-assert@1.0.1: - resolution: - { - integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==, - } + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} minimatch@3.1.2: - resolution: - { - integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, - } + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} minimatch@5.1.0: - resolution: - { - integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} + engines: {node: '>=10'} minimatch@5.1.6: - resolution: - { - integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} minimatch@9.0.3: - resolution: - { - integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==, - } - engines: { node: '>=16 || 14 >=14.17' } + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} minimatch@9.0.4: - resolution: - { - integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==, - } - engines: { node: '>=16 || 14 >=14.17' } + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} minimist-options@4.1.0: - resolution: - { - integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} minimist@1.2.7: - resolution: - { - integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==, - } + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} minisearch@6.3.0: - resolution: - { - integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==, - } + resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} mitt@3.0.1: - resolution: - { - integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==, - } + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} mkdirp@0.5.5: - resolution: - { - integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==, - } + resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} hasBin: true mkdirp@1.0.4: - resolution: - { - integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} hasBin: true mlly@1.4.2: - resolution: - { - integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==, - } + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} mri@1.2.0: - resolution: - { - integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} mrmime@1.0.1: - resolution: - { - integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} ms@2.0.0: - resolution: - { - integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, - } + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} ms@2.1.2: - resolution: - { - integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, - } + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} ms@2.1.3: - resolution: - { - integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, - } + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} multicast-dns@7.2.5: - resolution: - { - integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==, - } + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true multimatch@4.0.0: - resolution: - { - integrity: sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==} + engines: {node: '>=8'} mute-stream@0.0.8: - resolution: - { - integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==, - } + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} mv@2.1.1: - resolution: - { - integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==, - } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==} + engines: {node: '>=0.8.0'} nanoid@3.3.7: - resolution: - { - integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==, - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true natural-compare@1.4.0: - resolution: - { - integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, - } + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} ncp@2.0.0: - resolution: - { - integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==, - } + resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} hasBin: true needle@3.1.0: - resolution: - { - integrity: sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==, - } - engines: { node: '>= 4.4.x' } + resolution: {integrity: sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==} + engines: {node: '>= 4.4.x'} hasBin: true negotiator@0.6.3: - resolution: - { - integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} neo-async@2.6.2: - resolution: - { - integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, - } + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} next-tick@1.1.0: - resolution: - { - integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==, - } + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} nice-napi@1.0.2: - resolution: - { - integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==, - } + resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==} os: ['!win32'] no-case@3.0.4: - resolution: - { - integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, - } + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} node-abort-controller@3.0.1: - resolution: - { - integrity: sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==, - } + resolution: {integrity: sha512-/ujIVxthRs+7q6hsdjHMaj8hRG9NuWmwrz+JdRwZ14jdFoKSkm+vDsCbF9PLpnSqjaWQJuTmVtcWHNLr+vrOFw==} node-addon-api@3.2.1: - resolution: - { - integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==, - } + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} node-fetch@2.6.13: - resolution: - { - integrity: sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==, - } - engines: { node: 4.x || >=6.0.0 } + resolution: {integrity: sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==} + engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: @@ -9448,11 +5680,8 @@ packages: optional: true node-fetch@2.6.7: - resolution: - { - integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==, - } - engines: { node: 4.x || >=6.0.0 } + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: @@ -9460,122 +5689,68 @@ packages: optional: true node-forge@1.3.1: - resolution: - { - integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==, - } - engines: { node: '>= 6.13.0' } + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} node-gyp-build@4.6.0: - resolution: - { - integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==, - } + resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} hasBin: true node-html-parser@6.1.12: - resolution: - { - integrity: sha512-/bT/Ncmv+fbMGX96XG9g05vFt43m/+SYKIs9oAemQVYyVcZmDAI2Xq/SbNcpOA35eF0Zk2av3Ksf+Xk8Vt8abA==, - } + resolution: {integrity: sha512-/bT/Ncmv+fbMGX96XG9g05vFt43m/+SYKIs9oAemQVYyVcZmDAI2Xq/SbNcpOA35eF0Zk2av3Ksf+Xk8Vt8abA==} node-int64@0.4.0: - resolution: - { - integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, - } + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} node-machine-id@1.1.12: - resolution: - { - integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==, - } + resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==} node-releases@2.0.14: - resolution: - { - integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==, - } + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} normalize-package-data@2.5.0: - resolution: - { - integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, - } + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} normalize-package-data@3.0.3: - resolution: - { - integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} normalize-path@3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} normalize-range@0.1.2: - resolution: - { - integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} normalize-url@6.1.0: - resolution: - { - integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} npm-package-arg@11.0.1: - resolution: - { - integrity: sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==, - } - engines: { node: ^16.14.0 || >=18.0.0 } + resolution: {integrity: sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==} + engines: {node: ^16.14.0 || >=18.0.0} npm-run-path@2.0.2: - resolution: - { - integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} npm-run-path@4.0.1: - resolution: - { - integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} npm-run-path@5.1.0: - resolution: - { - integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} nth-check@2.0.1: - resolution: - { - integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==, - } + resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==} nwsapi@2.2.4: - resolution: - { - integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==, - } + resolution: {integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==} nx@19.3.0: - resolution: - { - integrity: sha512-WILWiROUkZWwuPJ12tP24Z0NULPEhxFN9i55/fECuVXYaFtkg6FvEne9C4d4bRqhZPcbrz6WhHnzE3NhdjH7XQ==, - } + resolution: {integrity: sha512-WILWiROUkZWwuPJ12tP24Z0NULPEhxFN9i55/fECuVXYaFtkg6FvEne9C4d4bRqhZPcbrz6WhHnzE3NhdjH7XQ==} hasBin: true peerDependencies: '@swc-node/register': ^1.8.0 @@ -9587,1433 +5762,830 @@ packages: optional: true oauth-sign@0.9.0: - resolution: - { - integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==, - } + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} object-assign@4.1.1: - resolution: - { - integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} object-inspect@1.12.3: - resolution: - { - integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==, - } + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} object-path@0.11.8: - resolution: - { - integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==, - } - engines: { node: '>= 10.12.0' } + resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==} + engines: {node: '>= 10.12.0'} obuf@1.1.2: - resolution: - { - integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==, - } + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} on-finished@2.4.1: - resolution: - { - integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} on-headers@1.0.2: - resolution: - { - integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} once@1.4.0: - resolution: - { - integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, - } + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} onetime@5.1.2: - resolution: - { - integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} onetime@6.0.0: - resolution: - { - integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} open@8.4.2: - resolution: - { - integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} opener@1.5.2: - resolution: - { - integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==, - } + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true optionator@0.8.3: - resolution: - { - integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} optionator@0.9.3: - resolution: - { - integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} ora@5.3.0: - resolution: - { - integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==} + engines: {node: '>=10'} ora@5.4.1: - resolution: - { - integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} os-filter-obj@2.0.0: - resolution: - { - integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==} + engines: {node: '>=4'} os-homedir@1.0.2: - resolution: - { - integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} + engines: {node: '>=0.10.0'} os-tmpdir@1.0.2: - resolution: - { - integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} p-cancelable@2.1.1: - resolution: - { - integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} p-finally@1.0.0: - resolution: - { - integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} p-limit@2.3.0: - resolution: - { - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} p-limit@4.0.0: - resolution: - { - integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} p-limit@5.0.0: - resolution: - { - integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==, - } - engines: { node: '>=18' } + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} p-locate@4.1.0: - resolution: - { - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} p-locate@6.0.0: - resolution: - { - integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} p-map@4.0.0: - resolution: - { - integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} p-retry@4.6.1: - resolution: - { - integrity: sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==} + engines: {node: '>=8'} p-try@2.2.0: - resolution: - { - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} pako@1.0.11: - resolution: - { - integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==, - } + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} parent-module@1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} parse-json@5.2.0: - resolution: - { - integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} parse-ms@2.1.0: - resolution: - { - integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} parse-node-version@1.0.1: - resolution: - { - integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==, - } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} parse-passwd@1.0.0: - resolution: - { - integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} parse5-html-rewriting-stream@7.0.0: - resolution: - { - integrity: sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==, - } + resolution: {integrity: sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==} parse5-sax-parser@7.0.0: - resolution: - { - integrity: sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==, - } + resolution: {integrity: sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==} parse5@4.0.0: - resolution: - { - integrity: sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==, - } + resolution: {integrity: sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==} parse5@6.0.1: - resolution: - { - integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==, - } + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} parse5@7.1.2: - resolution: - { - integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==, - } + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} parseurl@1.3.3: - resolution: - { - integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} path-exists@5.0.0: - resolution: - { - integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} path-is-absolute@1.0.1: - resolution: - { - integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} path-key@2.0.1: - resolution: - { - integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} path-key@4.0.0: - resolution: - { - integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, - } + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} path-to-regexp@0.1.7: - resolution: - { - integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==, - } + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} path-type@4.0.0: - resolution: - { - integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} pathe@1.1.1: - resolution: - { - integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==, - } + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} pathval@1.1.1: - resolution: - { - integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==, - } + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} peek-readable@5.0.0: - resolution: - { - integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==, - } - engines: { node: '>=14.16' } + resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==} + engines: {node: '>=14.16'} pegjs@0.10.0: - resolution: - { - integrity: sha512-qI5+oFNEGi3L5HAxDwN2LA4Gg7irF70Zs25edhjld9QemOgp0CbvMtbFcMvFtEo1OityPrcCzkQFB8JP/hxgow==, - } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-qI5+oFNEGi3L5HAxDwN2LA4Gg7irF70Zs25edhjld9QemOgp0CbvMtbFcMvFtEo1OityPrcCzkQFB8JP/hxgow==} + engines: {node: '>=0.10'} hasBin: true perfect-debounce@1.0.0: - resolution: - { - integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==, - } + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} performance-now@2.1.0: - resolution: - { - integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==, - } + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} periscopic@3.1.0: - resolution: - { - integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==, - } + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} picocolors@1.0.0: - resolution: - { - integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, - } + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} picomatch@2.3.1: - resolution: - { - integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, - } - engines: { node: '>=8.6' } + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} pidtree@0.6.0: - resolution: - { - integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==, - } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} hasBin: true pify@2.3.0: - resolution: - { - integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} pify@3.0.0: - resolution: - { - integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} pify@4.0.1: - resolution: - { - integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} pify@5.0.0: - resolution: - { - integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} pino-std-serializers@3.2.0: - resolution: - { - integrity: sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==, - } + resolution: {integrity: sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==} pino@6.14.0: - resolution: - { - integrity: sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==, - } + resolution: {integrity: sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==} hasBin: true pirates@4.0.5: - resolution: - { - integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} + engines: {node: '>= 6'} pirates@4.0.6: - resolution: - { - integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} piscina@4.0.0: - resolution: - { - integrity: sha512-641nAmJS4k4iqpNUqfggqUBUMmlw0ZoM5VZKdQkV2e970Inn3Tk9kroCc1wpsYLD07vCwpys5iY0d3xI/9WkTg==, - } + resolution: {integrity: sha512-641nAmJS4k4iqpNUqfggqUBUMmlw0ZoM5VZKdQkV2e970Inn3Tk9kroCc1wpsYLD07vCwpys5iY0d3xI/9WkTg==} piscina@4.4.0: - resolution: - { - integrity: sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==, - } + resolution: {integrity: sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==} pkg-dir@4.2.0: - resolution: - { - integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} pkg-dir@7.0.0: - resolution: - { - integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==, - } - engines: { node: '>=14.16' } + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} pkg-types@1.0.3: - resolution: - { - integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==, - } + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} pkginfo@0.4.1: - resolution: - { - integrity: sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==, - } - engines: { node: '>= 0.4.0' } + resolution: {integrity: sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==} + engines: {node: '>= 0.4.0'} portfinder@1.0.28: - resolution: - { - integrity: sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==, - } - engines: { node: '>= 0.12.0' } + resolution: {integrity: sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==} + engines: {node: '>= 0.12.0'} postcss-calc@9.0.1: - resolution: - { - integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.2 postcss-colormin@6.0.0: - resolution: - { - integrity: sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-convert-values@6.0.0: - resolution: - { - integrity: sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-discard-comments@6.0.0: - resolution: - { - integrity: sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-discard-duplicates@6.0.0: - resolution: - { - integrity: sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-discard-empty@6.0.0: - resolution: - { - integrity: sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-discard-overridden@6.0.0: - resolution: - { - integrity: sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-import@14.1.0: - resolution: - { - integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==, - } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} peerDependencies: postcss: ^8.0.0 postcss-loader@6.2.1: - resolution: - { - integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==, - } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} + engines: {node: '>= 12.13.0'} peerDependencies: postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 postcss-loader@7.3.3: - resolution: - { - integrity: sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==, - } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==} + engines: {node: '>= 14.15.0'} peerDependencies: postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 postcss-merge-longhand@6.0.0: - resolution: - { - integrity: sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-merge-rules@6.0.1: - resolution: - { - integrity: sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-minify-font-values@6.0.0: - resolution: - { - integrity: sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-minify-gradients@6.0.0: - resolution: - { - integrity: sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-minify-params@6.0.0: - resolution: - { - integrity: sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-minify-selectors@6.0.0: - resolution: - { - integrity: sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-modules-extract-imports@3.0.0: - resolution: - { - integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==, - } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 postcss-modules-local-by-default@4.0.3: - resolution: - { - integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==, - } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 postcss-modules-scope@3.0.0: - resolution: - { - integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==, - } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 postcss-modules-values@4.0.0: - resolution: - { - integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==, - } - engines: { node: ^10 || ^12 || >= 14 } + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 postcss-normalize-charset@6.0.0: - resolution: - { - integrity: sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-display-values@6.0.0: - resolution: - { - integrity: sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-positions@6.0.0: - resolution: - { - integrity: sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-repeat-style@6.0.0: - resolution: - { - integrity: sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-string@6.0.0: - resolution: - { - integrity: sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-timing-functions@6.0.0: - resolution: - { - integrity: sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-unicode@6.0.0: - resolution: - { - integrity: sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-url@6.0.0: - resolution: - { - integrity: sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-normalize-whitespace@6.0.0: - resolution: - { - integrity: sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-ordered-values@6.0.0: - resolution: - { - integrity: sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-reduce-initial@6.0.0: - resolution: - { - integrity: sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-reduce-transforms@6.0.0: - resolution: - { - integrity: sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-selector-parser@6.0.13: - resolution: - { - integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} postcss-svgo@6.0.0: - resolution: - { - integrity: sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==, - } - engines: { node: ^14 || ^16 || >= 18 } + resolution: {integrity: sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==} + engines: {node: ^14 || ^16 || >= 18} peerDependencies: postcss: ^8.2.15 postcss-unique-selectors@6.0.0: - resolution: - { - integrity: sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 postcss-value-parser@4.2.0: - resolution: - { - integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, - } + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} postcss@8.4.27: - resolution: - { - integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} + engines: {node: ^10 || ^12 || >=14} postcss@8.4.35: - resolution: - { - integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + engines: {node: ^10 || ^12 || >=14} postcss@8.4.38: - resolution: - { - integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==, - } - engines: { node: ^10 || ^12 || >=14 } + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} preact@10.11.2: - resolution: - { - integrity: sha512-skAwGDFmgxhq1DCBHke/9e12ewkhc7WYwjuhHB8HHS8zkdtITXLRmUMTeol2ldxvLwYtwbFeifZ9uDDWuyL4Iw==, - } + resolution: {integrity: sha512-skAwGDFmgxhq1DCBHke/9e12ewkhc7WYwjuhHB8HHS8zkdtITXLRmUMTeol2ldxvLwYtwbFeifZ9uDDWuyL4Iw==} prelude-ls@1.1.2: - resolution: - { - integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} prelude-ls@1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} prettier-bytes@1.0.4: - resolution: - { - integrity: sha512-dLbWOa4xBn+qeWeIF60qRoB6Pk2jX5P3DIVgOQyMyvBpu931Q+8dXz8X0snJiFkQdohDDLnZQECjzsAj75hgZQ==, - } + resolution: {integrity: sha512-dLbWOa4xBn+qeWeIF60qRoB6Pk2jX5P3DIVgOQyMyvBpu931Q+8dXz8X0snJiFkQdohDDLnZQECjzsAj75hgZQ==} prettier@2.7.1: - resolution: - { - integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==, - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} + engines: {node: '>=10.13.0'} hasBin: true pretty-bytes@5.6.0: - resolution: - { - integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} pretty-format@29.7.0: - resolution: - { - integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} pretty-ms@7.0.1: - resolution: - { - integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} pretty-quick@3.1.3: - resolution: - { - integrity: sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==, - } - engines: { node: '>=10.13' } + resolution: {integrity: sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==} + engines: {node: '>=10.13'} hasBin: true peerDependencies: prettier: '>=2.0.0' proc-log@3.0.0: - resolution: - { - integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==, - } - engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} process-nextick-args@2.0.1: - resolution: - { - integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, - } + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} process-warning@1.0.0: - resolution: - { - integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==, - } + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} prompts@2.4.2: - resolution: - { - integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} proxy-addr@2.0.7: - resolution: - { - integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==, - } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} proxy-from-env@1.1.0: - resolution: - { - integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, - } + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} prr@1.0.1: - resolution: - { - integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==, - } + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} pseudomap@1.0.2: - resolution: - { - integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, - } + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} psl@1.9.0: - resolution: - { - integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==, - } + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} pump@3.0.0: - resolution: - { - integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==, - } + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} punycode@1.4.1: - resolution: - { - integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==, - } + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} punycode@2.1.1: - resolution: - { - integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} pure-rand@6.0.2: - resolution: - { - integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==, - } + resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} qs@6.11.0: - resolution: - { - integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==, - } - engines: { node: '>=0.6' } + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} qs@6.5.3: - resolution: - { - integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==, - } - engines: { node: '>=0.6' } + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} querystringify@2.2.0: - resolution: - { - integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==, - } + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} queue-microtask@1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, - } + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} quick-format-unescaped@4.0.4: - resolution: - { - integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==, - } + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} quick-lru@4.0.1: - resolution: - { - integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} quick-lru@5.1.1: - resolution: - { - integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} randombytes@2.1.0: - resolution: - { - integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, - } + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} range-parser@1.2.1: - resolution: - { - integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} raw-body@2.5.1: - resolution: - { - integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} react-is@18.2.0: - resolution: - { - integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==, - } + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} read-cache@1.0.0: - resolution: - { - integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==, - } + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} read-pkg-up@7.0.1: - resolution: - { - integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} read-pkg@5.2.0: - resolution: - { - integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} readable-stream@2.3.8: - resolution: - { - integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==, - } + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} readable-stream@3.6.0: - resolution: - { - integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} readable-web-to-node-stream@3.0.2: - resolution: - { - integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} + engines: {node: '>=8'} readdirp@3.6.0: - resolution: - { - integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, - } - engines: { node: '>=8.10.0' } + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} redent@3.0.0: - resolution: - { - integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} reflect-metadata@0.1.13: - resolution: - { - integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==, - } + resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} regenerate-unicode-properties@10.1.0: - resolution: - { - integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + engines: {node: '>=4'} regenerate@1.4.2: - resolution: - { - integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, - } + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} regenerator-runtime@0.13.11: - resolution: - { - integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, - } + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} regenerator-transform@0.15.2: - resolution: - { - integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==, - } + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} regex-parser@2.2.11: - resolution: - { - integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==, - } + resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} regexpu-core@5.3.2: - resolution: - { - integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} regjsparser@0.9.1: - resolution: - { - integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==, - } + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true request@2.88.0: - resolution: - { - integrity: sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==, - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==} + engines: {node: '>= 4'} deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 require-directory@2.1.1: - resolution: - { - integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} require-from-string@2.0.2: - resolution: - { - integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} require-main-filename@2.0.0: - resolution: - { - integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, - } + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} requires-port@1.0.0: - resolution: - { - integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, - } + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} resolve-alpn@1.2.1: - resolution: - { - integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==, - } + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} resolve-cwd@3.0.0: - resolution: - { - integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} resolve-dir@1.0.1: - resolution: - { - integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} resolve-from@4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} resolve-from@5.0.0: - resolution: - { - integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} resolve-global@1.0.0: - resolution: - { - integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} + engines: {node: '>=8'} resolve-url-loader@5.0.0: - resolution: - { - integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} + engines: {node: '>=12'} resolve.exports@1.1.0: - resolution: - { - integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} + engines: {node: '>=10'} resolve.exports@2.0.2: - resolution: - { - integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} resolve@1.22.4: - resolution: - { - integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==, - } + resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} hasBin: true resolve@1.22.8: - resolution: - { - integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==, - } + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true responselike@2.0.1: - resolution: - { - integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==, - } + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} restore-cursor@3.1.0: - resolution: - { - integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} retry@0.13.1: - resolution: - { - integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==, - } - engines: { node: '>= 4' } + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} reusify@1.0.4: - resolution: - { - integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, - } - engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfdc@1.3.1: - resolution: - { - integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==, - } + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} rimraf@2.4.5: - resolution: - { - integrity: sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==, - } + resolution: {integrity: sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==} hasBin: true rimraf@2.6.3: - resolution: - { - integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==, - } + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} hasBin: true rimraf@2.7.1: - resolution: - { - integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==, - } + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true rimraf@3.0.2: - resolution: - { - integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, - } + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true rollup@3.28.1: - resolution: - { - integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==, - } - engines: { node: '>=14.18.0', npm: '>=8.0.0' } + resolution: {integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true rollup@4.14.3: - resolution: - { - integrity: sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==, - } - engines: { node: '>=18.0.0', npm: '>=8.0.0' } + resolution: {integrity: sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true run-async@2.4.1: - resolution: - { - integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==, - } - engines: { node: '>=0.12.0' } + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} run-parallel@1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, - } + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} rxjs@6.6.7: - resolution: - { - integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==, - } - engines: { npm: '>=2.0.0' } + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} rxjs@7.8.1: - resolution: - { - integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==, - } + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} safe-buffer@5.1.2: - resolution: - { - integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, - } + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: - resolution: - { - integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, - } + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} safer-buffer@2.1.2: - resolution: - { - integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, - } + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} sander@0.5.1: - resolution: - { - integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==, - } + resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} sass-loader@12.6.0: - resolution: - { - integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==, - } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} + engines: {node: '>= 12.13.0'} peerDependencies: fibers: '>= 3.1.0' node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -11031,11 +6603,8 @@ packages: optional: true sass-loader@13.3.2: - resolution: - { - integrity: sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==, - } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==} + engines: {node: '>= 14.15.0'} peerDependencies: fibers: '>= 3.1.0' node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -11053,720 +6622,408 @@ packages: optional: true sass@1.64.1: - resolution: - { - integrity: sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==, - } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==} + engines: {node: '>=14.0.0'} hasBin: true sax@1.2.4: - resolution: - { - integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==, - } + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} saxes@5.0.1: - resolution: - { - integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} saxes@6.0.0: - resolution: - { - integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==, - } - engines: { node: '>=v12.22.7' } + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} schema-utils@3.3.0: - resolution: - { - integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==, - } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} schema-utils@4.2.0: - resolution: - { - integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==, - } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} search-insights@2.7.0: - resolution: - { - integrity: sha512-GLbVaGgzYEKMvuJbHRhLi1qoBFnjXZGZ6l4LxOYPCp4lI2jDRB3jPU9/XNhMwv6kvnA9slTreq6pvK+b3o3aqg==, - } - engines: { node: '>=8.16.0' } + resolution: {integrity: sha512-GLbVaGgzYEKMvuJbHRhLi1qoBFnjXZGZ6l4LxOYPCp4lI2jDRB3jPU9/XNhMwv6kvnA9slTreq6pvK+b3o3aqg==} + engines: {node: '>=8.16.0'} secure-compare@3.0.1: - resolution: { integrity: sha1-8aAymzCLIh+uN7mXTz1XjQypmeM= } + resolution: {integrity: sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=} select-hose@2.0.0: - resolution: - { - integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==, - } + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} selfsigned@2.1.1: - resolution: - { - integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} + engines: {node: '>=10'} semver-regex@4.0.5: - resolution: - { - integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} + engines: {node: '>=12'} semver-truncate@2.0.0: - resolution: - { - integrity: sha512-Rh266MLDYNeML5h90ttdMwfXe1+Nc4LAWd9X1KdJe8pPHP4kFmvLZALtsMNHNdvTyQygbEC0D59sIz47DIaq8w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Rh266MLDYNeML5h90ttdMwfXe1+Nc4LAWd9X1KdJe8pPHP4kFmvLZALtsMNHNdvTyQygbEC0D59sIz47DIaq8w==} + engines: {node: '>=8'} semver@5.7.1: - resolution: - { - integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, - } + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true semver@6.3.1: - resolution: - { - integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, - } + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true semver@7.3.7: - resolution: - { - integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} + engines: {node: '>=10'} hasBin: true semver@7.5.4: - resolution: - { - integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} hasBin: true semver@7.6.0: - resolution: - { - integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} hasBin: true send@0.18.0: - resolution: - { - integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} serialize-javascript@6.0.1: - resolution: - { - integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==, - } + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} seroval@0.5.1: - resolution: - { - integrity: sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==} + engines: {node: '>=10'} serve-index@1.9.1: - resolution: - { - integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} serve-static@1.15.0: - resolution: - { - integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} set-blocking@2.0.0: - resolution: - { - integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, - } + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} setprototypeof@1.1.0: - resolution: - { - integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==, - } + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} setprototypeof@1.2.0: - resolution: - { - integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==, - } + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} shallow-clone@3.0.1: - resolution: - { - integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} shebang-command@1.2.0: - resolution: - { - integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} shebang-regex@1.0.0: - resolution: - { - integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} shell-exec@1.0.2: - resolution: - { - integrity: sha512-jyVd+kU2X+mWKMmGhx4fpWbPsjvD53k9ivqetutVW/BQ+WIZoDoP4d8vUMGezV6saZsiNoW2f9GIhg9Dondohg==, - } + resolution: {integrity: sha512-jyVd+kU2X+mWKMmGhx4fpWbPsjvD53k9ivqetutVW/BQ+WIZoDoP4d8vUMGezV6saZsiNoW2f9GIhg9Dondohg==} shell-quote@1.8.1: - resolution: - { - integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==, - } + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} shiki@1.3.0: - resolution: - { - integrity: sha512-9aNdQy/etMXctnPzsje1h1XIGm9YfRcSksKOGqZWXA/qP9G18/8fpz5Bjpma8bOgz3tqIpjERAd6/lLjFyzoww==, - } + resolution: {integrity: sha512-9aNdQy/etMXctnPzsje1h1XIGm9YfRcSksKOGqZWXA/qP9G18/8fpz5Bjpma8bOgz3tqIpjERAd6/lLjFyzoww==} side-channel@1.0.4: - resolution: - { - integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, - } + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} siginfo@2.0.0: - resolution: - { - integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, - } + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} signal-exit@3.0.7: - resolution: - { - integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, - } + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} signal-exit@4.1.0: - resolution: - { - integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} sisteransi@1.0.5: - resolution: - { - integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, - } + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} slash@3.0.0: - resolution: - { - integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} slash@4.0.0: - resolution: - { - integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} slice-ansi@3.0.0: - resolution: - { - integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} slice-ansi@4.0.0: - resolution: - { - integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} slice-ansi@5.0.0: - resolution: - { - integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} snake-case@3.0.4: - resolution: - { - integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==, - } + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} sockjs@0.3.24: - resolution: - { - integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==, - } + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} solid-js@1.7.11: - resolution: - { - integrity: sha512-JkuvsHt8jqy7USsy9xJtT18aF9r2pFO+GB8JQ2XGTvtF49rGTObB46iebD25sE3qVNvIbwglXOXdALnJq9IHtQ==, - } + resolution: {integrity: sha512-JkuvsHt8jqy7USsy9xJtT18aF9r2pFO+GB8JQ2XGTvtF49rGTObB46iebD25sE3qVNvIbwglXOXdALnJq9IHtQ==} solid-refresh@0.6.3: - resolution: - { - integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==, - } + resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} peerDependencies: solid-js: ^1.3 sonic-boom@1.4.1: - resolution: - { - integrity: sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==, - } + resolution: {integrity: sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==} sorcery@0.11.0: - resolution: - { - integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==, - } + resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} hasBin: true sort-keys-length@1.0.1: - resolution: - { - integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} + engines: {node: '>=0.10.0'} sort-keys@1.1.2: - resolution: - { - integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} source-map-js@1.0.2: - resolution: - { - integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} source-map-js@1.2.0: - resolution: - { - integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} source-map-loader@4.0.1: - resolution: - { - integrity: sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==, - } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==} + engines: {node: '>= 14.15.0'} peerDependencies: webpack: ^5.72.1 source-map-loader@5.0.0: - resolution: - { - integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==, - } - engines: { node: '>= 18.12.0' } + resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==} + engines: {node: '>= 18.12.0'} peerDependencies: webpack: ^5.72.1 source-map-support@0.5.13: - resolution: - { - integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==, - } + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} source-map-support@0.5.19: - resolution: - { - integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==, - } + resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==} source-map-support@0.5.21: - resolution: - { - integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, - } + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} source-map@0.6.1: - resolution: - { - integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} source-map@0.7.4: - resolution: - { - integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} spdx-correct@3.2.0: - resolution: - { - integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==, - } + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} spdx-exceptions@2.5.0: - resolution: - { - integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==, - } + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} spdx-expression-parse@3.0.1: - resolution: - { - integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, - } + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} spdx-license-ids@3.0.17: - resolution: - { - integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==, - } + resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} spdy-transport@3.0.0: - resolution: - { - integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==, - } + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} spdy@4.0.2: - resolution: - { - integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} speakingurl@14.0.1: - resolution: - { - integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} split2@3.2.2: - resolution: - { - integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==, - } + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} sprintf-js@1.0.3: - resolution: - { - integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, - } + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} sshpk@1.17.0: - resolution: - { - integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} + engines: {node: '>=0.10.0'} hasBin: true stack-trace@1.0.0-pre2: - resolution: - { - integrity: sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==, - } - engines: { node: '>=16' } + resolution: {integrity: sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==} + engines: {node: '>=16'} stack-utils@2.0.5: - resolution: - { - integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==} + engines: {node: '>=10'} stackback@0.0.2: - resolution: - { - integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, - } + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} statuses@1.5.0: - resolution: - { - integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} statuses@2.0.1: - resolution: - { - integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} std-env@3.7.0: - resolution: - { - integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==, - } + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} steno@0.4.4: - resolution: - { - integrity: sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==, - } + resolution: {integrity: sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==} string-argv@0.3.1: - resolution: - { - integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==, - } - engines: { node: '>=0.6.19' } + resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} + engines: {node: '>=0.6.19'} string-length@4.0.2: - resolution: - { - integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} string-width@4.2.3: - resolution: - { - integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} string-width@5.1.2: - resolution: - { - integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} string_decoder@1.1.1: - resolution: - { - integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, - } + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} string_decoder@1.3.0: - resolution: - { - integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, - } + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} strip-ansi@6.0.1: - resolution: - { - integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} strip-ansi@7.0.1: - resolution: - { - integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + engines: {node: '>=12'} strip-bom@3.0.0: - resolution: - { - integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} strip-bom@4.0.0: - resolution: - { - integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} strip-eof@1.0.0: - resolution: - { - integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} strip-final-newline@2.0.0: - resolution: - { - integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} strip-final-newline@3.0.0: - resolution: - { - integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} strip-indent@3.0.0: - resolution: - { - integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} strip-json-comments@3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} strip-literal@2.0.0: - resolution: - { - integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==, - } + resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} strip-outer@2.0.0: - resolution: - { - integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==, - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + resolution: {integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} strong-log-transformer@2.1.0: - resolution: - { - integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==} + engines: {node: '>=4'} hasBin: true strtok3@7.0.0: - resolution: - { - integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==, - } - engines: { node: '>=14.16' } + resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} + engines: {node: '>=14.16'} style-loader@3.3.1: - resolution: - { - integrity: sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==, - } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==} + engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 stylehacks@6.0.0: - resolution: - { - integrity: sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==, - } - engines: { node: ^14 || ^16 || >=18.0 } + resolution: {integrity: sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==} + engines: {node: ^14 || ^16 || >=18.0} peerDependencies: postcss: ^8.2.15 stylus-loader@7.1.3: - resolution: - { - integrity: sha512-TY0SKwiY7D2kMd3UxaWKSf3xHF0FFN/FAfsSqfrhxRT/koXTwffq2cgEWDkLQz7VojMu7qEEHt5TlMjkPx9UDw==, - } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-TY0SKwiY7D2kMd3UxaWKSf3xHF0FFN/FAfsSqfrhxRT/koXTwffq2cgEWDkLQz7VojMu7qEEHt5TlMjkPx9UDw==} + engines: {node: '>= 14.15.0'} peerDependencies: stylus: '>=0.52.4' webpack: ^5.0.0 stylus@0.59.0: - resolution: - { - integrity: sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==, - } + resolution: {integrity: sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==} hasBin: true supports-color@5.5.0: - resolution: - { - integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} supports-color@7.2.0: - resolution: - { - integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} supports-color@8.1.1: - resolution: - { - integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, - } - engines: { node: '>= 0.4' } + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} svelte-preprocess@5.1.3: - resolution: - { - integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==, - } - engines: { node: '>= 16.0.0', pnpm: ^8.0.0 } + resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} + engines: {node: '>= 16.0.0', pnpm: ^8.0.0} peerDependencies: '@babel/core': ^7.10.2 coffeescript: ^2.5.1 @@ -11802,71 +7059,41 @@ packages: optional: true svelte@4.2.12: - resolution: - { - integrity: sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==, - } - engines: { node: '>=16' } + resolution: {integrity: sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==} + engines: {node: '>=16'} svg-parser@2.0.4: - resolution: - { - integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==, - } + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} svgo@3.0.2: - resolution: - { - integrity: sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==, - } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==} + engines: {node: '>=14.0.0'} hasBin: true symbol-tree@3.2.4: - resolution: - { - integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==, - } + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} tabbable@6.2.0: - resolution: - { - integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==, - } + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} tapable@2.2.1: - resolution: - { - integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} tar-stream@2.2.0: - resolution: - { - integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} tcp-port-used@1.0.2: - resolution: - { - integrity: sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==, - } + resolution: {integrity: sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==} temp@0.9.4: - resolution: - { - integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==, - } - engines: { node: '>=6.0.0' } + resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} + engines: {node: '>=6.0.0'} terser-webpack-plugin@5.3.8: - resolution: - { - integrity: sha512-WiHL3ElchZMsK27P8uIUh4604IgJyAW47LVXGbEoB21DbQcZ+OuMpGjVYnEUaqcWM6dO8uS2qUbA7LSCWqvsbg==, - } - engines: { node: '>= 10.13.0' } + resolution: {integrity: sha512-WiHL3ElchZMsK27P8uIUh4604IgJyAW47LVXGbEoB21DbQcZ+OuMpGjVYnEUaqcWM6dO8uS2qUbA7LSCWqvsbg==} + engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' esbuild: '*' @@ -11881,195 +7108,111 @@ packages: optional: true terser@5.19.2: - resolution: - { - integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} + engines: {node: '>=10'} hasBin: true test-exclude@6.0.0: - resolution: - { - integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} text-extensions@1.9.0: - resolution: - { - integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==, - } - engines: { node: '>=0.10' } + resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} + engines: {node: '>=0.10'} text-table@0.2.0: - resolution: - { - integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, - } + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} through2@4.0.2: - resolution: - { - integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==, - } + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} through@2.3.8: - resolution: - { - integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, - } + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} thunky@1.1.0: - resolution: - { - integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==, - } + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} timers-ext@0.1.7: - resolution: - { - integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==, - } + resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} tinybench@2.5.1: - resolution: - { - integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==, - } + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} tinypool@0.8.2: - resolution: - { - integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==, - } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} + engines: {node: '>=14.0.0'} tinyspy@2.2.0: - resolution: - { - integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==, - } - engines: { node: '>=14.0.0' } + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} tmp@0.0.33: - resolution: - { - integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, - } - engines: { node: '>=0.6.0' } + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} tmp@0.2.1: - resolution: - { - integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==, - } - engines: { node: '>=8.17.0' } + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} tmpl@1.0.5: - resolution: - { - integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==, - } + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} to-fast-properties@2.0.0: - resolution: - { - integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} to-regex-range@5.0.1: - resolution: - { - integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, - } - engines: { node: '>=8.0' } + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} toidentifier@1.0.1: - resolution: - { - integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==, - } - engines: { node: '>=0.6' } + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} token-types@5.0.1: - resolution: - { - integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==, - } - engines: { node: '>=14.16' } + resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} + engines: {node: '>=14.16'} tough-cookie@2.4.3: - resolution: - { - integrity: sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==, - } - engines: { node: '>=0.8' } + resolution: {integrity: sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==} + engines: {node: '>=0.8'} tough-cookie@4.1.2: - resolution: - { - integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + engines: {node: '>=6'} tr46@0.0.3: - resolution: - { - integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, - } + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} tr46@2.1.0: - resolution: - { - integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} tr46@3.0.0: - resolution: - { - integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} tree-kill@1.2.2: - resolution: - { - integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==, - } + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true trim-newlines@3.0.1: - resolution: - { - integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} trim-repeated@2.0.0: - resolution: - { - integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==} + engines: {node: '>=12'} ts-api-utils@1.3.0: - resolution: - { - integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==, - } - engines: { node: '>=16' } + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' ts-jest@29.1.2: - resolution: - { - integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==, - } - engines: { node: ^16.10.0 || ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} + engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' @@ -12089,20 +7232,14 @@ packages: optional: true ts-loader@9.4.1: - resolution: - { - integrity: sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==, - } - engines: { node: '>=12.0.0' } + resolution: {integrity: sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==} + engines: {node: '>=12.0.0'} peerDependencies: typescript: '*' webpack: ^5.0.0 ts-node@10.9.1: - resolution: - { - integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==, - } + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -12116,10 +7253,7 @@ packages: optional: true ts-node@10.9.2: - resolution: - { - integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==, - } + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -12133,403 +7267,232 @@ packages: optional: true tsconfig-paths-webpack-plugin@4.0.0: - resolution: - { - integrity: sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ==, - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-fw/7265mIWukrSHd0i+wSwx64kYUSAKPfxRDksjKIYTxSAp9W9/xcZVBF4Kl0eqQd5eBpAQ/oQrc5RyM/0c1GQ==} + engines: {node: '>=10.13.0'} tsconfig-paths@4.1.2: - resolution: - { - integrity: sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==} + engines: {node: '>=6'} tslib@1.14.1: - resolution: - { - integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, - } + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} tslib@2.5.2: - resolution: - { - integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==, - } + resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} tslib@2.6.1: - resolution: - { - integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==, - } + resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} tslib@2.6.2: - resolution: - { - integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==, - } + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} tslint@6.1.3: - resolution: - { - integrity: sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==, - } - engines: { node: '>=4.8.0' } + resolution: {integrity: sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==} + engines: {node: '>=4.8.0'} deprecated: TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information. hasBin: true peerDependencies: typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev' tsscmp@1.0.6: - resolution: - { - integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==, - } - engines: { node: '>=0.6.x' } + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} tsutils@2.29.0: - resolution: - { - integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==, - } + resolution: {integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==} peerDependencies: typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev' tunnel-agent@0.6.0: - resolution: - { - integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==, - } + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} tweetnacl@0.14.5: - resolution: - { - integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==, - } + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} typanion@3.12.1: - resolution: - { - integrity: sha512-3SJF/czpzqq6G3lprGFLa6ps12yb1uQ1EmitNnep2fDMNh1aO/Zbq9sWY+3lem0zYb2oHJnQWyabTGUZ+L1ScQ==, - } + resolution: {integrity: sha512-3SJF/czpzqq6G3lprGFLa6ps12yb1uQ1EmitNnep2fDMNh1aO/Zbq9sWY+3lem0zYb2oHJnQWyabTGUZ+L1ScQ==} type-check@0.3.2: - resolution: - { - integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} type-check@0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} type-detect@4.0.8: - resolution: - { - integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} type-fest@0.18.1: - resolution: - { - integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} type-fest@0.20.2: - resolution: - { - integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} type-fest@0.21.3: - resolution: - { - integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} type-fest@0.6.0: - resolution: - { - integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} type-fest@0.8.1: - resolution: - { - integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} type-is@1.6.18: - resolution: - { - integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==, - } - engines: { node: '>= 0.6' } + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} type@1.2.0: - resolution: - { - integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==, - } + resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} type@2.7.2: - resolution: - { - integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==, - } + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} typed-assert@1.0.9: - resolution: - { - integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==, - } + resolution: {integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==} typescript@5.4.5: - resolution: - { - integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==, - } - engines: { node: '>=14.17' } + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} hasBin: true ufo@1.3.0: - resolution: - { - integrity: sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==, - } + resolution: {integrity: sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==} uglify-js@3.15.2: - resolution: - { - integrity: sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A==, - } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A==} + engines: {node: '>=0.8.0'} hasBin: true unicode-canonical-property-names-ecmascript@2.0.0: - resolution: - { - integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} unicode-match-property-ecmascript@2.0.0: - resolution: - { - integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} unicode-match-property-value-ecmascript@2.1.0: - resolution: - { - integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} unicode-property-aliases-ecmascript@2.0.0: - resolution: - { - integrity: sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==, - } - engines: { node: '>=4' } + resolution: {integrity: sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==} + engines: {node: '>=4'} union@0.5.0: - resolution: - { - integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==, - } - engines: { node: '>= 0.8.0' } + resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} + engines: {node: '>= 0.8.0'} universalify@0.2.0: - resolution: - { - integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==, - } - engines: { node: '>= 4.0.0' } + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} universalify@2.0.0: - resolution: - { - integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==, - } - engines: { node: '>= 10.0.0' } + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} unix-crypt-td-js@1.1.4: - resolution: - { - integrity: sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==, - } + resolution: {integrity: sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==} unpipe@1.0.0: - resolution: - { - integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} update-browserslist-db@1.0.13: - resolution: - { - integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==, - } + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, - } + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} url-join@4.0.1: - resolution: - { - integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==, - } + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} url-parse@1.5.10: - resolution: - { - integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==, - } + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} user-home@2.0.0: - resolution: - { - integrity: sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==} + engines: {node: '>=0.10.0'} util-deprecate@1.0.2: - resolution: - { - integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, - } + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} utils-merge@1.0.1: - resolution: { integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= } - engines: { node: '>= 0.4.0' } + resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} + engines: {node: '>= 0.4.0'} uuid@3.4.0: - resolution: - { - integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==, - } + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true uuid@8.3.2: - resolution: - { - integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, - } + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true v8-compile-cache-lib@3.0.1: - resolution: - { - integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==, - } + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} v8-to-istanbul@9.0.1: - resolution: - { - integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==, - } - engines: { node: '>=10.12.0' } + resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} + engines: {node: '>=10.12.0'} validate-html-nesting@1.2.2: - resolution: - { - integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==, - } + resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} validate-npm-package-license@3.0.4: - resolution: - { - integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, - } + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} validate-npm-package-name@5.0.0: - resolution: - { - integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==, - } - engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} validator@13.7.0: - resolution: - { - integrity: sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==, - } - engines: { node: '>= 0.10' } + resolution: {integrity: sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==} + engines: {node: '>= 0.10'} vary@1.1.2: - resolution: - { - integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, - } - engines: { node: '>= 0.8' } + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} verdaccio-audit@10.2.3: - resolution: - { - integrity: sha512-mXOT6EiB9hK5dMjRTtJlL+hu2YswXuGSw28xOAPyZLWLTASDJy6Zs++o4P/6FyQ03yB0peK2KX7gHZ7APGZk2Q==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-mXOT6EiB9hK5dMjRTtJlL+hu2YswXuGSw28xOAPyZLWLTASDJy6Zs++o4P/6FyQ03yB0peK2KX7gHZ7APGZk2Q==} + engines: {node: '>=8'} verdaccio-auth-memory@10.2.2: - resolution: - { - integrity: sha512-JCAnSqwq2l1UPt0hQcPn1B3X9mYpJ5zMsDvuDdmnlWLkrIDx2Wev5fluW0HC9hcFMITFl/DJj/DyzYOOqwhFSQ==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-JCAnSqwq2l1UPt0hQcPn1B3X9mYpJ5zMsDvuDdmnlWLkrIDx2Wev5fluW0HC9hcFMITFl/DJj/DyzYOOqwhFSQ==} + engines: {node: '>=8'} verdaccio-htpasswd@10.5.1: - resolution: - { - integrity: sha512-DCUOITs+Ta4Hep429BjopYrUw9hEJsJ1mbMP0l9Glan1S2YvTPanhtm5Ahw/joljUlt3xawKz9Gmt1QJujfMew==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-DCUOITs+Ta4Hep429BjopYrUw9hEJsJ1mbMP0l9Glan1S2YvTPanhtm5Ahw/joljUlt3xawKz9Gmt1QJujfMew==} + engines: {node: '>=8'} verdaccio@5.18.0: - resolution: - { - integrity: sha512-z6akeVQS08iXXz0yqi6gMMOoSI2SHocQI+NMMtaVo2MFJaYvhoPSLf66MyXIS3vyCIOu108R6Ncknt0oTIUk1A==, - } - engines: { node: '>=12', npm: '>=6' } + resolution: {integrity: sha512-z6akeVQS08iXXz0yqi6gMMOoSI2SHocQI+NMMtaVo2MFJaYvhoPSLf66MyXIS3vyCIOu108R6Ncknt0oTIUk1A==} + engines: {node: '>=12', npm: '>=6'} hasBin: true verror@1.10.0: - resolution: { integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= } - engines: { '0': node >=0.6.0 } + resolution: {integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=} + engines: {'0': node >=0.6.0} vite-node@1.3.1: - resolution: - { - integrity: sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==, - } - engines: { node: ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true vite-plugin-solid@2.10.2: - resolution: - { - integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==, - } + resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} peerDependencies: '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* solid-js: ^1.7.2 @@ -12539,11 +7502,8 @@ packages: optional: true vite@4.4.7: - resolution: - { - integrity: sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==, - } - engines: { node: ^14.18.0 || >=16.0.0 } + resolution: {integrity: sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==} + engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: '@types/node': '>= 14' @@ -12570,11 +7530,8 @@ packages: optional: true vite@5.2.8: - resolution: - { - integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==, - } - engines: { node: ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@types/node': ^18.0.0 || >=20.0.0 @@ -12601,10 +7558,7 @@ packages: optional: true vitefu@0.2.5: - resolution: - { - integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==, - } + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: @@ -12612,10 +7566,7 @@ packages: optional: true vitepress@1.1.0: - resolution: - { - integrity: sha512-G+NS5I2OETxC0SfGAMDO75JWNkrcir0UCptuhQMNoaZhhlqvYtTDQhph4qGc5dtiTtZkcFa/bCcSx+A2gSS3lA==, - } + resolution: {integrity: sha512-G+NS5I2OETxC0SfGAMDO75JWNkrcir0UCptuhQMNoaZhhlqvYtTDQhph4qGc5dtiTtZkcFa/bCcSx+A2gSS3lA==} hasBin: true peerDependencies: markdown-it-mathjax3: ^4 @@ -12627,11 +7578,8 @@ packages: optional: true vitest@1.3.1: - resolution: - { - integrity: sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==, - } - engines: { node: ^18.0.0 || >=20.0.0 } + resolution: {integrity: sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' @@ -12655,11 +7603,8 @@ packages: optional: true vue-demi@0.14.7: - resolution: - { - integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} + engines: {node: '>=12'} hasBin: true peerDependencies: '@vue/composition-api': ^1.0.0-rc.1 @@ -12669,10 +7614,7 @@ packages: optional: true vue@3.4.21: - resolution: - { - integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==, - } + resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -12680,93 +7622,54 @@ packages: optional: true w3c-hr-time@1.0.2: - resolution: - { - integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==, - } + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. w3c-xmlserializer@2.0.0: - resolution: - { - integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} w3c-xmlserializer@4.0.0: - resolution: - { - integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==, - } - engines: { node: '>=14' } + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} walker@1.0.8: - resolution: - { - integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==, - } + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} watchpack@2.4.0: - resolution: - { - integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==, - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} wbuf@1.7.3: - resolution: - { - integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==, - } + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} wcwidth@1.0.1: - resolution: - { - integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, - } + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} webidl-conversions@3.0.1: - resolution: - { - integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, - } + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} webidl-conversions@5.0.0: - resolution: - { - integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} webidl-conversions@6.1.0: - resolution: - { - integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==, - } - engines: { node: '>=10.4' } + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} webidl-conversions@7.0.0: - resolution: - { - integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} webpack-dev-middleware@5.3.1: - resolution: - { - integrity: sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==, - } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==} + engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 webpack-dev-middleware@6.1.1: - resolution: - { - integrity: sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==, - } - engines: { node: '>= 14.15.0' } + resolution: {integrity: sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==} + engines: {node: '>= 14.15.0'} peerDependencies: webpack: ^5.0.0 peerDependenciesMeta: @@ -12774,11 +7677,8 @@ packages: optional: true webpack-dev-server@4.15.1: - resolution: - { - integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==, - } - engines: { node: '>= 12.13.0' } + resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} + engines: {node: '>= 12.13.0'} hasBin: true peerDependencies: webpack: ^4.37.0 || ^5.0.0 @@ -12790,32 +7690,20 @@ packages: optional: true webpack-merge@5.9.0: - resolution: - { - integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==, - } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==} + engines: {node: '>=10.0.0'} webpack-node-externals@3.0.0: - resolution: - { - integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} + engines: {node: '>=6'} webpack-sources@3.2.3: - resolution: - { - integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} webpack-subresource-integrity@5.1.0: - resolution: - { - integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==, - } - engines: { node: '>= 12' } + resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==} + engines: {node: '>= 12'} peerDependencies: html-webpack-plugin: '>= 5.0.0-beta.1 < 6' webpack: ^5.12.0 @@ -12824,11 +7712,8 @@ packages: optional: true webpack@5.88.2: - resolution: - { - integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==, - } - engines: { node: '>=10.13.0' } + resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} + engines: {node: '>=10.13.0'} hasBin: true peerDependencies: webpack-cli: '*' @@ -12837,146 +7722,83 @@ packages: optional: true websocket-driver@0.7.4: - resolution: - { - integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==, - } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} websocket-extensions@0.1.4: - resolution: - { - integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==, - } - engines: { node: '>=0.8.0' } + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} whatwg-encoding@1.0.5: - resolution: - { - integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==, - } + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} whatwg-encoding@2.0.0: - resolution: - { - integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} whatwg-mimetype@2.3.0: - resolution: - { - integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==, - } + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} whatwg-mimetype@3.0.0: - resolution: - { - integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} whatwg-url@11.0.0: - resolution: - { - integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} whatwg-url@5.0.0: - resolution: - { - integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, - } + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} whatwg-url@8.7.0: - resolution: - { - integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} which-module@2.0.0: - resolution: - { - integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==, - } + resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} which@1.3.1: - resolution: - { - integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, - } + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, - } - engines: { node: '>= 8' } + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true why-is-node-running@2.2.2: - resolution: - { - integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} hasBin: true wildcard@2.0.0: - resolution: - { - integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==, - } + resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} word-wrap@1.2.3: - resolution: - { - integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==, - } - engines: { node: '>=0.10.0' } + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} wordwrap@1.0.0: - resolution: - { - integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==, - } + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} wrap-ansi@6.2.0: - resolution: - { - integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} wrap-ansi@7.0.0: - resolution: - { - integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} wrappy@1.0.2: - resolution: - { - integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, - } + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} write-file-atomic@4.0.2: - resolution: - { - integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==, - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} ws@7.5.9: - resolution: - { - integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==, - } - engines: { node: '>=8.3.0' } + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -12987,11 +7809,8 @@ packages: optional: true ws@8.13.0: - resolution: - { - integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==, - } - engines: { node: '>=10.0.0' } + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: '>=5.0.2' @@ -13002,126 +7821,73 @@ packages: optional: true xml-name-validator@3.0.0: - resolution: - { - integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==, - } + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} xml-name-validator@4.0.0: - resolution: - { - integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} xmlchars@2.2.0: - resolution: - { - integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==, - } + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} y18n@4.0.3: - resolution: - { - integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, - } + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} y18n@5.0.8: - resolution: - { - integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} yallist@2.1.2: - resolution: - { - integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, - } + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} yallist@3.1.1: - resolution: - { - integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, - } + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yallist@4.0.0: - resolution: - { - integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, - } + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} yaml@1.10.2: - resolution: - { - integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, - } - engines: { node: '>= 6' } + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} yaml@2.2.2: - resolution: - { - integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==, - } - engines: { node: '>= 14' } + resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} + engines: {node: '>= 14'} yargs-parser@18.1.3: - resolution: - { - integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} yargs-parser@20.2.9: - resolution: - { - integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} yargs-parser@21.1.1: - resolution: - { - integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} yargs@15.4.1: - resolution: - { - integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==, - } - engines: { node: '>=8' } + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} yargs@17.7.2: - resolution: - { - integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, - } - engines: { node: '>=12' } + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} yn@3.1.1: - resolution: - { - integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, - } - engines: { node: '>=6' } + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, - } - engines: { node: '>=10' } + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} yocto-queue@1.0.0: - resolution: - { - integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==, - } - engines: { node: '>=12.20' } + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} snapshots: + '@aashutoshrathi/word-wrap@1.2.6': {} '@adobe/css-tools@4.3.2': {} @@ -13293,7 +8059,7 @@ snapshots: vite: 4.4.7(@types/node@18.16.9)(less@4.1.3)(sass@1.64.1)(stylus@0.59.0)(terser@5.19.2) webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17) webpack-dev-middleware: 6.1.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17)) - webpack-dev-server: 4.15.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + webpack-dev-server: 4.15.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) webpack-merge: 5.9.0 webpack-subresource-integrity: 5.1.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17)) optionalDependencies: @@ -13323,7 +8089,7 @@ snapshots: '@angular-devkit/architect': 0.1602.0(chokidar@3.5.3) rxjs: 7.8.1 webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17) - webpack-dev-server: 4.15.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + webpack-dev-server: 4.15.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) transitivePeerDependencies: - chokidar @@ -15227,7 +9993,7 @@ snapshots: debug: 4.3.4 espree: 9.6.1 globals: 13.21.0 - ignore: 5.2.4 + ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -15241,7 +10007,7 @@ snapshots: debug: 4.3.4 espree: 9.6.1 globals: 13.21.0 - ignore: 5.2.4 + ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -15500,9 +10266,9 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.13.0 - '@nrwl/angular@19.3.0(@angular-devkit/build-angular@16.2.0(@angular/compiler-cli@16.2.2(@angular/compiler@16.2.2)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(jest-environment-jsdom@29.5.0)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(stylus@0.59.0)(typescript@5.4.5))(@angular-devkit/core@16.0.0(chokidar@3.5.3))(@angular-devkit/schematics@16.0.0(chokidar@3.5.3))(@babel/traverse@7.24.0)(@schematics/angular@16.0.0(chokidar@3.5.3))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(esbuild@0.20.2)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))': + '@nrwl/angular@19.3.0(@angular-devkit/build-angular@16.2.0(@angular/compiler-cli@16.2.2(@angular/compiler@16.2.2)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(jest-environment-jsdom@29.5.0)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(stylus@0.59.0)(typescript@5.4.5))(@angular-devkit/core@16.0.0(chokidar@3.5.3))(@angular-devkit/schematics@16.0.0(chokidar@3.5.3))(@babel/traverse@7.24.0)(@schematics/angular@16.0.0(chokidar@3.5.3))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))': dependencies: - '@nx/angular': 19.3.0(@angular-devkit/build-angular@16.2.0(@angular/compiler-cli@16.2.2(@angular/compiler@16.2.2)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(jest-environment-jsdom@29.5.0)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(stylus@0.59.0)(typescript@5.4.5))(@angular-devkit/core@16.0.0(chokidar@3.5.3))(@angular-devkit/schematics@16.0.0(chokidar@3.5.3))(@babel/traverse@7.24.0)(@schematics/angular@16.0.0(chokidar@3.5.3))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(esbuild@0.20.2)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) + '@nx/angular': 19.3.0(@angular-devkit/build-angular@16.2.0(@angular/compiler-cli@16.2.2(@angular/compiler@16.2.2)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(jest-environment-jsdom@29.5.0)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(stylus@0.59.0)(typescript@5.4.5))(@angular-devkit/core@16.0.0(chokidar@3.5.3))(@angular-devkit/schematics@16.0.0(chokidar@3.5.3))(@babel/traverse@7.24.0)(@schematics/angular@16.0.0(chokidar@3.5.3))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) tslib: 2.6.2 transitivePeerDependencies: - '@angular-devkit/build-angular' @@ -15650,9 +10416,9 @@ snapshots: - typescript - verdaccio - '@nrwl/react@19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2))': + '@nrwl/react@19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)))': dependencies: - '@nx/react': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + '@nx/react': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -15727,9 +10493,9 @@ snapshots: - typescript - verdaccio - '@nrwl/webpack@19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(esbuild@0.20.2)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))': + '@nrwl/webpack@19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))': dependencies: - '@nx/webpack': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(esbuild@0.20.2)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) + '@nx/webpack': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -15765,17 +10531,17 @@ snapshots: - '@swc/core' - debug - '@nx/angular@19.3.0(@angular-devkit/build-angular@16.2.0(@angular/compiler-cli@16.2.2(@angular/compiler@16.2.2)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(jest-environment-jsdom@29.5.0)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(stylus@0.59.0)(typescript@5.4.5))(@angular-devkit/core@16.0.0(chokidar@3.5.3))(@angular-devkit/schematics@16.0.0(chokidar@3.5.3))(@babel/traverse@7.24.0)(@schematics/angular@16.0.0(chokidar@3.5.3))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(esbuild@0.20.2)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))': + '@nx/angular@19.3.0(@angular-devkit/build-angular@16.2.0(@angular/compiler-cli@16.2.2(@angular/compiler@16.2.2)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(jest-environment-jsdom@29.5.0)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(stylus@0.59.0)(typescript@5.4.5))(@angular-devkit/core@16.0.0(chokidar@3.5.3))(@angular-devkit/schematics@16.0.0(chokidar@3.5.3))(@babel/traverse@7.24.0)(@schematics/angular@16.0.0(chokidar@3.5.3))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))': dependencies: '@angular-devkit/build-angular': 16.2.0(@angular/compiler-cli@16.2.2(@angular/compiler@16.2.2)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(jest-environment-jsdom@29.5.0)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(stylus@0.59.0)(typescript@5.4.5) '@angular-devkit/core': 16.0.0(chokidar@3.5.3) '@angular-devkit/schematics': 16.0.0(chokidar@3.5.3) - '@nrwl/angular': 19.3.0(@angular-devkit/build-angular@16.2.0(@angular/compiler-cli@16.2.2(@angular/compiler@16.2.2)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(jest-environment-jsdom@29.5.0)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(stylus@0.59.0)(typescript@5.4.5))(@angular-devkit/core@16.0.0(chokidar@3.5.3))(@angular-devkit/schematics@16.0.0(chokidar@3.5.3))(@babel/traverse@7.24.0)(@schematics/angular@16.0.0(chokidar@3.5.3))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(esbuild@0.20.2)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) + '@nrwl/angular': 19.3.0(@angular-devkit/build-angular@16.2.0(@angular/compiler-cli@16.2.2(@angular/compiler@16.2.2)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(jest-environment-jsdom@29.5.0)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(stylus@0.59.0)(typescript@5.4.5))(@angular-devkit/core@16.0.0(chokidar@3.5.3))(@angular-devkit/schematics@16.0.0(chokidar@3.5.3))(@babel/traverse@7.24.0)(@schematics/angular@16.0.0(chokidar@3.5.3))(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(rxjs@7.8.1)(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) '@nx/devkit': 19.3.0(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))) '@nx/eslint': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(verdaccio@5.18.0(typanion@3.12.1)) '@nx/js': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) '@nx/web': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) - '@nx/webpack': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(esbuild@0.20.2)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) + '@nx/webpack': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) '@nx/workspace': 19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.4.5) '@schematics/angular': 16.0.0(chokidar@3.5.3) @@ -15789,10 +10555,8 @@ snapshots: rxjs: 7.8.1 semver: 7.6.0 tslib: 2.6.2 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) webpack-merge: 5.9.0 - optionalDependencies: - esbuild: 0.20.2 transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -16099,9 +10863,9 @@ snapshots: - typescript - verdaccio - '@nx/react@19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2))': + '@nx/react@19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)))': dependencies: - '@nrwl/react': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + '@nrwl/react': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) '@nx/devkit': 19.3.0(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))) '@nx/eslint': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(@zkochan/js-yaml@0.0.7)(eslint@8.57.0)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(verdaccio@5.18.0(typanion@3.12.1)) '@nx/js': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) @@ -16109,7 +10873,7 @@ snapshots: '@phenomnomnominal/tsquery': 5.0.1(typescript@5.4.5) '@svgr/webpack': 8.0.1 chalk: 4.1.0 - file-loader: 6.2.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + file-loader: 6.2.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) minimatch: 9.0.3 tslib: 2.6.2 transitivePeerDependencies: @@ -16196,45 +10960,45 @@ snapshots: - typescript - verdaccio - '@nx/webpack@19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(esbuild@0.20.2)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))': + '@nx/webpack@19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1))': dependencies: '@babel/core': 7.24.0 - '@nrwl/webpack': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(esbuild@0.20.2)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) + '@nrwl/webpack': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) '@nx/devkit': 19.3.0(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))) '@nx/js': 19.3.0(@babel/traverse@7.24.0)(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(nx@19.3.0(@swc-node/register@1.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.7)(typescript@5.4.5))(@swc/core@1.5.7(@swc/helpers@0.5.11)))(typescript@5.4.5)(verdaccio@5.18.0(typanion@3.12.1)) ajv: 8.12.0 autoprefixer: 10.4.15(postcss@8.4.38) - babel-loader: 9.1.3(@babel/core@7.24.0)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + babel-loader: 9.1.3(@babel/core@7.24.0)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) browserslist: 4.23.0 chalk: 4.1.0 - copy-webpack-plugin: 10.2.4(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) - css-loader: 6.8.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) - css-minimizer-webpack-plugin: 5.0.1(esbuild@0.20.2)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) - fork-ts-checker-webpack-plugin: 7.2.13(typescript@5.4.5)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + copy-webpack-plugin: 10.2.4(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) + css-loader: 6.8.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) + css-minimizer-webpack-plugin: 5.0.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) + fork-ts-checker-webpack-plugin: 7.2.13(typescript@5.4.5)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) less: 4.1.3 - less-loader: 11.1.0(less@4.1.3)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) - license-webpack-plugin: 4.0.2(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + less-loader: 11.1.0(less@4.1.3)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) + license-webpack-plugin: 4.0.2(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) loader-utils: 2.0.4 - mini-css-extract-plugin: 2.4.7(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + mini-css-extract-plugin: 2.4.7(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) parse5: 4.0.0 postcss: 8.4.38 postcss-import: 14.1.0(postcss@8.4.38) - postcss-loader: 6.2.1(postcss@8.4.38)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + postcss-loader: 6.2.1(postcss@8.4.38)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) rxjs: 7.8.1 sass: 1.64.1 - sass-loader: 12.6.0(sass@1.64.1)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) - source-map-loader: 5.0.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) - style-loader: 3.3.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + sass-loader: 12.6.0(sass@1.64.1)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) + source-map-loader: 5.0.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) + style-loader: 3.3.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) stylus: 0.59.0 - stylus-loader: 7.1.3(stylus@0.59.0)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) - terser-webpack-plugin: 5.3.8(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) - ts-loader: 9.4.1(typescript@5.4.5)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + stylus-loader: 7.1.3(stylus@0.59.0)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) + terser-webpack-plugin: 5.3.8(@swc/core@1.5.7(@swc/helpers@0.5.11))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) + ts-loader: 9.4.1(typescript@5.4.5)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) tsconfig-paths-webpack-plugin: 4.0.0 tslib: 2.6.2 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) - webpack-dev-server: 4.15.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) + webpack-dev-server: 4.15.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) webpack-node-externals: 3.0.0 - webpack-subresource-integrity: 5.1.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + webpack-subresource-integrity: 5.1.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -17429,12 +12193,12 @@ snapshots: schema-utils: 4.2.0 webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17) - babel-loader@9.1.3(@babel/core@7.24.0)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + babel-loader@9.1.3(@babel/core@7.24.0)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: '@babel/core': 7.24.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) babel-plugin-const-enum@1.2.0(@babel/core@7.24.0): dependencies: @@ -17973,7 +12737,7 @@ snapshots: dependencies: is-what: 3.14.1 - copy-webpack-plugin@10.2.4(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + copy-webpack-plugin@10.2.4(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: fast-glob: 3.3.2 glob-parent: 6.0.2 @@ -17981,7 +12745,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.1 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) copy-webpack-plugin@11.0.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17)): dependencies: @@ -18078,7 +12842,7 @@ snapshots: semver: 7.6.0 webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17) - css-loader@6.8.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + css-loader@6.8.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: icss-utils: 5.1.0(postcss@8.4.38) postcss: 8.4.38 @@ -18088,9 +12852,9 @@ snapshots: postcss-modules-values: 4.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 semver: 7.6.0 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) - css-minimizer-webpack-plugin@5.0.1(esbuild@0.20.2)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + css-minimizer-webpack-plugin@5.0.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: '@jridgewell/trace-mapping': 0.3.18 cssnano: 6.0.1(postcss@8.4.38) @@ -18098,9 +12862,7 @@ snapshots: postcss: 8.4.38 schema-utils: 4.2.0 serialize-javascript: 6.0.1 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) - optionalDependencies: - esbuild: 0.20.2 + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) css-select@5.1.0: dependencies: @@ -18613,7 +13375,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.21.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -18863,11 +13625,11 @@ snapshots: dependencies: flat-cache: 3.0.4 - file-loader@6.2.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + file-loader@6.2.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) file-type@17.1.6: dependencies: @@ -18976,7 +13738,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@7.2.13(typescript@5.4.5)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + fork-ts-checker-webpack-plugin@7.2.13(typescript@5.4.5)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: '@babel/code-frame': 7.23.5 chalk: 4.1.2 @@ -18991,7 +13753,7 @@ snapshots: semver: 7.6.0 tapable: 2.2.1 typescript: 5.4.5 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) form-data@2.3.3: dependencies: @@ -19145,7 +13907,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.2.4 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 @@ -19406,8 +14168,6 @@ snapshots: ieee754@1.2.1: {} - ignore@5.2.4: {} - ignore@5.3.1: {} image-size@0.5.5: @@ -20157,11 +14917,11 @@ snapshots: less: 4.1.3 webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17) - less-loader@11.1.0(less@4.1.3)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + less-loader@11.1.0(less@4.1.3)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: klona: 2.0.6 less: 4.1.3 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) less@4.1.3: dependencies: @@ -20197,11 +14957,11 @@ snapshots: optionalDependencies: webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17) - license-webpack-plugin@4.0.2(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + license-webpack-plugin@4.0.2(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: webpack-sources: 3.2.3 optionalDependencies: - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) lilconfig@2.1.0: {} @@ -20489,10 +15249,10 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.4.7(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + mini-css-extract-plugin@2.4.7(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: schema-utils: 4.2.0 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) mini-css-extract-plugin@2.7.6(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17)): dependencies: @@ -21048,13 +15808,13 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.8 - postcss-loader@6.2.1(postcss@8.4.38)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + postcss-loader@6.2.1(postcss@8.4.38)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: cosmiconfig: 7.0.1 klona: 2.0.6 postcss: 8.4.38 semver: 7.6.0 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) postcss-loader@7.3.3(postcss@8.4.27)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17)): dependencies: @@ -21248,7 +16008,7 @@ snapshots: chalk: 3.0.0 execa: 4.1.0 find-up: 4.1.0 - ignore: 5.2.4 + ignore: 5.3.1 mri: 1.2.0 multimatch: 4.0.0 prettier: 2.7.1 @@ -21553,11 +16313,11 @@ snapshots: mkdirp: 0.5.5 rimraf: 2.7.1 - sass-loader@12.6.0(sass@1.64.1)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + sass-loader@12.6.0(sass@1.64.1)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) optionalDependencies: sass: 1.64.1 @@ -21793,11 +16553,11 @@ snapshots: source-map-js: 1.2.0 webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17) - source-map-loader@5.0.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + source-map-loader@5.0.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.0 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) source-map-support@0.5.13: dependencies: @@ -21959,9 +16719,9 @@ snapshots: '@tokenizer/token': 0.3.0 peek-readable: 5.0.0 - style-loader@3.3.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + style-loader@3.3.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) stylehacks@6.0.0(postcss@8.4.38): dependencies: @@ -21969,12 +16729,12 @@ snapshots: postcss: 8.4.38 postcss-selector-parser: 6.0.13 - stylus-loader@7.1.3(stylus@0.59.0)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + stylus-loader@7.1.3(stylus@0.59.0)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: fast-glob: 3.3.2 normalize-path: 3.0.0 stylus: 0.59.0 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) stylus@0.59.0: dependencies: @@ -22082,17 +16842,16 @@ snapshots: '@swc/core': 1.5.7(@swc/helpers@0.5.11) esbuild: 0.18.17 - terser-webpack-plugin@5.3.8(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + terser-webpack-plugin@5.3.8(@swc/core@1.5.7(@swc/helpers@0.5.11))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: '@jridgewell/trace-mapping': 0.3.18 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 terser: 5.19.2 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) optionalDependencies: '@swc/core': 1.5.7(@swc/helpers@0.5.11) - esbuild: 0.20.2 terser@5.19.2: dependencies: @@ -22187,7 +16946,7 @@ snapshots: dependencies: typescript: 5.4.5 - ts-jest@29.1.2(@babel/core@7.24.0)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.24.0))(esbuild@0.20.2)(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(typescript@5.4.5): + ts-jest@29.1.2(@babel/core@7.24.0)(@jest/types@29.6.3)(babel-jest@29.5.0(@babel/core@7.24.0))(jest@29.4.3(@types/node@18.16.9)(ts-node@10.9.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5)))(typescript@5.4.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -22203,16 +16962,15 @@ snapshots: '@babel/core': 7.24.0 '@jest/types': 29.6.3 babel-jest: 29.5.0(@babel/core@7.24.0) - esbuild: 0.20.2 - ts-loader@9.4.1(typescript@5.4.5)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + ts-loader@9.4.1(typescript@5.4.5)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: chalk: 4.1.0 enhanced-resolve: 5.15.0 micromatch: 4.0.5 semver: 7.6.0 typescript: 5.4.5 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@18.16.9)(typescript@5.4.5): dependencies: @@ -22706,14 +17464,14 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-dev-middleware@5.3.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + webpack-dev-middleware@5.3.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.34 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) webpack-dev-middleware@6.1.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17)): dependencies: @@ -22725,7 +17483,7 @@ snapshots: optionalDependencies: webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17) - webpack-dev-server@4.15.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + webpack-dev-server@4.15.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: '@types/bonjour': 3.5.10 '@types/connect-history-api-fallback': 1.3.5 @@ -22755,10 +17513,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + webpack-dev-middleware: 5.3.1(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) ws: 8.13.0 optionalDependencies: - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) transitivePeerDependencies: - bufferutil - debug @@ -22779,12 +17537,12 @@ snapshots: typed-assert: 1.0.9 webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17) - webpack-subresource-integrity@5.1.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)): + webpack-subresource-integrity@5.1.0(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))): dependencies: typed-assert: 1.0.9 - webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2) + webpack: 5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)) - webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17): + webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11)): dependencies: '@types/eslint-scope': 3.7.3 '@types/estree': 1.0.5 @@ -22807,7 +17565,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.8(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17)) + terser-webpack-plugin: 5.3.8(@swc/core@1.5.7(@swc/helpers@0.5.11))(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -22815,7 +17573,7 @@ snapshots: - esbuild - uglify-js - webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2): + webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17): dependencies: '@types/eslint-scope': 3.7.3 '@types/estree': 1.0.5 @@ -22838,7 +17596,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.8(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.20.2)) + terser-webpack-plugin: 5.3.8(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17)(webpack@5.88.2(@swc/core@1.5.7(@swc/helpers@0.5.11))(esbuild@0.18.17)) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: diff --git a/tools/scripts/mock-project-graph.ts b/tools/scripts/mock-project-graph.ts new file mode 100644 index 000000000..8436818b0 --- /dev/null +++ b/tools/scripts/mock-project-graph.ts @@ -0,0 +1,34 @@ +module.exports = () => { + /** + * When the daemon is enabled during unit tests, + * and the daemon is already running, the daemon-client.ts + * code will be used, but it will hit the already running + * daemon which is from the installed version of Nx. + * + * In the vast majority of cases, this is fine. However, + * if a new message type has been added to the daemon in + * the source code, and isn't yet in the installed version, + * any test that hits that codepath will fail. This is because + * the installed version of the daemon doesn't know how to + * handle the new message type. + * + * To prevent this, we disable the daemon during unit tests. + */ + process.env.NX_DAEMON = 'false'; + + /** + * When `createProjectGraphAsync` is called during tests, + * if its not mocked, it will return the Nx repo's project + * graph. We don't want any unit tests to depend on the structure + * of the Nx repo, so we mock it to return an empty project graph. + */ + jest.doMock('@nx/devkit', () => ({ + ...jest.requireActual('@nx/devkit'), + createProjectGraphAsync: jest.fn().mockImplementation(async () => { + return { + nodes: {}, + dependencies: {}, + }; + }), + })); +}; diff --git a/tsconfig.base.json b/tsconfig.base.json index 9b5724c01..4aa6a1f0f 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -20,7 +20,10 @@ "@nxext/e2e-utils": ["e2e/utils/index.ts"], "@nxext/preact": ["packages/preact/src/index.ts"], "@nxext/stencil": ["packages/stencil/src/index.ts"], - "@nxext/svelte": ["packages/svelte/src/index.ts"] + "@nxext/svelte": ["packages/svelte/src/index.ts"], + "@nxext/capacitor": ["packages/capacitor/src/index.ts"], + "@nxext/ionic-angular": ["packages/ionic-angular/src/index.ts"], + "@nxext/ionic-react": ["packages/ionic-react/src/index.ts"] } }, "exclude": ["node_modules", "tmp"] From 03ee884060e164a341f292d640b56ba1bdb39c3e Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Wed, 25 Sep 2024 10:52:21 +0200 Subject: [PATCH 02/17] feat(ionic-angular,capacitor): replace app generator by a config generator --- packages/capacitor/generators.json | 14 +- packages/capacitor/package.json | 1 - .../application/files/index.html__template__ | 16 - .../application/files/public/favicon.ico | Bin 15086 -> 0 bytes .../files/src/app/app.element.__style__ | 416 ------------------ .../src/app/app.element.spec.ts__template__ | 21 - .../files/src/app/app.element.ts__template__ | 375 ---------------- .../application/files/src/assets/.gitkeep | 0 .../application/files/src/main.ts__template__ | 1 - .../application/files/src/styles.__style__ | 1 - .../application/files/tsconfig.app.json | 9 - .../application/files/tsconfig.json__tmpl__ | 27 -- .../generators/application/generator.spec.ts | 24 - .../src/generators/application/generator.ts | 45 -- .../src/generators/application/schema.d.ts | 5 - .../src/generators/application/schema.json | 30 -- .../capacitor.config.ts__template__ | 0 .../package-json/package.json__template__ | 0 .../generator.spec.ts | 4 +- .../generator.ts | 10 +- .../lib/add-capacitor-config.ts | 0 .../lib/add-dependencies.ts | 0 .../lib/add-project.ts | 0 .../lib/normalize-options.ts | 4 +- .../lib/update-project-gitignore.ts | 0 .../lib/update-project-package-json.ts | 0 .../schema.d.ts | 4 +- .../schema.json | 4 +- packages/capacitor/src/index.ts | 4 +- packages/ionic-angular/generators.json | 14 +- packages/ionic-angular/package.json | 4 - .../ionic.config.json.template | 7 - .../src/app/app.component.spec.ts.template | 21 - .../src/app/app.component.ts.template | 19 - .../src/assets/icon/favicon.png | Bin 930 -> 0 bytes .../base-standalone/src/assets/shapes.svg | 1 - .../base-standalone/src/index.html.template | 26 -- .../base-standalone/src/styles.scss.template | 10 - .../src/theme/variables.scss.template | 236 ---------- .../files/base/ionic.config.json.template | 7 - .../base/src/app/app.component.html.template | 3 - .../base/src/app/app.component.scss.template | 0 .../src/app/app.component.spec.ts.template | 21 - .../base/src/app/app.component.ts.template | 10 - .../files/base/src/app/app.module.ts.template | 16 - .../files/base/src/assets/icon/favicon.png | Bin 930 -> 0 bytes .../files/base/src/assets/shapes.svg | 1 - .../files/base/src/index.html.template | 26 -- .../files/base/src/styles.scss.template | 10 - .../base/src/theme/variables.scss.template | 236 ---------- .../src/app/app.component.ts.template | 17 - .../src/app/app.config.ts.template | 14 - .../src/app/app.routes.ts.template | 14 - .../src/app/home/home.page.ts.template | 66 --- .../src/app/home/home.routes.ts.template | 9 - .../src/app/app-routing.module.ts.template | 22 - .../blank/src/app/app.component.html.template | 3 - .../blank/src/app/app.module.ts.template | 16 - .../app/home/home-routing.module.ts.template | 16 - .../src/app/home/home.module.ts.template | 19 - .../src/app/home/home.page.html.template | 21 - .../src/app/home/home.page.scss.template | 27 -- .../blank/src/app/home/home.page.ts.template | 12 - .../src/app/app.component.ts.template | 18 - .../src/app/app.config.ts.template | 14 - .../src/app/app.routes.ts.template | 18 - .../src/app/home/home.page.ts.template | 54 --- .../src/app/home/home.routes.ts.template | 8 - .../src/app/home/home.spec.ts.template | 27 -- .../message.component.spec.ts.template | 25 -- .../app/message/message.component.ts.template | 98 ----- .../services/data.service.spec.ts.template | 12 - .../src/app/services/data.service.ts.template | 83 ---- .../vierw-message.page.spec.ts.template | 26 -- .../view-message.page.ts.template | 106 ----- .../view-message.routes.ts.template | 8 - .../src/app/app-routing.module.ts.template | 26 -- .../list/src/app/app.component.html.template | 3 - .../files/list/src/app/app.module.ts.template | 16 - .../app/home/home-routing.module.ts.template | 17 - .../list/src/app/home/home.module.ts.template | 20 - .../list/src/app/home/home.page.html.template | 25 -- .../list/src/app/home/home.page.scss.template | 0 .../list/src/app/home/home.page.ts.template | 24 - .../list/src/app/home/home.spec.ts.template | 27 -- .../message/message.component.html.template | 16 - .../message/message.component.scss.template | 59 --- .../message.component.spec.ts.template | 25 -- .../app/message/message.component.ts.template | 17 - .../app/message/message.module.ts.template | 15 - .../services/data.service.spec.ts.template | 12 - .../src/app/services/data.service.ts.template | 83 ---- .../vierw-message.page.spec.ts.template | 26 -- .../view-message-routing.module.ts.template | 17 - .../view-message.module.ts.template | 19 - .../view-message.page.html.template | 29 -- .../view-message.page.scss.template | 40 -- .../view-message.page.ts.template | 31 -- .../src/app/app.component.spec.ts.template | 46 -- .../src/app/app.component.ts.template | 174 -------- .../src/app/app.config.ts.template | 14 - .../src/app/app.routes.ts.template | 13 - .../src/app/folder/folder.page.ts.template | 78 ---- .../src/app/folder/folder.routes.ts.template | 8 - .../src/app/app-routing.module.ts.template | 22 - .../src/app/app.component.html.template | 29 -- .../src/app/app.component.scss.template | 119 ----- .../src/app/app.component.spec.ts.template | 46 -- .../src/app/app.component.ts.template | 18 - .../sidemenu/src/app/app.module.ts.template | 16 - .../folder/folder-routing.module.ts.template | 17 - .../src/app/folder/folder.module.ts.template | 20 - .../src/app/folder/folder.page.html.template | 21 - .../src/app/folder/folder.page.scss.template | 28 -- .../src/app/folder/folder.page.ts.template | 23 - .../src/app/app.component.html.template | 3 - .../src/app/app.component.ts.template | 17 - .../src/app/app.config.ts.template | 14 - .../src/app/app.routes.ts.template | 9 - ...plore-container.component.spec.ts.template | 24 - .../explore-container.component.ts.template | 50 --- .../src/app/tab1/tab1.page.spec.ts.template | 26 -- .../src/app/tab1/tab1.page.ts.template | 43 -- .../src/app/tab1/tab1.routes.ts.template | 10 - .../src/app/tab2/tab2.page.spec.ts.template | 26 -- .../src/app/tab2/tab2.page.ts.template | 42 -- .../src/app/tab2/tab2.routes.ts.template | 10 - .../src/app/tab3/tab3.page.spec.ts.template | 26 -- .../src/app/tab3/tab3.page.ts.template | 41 -- .../src/app/tab3/tab3.routes.ts.template | 10 - .../src/app/tabs/tabs.page.spec.ts.template | 26 -- .../src/app/tabs/tabs.page.ts.template | 43 -- .../src/app/tabs/tabs.routes.ts.template | 34 -- .../src/app/app-routing.module.ts.template | 16 - .../tabs/src/app/app.component.html.template | 3 - .../files/tabs/src/app/app.module.ts.template | 16 - .../explore-container.component.html.template | 4 - .../explore-container.component.scss.template | 27 -- ...plore-container.component.spec.ts.template | 24 - .../explore-container.component.ts.template | 12 - .../explore-container.module.ts.template | 14 - .../app/tab1/tab1-routing.module.ts.template | 16 - .../tabs/src/app/tab1/tab1.module.ts.template | 20 - .../tabs/src/app/tab1/tab1.page.html.template | 17 - .../tabs/src/app/tab1/tab1.page.scss.template | 0 .../src/app/tab1/tab1.page.spec.ts.template | 26 -- .../tabs/src/app/tab1/tab1.page.ts.template | 12 - .../app/tab2/tab2-routing.module.ts.template | 16 - .../tabs/src/app/tab2/tab2.module.ts.template | 20 - .../tabs/src/app/tab2/tab2.page.html.template | 17 - .../tabs/src/app/tab2/tab2.page.scss.template | 0 .../src/app/tab2/tab2.page.spec.ts.template | 26 -- .../tabs/src/app/tab2/tab2.page.ts.template | 12 - .../app/tab3/tab3-routing.module.ts.template | 16 - .../tabs/src/app/tab3/tab3.module.ts.template | 20 - .../tabs/src/app/tab3/tab3.page.html.template | 17 - .../tabs/src/app/tab3/tab3.page.scss.template | 0 .../src/app/tab3/tab3.page.spec.ts.template | 26 -- .../tabs/src/app/tab3/tab3.page.ts.template | 12 - .../app/tabs/tabs-routing.module.ts.template | 39 -- .../tabs/src/app/tabs/tabs.module.ts.template | 19 - .../tabs/src/app/tabs/tabs.page.html.template | 20 - .../tabs/src/app/tabs/tabs.page.scss.template | 0 .../src/app/tabs/tabs.page.spec.ts.template | 26 -- .../tabs/src/app/tabs/tabs.page.ts.template | 12 - .../generators/application/generator.spec.ts | 217 --------- .../src/generators/application/generator.ts | 37 -- .../generators/application/lib/add-angular.ts | 25 -- .../application/lib/add-capacitor.ts | 17 - .../src/generators/application/lib/files.ts | 55 --- .../application/lib/normalize-options.ts | 41 -- .../src/generators/application/schema.d.ts | 20 - .../src/generators/application/schema.json | 82 ---- .../configuration/generator.spec.ts | 63 +++ .../src/generators/configuration/generator.ts | 29 ++ .../configuration/lib/add-capacitor.ts | 17 + .../lib/add-dependencies.ts | 0 .../lib/update-workspace.ts | 24 +- .../src/generators/configuration/schema.d.ts | 7 + .../src/generators/configuration/schema.json | 28 ++ .../files/__name__-routing.module.ts.template | 17 - .../page/files/__name__.module.ts.template | 20 - .../page/files/__name__.page.html.template | 9 - .../page/files/__name__.page.scss.template | 0 .../page/files/__name__.page.spec.ts.template | 24 - .../page/files/__name__.page.ts.template | 12 - .../src/generators/page/generator.spec.ts | 115 ----- .../src/generators/page/generator.ts | 66 --- .../page/lib/update-routing-file.ts | 74 ---- .../src/generators/page/schema.d.ts | 10 - .../src/generators/page/schema.json | 32 -- packages/ionic-angular/src/index.ts | 4 +- 192 files changed, 182 insertions(+), 5497 deletions(-) delete mode 100644 packages/capacitor/src/generators/application/files/index.html__template__ delete mode 100644 packages/capacitor/src/generators/application/files/public/favicon.ico delete mode 100644 packages/capacitor/src/generators/application/files/src/app/app.element.__style__ delete mode 100644 packages/capacitor/src/generators/application/files/src/app/app.element.spec.ts__template__ delete mode 100644 packages/capacitor/src/generators/application/files/src/app/app.element.ts__template__ delete mode 100644 packages/capacitor/src/generators/application/files/src/assets/.gitkeep delete mode 100644 packages/capacitor/src/generators/application/files/src/main.ts__template__ delete mode 100644 packages/capacitor/src/generators/application/files/src/styles.__style__ delete mode 100644 packages/capacitor/src/generators/application/files/tsconfig.app.json delete mode 100644 packages/capacitor/src/generators/application/files/tsconfig.json__tmpl__ delete mode 100644 packages/capacitor/src/generators/application/generator.spec.ts delete mode 100644 packages/capacitor/src/generators/application/generator.ts delete mode 100644 packages/capacitor/src/generators/application/schema.d.ts delete mode 100644 packages/capacitor/src/generators/application/schema.json rename packages/capacitor/src/generators/{capacitor-project => configuration}/files/capacitor-config/capacitor.config.ts__template__ (100%) rename packages/capacitor/src/generators/{capacitor-project => configuration}/files/package-json/package.json__template__ (100%) rename packages/capacitor/src/generators/{capacitor-project => configuration}/generator.spec.ts (98%) rename packages/capacitor/src/generators/{capacitor-project => configuration}/generator.ts (79%) rename packages/capacitor/src/generators/{capacitor-project => configuration}/lib/add-capacitor-config.ts (100%) rename packages/capacitor/src/generators/{capacitor-project => configuration}/lib/add-dependencies.ts (100%) rename packages/capacitor/src/generators/{capacitor-project => configuration}/lib/add-project.ts (100%) rename packages/capacitor/src/generators/{capacitor-project => configuration}/lib/normalize-options.ts (82%) rename packages/capacitor/src/generators/{capacitor-project => configuration}/lib/update-project-gitignore.ts (100%) rename packages/capacitor/src/generators/{capacitor-project => configuration}/lib/update-project-package-json.ts (100%) rename packages/capacitor/src/generators/{capacitor-project => configuration}/schema.d.ts (55%) rename packages/capacitor/src/generators/{capacitor-project => configuration}/schema.json (91%) delete mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/ionic.config.json.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/assets/icon/favicon.png delete mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/assets/shapes.svg delete mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/index.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/styles.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base-standalone/src/theme/variables.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base/ionic.config.json.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base/src/app/app.component.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base/src/app/app.component.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base/src/app/app.component.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base/src/app/app.component.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base/src/app/app.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base/src/assets/icon/favicon.png delete mode 100644 packages/ionic-angular/src/generators/application/files/base/src/assets/shapes.svg delete mode 100644 packages/ionic-angular/src/generators/application/files/base/src/index.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base/src/styles.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/base/src/theme/variables.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.component.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.config.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.routes.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.routes.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/app-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/app.component.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/app.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/home/home-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.component.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.config.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.routes.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.routes.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/vierw-message.page.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.routes.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/app-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/app.component.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/app.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/home/home-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/home/home.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/home/home.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/message/message.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/view-message/vierw-message.page.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.config.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.routes.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.routes.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.config.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.routes.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.routes.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.routes.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.routes.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.routes.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/app-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/app.component.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/app.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.html.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.scss.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/application/generator.spec.ts delete mode 100644 packages/ionic-angular/src/generators/application/generator.ts delete mode 100644 packages/ionic-angular/src/generators/application/lib/add-angular.ts delete mode 100644 packages/ionic-angular/src/generators/application/lib/add-capacitor.ts delete mode 100644 packages/ionic-angular/src/generators/application/lib/files.ts delete mode 100644 packages/ionic-angular/src/generators/application/lib/normalize-options.ts delete mode 100644 packages/ionic-angular/src/generators/application/schema.d.ts delete mode 100644 packages/ionic-angular/src/generators/application/schema.json create mode 100644 packages/ionic-angular/src/generators/configuration/generator.spec.ts create mode 100644 packages/ionic-angular/src/generators/configuration/generator.ts create mode 100644 packages/ionic-angular/src/generators/configuration/lib/add-capacitor.ts rename packages/ionic-angular/src/generators/{application => configuration}/lib/add-dependencies.ts (100%) rename packages/ionic-angular/src/generators/{application => configuration}/lib/update-workspace.ts (69%) create mode 100644 packages/ionic-angular/src/generators/configuration/schema.d.ts create mode 100644 packages/ionic-angular/src/generators/configuration/schema.json delete mode 100644 packages/ionic-angular/src/generators/page/files/__name__-routing.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/page/files/__name__.module.ts.template delete mode 100644 packages/ionic-angular/src/generators/page/files/__name__.page.html.template delete mode 100644 packages/ionic-angular/src/generators/page/files/__name__.page.scss.template delete mode 100644 packages/ionic-angular/src/generators/page/files/__name__.page.spec.ts.template delete mode 100644 packages/ionic-angular/src/generators/page/files/__name__.page.ts.template delete mode 100644 packages/ionic-angular/src/generators/page/generator.spec.ts delete mode 100644 packages/ionic-angular/src/generators/page/generator.ts delete mode 100644 packages/ionic-angular/src/generators/page/lib/update-routing-file.ts delete mode 100644 packages/ionic-angular/src/generators/page/schema.d.ts delete mode 100644 packages/ionic-angular/src/generators/page/schema.json diff --git a/packages/capacitor/generators.json b/packages/capacitor/generators.json index ffba6c7ab..efdf297f1 100644 --- a/packages/capacitor/generators.json +++ b/packages/capacitor/generators.json @@ -3,16 +3,10 @@ "name": "nxextCapacitor", "version": "0.0.1", "generators": { - "capacitor-project": { - "factory": "./src/generators/capacitor-project/generator", - "schema": "./src/generators/capacitor-project/schema.json", - "description": "Add a Capacitor project" - }, - "application": { - "factory": "./src/generators/application/generator", - "schema": "./src/generators/application/schema.json", - "description": "application generator", - "aliases": ["app"] + "configuration": { + "factory": "./src/generators/configuration/generator", + "schema": "./src/generators/configuration/schema.json", + "description": "Configure Capacitor for an Nx project" } } } diff --git a/packages/capacitor/package.json b/packages/capacitor/package.json index 9df74a0e9..9304b556e 100644 --- a/packages/capacitor/package.json +++ b/packages/capacitor/package.json @@ -20,7 +20,6 @@ "dependencies": { "@nx/devkit": "^19.0.0", "nx": "^19.0.0", - "@nx/web": "^19.0.0", "ignore": "^5.3.1", "tslib": "^2.3.0" }, diff --git a/packages/capacitor/src/generators/application/files/index.html__template__ b/packages/capacitor/src/generators/application/files/index.html__template__ deleted file mode 100644 index 4252e3f12..000000000 --- a/packages/capacitor/src/generators/application/files/index.html__template__ +++ /dev/null @@ -1,16 +0,0 @@ - - - - - <%= className %> - - - - - - - - <<%= prefix %>-root>-root> - - - diff --git a/packages/capacitor/src/generators/application/files/public/favicon.ico b/packages/capacitor/src/generators/application/files/public/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 span { - flex-grow: 1; - font-weight: 400; - transition-property: background-color, border-color, color, fill, stroke, - opacity, box-shadow, transform, filter, backdrop-filter, - -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; - } - .list-item-link > span > span { - color: rgba(107, 114, 128, 1); - display: block; - flex-grow: 1; - font-size: 0.75rem; - font-weight: 300; - line-height: 1rem; - transition-property: background-color, border-color, color, fill, stroke, - opacity, box-shadow, transform, filter, backdrop-filter, - -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; - } - .list-item-link svg:last-child { - height: 1rem; - transition-property: all; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; - width: 1rem; - } - .list-item-link:hover { - color: rgba(255, 255, 255, 1); - background-color: hsla(162, 47%, 50%, 1); - } - .list-item-link:hover > span { - } - .list-item-link:hover > span > span { - color: rgba(243, 244, 246, 1); - } - .list-item-link:hover svg:last-child { - transform: translateX(0.25rem); - } - - #other-links { - } - .button-pill { - padding: 1.5rem 2rem; - transition-duration: 300ms; - transition-property: background-color, border-color, color, fill, stroke, - opacity, box-shadow, transform, filter, backdrop-filter, - -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - align-items: center; - display: flex; - } - .button-pill svg { - transition-property: background-color, border-color, color, fill, stroke, - opacity, box-shadow, transform, filter, backdrop-filter, - -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; - flex-shrink: 0; - width: 3rem; - } - .button-pill > span { - letter-spacing: -0.025em; - font-weight: 400; - font-size: 1.125rem; - line-height: 1.75rem; - padding-left: 1rem; - padding-right: 1rem; - } - .button-pill span span { - display: block; - font-size: 0.875rem; - font-weight: 300; - line-height: 1.25rem; - } - .button-pill:hover svg, - .button-pill:hover { - color: rgba(255, 255, 255, 1) !important; - } - #nx-console:hover { - background-color: rgba(0, 122, 204, 1); - } - #nx-console svg { - color: rgba(0, 122, 204, 1); - } - - #nx-repo:hover { - background-color: rgba(24, 23, 23, 1); - } - #nx-repo svg { - color: rgba(24, 23, 23, 1); - } - - #nx-cloud { - margin-bottom: 2rem; - margin-top: 2rem; - padding: 2.5rem 2rem; - } - #nx-cloud > div { - align-items: center; - display: flex; - } - #nx-cloud > div svg { - border-radius: 0.375rem; - flex-shrink: 0; - width: 3rem; - } - #nx-cloud > div h2 { - font-size: 1.125rem; - font-weight: 400; - letter-spacing: -0.025em; - line-height: 1.75rem; - padding-left: 1rem; - padding-right: 1rem; - } - #nx-cloud > div h2 span { - display: block; - font-size: 0.875rem; - font-weight: 300; - line-height: 1.25rem; - } - #nx-cloud p { - font-size: 1rem; - line-height: 1.5rem; - margin-top: 1rem; - } - #nx-cloud pre { - margin-top: 1rem; - } - #nx-cloud a { - color: rgba(107, 114, 128, 1); - display: block; - font-size: 0.875rem; - line-height: 1.25rem; - margin-top: 1.5rem; - text-align: right; - } - #nx-cloud a:hover { - text-decoration: underline; - } - - #commands { - padding: 2.5rem 2rem; - - margin-top: 3.5rem; - } - #commands h2 { - font-size: 1.25rem; - font-weight: 400; - letter-spacing: -0.025em; - line-height: 1.75rem; - padding-left: 1rem; - padding-right: 1rem; - } - #commands p { - font-size: 1rem; - font-weight: 300; - line-height: 1.5rem; - margin-top: 1rem; - padding-left: 1rem; - padding-right: 1rem; - } - details { - align-items: center; - display: flex; - margin-top: 1rem; - padding-left: 1rem; - padding-right: 1rem; - width: 100%; - } - details pre > span { - color: rgba(181, 181, 181, 1); - } - summary { - border-radius: 0.5rem; - display: flex; - font-weight: 400; - padding: 0.5rem; - cursor: pointer; - transition-property: background-color, border-color, color, fill, stroke, - opacity, box-shadow, transform, filter, backdrop-filter, - -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; - } - summary:hover { - background-color: rgba(243, 244, 246, 1); - } - summary svg { - height: 1.5rem; - margin-right: 1rem; - width: 1.5rem; - } - - #love { - color: rgba(107, 114, 128, 1); - font-size: 0.875rem; - line-height: 1.25rem; - margin-top: 3.5rem; - opacity: 0.6; - text-align: center; - } - #love svg { - color: rgba(252, 165, 165, 1); - width: 1.25rem; - height: 1.25rem; - display: inline; - margin-top: -0.25rem; - } - - @media screen and (min-width: 768px) { - #hero { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - #hero .logo-container { - display: flex; - } - #middle-content { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - } diff --git a/packages/capacitor/src/generators/application/files/src/app/app.element.spec.ts__template__ b/packages/capacitor/src/generators/application/files/src/app/app.element.spec.ts__template__ deleted file mode 100644 index 8f8178a21..000000000 --- a/packages/capacitor/src/generators/application/files/src/app/app.element.spec.ts__template__ +++ /dev/null @@ -1,21 +0,0 @@ -import { AppElement } from './app.element'; - -describe('AppElement', () => { - let app: AppElement; - - beforeEach(() => { - app = new AppElement(); - }); - - it('should create successfully', () => { - expect(app).toBeTruthy(); - }); - - it('should have a greeting', () => { - app.connectedCallback(); - - expect(app.querySelector('h1').innerHTML).toContain( - 'Welcome <%= projectName %>' - ); - }); -}); diff --git a/packages/capacitor/src/generators/application/files/src/app/app.element.ts__template__ b/packages/capacitor/src/generators/application/files/src/app/app.element.ts__template__ deleted file mode 100644 index 23ab525ae..000000000 --- a/packages/capacitor/src/generators/application/files/src/app/app.element.ts__template__ +++ /dev/null @@ -1,375 +0,0 @@ -import './app.element.<%= style %>'; - -export class AppElement extends HTMLElement { - public static observedAttributes = [ - - ]; - - connectedCallback() { - const title = '<%= projectName %>'; - this.innerHTML = ` -
-
- -
-

- Hello there, - Welcome ${title} 👋 -

-
- - -
-
-

- - - - You're up and running -

- What's next? -
-
- - - -
-
- - - - - -
-

Next steps

-

Here are some things you can do with Nx:

-
- - - - - Add UI library - -
# Generate UI lib
-nx g @nx/angular:lib ui
-
-# Add a component
-nx g @nx/angular:component button --project ui
-
-
- - - - - View interactive project graph - -
nx graph
-
-
- - - - - Run affected commands - -
# see what's been affected by changes
-nx affected:graph
-
-# run tests for current changes
-nx affected:test
-
-# run e2e tests for current changes
-nx affected:e2e
-
-
- -

- Carefully crafted with - - - -

-
-
- `; - } -} -customElements.define('<%= prefix %>-root', AppElement); diff --git a/packages/capacitor/src/generators/application/files/src/assets/.gitkeep b/packages/capacitor/src/generators/application/files/src/assets/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/capacitor/src/generators/application/files/src/main.ts__template__ b/packages/capacitor/src/generators/application/files/src/main.ts__template__ deleted file mode 100644 index fdb879ded..000000000 --- a/packages/capacitor/src/generators/application/files/src/main.ts__template__ +++ /dev/null @@ -1 +0,0 @@ -import './app/app.element'; diff --git a/packages/capacitor/src/generators/application/files/src/styles.__style__ b/packages/capacitor/src/generators/application/files/src/styles.__style__ deleted file mode 100644 index 90d4ee007..000000000 --- a/packages/capacitor/src/generators/application/files/src/styles.__style__ +++ /dev/null @@ -1 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ diff --git a/packages/capacitor/src/generators/application/files/tsconfig.app.json b/packages/capacitor/src/generators/application/files/tsconfig.app.json deleted file mode 100644 index a8afc0e4f..000000000 --- a/packages/capacitor/src/generators/application/files/tsconfig.app.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "<%= offsetFromRoot %>dist/out-tsc", - "types": ["node"] - }, - "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], - "include": ["src/**/*.ts"] -} diff --git a/packages/capacitor/src/generators/application/files/tsconfig.json__tmpl__ b/packages/capacitor/src/generators/application/files/tsconfig.json__tmpl__ deleted file mode 100644 index 8101416df..000000000 --- a/packages/capacitor/src/generators/application/files/tsconfig.json__tmpl__ +++ /dev/null @@ -1,27 +0,0 @@ -{ - "extends": "<%= rootTsConfigPath %>", - "files": [], - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "module": "ESNext", - "lib": ["ESNext", "DOM"], - "moduleResolution": "Node", - "strict": true, - "resolveJsonModule": true, - "isolatedModules": true, - "esModuleInterop": true, - "noEmit": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "skipLibCheck": true, - "types": ["vite/client"] - }, - "include": ["src"], - "references": [ - { - "path": "./tsconfig.app.json" - } - ] -} diff --git a/packages/capacitor/src/generators/application/generator.spec.ts b/packages/capacitor/src/generators/application/generator.spec.ts deleted file mode 100644 index f4e5e9d1f..000000000 --- a/packages/capacitor/src/generators/application/generator.spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { Tree } from '@nx/devkit'; - -import generator from './generator'; -import { AppGeneratorSchema } from './schema'; - -describe('app generator', () => { - let tree: Tree; - const options: AppGeneratorSchema = { - name: 'test', - appId: 'com.test.app', - unitTestRunner: 'vitest', - }; - - beforeEach(() => { - tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - }); - - it('should run successfully', async () => { - await generator(tree, options); - - expect(tree.exists('apps/test/src/main.ts')).toBeTruthy(); - }); -}); diff --git a/packages/capacitor/src/generators/application/generator.ts b/packages/capacitor/src/generators/application/generator.ts deleted file mode 100644 index 99ed416d3..000000000 --- a/packages/capacitor/src/generators/application/generator.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { - convertNxGenerator, - ensurePackage, - formatFiles, - NX_VERSION, - runTasksInSerial, - Tree, -} from '@nx/devkit'; -import { AppGeneratorSchema } from './schema'; -import { capacitorProjectGenerator } from '../capacitor-project/generator'; - -export async function applicationGenerator( - tree: Tree, - options: AppGeneratorSchema -) { - const viteTask = await createDefaultViteApp(tree, options); - - const capacitorTask = await capacitorProjectGenerator(tree, { - project: options.name, - appName: options.name, - appId: options.appId, - skipFormat: true, - }); - - await formatFiles(tree); - - return runTasksInSerial(viteTask, capacitorTask); -} - -async function createDefaultViteApp(tree: Tree, options: AppGeneratorSchema) { - const { applicationGenerator } = ensurePackage( - '@nx/web', - NX_VERSION - ); - - return await applicationGenerator(tree, { - name: options.name, - bundler: 'vite', - unitTestRunner: options.unitTestRunner, - skipFormat: true, - }); -} - -export default applicationGenerator; -export const applicationSchematic = convertNxGenerator(applicationGenerator); diff --git a/packages/capacitor/src/generators/application/schema.d.ts b/packages/capacitor/src/generators/application/schema.d.ts deleted file mode 100644 index 19b46b4e4..000000000 --- a/packages/capacitor/src/generators/application/schema.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface AppGeneratorSchema { - name: string; - appId: string; - unitTestRunner: 'vitest' | 'none'; -} diff --git a/packages/capacitor/src/generators/application/schema.json b/packages/capacitor/src/generators/application/schema.json deleted file mode 100644 index fb781da47..000000000 --- a/packages/capacitor/src/generators/application/schema.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema", - "$id": "App", - "title": "", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "", - "$default": { - "$source": "argv", - "index": 0 - }, - "x-prompt": "What name would you like to use?" - }, - "unitTestRunner": { - "type": "string", - "enum": ["vitest", "none"], - "description": "Test runner to use for unit tests.", - "default": "vitest" - }, - "appId": { - "type": "string", - "description": "The app ID for the project.", - "default": "io.ionic.starter", - "x-prompt": "What app ID would you like to use?" - } - }, - "required": ["name", "appId"] -} diff --git a/packages/capacitor/src/generators/capacitor-project/files/capacitor-config/capacitor.config.ts__template__ b/packages/capacitor/src/generators/configuration/files/capacitor-config/capacitor.config.ts__template__ similarity index 100% rename from packages/capacitor/src/generators/capacitor-project/files/capacitor-config/capacitor.config.ts__template__ rename to packages/capacitor/src/generators/configuration/files/capacitor-config/capacitor.config.ts__template__ diff --git a/packages/capacitor/src/generators/capacitor-project/files/package-json/package.json__template__ b/packages/capacitor/src/generators/configuration/files/package-json/package.json__template__ similarity index 100% rename from packages/capacitor/src/generators/capacitor-project/files/package-json/package.json__template__ rename to packages/capacitor/src/generators/configuration/files/package-json/package.json__template__ diff --git a/packages/capacitor/src/generators/capacitor-project/generator.spec.ts b/packages/capacitor/src/generators/configuration/generator.spec.ts similarity index 98% rename from packages/capacitor/src/generators/capacitor-project/generator.spec.ts rename to packages/capacitor/src/generators/configuration/generator.spec.ts index 72a92cf60..3b65304a0 100644 --- a/packages/capacitor/src/generators/capacitor-project/generator.spec.ts +++ b/packages/capacitor/src/generators/configuration/generator.spec.ts @@ -8,12 +8,12 @@ import { } from '@nx/devkit'; import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; import generator from './generator'; -import { CapacitorGeneratorSchema } from './schema'; +import { CapacitorConfigurationSchema } from './schema'; describe('capacitor-project', () => { let appTree: Tree; - const options: CapacitorGeneratorSchema = { + const options: CapacitorConfigurationSchema = { project: 'capacitor-app', appId: 'com.example.capacitorapp', appName: 'Capacitor App', diff --git a/packages/capacitor/src/generators/capacitor-project/generator.ts b/packages/capacitor/src/generators/configuration/generator.ts similarity index 79% rename from packages/capacitor/src/generators/capacitor-project/generator.ts rename to packages/capacitor/src/generators/configuration/generator.ts index 53a709823..a0dbe57f0 100644 --- a/packages/capacitor/src/generators/capacitor-project/generator.ts +++ b/packages/capacitor/src/generators/configuration/generator.ts @@ -5,11 +5,11 @@ import { addProject } from './lib/add-project'; import { normalizeOptions } from './lib/normalize-options'; import { updateProjectGitignore } from './lib/update-project-gitignore'; import { updateProjectPackageJson } from './lib/update-project-package-json'; -import { CapacitorGeneratorSchema } from './schema'; +import { CapacitorConfigurationSchema } from './schema'; -export async function capacitorProjectGenerator( +export async function capacitorConfigurationGenerator( host: Tree, - options: CapacitorGeneratorSchema + options: CapacitorConfigurationSchema ) { const normalizedOptions = normalizeOptions(host, options); const installTask = addDependencies(host); @@ -25,7 +25,7 @@ export async function capacitorProjectGenerator( return installTask; } -export default capacitorProjectGenerator; +export default capacitorConfigurationGenerator; export const capacitorProjectSchematic = convertNxGenerator( - capacitorProjectGenerator + capacitorConfigurationGenerator ); diff --git a/packages/capacitor/src/generators/capacitor-project/lib/add-capacitor-config.ts b/packages/capacitor/src/generators/configuration/lib/add-capacitor-config.ts similarity index 100% rename from packages/capacitor/src/generators/capacitor-project/lib/add-capacitor-config.ts rename to packages/capacitor/src/generators/configuration/lib/add-capacitor-config.ts diff --git a/packages/capacitor/src/generators/capacitor-project/lib/add-dependencies.ts b/packages/capacitor/src/generators/configuration/lib/add-dependencies.ts similarity index 100% rename from packages/capacitor/src/generators/capacitor-project/lib/add-dependencies.ts rename to packages/capacitor/src/generators/configuration/lib/add-dependencies.ts diff --git a/packages/capacitor/src/generators/capacitor-project/lib/add-project.ts b/packages/capacitor/src/generators/configuration/lib/add-project.ts similarity index 100% rename from packages/capacitor/src/generators/capacitor-project/lib/add-project.ts rename to packages/capacitor/src/generators/configuration/lib/add-project.ts diff --git a/packages/capacitor/src/generators/capacitor-project/lib/normalize-options.ts b/packages/capacitor/src/generators/configuration/lib/normalize-options.ts similarity index 82% rename from packages/capacitor/src/generators/capacitor-project/lib/normalize-options.ts rename to packages/capacitor/src/generators/configuration/lib/normalize-options.ts index dc96b6126..0543ab676 100644 --- a/packages/capacitor/src/generators/capacitor-project/lib/normalize-options.ts +++ b/packages/capacitor/src/generators/configuration/lib/normalize-options.ts @@ -4,11 +4,11 @@ import { readProjectConfiguration, Tree, } from '@nx/devkit'; -import { CapacitorGeneratorSchema, NormalizedSchema } from '../schema'; +import { CapacitorConfigurationSchema, NormalizedSchema } from '../schema'; export function normalizeOptions( host: Tree, - options: CapacitorGeneratorSchema + options: CapacitorConfigurationSchema ): NormalizedSchema { const appName = options.appName ? options.appName : options.project; const { root } = readProjectConfiguration(host, options.project); diff --git a/packages/capacitor/src/generators/capacitor-project/lib/update-project-gitignore.ts b/packages/capacitor/src/generators/configuration/lib/update-project-gitignore.ts similarity index 100% rename from packages/capacitor/src/generators/capacitor-project/lib/update-project-gitignore.ts rename to packages/capacitor/src/generators/configuration/lib/update-project-gitignore.ts diff --git a/packages/capacitor/src/generators/capacitor-project/lib/update-project-package-json.ts b/packages/capacitor/src/generators/configuration/lib/update-project-package-json.ts similarity index 100% rename from packages/capacitor/src/generators/capacitor-project/lib/update-project-package-json.ts rename to packages/capacitor/src/generators/configuration/lib/update-project-package-json.ts diff --git a/packages/capacitor/src/generators/capacitor-project/schema.d.ts b/packages/capacitor/src/generators/configuration/schema.d.ts similarity index 55% rename from packages/capacitor/src/generators/capacitor-project/schema.d.ts rename to packages/capacitor/src/generators/configuration/schema.d.ts index 36aaa0f2f..57f45bad3 100644 --- a/packages/capacitor/src/generators/capacitor-project/schema.d.ts +++ b/packages/capacitor/src/generators/configuration/schema.d.ts @@ -1,4 +1,4 @@ -export interface CapacitorGeneratorSchema { +export interface CapacitorConfigurationSchema { project: string; appId: string; appName?: string; @@ -6,7 +6,7 @@ export interface CapacitorGeneratorSchema { skipFormat: boolean; } -export interface NormalizedSchema extends CapacitorGeneratorSchema { +export interface NormalizedSchema extends CapacitorConfigurationSchema { projectRoot: string; pathToRoot: string; } diff --git a/packages/capacitor/src/generators/capacitor-project/schema.json b/packages/capacitor/src/generators/configuration/schema.json similarity index 91% rename from packages/capacitor/src/generators/capacitor-project/schema.json rename to packages/capacitor/src/generators/configuration/schema.json index 04d9d4bea..bccf0006d 100644 --- a/packages/capacitor/src/generators/capacitor-project/schema.json +++ b/packages/capacitor/src/generators/configuration/schema.json @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/schema", - "$id": "CapacitorProject", - "title": "Create a Capacitor project for an Nx application", + "$id": "CapacitorConfiguration", + "title": "Configure Capacitor for an Nx project", "type": "object", "properties": { "project": { diff --git a/packages/capacitor/src/index.ts b/packages/capacitor/src/index.ts index bf1ba83c8..595e670ca 100644 --- a/packages/capacitor/src/index.ts +++ b/packages/capacitor/src/index.ts @@ -1,2 +1,2 @@ -export { capacitorProjectGenerator } from './generators/capacitor-project/generator'; -export { CapacitorGeneratorSchema } from './generators/capacitor-project/schema'; +export { capacitorConfigurationGenerator } from './generators/configuration/generator'; +export { CapacitorConfigurationSchema } from './generators/configuration/schema'; diff --git a/packages/ionic-angular/generators.json b/packages/ionic-angular/generators.json index b57c85de5..0d92b8c7f 100644 --- a/packages/ionic-angular/generators.json +++ b/packages/ionic-angular/generators.json @@ -3,16 +3,10 @@ "name": "Nxext Ionic Angular", "version": "0.0.1", "generators": { - "application": { - "factory": "./src/generators/application/generator", - "schema": "./src/generators/application/schema.json", - "aliases": ["app"], - "description": "Create an Ionic Angular application." - }, - "page": { - "factory": "./src/generators/page/generator", - "schema": "./src/generators/page/schema.json", - "description": "Generate an Ionic page component" + "configuration": { + "factory": "./src/generators/configuration/generator", + "schema": "./src/generators/configuration/schema.json", + "description": "Configure Ionic for an Angular application." } } } diff --git a/packages/ionic-angular/package.json b/packages/ionic-angular/package.json index 90497ebc1..644f340ca 100644 --- a/packages/ionic-angular/package.json +++ b/packages/ionic-angular/package.json @@ -22,11 +22,7 @@ "dependencies": { "@nxext/capacitor": "^19.0.0", "@nx/devkit": "^19.0.0", - "@nx/eslint": "^19.0.0", "@nx/angular": "^19.0.0", - "@nx/js": "^19.0.0", - "@phenomnomnominal/tsquery": "~5.0.1", - "typescript": "5.4.5", "tslib": "^2.3.0" }, "peerDependencies": {} diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/ionic.config.json.template b/packages/ionic-angular/src/generators/application/files/base-standalone/ionic.config.json.template deleted file mode 100644 index 839f85ef0..000000000 --- a/packages/ionic-angular/src/generators/application/files/base-standalone/ionic.config.json.template +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "<%= name %>", - "integrations": { - "capacitor": {} - }, - "type": "angular" -} diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.spec.ts.template deleted file mode 100644 index 51b7b65ab..000000000 --- a/packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.spec.ts.template +++ /dev/null @@ -1,21 +0,0 @@ -import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { TestBed } from '@angular/core/testing'; - -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [AppComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - }); - - it('should create the app', () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); - -}); diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.ts.template deleted file mode 100644 index ed79833df..000000000 --- a/packages/ionic-angular/src/generators/application/files/base-standalone/src/app/app.component.ts.template +++ /dev/null @@ -1,19 +0,0 @@ -import { Component } from '@angular/core'; -import {IonicModule} from '@ionic/angular'; - -@Component({ - selector: '<%= prefix %>-root', - standalone: true, - imports: [IonicModule], - template: ` - - - - `, - styles: ` - - ` -}) -export class AppComponent { - constructor() {} -} diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/src/assets/icon/favicon.png b/packages/ionic-angular/src/generators/application/files/base-standalone/src/assets/icon/favicon.png deleted file mode 100644 index 51888a7bbdb59f04c29c548523eb2638c1c954f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 930 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!x&nMcT-^(N+`Ik{1{5}NM-k9f zx+Ot=!3-}y{#<)Uok@}X^0T)Mjw~(h@l#Ir^NC7r=_#0-8E$a3RKVL~nc3p~*UxA# z4bjg_XJBBO<>}%W5^;EK_{&+V40u?Vtzk_Oy;*YMVqw~ozwz&rPG6d~>D#mR`SK=; zww9K@s-5|}%Dy=+ak|}>#qwwKGH>ZO4~|`P_r2LJy1RYqyXB`=?Mw?@F8Z!h{rcpz z^y94Mdt1KFIr?nR|NE2g?N}2vO^d(4;=OB>WP0Plul!REN;cgwUAJuA?C`^98NGCJ zuf=eS_OHmETd)0azdLJ6Z^FIm6*YNHw|4%lGf`stp1;dK$1sNYdj7ec{*dYEN(RM7|LFZWoy#R9733Kz`kee` zcsH&1+JCz2|7qRT%bgpNUdZ3E%i6T)I?vY6{p)ga_qlB<;GAPn(!{OF;x_wm_K%n( zW67=BbK}Hx+Mo2yW_)0K?|;#s9f!Uw=S;9NQ)S^>UOs1+lefL)nQKa6oJzg9f7^uT zr^QQJHL|;hJ!n29P`>r{pI$??E8ll+Vp%D3sqgGAQ?16Ir>}307i!n%dGB~BKleRm zV`}#;lUe7&`Rm%PqCLs%HOEe${KnWk%jlG>GM}cUf9>%Jt~^m(q1U%2$4$<)xHgTq zd0EM;Wjbazr!IcCcJ{`1i$kvS+;+RTmT^vJdf^@OKlARE7bo`3-BEDmtJB75>uhqr zB>Z2>{qec~lUw13i#jzoi~HY diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/src/index.html.template b/packages/ionic-angular/src/generators/application/files/base-standalone/src/index.html.template deleted file mode 100644 index 87447aaa0..000000000 --- a/packages/ionic-angular/src/generators/application/files/base-standalone/src/index.html.template +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - Ionic App - - - - - - - - - - - - - - - - - <<%= prefix %>-root>-root> - - - diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/src/styles.scss.template b/packages/ionic-angular/src/generators/application/files/base-standalone/src/styles.scss.template deleted file mode 100644 index 097cf6dea..000000000 --- a/packages/ionic-angular/src/generators/application/files/base-standalone/src/styles.scss.template +++ /dev/null @@ -1,10 +0,0 @@ -/* - * App Global CSS - * ---------------------------------------------------------------------------- - * Put style rules here that you want to apply globally. These styles are for - * the entire app and not just one component. Additionally, this file can be - * used as an entry point to import other CSS/Sass files to be included in the - * output CSS. - * For more information on global stylesheets, visit the documentation: - * https://ionicframework.com/docs/layout/global-stylesheets - */ diff --git a/packages/ionic-angular/src/generators/application/files/base-standalone/src/theme/variables.scss.template b/packages/ionic-angular/src/generators/application/files/base-standalone/src/theme/variables.scss.template deleted file mode 100644 index eae592599..000000000 --- a/packages/ionic-angular/src/generators/application/files/base-standalone/src/theme/variables.scss.template +++ /dev/null @@ -1,236 +0,0 @@ -// Ionic Variables and Theming. For more info, please see: -// http://ionicframework.com/docs/theming/ - -/** Ionic CSS Variables **/ -:root { - /** primary **/ - --ion-color-primary: #3880ff; - --ion-color-primary-rgb: 56, 128, 255; - --ion-color-primary-contrast: #ffffff; - --ion-color-primary-contrast-rgb: 255, 255, 255; - --ion-color-primary-shade: #3171e0; - --ion-color-primary-tint: #4c8dff; - - /** secondary **/ - --ion-color-secondary: #3dc2ff; - --ion-color-secondary-rgb: 61, 194, 255; - --ion-color-secondary-contrast: #ffffff; - --ion-color-secondary-contrast-rgb: 255, 255, 255; - --ion-color-secondary-shade: #36abe0; - --ion-color-secondary-tint: #50c8ff; - - /** tertiary **/ - --ion-color-tertiary: #5260ff; - --ion-color-tertiary-rgb: 82, 96, 255; - --ion-color-tertiary-contrast: #ffffff; - --ion-color-tertiary-contrast-rgb: 255, 255, 255; - --ion-color-tertiary-shade: #4854e0; - --ion-color-tertiary-tint: #6370ff; - - /** success **/ - --ion-color-success: #2dd36f; - --ion-color-success-rgb: 45, 211, 111; - --ion-color-success-contrast: #ffffff; - --ion-color-success-contrast-rgb: 255, 255, 255; - --ion-color-success-shade: #28ba62; - --ion-color-success-tint: #42d77d; - - /** warning **/ - --ion-color-warning: #ffc409; - --ion-color-warning-rgb: 255, 196, 9; - --ion-color-warning-contrast: #000000; - --ion-color-warning-contrast-rgb: 0, 0, 0; - --ion-color-warning-shade: #e0ac08; - --ion-color-warning-tint: #ffca22; - - /** danger **/ - --ion-color-danger: #eb445a; - --ion-color-danger-rgb: 235, 68, 90; - --ion-color-danger-contrast: #ffffff; - --ion-color-danger-contrast-rgb: 255, 255, 255; - --ion-color-danger-shade: #cf3c4f; - --ion-color-danger-tint: #ed576b; - - /** dark **/ - --ion-color-dark: #222428; - --ion-color-dark-rgb: 34, 36, 40; - --ion-color-dark-contrast: #ffffff; - --ion-color-dark-contrast-rgb: 255, 255, 255; - --ion-color-dark-shade: #1e2023; - --ion-color-dark-tint: #383a3e; - - /** medium **/ - --ion-color-medium: #92949c; - --ion-color-medium-rgb: 146, 148, 156; - --ion-color-medium-contrast: #ffffff; - --ion-color-medium-contrast-rgb: 255, 255, 255; - --ion-color-medium-shade: #808289; - --ion-color-medium-tint: #9d9fa6; - - /** light **/ - --ion-color-light: #f4f5f8; - --ion-color-light-rgb: 244, 245, 248; - --ion-color-light-contrast: #000000; - --ion-color-light-contrast-rgb: 0, 0, 0; - --ion-color-light-shade: #d7d8da; - --ion-color-light-tint: #f5f6f9; -} - -@media (prefers-color-scheme: dark) { - /* - * Dark Colors - * ------------------------------------------- - */ - - body { - --ion-color-primary: #428cff; - --ion-color-primary-rgb: 66,140,255; - --ion-color-primary-contrast: #ffffff; - --ion-color-primary-contrast-rgb: 255,255,255; - --ion-color-primary-shade: #3a7be0; - --ion-color-primary-tint: #5598ff; - - --ion-color-secondary: #50c8ff; - --ion-color-secondary-rgb: 80,200,255; - --ion-color-secondary-contrast: #ffffff; - --ion-color-secondary-contrast-rgb: 255,255,255; - --ion-color-secondary-shade: #46b0e0; - --ion-color-secondary-tint: #62ceff; - - --ion-color-tertiary: #6a64ff; - --ion-color-tertiary-rgb: 106,100,255; - --ion-color-tertiary-contrast: #ffffff; - --ion-color-tertiary-contrast-rgb: 255,255,255; - --ion-color-tertiary-shade: #5d58e0; - --ion-color-tertiary-tint: #7974ff; - - --ion-color-success: #2fdf75; - --ion-color-success-rgb: 47,223,117; - --ion-color-success-contrast: #000000; - --ion-color-success-contrast-rgb: 0,0,0; - --ion-color-success-shade: #29c467; - --ion-color-success-tint: #44e283; - - --ion-color-warning: #ffd534; - --ion-color-warning-rgb: 255,213,52; - --ion-color-warning-contrast: #000000; - --ion-color-warning-contrast-rgb: 0,0,0; - --ion-color-warning-shade: #e0bb2e; - --ion-color-warning-tint: #ffd948; - - --ion-color-danger: #ff4961; - --ion-color-danger-rgb: 255,73,97; - --ion-color-danger-contrast: #ffffff; - --ion-color-danger-contrast-rgb: 255,255,255; - --ion-color-danger-shade: #e04055; - --ion-color-danger-tint: #ff5b71; - - --ion-color-dark: #f4f5f8; - --ion-color-dark-rgb: 244,245,248; - --ion-color-dark-contrast: #000000; - --ion-color-dark-contrast-rgb: 0,0,0; - --ion-color-dark-shade: #d7d8da; - --ion-color-dark-tint: #f5f6f9; - - --ion-color-medium: #989aa2; - --ion-color-medium-rgb: 152,154,162; - --ion-color-medium-contrast: #000000; - --ion-color-medium-contrast-rgb: 0,0,0; - --ion-color-medium-shade: #86888f; - --ion-color-medium-tint: #a2a4ab; - - --ion-color-light: #222428; - --ion-color-light-rgb: 34,36,40; - --ion-color-light-contrast: #ffffff; - --ion-color-light-contrast-rgb: 255,255,255; - --ion-color-light-shade: #1e2023; - --ion-color-light-tint: #383a3e; - } - - /* - * iOS Dark Theme - * ------------------------------------------- - */ - - .ios body { - --ion-background-color: #000000; - --ion-background-color-rgb: 0,0,0; - - --ion-text-color: #ffffff; - --ion-text-color-rgb: 255,255,255; - - --ion-color-step-50: #0d0d0d; - --ion-color-step-100: #1a1a1a; - --ion-color-step-150: #262626; - --ion-color-step-200: #333333; - --ion-color-step-250: #404040; - --ion-color-step-300: #4d4d4d; - --ion-color-step-350: #595959; - --ion-color-step-400: #666666; - --ion-color-step-450: #737373; - --ion-color-step-500: #808080; - --ion-color-step-550: #8c8c8c; - --ion-color-step-600: #999999; - --ion-color-step-650: #a6a6a6; - --ion-color-step-700: #b3b3b3; - --ion-color-step-750: #bfbfbf; - --ion-color-step-800: #cccccc; - --ion-color-step-850: #d9d9d9; - --ion-color-step-900: #e6e6e6; - --ion-color-step-950: #f2f2f2; - - --ion-item-background: #000000; - - --ion-card-background: #1c1c1d; - } - - .ios ion-modal { - --ion-background-color: var(--ion-color-step-100); - --ion-toolbar-background: var(--ion-color-step-150); - --ion-toolbar-border-color: var(--ion-color-step-250); - } - - - /* - * Material Design Dark Theme - * ------------------------------------------- - */ - - .md body { - --ion-background-color: #121212; - --ion-background-color-rgb: 18,18,18; - - --ion-text-color: #ffffff; - --ion-text-color-rgb: 255,255,255; - - --ion-border-color: #222222; - - --ion-color-step-50: #1e1e1e; - --ion-color-step-100: #2a2a2a; - --ion-color-step-150: #363636; - --ion-color-step-200: #414141; - --ion-color-step-250: #4d4d4d; - --ion-color-step-300: #595959; - --ion-color-step-350: #656565; - --ion-color-step-400: #717171; - --ion-color-step-450: #7d7d7d; - --ion-color-step-500: #898989; - --ion-color-step-550: #949494; - --ion-color-step-600: #a0a0a0; - --ion-color-step-650: #acacac; - --ion-color-step-700: #b8b8b8; - --ion-color-step-750: #c4c4c4; - --ion-color-step-800: #d0d0d0; - --ion-color-step-850: #dbdbdb; - --ion-color-step-900: #e7e7e7; - --ion-color-step-950: #f3f3f3; - - --ion-item-background: #1e1e1e; - - --ion-toolbar-background: #1f1f1f; - - --ion-tab-bar-background: #1f1f1f; - - --ion-card-background: #1e1e1e; - } -} diff --git a/packages/ionic-angular/src/generators/application/files/base/ionic.config.json.template b/packages/ionic-angular/src/generators/application/files/base/ionic.config.json.template deleted file mode 100644 index 839f85ef0..000000000 --- a/packages/ionic-angular/src/generators/application/files/base/ionic.config.json.template +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "<%= name %>", - "integrations": { - "capacitor": {} - }, - "type": "angular" -} diff --git a/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.html.template b/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.html.template deleted file mode 100644 index 13b96776e..000000000 --- a/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.html.template +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.scss.template b/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.scss.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.spec.ts.template deleted file mode 100644 index 51b7b65ab..000000000 --- a/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.spec.ts.template +++ /dev/null @@ -1,21 +0,0 @@ -import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { TestBed } from '@angular/core/testing'; - -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [AppComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - }); - - it('should create the app', () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); - -}); diff --git a/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.ts.template deleted file mode 100644 index 4242f27de..000000000 --- a/packages/ionic-angular/src/generators/application/files/base/src/app/app.component.ts.template +++ /dev/null @@ -1,10 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: '<%= prefix %>-root', - templateUrl: 'app.component.html', - styleUrls: ['app.component.scss'], -}) -export class AppComponent { - constructor() {} -} diff --git a/packages/ionic-angular/src/generators/application/files/base/src/app/app.module.ts.template b/packages/ionic-angular/src/generators/application/files/base/src/app/app.module.ts.template deleted file mode 100644 index 4255dd891..000000000 --- a/packages/ionic-angular/src/generators/application/files/base/src/app/app.module.ts.template +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { RouteReuseStrategy } from '@angular/router'; - -import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; - -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; - -@NgModule({ - declarations: [AppComponent], - imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], - providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }], - bootstrap: [AppComponent], -}) -export class AppModule {} diff --git a/packages/ionic-angular/src/generators/application/files/base/src/assets/icon/favicon.png b/packages/ionic-angular/src/generators/application/files/base/src/assets/icon/favicon.png deleted file mode 100644 index 51888a7bbdb59f04c29c548523eb2638c1c954f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 930 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!x&nMcT-^(N+`Ik{1{5}NM-k9f zx+Ot=!3-}y{#<)Uok@}X^0T)Mjw~(h@l#Ir^NC7r=_#0-8E$a3RKVL~nc3p~*UxA# z4bjg_XJBBO<>}%W5^;EK_{&+V40u?Vtzk_Oy;*YMVqw~ozwz&rPG6d~>D#mR`SK=; zww9K@s-5|}%Dy=+ak|}>#qwwKGH>ZO4~|`P_r2LJy1RYqyXB`=?Mw?@F8Z!h{rcpz z^y94Mdt1KFIr?nR|NE2g?N}2vO^d(4;=OB>WP0Plul!REN;cgwUAJuA?C`^98NGCJ zuf=eS_OHmETd)0azdLJ6Z^FIm6*YNHw|4%lGf`stp1;dK$1sNYdj7ec{*dYEN(RM7|LFZWoy#R9733Kz`kee` zcsH&1+JCz2|7qRT%bgpNUdZ3E%i6T)I?vY6{p)ga_qlB<;GAPn(!{OF;x_wm_K%n( zW67=BbK}Hx+Mo2yW_)0K?|;#s9f!Uw=S;9NQ)S^>UOs1+lefL)nQKa6oJzg9f7^uT zr^QQJHL|;hJ!n29P`>r{pI$??E8ll+Vp%D3sqgGAQ?16Ir>}307i!n%dGB~BKleRm zV`}#;lUe7&`Rm%PqCLs%HOEe${KnWk%jlG>GM}cUf9>%Jt~^m(q1U%2$4$<)xHgTq zd0EM;Wjbazr!IcCcJ{`1i$kvS+;+RTmT^vJdf^@OKlARE7bo`3-BEDmtJB75>uhqr zB>Z2>{qec~lUw13i#jzoi~HY diff --git a/packages/ionic-angular/src/generators/application/files/base/src/index.html.template b/packages/ionic-angular/src/generators/application/files/base/src/index.html.template deleted file mode 100644 index 87447aaa0..000000000 --- a/packages/ionic-angular/src/generators/application/files/base/src/index.html.template +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - Ionic App - - - - - - - - - - - - - - - - - <<%= prefix %>-root>-root> - - - diff --git a/packages/ionic-angular/src/generators/application/files/base/src/styles.scss.template b/packages/ionic-angular/src/generators/application/files/base/src/styles.scss.template deleted file mode 100644 index 097cf6dea..000000000 --- a/packages/ionic-angular/src/generators/application/files/base/src/styles.scss.template +++ /dev/null @@ -1,10 +0,0 @@ -/* - * App Global CSS - * ---------------------------------------------------------------------------- - * Put style rules here that you want to apply globally. These styles are for - * the entire app and not just one component. Additionally, this file can be - * used as an entry point to import other CSS/Sass files to be included in the - * output CSS. - * For more information on global stylesheets, visit the documentation: - * https://ionicframework.com/docs/layout/global-stylesheets - */ diff --git a/packages/ionic-angular/src/generators/application/files/base/src/theme/variables.scss.template b/packages/ionic-angular/src/generators/application/files/base/src/theme/variables.scss.template deleted file mode 100644 index eae592599..000000000 --- a/packages/ionic-angular/src/generators/application/files/base/src/theme/variables.scss.template +++ /dev/null @@ -1,236 +0,0 @@ -// Ionic Variables and Theming. For more info, please see: -// http://ionicframework.com/docs/theming/ - -/** Ionic CSS Variables **/ -:root { - /** primary **/ - --ion-color-primary: #3880ff; - --ion-color-primary-rgb: 56, 128, 255; - --ion-color-primary-contrast: #ffffff; - --ion-color-primary-contrast-rgb: 255, 255, 255; - --ion-color-primary-shade: #3171e0; - --ion-color-primary-tint: #4c8dff; - - /** secondary **/ - --ion-color-secondary: #3dc2ff; - --ion-color-secondary-rgb: 61, 194, 255; - --ion-color-secondary-contrast: #ffffff; - --ion-color-secondary-contrast-rgb: 255, 255, 255; - --ion-color-secondary-shade: #36abe0; - --ion-color-secondary-tint: #50c8ff; - - /** tertiary **/ - --ion-color-tertiary: #5260ff; - --ion-color-tertiary-rgb: 82, 96, 255; - --ion-color-tertiary-contrast: #ffffff; - --ion-color-tertiary-contrast-rgb: 255, 255, 255; - --ion-color-tertiary-shade: #4854e0; - --ion-color-tertiary-tint: #6370ff; - - /** success **/ - --ion-color-success: #2dd36f; - --ion-color-success-rgb: 45, 211, 111; - --ion-color-success-contrast: #ffffff; - --ion-color-success-contrast-rgb: 255, 255, 255; - --ion-color-success-shade: #28ba62; - --ion-color-success-tint: #42d77d; - - /** warning **/ - --ion-color-warning: #ffc409; - --ion-color-warning-rgb: 255, 196, 9; - --ion-color-warning-contrast: #000000; - --ion-color-warning-contrast-rgb: 0, 0, 0; - --ion-color-warning-shade: #e0ac08; - --ion-color-warning-tint: #ffca22; - - /** danger **/ - --ion-color-danger: #eb445a; - --ion-color-danger-rgb: 235, 68, 90; - --ion-color-danger-contrast: #ffffff; - --ion-color-danger-contrast-rgb: 255, 255, 255; - --ion-color-danger-shade: #cf3c4f; - --ion-color-danger-tint: #ed576b; - - /** dark **/ - --ion-color-dark: #222428; - --ion-color-dark-rgb: 34, 36, 40; - --ion-color-dark-contrast: #ffffff; - --ion-color-dark-contrast-rgb: 255, 255, 255; - --ion-color-dark-shade: #1e2023; - --ion-color-dark-tint: #383a3e; - - /** medium **/ - --ion-color-medium: #92949c; - --ion-color-medium-rgb: 146, 148, 156; - --ion-color-medium-contrast: #ffffff; - --ion-color-medium-contrast-rgb: 255, 255, 255; - --ion-color-medium-shade: #808289; - --ion-color-medium-tint: #9d9fa6; - - /** light **/ - --ion-color-light: #f4f5f8; - --ion-color-light-rgb: 244, 245, 248; - --ion-color-light-contrast: #000000; - --ion-color-light-contrast-rgb: 0, 0, 0; - --ion-color-light-shade: #d7d8da; - --ion-color-light-tint: #f5f6f9; -} - -@media (prefers-color-scheme: dark) { - /* - * Dark Colors - * ------------------------------------------- - */ - - body { - --ion-color-primary: #428cff; - --ion-color-primary-rgb: 66,140,255; - --ion-color-primary-contrast: #ffffff; - --ion-color-primary-contrast-rgb: 255,255,255; - --ion-color-primary-shade: #3a7be0; - --ion-color-primary-tint: #5598ff; - - --ion-color-secondary: #50c8ff; - --ion-color-secondary-rgb: 80,200,255; - --ion-color-secondary-contrast: #ffffff; - --ion-color-secondary-contrast-rgb: 255,255,255; - --ion-color-secondary-shade: #46b0e0; - --ion-color-secondary-tint: #62ceff; - - --ion-color-tertiary: #6a64ff; - --ion-color-tertiary-rgb: 106,100,255; - --ion-color-tertiary-contrast: #ffffff; - --ion-color-tertiary-contrast-rgb: 255,255,255; - --ion-color-tertiary-shade: #5d58e0; - --ion-color-tertiary-tint: #7974ff; - - --ion-color-success: #2fdf75; - --ion-color-success-rgb: 47,223,117; - --ion-color-success-contrast: #000000; - --ion-color-success-contrast-rgb: 0,0,0; - --ion-color-success-shade: #29c467; - --ion-color-success-tint: #44e283; - - --ion-color-warning: #ffd534; - --ion-color-warning-rgb: 255,213,52; - --ion-color-warning-contrast: #000000; - --ion-color-warning-contrast-rgb: 0,0,0; - --ion-color-warning-shade: #e0bb2e; - --ion-color-warning-tint: #ffd948; - - --ion-color-danger: #ff4961; - --ion-color-danger-rgb: 255,73,97; - --ion-color-danger-contrast: #ffffff; - --ion-color-danger-contrast-rgb: 255,255,255; - --ion-color-danger-shade: #e04055; - --ion-color-danger-tint: #ff5b71; - - --ion-color-dark: #f4f5f8; - --ion-color-dark-rgb: 244,245,248; - --ion-color-dark-contrast: #000000; - --ion-color-dark-contrast-rgb: 0,0,0; - --ion-color-dark-shade: #d7d8da; - --ion-color-dark-tint: #f5f6f9; - - --ion-color-medium: #989aa2; - --ion-color-medium-rgb: 152,154,162; - --ion-color-medium-contrast: #000000; - --ion-color-medium-contrast-rgb: 0,0,0; - --ion-color-medium-shade: #86888f; - --ion-color-medium-tint: #a2a4ab; - - --ion-color-light: #222428; - --ion-color-light-rgb: 34,36,40; - --ion-color-light-contrast: #ffffff; - --ion-color-light-contrast-rgb: 255,255,255; - --ion-color-light-shade: #1e2023; - --ion-color-light-tint: #383a3e; - } - - /* - * iOS Dark Theme - * ------------------------------------------- - */ - - .ios body { - --ion-background-color: #000000; - --ion-background-color-rgb: 0,0,0; - - --ion-text-color: #ffffff; - --ion-text-color-rgb: 255,255,255; - - --ion-color-step-50: #0d0d0d; - --ion-color-step-100: #1a1a1a; - --ion-color-step-150: #262626; - --ion-color-step-200: #333333; - --ion-color-step-250: #404040; - --ion-color-step-300: #4d4d4d; - --ion-color-step-350: #595959; - --ion-color-step-400: #666666; - --ion-color-step-450: #737373; - --ion-color-step-500: #808080; - --ion-color-step-550: #8c8c8c; - --ion-color-step-600: #999999; - --ion-color-step-650: #a6a6a6; - --ion-color-step-700: #b3b3b3; - --ion-color-step-750: #bfbfbf; - --ion-color-step-800: #cccccc; - --ion-color-step-850: #d9d9d9; - --ion-color-step-900: #e6e6e6; - --ion-color-step-950: #f2f2f2; - - --ion-item-background: #000000; - - --ion-card-background: #1c1c1d; - } - - .ios ion-modal { - --ion-background-color: var(--ion-color-step-100); - --ion-toolbar-background: var(--ion-color-step-150); - --ion-toolbar-border-color: var(--ion-color-step-250); - } - - - /* - * Material Design Dark Theme - * ------------------------------------------- - */ - - .md body { - --ion-background-color: #121212; - --ion-background-color-rgb: 18,18,18; - - --ion-text-color: #ffffff; - --ion-text-color-rgb: 255,255,255; - - --ion-border-color: #222222; - - --ion-color-step-50: #1e1e1e; - --ion-color-step-100: #2a2a2a; - --ion-color-step-150: #363636; - --ion-color-step-200: #414141; - --ion-color-step-250: #4d4d4d; - --ion-color-step-300: #595959; - --ion-color-step-350: #656565; - --ion-color-step-400: #717171; - --ion-color-step-450: #7d7d7d; - --ion-color-step-500: #898989; - --ion-color-step-550: #949494; - --ion-color-step-600: #a0a0a0; - --ion-color-step-650: #acacac; - --ion-color-step-700: #b8b8b8; - --ion-color-step-750: #c4c4c4; - --ion-color-step-800: #d0d0d0; - --ion-color-step-850: #dbdbdb; - --ion-color-step-900: #e7e7e7; - --ion-color-step-950: #f3f3f3; - - --ion-item-background: #1e1e1e; - - --ion-toolbar-background: #1f1f1f; - - --ion-tab-bar-background: #1f1f1f; - - --ion-card-background: #1e1e1e; - } -} diff --git a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.component.ts.template deleted file mode 100644 index 232695bd0..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.component.ts.template +++ /dev/null @@ -1,17 +0,0 @@ -import {Component} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {IonicModule} from '@ionic/angular'; - -@Component({ - selector: '<%= prefix %>-root', - standalone: true, - imports: [CommonModule, IonicModule], - template: ` - - - - `, - styles: `` -}) - -export class AppComponent {} \ No newline at end of file diff --git a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.config.ts.template b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.config.ts.template deleted file mode 100644 index 8c60f9f66..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.config.ts.template +++ /dev/null @@ -1,14 +0,0 @@ -import { ApplicationConfig, importProvidersFrom } from '@angular/core'; -import { provideRouter } from '@angular/router'; -import { appRoutes } from './app.routes'; -import {IonicModule} from '@ionic/angular'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideRouter(appRoutes), - importProvidersFrom( - IonicModule.forRoot() - ) - - ], -}; diff --git a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.routes.ts.template b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.routes.ts.template deleted file mode 100644 index 57b546b26..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/app.routes.ts.template +++ /dev/null @@ -1,14 +0,0 @@ -import { Routes } from '@angular/router'; - -export const appRoutes: Routes = [ - { - path: 'home', - loadChildren: () => import('./home/home.routes').then(r => r.routes) - }, - { - path: '', - redirectTo: 'home', - pathMatch: 'full' - }, -]; - diff --git a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.page.ts.template b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.page.ts.template deleted file mode 100644 index d98fe1000..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.page.ts.template +++ /dev/null @@ -1,66 +0,0 @@ -import { Component } from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {IonicModule} from '@ionic/angular'; - -@Component({ - selector: '<%= prefix %>-home', - standalone: true, - imports: [CommonModule, IonicModule], - template: ` - - - - Blank - - - - - - - - Blank - - - -
-

Welcome <%= appProjectName %>!

- Ready to create an app? -

Start with Ionic UI Components

-
-
- `, - styles: ` - #container { - text-align: center; - - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); - } - - #container strong { - font-size: 20px; - line-height: 26px; - } - - #container p { - font-size: 16px; - line-height: 22px; - - color: #8c8c8c; - - margin: 0; - } - - #container a { - text-decoration: none; - } - ` -}) -export class HomePage { - - constructor() {} - -} diff --git a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.routes.ts.template b/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.routes.ts.template deleted file mode 100644 index 2fb6d6926..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank-standalone/src/app/home/home.routes.ts.template +++ /dev/null @@ -1,9 +0,0 @@ -import { Routes } from '@angular/router'; - -export const routes: Routes = [ - { - path: '', - loadComponent: () => import('./home.page').then(p => p.HomePage) - } -]; - diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/app-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/app-routing.module.ts.template deleted file mode 100644 index e7b0d5af7..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank/src/app/app-routing.module.ts.template +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core'; -import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - { - path: 'home', - loadChildren: () => import('./home/home.module').then( m => m.HomePageModule) - }, - { - path: '', - redirectTo: 'home', - pathMatch: 'full' - }, -]; - -@NgModule({ - imports: [ - RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) - ], - exports: [RouterModule] -}) -export class AppRoutingModule { } diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/app.component.html.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/app.component.html.template deleted file mode 100644 index 13b96776e..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank/src/app/app.component.html.template +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/app.module.ts.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/app.module.ts.template deleted file mode 100644 index 4255dd891..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank/src/app/app.module.ts.template +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { RouteReuseStrategy } from '@angular/router'; - -import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; - -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; - -@NgModule({ - declarations: [AppComponent], - imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], - providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }], - bootstrap: [AppComponent], -}) -export class AppModule {} diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home-routing.module.ts.template deleted file mode 100644 index 29c3f6000..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home-routing.module.ts.template +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { HomePage } from './home.page'; - -const routes: Routes = [ - { - path: '', - component: HomePage, - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class HomePageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.module.ts.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.module.ts.template deleted file mode 100644 index a554f017a..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.module.ts.template +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { IonicModule } from '@ionic/angular'; -import { FormsModule } from '@angular/forms'; -import { HomePage } from './home.page'; - -import { HomePageRoutingModule } from './home-routing.module'; - - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - IonicModule, - HomePageRoutingModule - ], - declarations: [HomePage] -}) -export class HomePageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.html.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.html.template deleted file mode 100644 index b5dce640e..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.html.template +++ /dev/null @@ -1,21 +0,0 @@ - - - - Blank - - - - - - - - Blank - - - -
-

Welcome <%= appProjectName %>!

- Ready to create an app? -

Start with Ionic UI Components

-
-
diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.scss.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.scss.template deleted file mode 100644 index 8993e7ca0..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.scss.template +++ /dev/null @@ -1,27 +0,0 @@ -#container { - text-align: center; - - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); -} - -#container strong { - font-size: 20px; - line-height: 26px; -} - -#container p { - font-size: 16px; - line-height: 22px; - - color: #8c8c8c; - - margin: 0; -} - -#container a { - text-decoration: none; -} \ No newline at end of file diff --git a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.ts.template b/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.ts.template deleted file mode 100644 index ea75a71e3..000000000 --- a/packages/ionic-angular/src/generators/application/files/blank/src/app/home/home.page.ts.template +++ /dev/null @@ -1,12 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: '<%= prefix %>-home', - templateUrl: 'home.page.html', - styleUrls: ['home.page.scss'], -}) -export class HomePage { - - constructor() {} - -} diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.component.ts.template deleted file mode 100644 index b8e4893e4..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.component.ts.template +++ /dev/null @@ -1,18 +0,0 @@ -import {Component} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {IonicModule} from '@ionic/angular'; - -@Component({ - selector: '<%= prefix %>-root', - standalone: true, - imports: [CommonModule, IonicModule], - template: ` - - - - `, - styles: ` - ` -}) -export class AppComponent { -} diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.config.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.config.ts.template deleted file mode 100644 index 8c60f9f66..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.config.ts.template +++ /dev/null @@ -1,14 +0,0 @@ -import { ApplicationConfig, importProvidersFrom } from '@angular/core'; -import { provideRouter } from '@angular/router'; -import { appRoutes } from './app.routes'; -import {IonicModule} from '@ionic/angular'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideRouter(appRoutes), - importProvidersFrom( - IonicModule.forRoot() - ) - - ], -}; diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.routes.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.routes.ts.template deleted file mode 100644 index 3225d07c7..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/app.routes.ts.template +++ /dev/null @@ -1,18 +0,0 @@ -import {Routes} from '@angular/router'; - -export const appRoutes: Routes = [ - { - path: 'home', - loadChildren: () => import('./home/home.routes').then( r => r.routes) - }, - { - path: 'message/:id', - loadChildren: () => import('./view-message/view-message.routes').then( r => r.routes) - }, - { - path: '', - redirectTo: 'home', - pathMatch: 'full' - }, -]; - diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.page.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.page.ts.template deleted file mode 100644 index 75642c74a..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.page.ts.template +++ /dev/null @@ -1,54 +0,0 @@ -import { Component, inject } from '@angular/core'; -import {CommonModule} from '@angular/common'; -import { RefresherCustomEvent, IonicModule } from '@ionic/angular'; -import { DataService, Message } from '../services/data.service'; -import {MessageComponent} from '../message/message.component'; - -@Component({ - selector: '<%= prefix %>-home', - standalone: true, - imports: [CommonModule, IonicModule, MessageComponent], - template: ` - - - - Inbox - - - - - - - - - - - - - Inbox - - - - - - <<%= prefix %>-message *ngFor="let message of getMessages()" [message]="message">-message> - - - `, - styles: ` - ` -}) -export class HomePage { - private data = inject(DataService); - constructor() {} - - refresh(ev: any) { - setTimeout(() => { - (ev as RefresherCustomEvent).detail.complete(); - }, 3000); - } - - getMessages(): Message[] { - return this.data.getMessages(); - } -} diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.routes.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.routes.ts.template deleted file mode 100644 index e738d765e..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.routes.ts.template +++ /dev/null @@ -1,8 +0,0 @@ -import {Routes} from '@angular/router'; - -export const routes: Routes = [ - { - path: '', - loadComponent: () => import('./home.page').then(p => p.HomePage) - } -]; diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.spec.ts.template deleted file mode 100644 index 054a66d30..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/home/home.spec.ts.template +++ /dev/null @@ -1,27 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { RouterModule } from '@angular/router'; -import { IonicModule } from '@ionic/angular'; - -import { MessageComponentModule } from '../message/message.module'; - -import { HomePage } from './home.page'; - -describe('HomePage', () => { - let component: HomePage; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [HomePage], - imports: [IonicModule.forRoot(), MessageComponentModule, RouterModule.forRoot([])] - }).compileComponents(); - - fixture = TestBed.createComponent(HomePage); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.spec.ts.template deleted file mode 100644 index ba40d5bcc..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.spec.ts.template +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { RouterModule } from '@angular/router'; -import { IonicModule } from '@ionic/angular'; - -import { MessageComponent } from './message.component'; - -describe('MessageComponent', () => { - let component: MessageComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [MessageComponent], - imports: [IonicModule.forRoot(), RouterModule.forRoot([])] - }).compileComponents(); - - fixture = TestBed.createComponent(MessageComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.ts.template deleted file mode 100644 index 495b859b4..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/message/message.component.ts.template +++ /dev/null @@ -1,98 +0,0 @@ -import { ChangeDetectionStrategy, Component, inject, Input } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import {RouterModule} from '@angular/router'; -import { Platform, IonicModule } from '@ionic/angular'; -import { Message } from '../services/data.service'; - -@Component({ - selector: '<%= prefix %>-message', - standalone: true, - imports: [CommonModule, IonicModule, RouterModule], - template: ` - -
- -

- {{ message.fromName }} - - {{ message.date }} - - -

-

{{ message.subject }}

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -

-
-
- `, - styles: ` - ion-item { - --padding-start: 0; - --inner-padding-end: 0; - } - - ion-label { - margin-top: 12px; - margin-bottom: 12px; - } - - ion-item h2 { - font-weight: 600; - margin: 0; - } - - ion-item p { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - width: 95%; - } - - ion-item .date { - float: right; - align-items: center; - display: flex; - } - - ion-item ion-icon { - color: #c9c9ca; - } - - ion-item ion-note { - font-size: 15px; - margin-right: 8px; - font-weight: normal; - } - - ion-item ion-note.md { - margin-right: 14px; - } - - .dot { - display: block; - height: 12px; - width: 12px; - border-radius: 50%; - align-self: start; - margin: 16px 10px 16px 16px; - } - - .dot-unread { - background: var(--ion-color-primary); - } - - ion-footer ion-title { - font-size: 11px; - font-weight: normal; - } - `, - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class MessageComponent { - private platform = inject(Platform); - @Input() message?: Message; - isIos() { - return this.platform.is('ios') - } -} diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.spec.ts.template deleted file mode 100644 index a5283fc69..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.spec.ts.template +++ /dev/null @@ -1,12 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { DataService } from './data.service'; - -describe('DataService', () => { - beforeEach(() => TestBed.configureTestingModule({})); - - it('should be created', () => { - const service: DataService = TestBed.get(DataService); - expect(service).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.ts.template deleted file mode 100644 index 2fb24a271..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/services/data.service.ts.template +++ /dev/null @@ -1,83 +0,0 @@ -import { Injectable } from '@angular/core'; - -export interface Message { - fromName: string; - subject: string; - date: string; - id: number; - read: boolean; -} - -@Injectable({ - providedIn: 'root' -}) -export class DataService { - public messages: Message[] = [ - { - fromName: 'Matt Chorsey', - subject: 'New event: Trip to Vegas', - date: '9:32 AM', - id: 0, - read: false - }, - { - fromName: 'Lauren Ruthford', - subject: 'Long time no chat', - date: '6:12 AM', - id: 1, - read: false - }, - { - fromName: 'Jordan Firth', - subject: 'Report Results', - date: '4:55 AM', - id: 2, - read: false - }, - { - fromName: 'Bill Thomas', - subject: 'The situation', - date: 'Yesterday', - id: 3, - read: false - }, - { - fromName: 'Joanne Pollan', - subject: 'Updated invitation: Swim lessons', - date: 'Yesterday', - id: 4, - read: false - }, - { - fromName: 'Andrea Cornerston', - subject: 'Last minute ask', - date: 'Yesterday', - id: 5, - read: false - }, - { - fromName: 'Moe Chamont', - subject: 'Family Calendar - Version 1', - date: 'Last Week', - id: 6, - read: false - }, - { - fromName: 'Kelly Richardson', - subject: 'Placeholder Headhots', - date: 'Last Week', - id: 7, - read: false - } - ]; - - constructor() { } - - public getMessages(): Message[] { - return this.messages; - } - - public getMessageById(id: number): Message { - return this.messages[id]; - } -} diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/vierw-message.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/vierw-message.page.spec.ts.template deleted file mode 100644 index 0e99d6619..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/vierw-message.page.spec.ts.template +++ /dev/null @@ -1,26 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { IonicModule } from '@ionic/angular'; -import { RouterModule } from '@angular/router'; - -import { ViewMessagePageRoutingModule } from './view-message-routing.module'; -import { ViewMessagePage } from './view-message.page'; - -describe('ViewMessagePage', () => { - let component: ViewMessagePage; - let fixture: ComponentFixture; - - beforeEach(async () => { - TestBed.configureTestingModule({ - declarations: [ViewMessagePage], - imports: [IonicModule.forRoot(), ViewMessagePageRoutingModule, RouterModule.forRoot([])] - }).compileComponents(); - - fixture = TestBed.createComponent(ViewMessagePage); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.page.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.page.ts.template deleted file mode 100644 index 447d817b6..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.page.ts.template +++ /dev/null @@ -1,106 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import {CommonModule} from '@angular/common'; -import {IonicModule} from '@ionic/angular'; -import { DataService, Message } from '../services/data.service'; - -@Component({ - selector: '<%= prefix %>-view-message', - standalone: true, - imports: [CommonModule, IonicModule], - template: ` - - - - - - - - - - - - -

- {{ message.fromName }} - - {{ message.date }} - -

-

To: Me

-
-
- -
-

{{ message.subject }}

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -

-
-
- `, - styles: ` - ion-item { - --inner-padding-end: 0; - --background: transparent; - } - - ion-label { - margin-top: 12px; - margin-bottom: 12px; - } - - ion-item h2 { - font-weight: 600; - } - - ion-item .date { - float: right; - align-items: center; - display: flex; - } - - ion-item ion-icon { - font-size: 42px; - margin-right: 8px; - } - - ion-item ion-note { - font-size: 15px; - margin-right: 12px; - font-weight: normal; - } - - h1 { - margin: 0; - font-weight: bold; - font-size: 22px; - } - - p { - line-height: 22px; - } - ` -}) -export class ViewMessagePage implements OnInit { - public message!: Message; - - constructor( - private data: DataService, - private activatedRoute: ActivatedRoute - ) { } - - ngOnInit() { - const id = this.activatedRoute.snapshot.paramMap.get('id'); - - if (id) { - this.message = this.data.getMessageById(parseInt(id, 10)); - } - } - - getBackButtonText() { - const win = window as any; - const mode = win && win.Ionic && win.Ionic.mode; - return mode === 'ios' ? 'Inbox' : ''; - } -} diff --git a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.routes.ts.template b/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.routes.ts.template deleted file mode 100644 index 0e29f081a..000000000 --- a/packages/ionic-angular/src/generators/application/files/list-standalone/src/app/view-message/view-message.routes.ts.template +++ /dev/null @@ -1,8 +0,0 @@ -import {Routes} from '@angular/router'; - -export const routes: Routes = [ - { - path: '', - loadComponent: () => import('./view-message.page').then(p => p.ViewMessagePage) - } -]; diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/app-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/app-routing.module.ts.template deleted file mode 100644 index a2b2e0f72..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/app-routing.module.ts.template +++ /dev/null @@ -1,26 +0,0 @@ -import { NgModule } from '@angular/core'; -import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - { - path: 'home', - loadChildren: () => import('./home/home.module').then( m => m.HomePageModule) - }, - { - path: 'message/:id', - loadChildren: () => import('./view-message/view-message.module').then( m => m.ViewMessagePageModule) - }, - { - path: '', - redirectTo: 'home', - pathMatch: 'full' - }, -]; - -@NgModule({ - imports: [ - RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) - ], - exports: [RouterModule] -}) -export class AppRoutingModule { } diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/app.component.html.template b/packages/ionic-angular/src/generators/application/files/list/src/app/app.component.html.template deleted file mode 100644 index 13b96776e..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/app.component.html.template +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/app.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/app.module.ts.template deleted file mode 100644 index 34b715b6c..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/app.module.ts.template +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { RouteReuseStrategy } from '@angular/router'; - -import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; - -import { AppComponent } from './app.component'; -import { AppRoutingModule } from './app-routing.module'; - -@NgModule({ - declarations: [AppComponent], - imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], - providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }], - bootstrap: [AppComponent], -}) -export class AppModule {} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home-routing.module.ts.template deleted file mode 100644 index 720fb1c2a..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home-routing.module.ts.template +++ /dev/null @@ -1,17 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; - -import { HomePage } from './home.page'; - -const routes: Routes = [ - { - path: '', - component: HomePage - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule], -}) -export class HomePageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.module.ts.template deleted file mode 100644 index 53aa867e8..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.module.ts.template +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { IonicModule } from '@ionic/angular'; -import { FormsModule } from '@angular/forms'; - -import { HomePage } from './home.page'; -import { HomePageRoutingModule } from './home-routing.module'; -import { MessageComponentModule } from '../message/message.module'; - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - IonicModule, - MessageComponentModule, - HomePageRoutingModule - ], - declarations: [HomePage] -}) -export class HomePageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.html.template b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.html.template deleted file mode 100644 index 6b82d6717..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.html.template +++ /dev/null @@ -1,25 +0,0 @@ - - - - Inbox - - - - - - - - - - - - - Inbox - - - - - - <<%= prefix %>-message *ngFor="let message of getMessages()" [message]="message">-message> - - diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.scss.template b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.scss.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.ts.template deleted file mode 100644 index 8c11216cc..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.page.ts.template +++ /dev/null @@ -1,24 +0,0 @@ -import { Component, inject } from '@angular/core'; -import { RefresherCustomEvent } from '@ionic/angular'; - -import { DataService, Message } from '../services/data.service'; - -@Component({ - selector: '<%= prefix %>-home', - templateUrl: 'home.page.html', - styleUrls: ['home.page.scss'], -}) -export class HomePage { - private data = inject(DataService); - constructor() {} - - refresh(ev: any) { - setTimeout(() => { - (ev as RefresherCustomEvent).detail.complete(); - }, 3000); - } - - getMessages(): Message[] { - return this.data.getMessages(); - } -} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.spec.ts.template deleted file mode 100644 index 054a66d30..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/home/home.spec.ts.template +++ /dev/null @@ -1,27 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { RouterModule } from '@angular/router'; -import { IonicModule } from '@ionic/angular'; - -import { MessageComponentModule } from '../message/message.module'; - -import { HomePage } from './home.page'; - -describe('HomePage', () => { - let component: HomePage; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [HomePage], - imports: [IonicModule.forRoot(), MessageComponentModule, RouterModule.forRoot([])] - }).compileComponents(); - - fixture = TestBed.createComponent(HomePage); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.html.template b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.html.template deleted file mode 100644 index 167a43036..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.html.template +++ /dev/null @@ -1,16 +0,0 @@ - -
- -

- {{ message.fromName }} - - {{ message.date }} - - -

-

{{ message.subject }}

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -

-
-
diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.scss.template b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.scss.template deleted file mode 100644 index 1174b05b7..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.scss.template +++ /dev/null @@ -1,59 +0,0 @@ -ion-item { - --padding-start: 0; - --inner-padding-end: 0; -} - -ion-label { - margin-top: 12px; - margin-bottom: 12px; -} - -ion-item h2 { - font-weight: 600; - margin: 0; -} - -ion-item p { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - width: 95%; -} - -ion-item .date { - float: right; - align-items: center; - display: flex; -} - -ion-item ion-icon { - color: #c9c9ca; -} - -ion-item ion-note { - font-size: 15px; - margin-right: 8px; - font-weight: normal; -} - -ion-item ion-note.md { - margin-right: 14px; -} - -.dot { - display: block; - height: 12px; - width: 12px; - border-radius: 50%; - align-self: start; - margin: 16px 10px 16px 16px; -} - -.dot-unread { - background: var(--ion-color-primary); -} - -ion-footer ion-title { - font-size: 11px; - font-weight: normal; -} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.spec.ts.template deleted file mode 100644 index ba40d5bcc..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.spec.ts.template +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { RouterModule } from '@angular/router'; -import { IonicModule } from '@ionic/angular'; - -import { MessageComponent } from './message.component'; - -describe('MessageComponent', () => { - let component: MessageComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [MessageComponent], - imports: [IonicModule.forRoot(), RouterModule.forRoot([])] - }).compileComponents(); - - fixture = TestBed.createComponent(MessageComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.ts.template deleted file mode 100644 index dcbd61789..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.component.ts.template +++ /dev/null @@ -1,17 +0,0 @@ -import { ChangeDetectionStrategy, Component, inject, Input } from '@angular/core'; -import { Platform } from '@ionic/angular'; -import { Message } from '../services/data.service'; - -@Component({ - selector: '<%= prefix %>-message', - templateUrl: './message.component.html', - styleUrls: ['./message.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class MessageComponent { - private platform = inject(Platform); - @Input() message?: Message; - isIos() { - return this.platform.is('ios') - } -} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.module.ts.template deleted file mode 100644 index 3299ebf74..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/message/message.module.ts.template +++ /dev/null @@ -1,15 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; - -import { IonicModule } from '@ionic/angular'; - -import { MessageComponent } from './message.component'; - -@NgModule({ - imports: [ CommonModule, FormsModule, IonicModule, RouterModule], - declarations: [MessageComponent], - exports: [MessageComponent] -}) -export class MessageComponentModule {} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.spec.ts.template deleted file mode 100644 index a5283fc69..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.spec.ts.template +++ /dev/null @@ -1,12 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { DataService } from './data.service'; - -describe('DataService', () => { - beforeEach(() => TestBed.configureTestingModule({})); - - it('should be created', () => { - const service: DataService = TestBed.get(DataService); - expect(service).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.ts.template deleted file mode 100644 index 2fb24a271..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/services/data.service.ts.template +++ /dev/null @@ -1,83 +0,0 @@ -import { Injectable } from '@angular/core'; - -export interface Message { - fromName: string; - subject: string; - date: string; - id: number; - read: boolean; -} - -@Injectable({ - providedIn: 'root' -}) -export class DataService { - public messages: Message[] = [ - { - fromName: 'Matt Chorsey', - subject: 'New event: Trip to Vegas', - date: '9:32 AM', - id: 0, - read: false - }, - { - fromName: 'Lauren Ruthford', - subject: 'Long time no chat', - date: '6:12 AM', - id: 1, - read: false - }, - { - fromName: 'Jordan Firth', - subject: 'Report Results', - date: '4:55 AM', - id: 2, - read: false - }, - { - fromName: 'Bill Thomas', - subject: 'The situation', - date: 'Yesterday', - id: 3, - read: false - }, - { - fromName: 'Joanne Pollan', - subject: 'Updated invitation: Swim lessons', - date: 'Yesterday', - id: 4, - read: false - }, - { - fromName: 'Andrea Cornerston', - subject: 'Last minute ask', - date: 'Yesterday', - id: 5, - read: false - }, - { - fromName: 'Moe Chamont', - subject: 'Family Calendar - Version 1', - date: 'Last Week', - id: 6, - read: false - }, - { - fromName: 'Kelly Richardson', - subject: 'Placeholder Headhots', - date: 'Last Week', - id: 7, - read: false - } - ]; - - constructor() { } - - public getMessages(): Message[] { - return this.messages; - } - - public getMessageById(id: number): Message { - return this.messages[id]; - } -} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/vierw-message.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/vierw-message.page.spec.ts.template deleted file mode 100644 index 0e99d6619..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/vierw-message.page.spec.ts.template +++ /dev/null @@ -1,26 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { IonicModule } from '@ionic/angular'; -import { RouterModule } from '@angular/router'; - -import { ViewMessagePageRoutingModule } from './view-message-routing.module'; -import { ViewMessagePage } from './view-message.page'; - -describe('ViewMessagePage', () => { - let component: ViewMessagePage; - let fixture: ComponentFixture; - - beforeEach(async () => { - TestBed.configureTestingModule({ - declarations: [ViewMessagePage], - imports: [IonicModule.forRoot(), ViewMessagePageRoutingModule, RouterModule.forRoot([])] - }).compileComponents(); - - fixture = TestBed.createComponent(ViewMessagePage); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message-routing.module.ts.template deleted file mode 100644 index 3a829f784..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message-routing.module.ts.template +++ /dev/null @@ -1,17 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; - -import { ViewMessagePage } from './view-message.page'; - -const routes: Routes = [ - { - path: '', - component: ViewMessagePage - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule], -}) -export class ViewMessagePageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.module.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.module.ts.template deleted file mode 100644 index 6e00f8872..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.module.ts.template +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { ViewMessagePage } from './view-message.page'; - -import { IonicModule } from '@ionic/angular'; - -import { ViewMessagePageRoutingModule } from './view-message-routing.module'; - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - IonicModule, - ViewMessagePageRoutingModule - ], - declarations: [ViewMessagePage] -}) -export class ViewMessagePageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.html.template b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.html.template deleted file mode 100644 index b4ce2f3fe..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.html.template +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - -

- {{ message.fromName }} - - {{ message.date }} - -

-

To: Me

-
-
- -
-

{{ message.subject }}

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -

-
-
diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.scss.template b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.scss.template deleted file mode 100644 index ff703f07f..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.scss.template +++ /dev/null @@ -1,40 +0,0 @@ -ion-item { - --inner-padding-end: 0; - --background: transparent; -} - -ion-label { - margin-top: 12px; - margin-bottom: 12px; -} - -ion-item h2 { - font-weight: 600; -} - -ion-item .date { - float: right; - align-items: center; - display: flex; -} - -ion-item ion-icon { - font-size: 42px; - margin-right: 8px; -} - -ion-item ion-note { - font-size: 15px; - margin-right: 12px; - font-weight: normal; -} - -h1 { - margin: 0; - font-weight: bold; - font-size: 22px; -} - -p { - line-height: 22px; -} diff --git a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.ts.template b/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.ts.template deleted file mode 100644 index 4e515d4e9..000000000 --- a/packages/ionic-angular/src/generators/application/files/list/src/app/view-message/view-message.page.ts.template +++ /dev/null @@ -1,31 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { DataService, Message } from '../services/data.service'; - -@Component({ - selector: '<%= prefix %>-view-message', - templateUrl: './view-message.page.html', - styleUrls: ['./view-message.page.scss'], -}) -export class ViewMessagePage implements OnInit { - public message!: Message; - - constructor( - private data: DataService, - private activatedRoute: ActivatedRoute - ) { } - - ngOnInit() { - const id = this.activatedRoute.snapshot.paramMap.get('id'); - - if (id) { - this.message = this.data.getMessageById(parseInt(id, 10)); - } - } - - getBackButtonText() { - const win = window as any; - const mode = win && win.Ionic && win.Ionic.mode; - return mode === 'ios' ? 'Inbox' : ''; - } -} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.spec.ts.template deleted file mode 100644 index 6672357dd..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.spec.ts.template +++ /dev/null @@ -1,46 +0,0 @@ -import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { TestBed } from '@angular/core/testing'; - -import { RouterTestingModule } from '@angular/router/testing'; - -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - - - beforeEach(async () => { - - await TestBed.configureTestingModule({ - declarations: [AppComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [RouterTestingModule.withRoutes([])], - }).compileComponents(); - }); - - it('should create the app', async () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); - - it('should have menu labels', async () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const app = fixture.nativeElement; - const menuItems = app.querySelectorAll('ion-label'); - expect(menuItems.length).toEqual(12); - expect(menuItems[0].textContent).toContain('Inbox'); - expect(menuItems[1].textContent).toContain('Outbox'); - }); - - it('should have urls', async () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const app = fixture.nativeElement; - const menuItems = app.querySelectorAll('ion-item'); - expect(menuItems.length).toEqual(12); - expect(menuItems[0].getAttribute('ng-reflect-router-link')).toEqual('/folder/inbox'); - expect(menuItems[1].getAttribute('ng-reflect-router-link')).toEqual('/folder/outbox'); - }); - -}); diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.ts.template deleted file mode 100644 index 56a35b271..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.component.ts.template +++ /dev/null @@ -1,174 +0,0 @@ -import { Component } from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {RouterModule} from '@angular/router'; -import {IonicModule} from '@ionic/angular'; - -@Component({ - selector: '<%= prefix %>-root', - standalone: true, - imports: [CommonModule, IonicModule, RouterModule], - template: ` - - - - - - Inbox - hi@ionicframework.com - - - - - {{ p.title }} - - - - - - Labels - - - - {{ label }} - - - - - - - - `, - styles: ` - ion-menu ion-content { - --background: var(--ion-item-background, var(--ion-background-color, #fff)); - } - - ion-menu.md ion-content { - --padding-start: 8px; - --padding-end: 8px; - --padding-top: 20px; - --padding-bottom: 20px; - } - - ion-menu.md ion-list { - padding: 20px 0; - } - - ion-menu.md ion-note { - margin-bottom: 30px; - } - - ion-menu.md ion-list-header, - ion-menu.md ion-note { - padding-left: 10px; - } - - ion-menu.md ion-list#inbox-list { - border-bottom: 1px solid var(--ion-color-step-150, #d7d8da); - } - - ion-menu.md ion-list#inbox-list ion-list-header { - font-size: 22px; - font-weight: 600; - - min-height: 20px; - } - - ion-menu.md ion-list#labels-list ion-list-header { - font-size: 16px; - - margin-bottom: 18px; - - color: #757575; - - min-height: 26px; - } - - ion-menu.md ion-item { - --padding-start: 10px; - --padding-end: 10px; - border-radius: 4px; - } - - ion-menu.md ion-item.selected { - --background: rgba(var(--ion-color-primary-rgb), 0.14); - } - - ion-menu.md ion-item.selected ion-icon { - color: var(--ion-color-primary); - } - - ion-menu.md ion-item ion-icon { - color: #616e7e; - } - - ion-menu.md ion-item ion-label { - font-weight: 500; - } - - ion-menu.ios ion-content { - --padding-bottom: 20px; - } - - ion-menu.ios ion-list { - padding: 20px 0 0 0; - } - - ion-menu.ios ion-note { - line-height: 24px; - margin-bottom: 20px; - } - - ion-menu.ios ion-item { - --padding-start: 16px; - --padding-end: 16px; - --min-height: 50px; - } - - ion-menu.ios ion-item.selected ion-icon { - color: var(--ion-color-primary); - } - - ion-menu.ios ion-item ion-icon { - font-size: 24px; - color: #73849a; - } - - ion-menu.ios ion-list#labels-list ion-list-header { - margin-bottom: 8px; - } - - ion-menu.ios ion-list-header, - ion-menu.ios ion-note { - padding-left: 16px; - padding-right: 16px; - } - - ion-menu.ios ion-note { - margin-bottom: 8px; - } - - ion-note { - display: inline-block; - font-size: 16px; - - color: var(--ion-color-medium-shade); - } - - ion-item.selected { - --color: var(--ion-color-primary); - } - `, -}) -export class AppComponent { - public appPages = [ - { title: 'Inbox', url: '/folder/inbox', icon: 'mail' }, - { title: 'Outbox', url: '/folder/outbox', icon: 'paper-plane' }, - { title: 'Favorites', url: '/folder/favorites', icon: 'heart' }, - { title: 'Archived', url: '/folder/archived', icon: 'archive' }, - { title: 'Trash', url: '/folder/trash', icon: 'trash' }, - { title: 'Spam', url: '/folder/spam', icon: 'warning' }, - ]; - public labels = ['Family', 'Friends', 'Notes', 'Work', 'Travel', 'Reminders']; - constructor() {} -} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.config.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.config.ts.template deleted file mode 100644 index 8c60f9f66..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.config.ts.template +++ /dev/null @@ -1,14 +0,0 @@ -import { ApplicationConfig, importProvidersFrom } from '@angular/core'; -import { provideRouter } from '@angular/router'; -import { appRoutes } from './app.routes'; -import {IonicModule} from '@ionic/angular'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideRouter(appRoutes), - importProvidersFrom( - IonicModule.forRoot() - ) - - ], -}; diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.routes.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.routes.ts.template deleted file mode 100644 index c7732364e..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/app.routes.ts.template +++ /dev/null @@ -1,13 +0,0 @@ -import { Routes } from '@angular/router'; - -export const appRoutes: Routes = [ - { - path: '', - redirectTo: 'folder/Inbox', - pathMatch: 'full' - }, - { - path: 'folder/:id', - loadChildren: () => import('./folder/folder.routes').then( r => r.routes) - } -]; diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.page.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.page.ts.template deleted file mode 100644 index f1960db1c..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.page.ts.template +++ /dev/null @@ -1,78 +0,0 @@ - -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import {CommonModule} from '@angular/common'; -import {IonicModule} from '@ionic/angular'; - -@Component({ - selector: '<%= prefix %>-folder', - standalone: true, - imports: [CommonModule, IonicModule], - template: ` - - - - - - {{ folder }} - - - - - - - {{ folder }} - - - -
- {{ folder }} -

Explore UI Components

-
-
- `, - styles: ` - ion-menu-button { - color: var(--ion-color-primary); - } - - #container { - text-align: center; - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); - } - - #container strong { - font-size: 20px; - line-height: 26px; - } - - #container p { - font-size: 16px; - line-height: 22px; - color: #8c8c8c; - margin: 0; - } - - #container a { - text-decoration: none; - } - ` -}) -export class FolderPage implements OnInit { - public folder!: string; - - constructor(private activatedRoute: ActivatedRoute) { } - - ngOnInit() { - const id = this.activatedRoute.snapshot.paramMap.get('id'); - - if (id) { - this.folder = id; - } - } - -} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.routes.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.routes.ts.template deleted file mode 100644 index 3204c09f7..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu-standalone/src/app/folder/folder.routes.ts.template +++ /dev/null @@ -1,8 +0,0 @@ -import { Routes } from '@angular/router'; - -export const routes: Routes = [ - { - path: '', - loadComponent: () => import('./folder.page').then(p => p.FolderPage) - } -]; diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app-routing.module.ts.template deleted file mode 100644 index bf907a727..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app-routing.module.ts.template +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core'; -import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - { - path: '', - redirectTo: 'folder/Inbox', - pathMatch: 'full' - }, - { - path: 'folder/:id', - loadChildren: () => import('./folder/folder.module').then( m => m.FolderPageModule) - } -]; - -@NgModule({ - imports: [ - RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) - ], - exports: [RouterModule] -}) -export class AppRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.html.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.html.template deleted file mode 100644 index cd12488d5..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.html.template +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - Inbox - hi@ionicframework.com - - - - - {{ p.title }} - - - - - - Labels - - - - {{ label }} - - - - - - - diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.scss.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.scss.template deleted file mode 100644 index 5d5501533..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.scss.template +++ /dev/null @@ -1,119 +0,0 @@ -ion-menu ion-content { - --background: var(--ion-item-background, var(--ion-background-color, #fff)); -} - -ion-menu.md ion-content { - --padding-start: 8px; - --padding-end: 8px; - --padding-top: 20px; - --padding-bottom: 20px; -} - -ion-menu.md ion-list { - padding: 20px 0; -} - -ion-menu.md ion-note { - margin-bottom: 30px; -} - -ion-menu.md ion-list-header, -ion-menu.md ion-note { - padding-left: 10px; -} - -ion-menu.md ion-list#inbox-list { - border-bottom: 1px solid var(--ion-color-step-150, #d7d8da); -} - -ion-menu.md ion-list#inbox-list ion-list-header { - font-size: 22px; - font-weight: 600; - - min-height: 20px; -} - -ion-menu.md ion-list#labels-list ion-list-header { - font-size: 16px; - - margin-bottom: 18px; - - color: #757575; - - min-height: 26px; -} - -ion-menu.md ion-item { - --padding-start: 10px; - --padding-end: 10px; - border-radius: 4px; -} - -ion-menu.md ion-item.selected { - --background: rgba(var(--ion-color-primary-rgb), 0.14); -} - -ion-menu.md ion-item.selected ion-icon { - color: var(--ion-color-primary); -} - -ion-menu.md ion-item ion-icon { - color: #616e7e; -} - -ion-menu.md ion-item ion-label { - font-weight: 500; -} - -ion-menu.ios ion-content { - --padding-bottom: 20px; -} - -ion-menu.ios ion-list { - padding: 20px 0 0 0; -} - -ion-menu.ios ion-note { - line-height: 24px; - margin-bottom: 20px; -} - -ion-menu.ios ion-item { - --padding-start: 16px; - --padding-end: 16px; - --min-height: 50px; -} - -ion-menu.ios ion-item.selected ion-icon { - color: var(--ion-color-primary); -} - -ion-menu.ios ion-item ion-icon { - font-size: 24px; - color: #73849a; -} - -ion-menu.ios ion-list#labels-list ion-list-header { - margin-bottom: 8px; -} - -ion-menu.ios ion-list-header, -ion-menu.ios ion-note { - padding-left: 16px; - padding-right: 16px; -} - -ion-menu.ios ion-note { - margin-bottom: 8px; -} - -ion-note { - display: inline-block; - font-size: 16px; - - color: var(--ion-color-medium-shade); -} - -ion-item.selected { - --color: var(--ion-color-primary); -} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.spec.ts.template deleted file mode 100644 index 6672357dd..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.spec.ts.template +++ /dev/null @@ -1,46 +0,0 @@ -import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { TestBed } from '@angular/core/testing'; - -import { RouterTestingModule } from '@angular/router/testing'; - -import { AppComponent } from './app.component'; - -describe('AppComponent', () => { - - - beforeEach(async () => { - - await TestBed.configureTestingModule({ - declarations: [AppComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [RouterTestingModule.withRoutes([])], - }).compileComponents(); - }); - - it('should create the app', async () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); - - it('should have menu labels', async () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const app = fixture.nativeElement; - const menuItems = app.querySelectorAll('ion-label'); - expect(menuItems.length).toEqual(12); - expect(menuItems[0].textContent).toContain('Inbox'); - expect(menuItems[1].textContent).toContain('Outbox'); - }); - - it('should have urls', async () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const app = fixture.nativeElement; - const menuItems = app.querySelectorAll('ion-item'); - expect(menuItems.length).toEqual(12); - expect(menuItems[0].getAttribute('ng-reflect-router-link')).toEqual('/folder/inbox'); - expect(menuItems[1].getAttribute('ng-reflect-router-link')).toEqual('/folder/outbox'); - }); - -}); diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.ts.template deleted file mode 100644 index 6a6f8e7df..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.component.ts.template +++ /dev/null @@ -1,18 +0,0 @@ -import { Component } from '@angular/core'; -@Component({ - selector: '<%= prefix %>-root', - templateUrl: 'app.component.html', - styleUrls: ['app.component.scss'], -}) -export class AppComponent { - public appPages = [ - { title: 'Inbox', url: '/folder/inbox', icon: 'mail' }, - { title: 'Outbox', url: '/folder/outbox', icon: 'paper-plane' }, - { title: 'Favorites', url: '/folder/favorites', icon: 'heart' }, - { title: 'Archived', url: '/folder/archived', icon: 'archive' }, - { title: 'Trash', url: '/folder/trash', icon: 'trash' }, - { title: 'Spam', url: '/folder/spam', icon: 'warning' }, - ]; - public labels = ['Family', 'Friends', 'Notes', 'Work', 'Travel', 'Reminders']; - constructor() {} -} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.module.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.module.ts.template deleted file mode 100644 index 34b715b6c..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/app.module.ts.template +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { RouteReuseStrategy } from '@angular/router'; - -import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; - -import { AppComponent } from './app.component'; -import { AppRoutingModule } from './app-routing.module'; - -@NgModule({ - declarations: [AppComponent], - imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], - providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }], - bootstrap: [AppComponent], -}) -export class AppModule {} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder-routing.module.ts.template deleted file mode 100644 index 200d4407e..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder-routing.module.ts.template +++ /dev/null @@ -1,17 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; - -import { FolderPage } from './folder.page'; - -const routes: Routes = [ - { - path: '', - component: FolderPage - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule], -}) -export class FolderPageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.module.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.module.ts.template deleted file mode 100644 index 172c9f810..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.module.ts.template +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import { IonicModule } from '@ionic/angular'; - -import { FolderPageRoutingModule } from './folder-routing.module'; - -import { FolderPage } from './folder.page'; - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - IonicModule, - FolderPageRoutingModule - ], - declarations: [FolderPage] -}) -export class FolderPageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.html.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.html.template deleted file mode 100644 index 39aaa6a05..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.html.template +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - {{ folder }} - - - - - - - {{ folder }} - - - -
- {{ folder }} -

Explore UI Components

-
-
diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.scss.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.scss.template deleted file mode 100644 index cceaa7529..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.scss.template +++ /dev/null @@ -1,28 +0,0 @@ -ion-menu-button { - color: var(--ion-color-primary); -} - -#container { - text-align: center; - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); -} - -#container strong { - font-size: 20px; - line-height: 26px; -} - -#container p { - font-size: 16px; - line-height: 22px; - color: #8c8c8c; - margin: 0; -} - -#container a { - text-decoration: none; -} diff --git a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.ts.template b/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.ts.template deleted file mode 100644 index 1eefe9e37..000000000 --- a/packages/ionic-angular/src/generators/application/files/sidemenu/src/app/folder/folder.page.ts.template +++ /dev/null @@ -1,23 +0,0 @@ - -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; - -@Component({ - selector: '<%= prefix %>-folder', - templateUrl: './folder.page.html', - styleUrls: ['./folder.page.scss'], -}) -export class FolderPage implements OnInit { - public folder!: string; - - constructor(private activatedRoute: ActivatedRoute) { } - - ngOnInit() { - const id = this.activatedRoute.snapshot.paramMap.get('id'); - - if (id) { - this.folder = id; - } - } - -} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.html.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.html.template deleted file mode 100644 index 13b96776e..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.html.template +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.ts.template deleted file mode 100644 index 7ca24ea0e..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.component.ts.template +++ /dev/null @@ -1,17 +0,0 @@ -import {Component} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {IonicModule} from '@ionic/angular'; - -@Component({ - selector: '<%= prefix %>-root', - standalone: true, - imports: [CommonModule, IonicModule], - template: ` - - - - `, - styles: `` -}) - -export class AppComponent {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.config.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.config.ts.template deleted file mode 100644 index 8c60f9f66..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.config.ts.template +++ /dev/null @@ -1,14 +0,0 @@ -import { ApplicationConfig, importProvidersFrom } from '@angular/core'; -import { provideRouter } from '@angular/router'; -import { appRoutes } from './app.routes'; -import {IonicModule} from '@ionic/angular'; - -export const appConfig: ApplicationConfig = { - providers: [ - provideRouter(appRoutes), - importProvidersFrom( - IonicModule.forRoot() - ) - - ], -}; diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.routes.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.routes.ts.template deleted file mode 100644 index 4f484391a..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/app.routes.ts.template +++ /dev/null @@ -1,9 +0,0 @@ -import { NgModule } from '@angular/core'; -import {Routes} from '@angular/router'; - -export const appRoutes: Routes = [ - { - path: '', - loadChildren: () => import('./tabs/tabs.routes').then(r => r.routes) - } -]; diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.spec.ts.template deleted file mode 100644 index caa9a7cdf..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.spec.ts.template +++ /dev/null @@ -1,24 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { IonicModule } from '@ionic/angular'; - -import { ExploreContainerComponent } from './explore-container.component'; - -describe('ExploreContainerComponent', () => { - let component: ExploreContainerComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ExploreContainerComponent], - imports: [IonicModule.forRoot()] - }).compileComponents(); - - fixture = TestBed.createComponent(ExploreContainerComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.ts.template deleted file mode 100644 index b375cd250..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/explore-container/explore-container.component.ts.template +++ /dev/null @@ -1,50 +0,0 @@ -import { Component, Input } from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {FormsModule} from '@angular/forms'; -import {IonicModule} from '@ionic/angular'; - -@Component({ - selector: '<%= prefix %>-explore-container', - standalone: true, - imports: [ CommonModule, FormsModule, IonicModule ], - template: ` -
- {{ name }} -

Explore UI Components

-
- `, - styles: ` - #container { - text-align: center; - - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); - } - - #container strong { - font-size: 20px; - line-height: 26px; - } - - #container p { - font-size: 16px; - line-height: 22px; - - color: #8c8c8c; - - margin: 0; - } - - #container a { - text-decoration: none; - } - ` -}) -export class ExploreContainerComponent { - - @Input() name?: string; - -} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.spec.ts.template deleted file mode 100644 index 0dbb7c0ad..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.spec.ts.template +++ /dev/null @@ -1,26 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { IonicModule } from '@ionic/angular'; - -import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; - -import { Tab1Page } from './tab1.page'; - -describe('Tab1Page', () => { - let component: Tab1Page; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [Tab1Page], - imports: [IonicModule.forRoot(), ExploreContainerComponentModule] - }).compileComponents(); - - fixture = TestBed.createComponent(Tab1Page); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.ts.template deleted file mode 100644 index 485eec68b..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.page.ts.template +++ /dev/null @@ -1,43 +0,0 @@ -import { Component } from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {FormsModule} from '@angular/forms'; -import {IonicModule} from '@ionic/angular'; -import {ExploreContainerComponent} from '../explore-container/explore-container.component'; - -@Component({ - selector: '<%= prefix %>-tab1', - standalone: true, - imports: [ - IonicModule, - CommonModule, - FormsModule, - ExploreContainerComponent - ], - template: ` - - - - Tab 1 - - - - - - - - Tab 1 - - - - <<%= prefix %>-explore-container name="Tab 1 page">-explore-container> - - `, - styles: ` - - ` -}) -export class Tab1Page { - - constructor() {} - -} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.routes.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.routes.ts.template deleted file mode 100644 index 3a27bf36c..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab1/tab1.routes.ts.template +++ /dev/null @@ -1,10 +0,0 @@ -import { Tab1Page } from './tab1.page'; -import {Routes} from '@angular/router'; - -export const routes: Routes = [ - { - path: '', - loadComponent: () => import('./tab1.page').then(p => p.Tab1Page) - } -]; - diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.spec.ts.template deleted file mode 100644 index 70bd876ed..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.spec.ts.template +++ /dev/null @@ -1,26 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { IonicModule } from '@ionic/angular'; - -import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; - -import { Tab2Page } from './tab2.page'; - -describe('Tab2Page', () => { - let component: Tab2Page; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [Tab2Page], - imports: [IonicModule.forRoot(), ExploreContainerComponentModule] - }).compileComponents(); - - fixture = TestBed.createComponent(Tab2Page); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.ts.template deleted file mode 100644 index efc017583..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.page.ts.template +++ /dev/null @@ -1,42 +0,0 @@ -import { Component } from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {FormsModule} from '@angular/forms'; -import {IonicModule} from '@ionic/angular'; -import {ExploreContainerComponent} from '../explore-container/explore-container.component'; - -@Component({ - selector: '<%= prefix %>-tab2', - standalone: true, - imports: [ - IonicModule, - CommonModule, - FormsModule, - ExploreContainerComponent, - ], - template: ` - - - - Tab 2 - - - - - - - - Tab 2 - - - - <<%= prefix %>-explore-container name="Tab 2 page">-explore-container> - - - `, - styles: `` -}) -export class Tab2Page { - - constructor() {} - -} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.routes.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.routes.ts.template deleted file mode 100644 index e9f94ce5f..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab2/tab2.routes.ts.template +++ /dev/null @@ -1,10 +0,0 @@ -import { Tab2Page } from './tab2.page'; -import {Routes} from '@angular/router'; - -export const routes: Routes = [ - { - path: '', - loadComponent: () => import('./tab2.page').then(p => p.Tab2Page), - } -]; - diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.spec.ts.template deleted file mode 100644 index 28d86196c..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.spec.ts.template +++ /dev/null @@ -1,26 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { IonicModule } from '@ionic/angular'; - -import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; - -import { Tab3Page } from './tab3.page'; - -describe('Tab3Page', () => { - let component: Tab3Page; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [Tab3Page], - imports: [IonicModule.forRoot(), ExploreContainerComponentModule] - }).compileComponents(); - - fixture = TestBed.createComponent(Tab3Page); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.ts.template deleted file mode 100644 index b8b972909..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.page.ts.template +++ /dev/null @@ -1,41 +0,0 @@ -import { Component } from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {FormsModule} from '@angular/forms'; -import {IonicModule} from '@ionic/angular'; -import {ExploreContainerComponent} from '../explore-container/explore-container.component'; - -@Component({ - selector: '<%= prefix %>-tab3', - standalone: true, - imports: [ - IonicModule, - CommonModule, - FormsModule, - ExploreContainerComponent, - ], - template: ` - - - - Tab 3 - - - - - - - - Tab 3 - - - - <<%= prefix %>-explore-container name="Tab 3 page">-explore-container> - - `, - styles: `` -}) -export class Tab3Page { - - constructor() {} - -} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.routes.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.routes.ts.template deleted file mode 100644 index c53591dd3..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tab3/tab3.routes.ts.template +++ /dev/null @@ -1,10 +0,0 @@ -import { Tab3Page } from './tab3.page'; -import {Routes} from '@angular/router'; - -export const routes: Routes = [ - { - path: '', - loadComponent: () => import('./tab3.page').then(p => p.Tab3Page) - } -]; - diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.spec.ts.template deleted file mode 100644 index 40a3de8b7..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.spec.ts.template +++ /dev/null @@ -1,26 +0,0 @@ -import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { TabsPage } from './tabs.page'; - -describe('TabsPage', () => { - let component: TabsPage; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [TabsPage], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(TabsPage); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.ts.template deleted file mode 100644 index 1516e0ec9..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.page.ts.template +++ /dev/null @@ -1,43 +0,0 @@ -import { Component } from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {FormsModule} from '@angular/forms'; -import {IonicModule} from '@ionic/angular'; - -@Component({ - selector: '<%= prefix %>-tabs', - standalone: true, - imports: [ - IonicModule, - CommonModule, - FormsModule - ], - template: ` - - - - - - Tab 1 - - - - - Tab 2 - - - - - Tab 3 - - - - - - `, - styles: `` -}) -export class TabsPage { - - constructor() {} - -} diff --git a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.routes.ts.template b/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.routes.ts.template deleted file mode 100644 index 4f778aba6..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs-standalone/src/app/tabs/tabs.routes.ts.template +++ /dev/null @@ -1,34 +0,0 @@ -import { TabsPage } from './tabs.page'; -import {Routes} from '@angular/router'; - -export const routes: Routes = [ - { - path: 'tabs', - loadComponent: () => import('./tabs.page').then(p => p.TabsPage), - children: [ - { - path: 'tab1', - loadChildren: () => import('../tab1/tab1.routes').then(r => r.routes) - }, - { - path: 'tab2', - loadChildren: () => import('../tab2/tab2.routes').then(r => r.routes) - }, - { - path: 'tab3', - loadChildren: () => import('../tab3/tab3.routes').then(r => r.routes) - }, - { - path: '', - redirectTo: '/tabs/tab1', - pathMatch: 'full' - } - ] - }, - { - path: '', - redirectTo: '/tabs/tab1', - pathMatch: 'full' - } -]; - diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/app-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/app-routing.module.ts.template deleted file mode 100644 index 48fc28da4..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/app-routing.module.ts.template +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; - -const routes: Routes = [ - { - path: '', - loadChildren: () => import('./tabs/tabs.module').then(m => m.TabsPageModule) - } -]; -@NgModule({ - imports: [ - RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) - ], - exports: [RouterModule] -}) -export class AppRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/app.component.html.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/app.component.html.template deleted file mode 100644 index 13b96776e..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/app.component.html.template +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/app.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/app.module.ts.template deleted file mode 100644 index 4255dd891..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/app.module.ts.template +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { RouteReuseStrategy } from '@angular/router'; - -import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; - -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; - -@NgModule({ - declarations: [AppComponent], - imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], - providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }], - bootstrap: [AppComponent], -}) -export class AppModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.html.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.html.template deleted file mode 100644 index bbadb7d64..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.html.template +++ /dev/null @@ -1,4 +0,0 @@ -
- {{ name }} -

Explore UI Components

-
\ No newline at end of file diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.scss.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.scss.template deleted file mode 100644 index 8993e7ca0..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.scss.template +++ /dev/null @@ -1,27 +0,0 @@ -#container { - text-align: center; - - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); -} - -#container strong { - font-size: 20px; - line-height: 26px; -} - -#container p { - font-size: 16px; - line-height: 22px; - - color: #8c8c8c; - - margin: 0; -} - -#container a { - text-decoration: none; -} \ No newline at end of file diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.spec.ts.template deleted file mode 100644 index caa9a7cdf..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.spec.ts.template +++ /dev/null @@ -1,24 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { IonicModule } from '@ionic/angular'; - -import { ExploreContainerComponent } from './explore-container.component'; - -describe('ExploreContainerComponent', () => { - let component: ExploreContainerComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ExploreContainerComponent], - imports: [IonicModule.forRoot()] - }).compileComponents(); - - fixture = TestBed.createComponent(ExploreContainerComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.ts.template deleted file mode 100644 index cd455b789..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.component.ts.template +++ /dev/null @@ -1,12 +0,0 @@ -import { Component, Input } from '@angular/core'; - -@Component({ - selector: '<%= prefix %>-explore-container', - templateUrl: './explore-container.component.html', - styleUrls: ['./explore-container.component.scss'], -}) -export class ExploreContainerComponent { - - @Input() name?: string; - -} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.module.ts.template deleted file mode 100644 index 43762961f..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/explore-container/explore-container.module.ts.template +++ /dev/null @@ -1,14 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import { IonicModule } from '@ionic/angular'; - -import { ExploreContainerComponent } from './explore-container.component'; - -@NgModule({ - imports: [ CommonModule, FormsModule, IonicModule], - declarations: [ExploreContainerComponent], - exports: [ExploreContainerComponent] -}) -export class ExploreContainerComponentModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1-routing.module.ts.template deleted file mode 100644 index 8c1cf5b35..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1-routing.module.ts.template +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { Tab1Page } from './tab1.page'; - -const routes: Routes = [ - { - path: '', - component: Tab1Page, - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class Tab1PageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.module.ts.template deleted file mode 100644 index 135eeae1a..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.module.ts.template +++ /dev/null @@ -1,20 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { Tab1Page } from './tab1.page'; -import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; - -import { Tab1PageRoutingModule } from './tab1-routing.module'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - ExploreContainerComponentModule, - Tab1PageRoutingModule - ], - declarations: [Tab1Page] -}) -export class Tab1PageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.html.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.html.template deleted file mode 100644 index 7335f8c36..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.html.template +++ /dev/null @@ -1,17 +0,0 @@ - - - - Tab 1 - - - - - - - - Tab 1 - - - - <<%= prefix %>-explore-container name="Tab 1 page">-explore-container> - diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.scss.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.scss.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.spec.ts.template deleted file mode 100644 index 0dbb7c0ad..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.spec.ts.template +++ /dev/null @@ -1,26 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { IonicModule } from '@ionic/angular'; - -import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; - -import { Tab1Page } from './tab1.page'; - -describe('Tab1Page', () => { - let component: Tab1Page; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [Tab1Page], - imports: [IonicModule.forRoot(), ExploreContainerComponentModule] - }).compileComponents(); - - fixture = TestBed.createComponent(Tab1Page); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.ts.template deleted file mode 100644 index 45feb83ac..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab1/tab1.page.ts.template +++ /dev/null @@ -1,12 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: '<%= prefix %>-tab1', - templateUrl: 'tab1.page.html', - styleUrls: ['tab1.page.scss'] -}) -export class Tab1Page { - - constructor() {} - -} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2-routing.module.ts.template deleted file mode 100644 index e96ec099b..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2-routing.module.ts.template +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { Tab2Page } from './tab2.page'; - -const routes: Routes = [ - { - path: '', - component: Tab2Page, - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class Tab2PageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.module.ts.template deleted file mode 100644 index 723bac16a..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.module.ts.template +++ /dev/null @@ -1,20 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { Tab2Page } from './tab2.page'; -import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; - -import { Tab2PageRoutingModule } from './tab2-routing.module'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - ExploreContainerComponentModule, - Tab2PageRoutingModule - ], - declarations: [Tab2Page] -}) -export class Tab2PageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.html.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.html.template deleted file mode 100644 index 37b3a4f2a..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.html.template +++ /dev/null @@ -1,17 +0,0 @@ - - - - Tab 2 - - - - - - - - Tab 2 - - - - <<%= prefix %>-explore-container name="Tab 2 page">-explore-container> - diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.scss.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.scss.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.spec.ts.template deleted file mode 100644 index 70bd876ed..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.spec.ts.template +++ /dev/null @@ -1,26 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { IonicModule } from '@ionic/angular'; - -import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; - -import { Tab2Page } from './tab2.page'; - -describe('Tab2Page', () => { - let component: Tab2Page; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [Tab2Page], - imports: [IonicModule.forRoot(), ExploreContainerComponentModule] - }).compileComponents(); - - fixture = TestBed.createComponent(Tab2Page); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.ts.template deleted file mode 100644 index 7eac24a99..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab2/tab2.page.ts.template +++ /dev/null @@ -1,12 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: '<%= prefix %>-tab2', - templateUrl: 'tab2.page.html', - styleUrls: ['tab2.page.scss'] -}) -export class Tab2Page { - - constructor() {} - -} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3-routing.module.ts.template deleted file mode 100644 index 5d6abde97..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3-routing.module.ts.template +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { Tab3Page } from './tab3.page'; - -const routes: Routes = [ - { - path: '', - component: Tab3Page, - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class Tab3PageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.module.ts.template deleted file mode 100644 index 2599fc6a5..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.module.ts.template +++ /dev/null @@ -1,20 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { Tab3Page } from './tab3.page'; -import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; - -import { Tab3PageRoutingModule } from './tab3-routing.module'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - ExploreContainerComponentModule, - Tab3PageRoutingModule - ], - declarations: [Tab3Page] -}) -export class Tab3PageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.html.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.html.template deleted file mode 100644 index 9f4c061a0..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.html.template +++ /dev/null @@ -1,17 +0,0 @@ - - - - Tab 3 - - - - - - - - Tab 3 - - - - <<%= prefix %>-explore-container name="Tab 3 page">-explore-container> - diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.scss.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.scss.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.spec.ts.template deleted file mode 100644 index 28d86196c..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.spec.ts.template +++ /dev/null @@ -1,26 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { IonicModule } from '@ionic/angular'; - -import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; - -import { Tab3Page } from './tab3.page'; - -describe('Tab3Page', () => { - let component: Tab3Page; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [Tab3Page], - imports: [IonicModule.forRoot(), ExploreContainerComponentModule] - }).compileComponents(); - - fixture = TestBed.createComponent(Tab3Page); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.ts.template deleted file mode 100644 index ec12b5654..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tab3/tab3.page.ts.template +++ /dev/null @@ -1,12 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: '<%= prefix %>-tab3', - templateUrl: 'tab3.page.html', - styleUrls: ['tab3.page.scss'] -}) -export class Tab3Page { - - constructor() {} - -} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs-routing.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs-routing.module.ts.template deleted file mode 100644 index 770e87e99..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs-routing.module.ts.template +++ /dev/null @@ -1,39 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { TabsPage } from './tabs.page'; - -const routes: Routes = [ - { - path: 'tabs', - component: TabsPage, - children: [ - { - path: 'tab1', - loadChildren: () => import('../tab1/tab1.module').then(m => m.Tab1PageModule) - }, - { - path: 'tab2', - loadChildren: () => import('../tab2/tab2.module').then(m => m.Tab2PageModule) - }, - { - path: 'tab3', - loadChildren: () => import('../tab3/tab3.module').then(m => m.Tab3PageModule) - }, - { - path: '', - redirectTo: '/tabs/tab1', - pathMatch: 'full' - } - ] - }, - { - path: '', - redirectTo: '/tabs/tab1', - pathMatch: 'full' - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], -}) -export class TabsPageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.module.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.module.ts.template deleted file mode 100644 index de4184a79..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.module.ts.template +++ /dev/null @@ -1,19 +0,0 @@ -import { IonicModule } from '@ionic/angular'; -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import { TabsPageRoutingModule } from './tabs-routing.module'; - -import { TabsPage } from './tabs.page'; - -@NgModule({ - imports: [ - IonicModule, - CommonModule, - FormsModule, - TabsPageRoutingModule - ], - declarations: [TabsPage] -}) -export class TabsPageModule {} diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.html.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.html.template deleted file mode 100644 index e3f60c3fa..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.html.template +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - Tab 1 - - - - - Tab 2 - - - - - Tab 3 - - - - diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.scss.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.scss.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.spec.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.spec.ts.template deleted file mode 100644 index 40a3de8b7..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.spec.ts.template +++ /dev/null @@ -1,26 +0,0 @@ -import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { TabsPage } from './tabs.page'; - -describe('TabsPage', () => { - let component: TabsPage; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [TabsPage], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(TabsPage); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.ts.template b/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.ts.template deleted file mode 100644 index 8d045b71e..000000000 --- a/packages/ionic-angular/src/generators/application/files/tabs/src/app/tabs/tabs.page.ts.template +++ /dev/null @@ -1,12 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: '<%= prefix %>-tabs', - templateUrl: 'tabs.page.html', - styleUrls: ['tabs.page.scss'] -}) -export class TabsPage { - - constructor() {} - -} diff --git a/packages/ionic-angular/src/generators/application/generator.spec.ts b/packages/ionic-angular/src/generators/application/generator.spec.ts deleted file mode 100644 index 57dc7cac1..000000000 --- a/packages/ionic-angular/src/generators/application/generator.spec.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { readJson, readProjectConfiguration, Tree } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { applicationGenerator } from './generator'; -import { ApplicationGeneratorSchema } from './schema'; - -// eslint-disable-next-line @typescript-eslint/no-var-requires -const devkit = require('@nx/devkit'); - -xdescribe('application schematic', () => { - jest.spyOn(devkit, 'ensurePackage').mockReturnValue(Promise.resolve()); - - let host: Tree; - const options: ApplicationGeneratorSchema = { - name: 'my-app', - template: 'blank', - unitTestRunner: 'jest', - e2eTestRunner: 'cypress', - capacitor: false, - skipFormat: false, - }; - const projectRoot = `apps/${options.name}`; - - beforeEach(() => { - host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - }); - - it('should add dependencies to package.json', async () => { - await applicationGenerator(host, options); - - const packageJson = readJson(host, 'package.json'); - expect(packageJson.dependencies['@ionic/angular']).toBeDefined(); - expect(packageJson.devDependencies['@nx/angular']).toBeDefined(); - }); - - it('should update assets in project configuration', async () => { - await applicationGenerator(host, options); - const project = readProjectConfiguration(host, options.name); - - const assets = project.targets.build.options.assets; - const styles = project.targets.build.options.styles; - - expect(assets).toEqual( - expect.arrayContaining([ - expect.objectContaining({ - input: 'node_modules/ionicons/dist/ionicons/svg', - }), - ]) - ); - expect(assets).not.toContain(`${projectRoot}/src/favicon.ico`); - - expect(styles).toEqual( - expect.arrayContaining([ - expect.objectContaining({ - input: `${projectRoot}/src/theme/variables.scss`, - }), - ]) - ); - }); - - describe('--linter', () => { - it('should update .eslintrc.json', async () => { - await applicationGenerator(host, options); - - const eslintrcJson = readJson( - host, - `apps/${options.name}/.eslintrc.json` - ); - const tsOverride = eslintrcJson.overrides.find( - (override: { files: string | string[] }) => - override.files.includes('*.ts') - ); - - expect( - tsOverride.rules['@angular-eslint/component-class-suffix'] - ).toEqual([ - 'error', - { - suffixes: ['Page', 'Component'], - }, - ]); - expect( - tsOverride.rules['@angular-eslint/no-empty-lifecycle-method'] - ).toEqual(0); - expect(tsOverride.rules['@typescript-eslint/no-empty-function']).toEqual( - 0 - ); - }); - }); - - describe('--template', () => { - it('should add base template files', async () => { - await applicationGenerator(host, options); - - expect(host.exists(`${projectRoot}/ionic.config.json`)).toBeTruthy(); - - expect(host.exists(`${projectRoot}/src/favicon.ico`)).toBeFalsy(); - expect(host.exists(`${projectRoot}/src/assets/shapes.svg`)).toBeTruthy(); - expect( - host.exists(`${projectRoot}/src/assets/icon/favicon.png`) - ).toBeTruthy(); - - expect( - host.exists(`${projectRoot}/src/theme/variables.scss`) - ).toBeTruthy(); - - expect(host.exists(`${projectRoot}/src/app/app.module.ts`)).toBeTruthy(); - }); - - it('--blank', async () => { - await applicationGenerator(host, { ...options, template: 'blank' }); - - expect( - host.exists(`${projectRoot}/src/app/home/home.module.ts`) - ).toBeTruthy(); - }); - - it('--list', async () => { - await applicationGenerator(host, { ...options, template: 'list' }); - - expect( - host.exists( - `${projectRoot}/src/app/view-message/view-message.module.ts` - ) - ).toBeTruthy(); - }); - - it('--sidemenu', async () => { - await applicationGenerator(host, { ...options, template: 'sidemenu' }); - - expect( - host.exists(`${projectRoot}/src/app/folder/folder.module.ts`) - ).toBeTruthy(); - }); - - it('--tabs', async () => { - await applicationGenerator(host, { ...options, template: 'tabs' }); - - expect( - host.exists(`${projectRoot}/src/app/tabs/tabs.module.ts`) - ).toBeTruthy(); - }); - }); - - describe('--directory', () => { - it('should update workspace.json', async () => { - await applicationGenerator(host, { ...options, directory: 'myDir' }); - const project = readProjectConfiguration(host, `my-dir-${options.name}`); - const projectE2e = readProjectConfiguration( - host, - `my-dir-${options.name}-e2e` - ); - - expect(project.root).toEqual('apps/my-dir/my-app'); - expect(projectE2e.root).toEqual('apps/my-dir/my-app-e2e'); - }); - - it('should generate files', async () => { - await applicationGenerator(host, { ...options, directory: 'myDir' }); - - expect(host.exists('apps/my-dir/my-app/src/main.ts')); - }); - - it('should generate Capacitor project', async () => { - await applicationGenerator(host, { - ...options, - directory: 'my-dir', - capacitor: true, - }); - - expect( - host.exists(`apps/my-dir/my-app/capacitor.config.ts`) - ).toBeDefined(); - }); - }); - - describe('--unitTestRunner', () => { - it('none', async () => { - await applicationGenerator(host, { - ...options, - unitTestRunner: 'none', - }); - - expect(host.read(`package.json`).includes('jest')).toBeFalsy(); - expect( - host.exists(`${projectRoot}/src/app/home/home.page.spec.ts`) - ).toBeFalsy(); - }); - - it('jest', async () => { - await applicationGenerator(host, { - ...options, - unitTestRunner: 'jest', - }); - - expect(host.read(`package.json`).includes('jest')).toBeTruthy(); - }); - }); - - describe('--tags', () => { - it('should update nx.json', async () => { - await applicationGenerator(host, { ...options, tags: 'one,two' }); - - const projectConfiguration = readProjectConfiguration(host, options.name); - expect(projectConfiguration.tags).toEqual(['one', 'two']); - }); - }); - - describe('--capacitor', () => { - describe('true', () => { - it('should generate Capacitor project', async () => { - await applicationGenerator(host, { ...options, capacitor: true }); - - expect(host.exists(`${projectRoot}/capacitor.config.ts`)).toBeDefined(); - }); - }); - }); -}); diff --git a/packages/ionic-angular/src/generators/application/generator.ts b/packages/ionic-angular/src/generators/application/generator.ts deleted file mode 100644 index 63a160acf..000000000 --- a/packages/ionic-angular/src/generators/application/generator.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { - convertNxGenerator, - formatFiles, - runTasksInSerial, - Tree, -} from '@nx/devkit'; -import { addAngular } from './lib/add-angular'; -import { addCapacitor } from './lib/add-capacitor'; -import { addDependencies } from './lib/add-dependencies'; -import { addFiles, removeFiles } from './lib/files'; -import { normalizeOptions } from './lib/normalize-options'; -import { updateWorkspace } from './lib/update-workspace'; -import { ApplicationGeneratorSchema } from './schema'; - -export async function applicationGenerator( - host: Tree, - schema: ApplicationGeneratorSchema -) { - const options = await normalizeOptions(host, schema); - - const installTask = addDependencies(host); - const angularTask = await addAngular(host, options); - addFiles(host, options); - removeFiles(host, options); - updateWorkspace(host, options); - - const capacitorTask = await addCapacitor(host, options); - - if (!options.skipFormat) { - await formatFiles(host); - } - - return runTasksInSerial(installTask, angularTask, capacitorTask); -} - -export default applicationGenerator; -export const applicationSchematic = convertNxGenerator(applicationGenerator); diff --git a/packages/ionic-angular/src/generators/application/lib/add-angular.ts b/packages/ionic-angular/src/generators/application/lib/add-angular.ts deleted file mode 100644 index 37052e523..000000000 --- a/packages/ionic-angular/src/generators/application/lib/add-angular.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ensurePackage, NX_VERSION, Tree } from '@nx/devkit'; -import { Linter } from '@nx/eslint'; -import { ApplicationGeneratorSchema } from '../schema'; - -export async function addAngular( - host: Tree, - options: ApplicationGeneratorSchema -) { - ensurePackage('@nx/angular', NX_VERSION); - const { applicationGenerator } = await import('@nx/angular/generators'); - return await applicationGenerator(host, { - ...options, - name: options.name, - directory: options.directory, - skipFormat: true, - routing: true, - style: 'scss', - linter: Linter.EsLint, - unitTestRunner: options.unitTestRunner, - e2eTestRunner: options.e2eTestRunner, - standalone: options.standalone, - minimal: true, - bundler: 'webpack', - }); -} diff --git a/packages/ionic-angular/src/generators/application/lib/add-capacitor.ts b/packages/ionic-angular/src/generators/application/lib/add-capacitor.ts deleted file mode 100644 index 3a6aaee76..000000000 --- a/packages/ionic-angular/src/generators/application/lib/add-capacitor.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Tree } from '@nx/devkit'; -import { capacitorProjectGenerator } from '@nxext/capacitor'; -import { NormalizedSchema } from '../schema'; - -export async function addCapacitor(host: Tree, options: NormalizedSchema) { - if (options.capacitor) { - return await capacitorProjectGenerator(host, { - project: options.appProjectName, - appName: options.appName, - appId: 'io.ionic.starter', - skipFormat: options.skipFormat, - }); - } else { - // eslint-disable-next-line @typescript-eslint/no-empty-function - return () => {}; - } -} diff --git a/packages/ionic-angular/src/generators/application/lib/files.ts b/packages/ionic-angular/src/generators/application/lib/files.ts deleted file mode 100644 index b59faa4b5..000000000 --- a/packages/ionic-angular/src/generators/application/lib/files.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { - generateFiles, - names, - normalizePath, - offsetFromRoot, - Tree, -} from '@nx/devkit'; -import { NormalizedSchema } from '../schema'; - -function addBaseFiles(host: Tree, options: NormalizedSchema) { - const templateOptions = { - ...options, - ...names(options.name), - offsetFromRoot: offsetFromRoot(options.appProjectRoot), - template: options.standalone ? '-standalone' : '', - }; - - const filesDir = options.standalone - ? normalizePath(__dirname + '/../files/base-standalone') - : normalizePath(__dirname + '/../files/base'); - - generateFiles(host, filesDir, options.appProjectRoot, templateOptions); -} - -function addTemplateFiles(host: Tree, options: NormalizedSchema) { - const templateOptions = { - ...options, - ...names(options.name), - offsetFromRoot: offsetFromRoot(options.appProjectRoot), - template: options.standalone ? '-standalone' : '', - }; - - const filesDir = options.standalone - ? normalizePath(__dirname + `/../files/${options.template}-standalone`) - : normalizePath(__dirname + `/../files/${options.template}`); - - generateFiles(host, filesDir, options.appProjectRoot, templateOptions); -} - -export function addFiles(host: Tree, options: NormalizedSchema) { - addBaseFiles(host, options); - addTemplateFiles(host, options); - - if (options.unitTestRunner === 'none') { - host.delete(`${options.appProjectRoot}/src/app/app.component.spec.ts`); - } -} - -export function removeFiles(host: Tree, options: NormalizedSchema) { - host.delete(`${options.appProjectRoot}/src/favicon.ico`); - if (options.standalone) { - host.delete(`${options.appProjectRoot}/src/app/app.component.html`); - host.delete(`${options.appProjectRoot}/src/app/app.component.scss`); - } -} diff --git a/packages/ionic-angular/src/generators/application/lib/normalize-options.ts b/packages/ionic-angular/src/generators/application/lib/normalize-options.ts deleted file mode 100644 index f0c270209..000000000 --- a/packages/ionic-angular/src/generators/application/lib/normalize-options.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - ensurePackage, - getWorkspaceLayout, - names, - normalizePath, - NX_VERSION, - Tree, -} from '@nx/devkit'; -import { ApplicationGeneratorSchema, NormalizedSchema } from '../schema'; - -export async function normalizeOptions( - host: Tree, - options: ApplicationGeneratorSchema -): Promise { - ensurePackage('@nx/js', NX_VERSION); - const { getNpmScope } = await import( - '@nx/js/src/utils/package-json/get-npm-scope' - ); - - const appName = options.name; - - const appDirectory = options.directory - ? `${names(options.directory).fileName}/${names(options.name).fileName}` - : names(options.name).fileName; - - const appProjectName = appDirectory.replace(new RegExp('/', 'g'), '-'); - - const { appsDir } = getWorkspaceLayout(host); - const appProjectRoot = normalizePath(`${appsDir}/${appDirectory}`); - const npmScope = getNpmScope(host); - - return { - ...options, - appName, - name: names(options.name).fileName, - prefix: npmScope, - appProjectName, - appProjectRoot, - standalone: options.standalone, - }; -} diff --git a/packages/ionic-angular/src/generators/application/schema.d.ts b/packages/ionic-angular/src/generators/application/schema.d.ts deleted file mode 100644 index e5647d7e6..000000000 --- a/packages/ionic-angular/src/generators/application/schema.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { E2eTestRunner, UnitTestRunner } from '@nx/angular'; - -export interface ApplicationGeneratorSchema { - name: string; - directory?: string; - unitTestRunner: UnitTestRunner; - e2eTestRunner: E2eTestRunner; - tags?: string; - template: string; - capacitor: boolean; - skipFormat: boolean; - standalone?: boolean; -} - -export interface NormalizedSchema extends ApplicationGeneratorSchema { - appName: string; - prefix: string; - appProjectName: string; - appProjectRoot: string; -} diff --git a/packages/ionic-angular/src/generators/application/schema.json b/packages/ionic-angular/src/generators/application/schema.json deleted file mode 100644 index b7dde76fd..000000000 --- a/packages/ionic-angular/src/generators/application/schema.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema", - "id": "IonicAngularApp", - "title": "Create an Ionic Angular Application for Nx", - "type": "object", - "properties": { - "name": { - "description": "The name of the application.", - "type": "string", - "$default": { - "$source": "argv", - "index": 0 - }, - "x-prompt": "What name would you like to use for the application?", - "pattern": "^[a-zA-Z]{1}.*$" - }, - "directory": { - "description": "The directory of the new application.", - "type": "string", - "alias": "d" - }, - "unitTestRunner": { - "type": "string", - "enum": ["jest", "none"], - "description": "Test runner to use for unit tests.", - "default": "jest" - }, - "e2eTestRunner": { - "type": "string", - "enum": ["cypress", "none"], - "description": "Test runner to use for end to end (e2e) tests.", - "default": "cypress" - }, - "tags": { - "type": "string", - "description": "Add tags to the application (used for linting)." - }, - "template": { - "description": "The starter template to use.", - "type": "string", - "default": "blank", - "x-prompt": { - "message": "Which starter template would you like to use?", - "type": "list", - "items": [ - { - "value": "blank", - "label": "blank | A blank starter project" - }, - { - "value": "list", - "label": "list | A starting project with a list" - }, - { - "value": "sidemenu", - "label": "sidemenu | A starting project with a list" - }, - { - "value": "tabs", - "label": "tabs | A starting project with a simple tabbed interface" - } - ] - } - }, - "capacitor": { - "type": "boolean", - "description": "Generate a Capacitor project.", - "default": true - }, - "skipFormat": { - "description": "Skip formatting files.", - "type": "boolean", - "default": false - }, - "standalone": { - "description": "Create a standalone application.", - "type": "boolean", - "default": false - } - }, - "required": ["name"] -} diff --git a/packages/ionic-angular/src/generators/configuration/generator.spec.ts b/packages/ionic-angular/src/generators/configuration/generator.spec.ts new file mode 100644 index 000000000..8c7d44c8d --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/generator.spec.ts @@ -0,0 +1,63 @@ +import { readJson, readProjectConfiguration, Tree } from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import { configurationGenerator } from './generator'; +import { ConfigurationGeneratorSchema } from './schema'; +import { applicationGenerator } from '@nx/angular/generators'; + +describe('configuration schematic', () => { + + let host: Tree; + const appName = 'my-app'; + const projectRoot = `apps/${appName}`; + const options: ConfigurationGeneratorSchema = { project: appName, capacitor: true, skipFormat: true }; + + beforeEach(async () => { + host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + await applicationGenerator(host, { + name: appName, + skipFormat: true, + }); + }); + + it('should add dependencies to package.json', async () => { + await configurationGenerator(host, options); + + const packageJson = readJson(host, 'package.json'); + expect(packageJson.dependencies['@ionic/angular']).toBeDefined(); + }); + + it('should update assets in project configuration', async () => { + await configurationGenerator(host, options); + const project = readProjectConfiguration(host, appName); + + const assets = project.targets.build.options.assets; + const styles = project.targets.build.options.styles; + + expect(assets).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + input: 'node_modules/ionicons/dist/ionicons/svg', + }), + ]) + ); + expect(assets).not.toContain(`${projectRoot}/src/favicon.ico`); + + expect(styles).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + input: `${projectRoot}/src/theme/variables.scss`, + }), + ]) + ); + }); + + describe('--capacitor', () => { + describe('true', () => { + it('should generate Capacitor project', async () => { + await configurationGenerator(host, { ...options, capacitor: true }); + + expect(host.exists(`${projectRoot}/capacitor.config.ts`)).toBeDefined(); + }); + }); + }); +}); diff --git a/packages/ionic-angular/src/generators/configuration/generator.ts b/packages/ionic-angular/src/generators/configuration/generator.ts new file mode 100644 index 000000000..d36030811 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/generator.ts @@ -0,0 +1,29 @@ +import { + convertNxGenerator, + formatFiles, + runTasksInSerial, + Tree, +} from '@nx/devkit'; +import { addCapacitor } from './lib/add-capacitor'; +import { addDependencies } from './lib/add-dependencies'; +import { updateWorkspace } from './lib/update-workspace'; +import { ConfigurationGeneratorSchema } from './schema'; + +export async function configurationGenerator( + host: Tree, + schema: ConfigurationGeneratorSchema +) { + const installTask = addDependencies(host); + updateWorkspace(host, schema); + + const capacitorTask = await addCapacitor(host, schema); + + if (!schema.skipFormat) { + await formatFiles(host); + } + + return runTasksInSerial(installTask, capacitorTask); +} + +export default configurationGenerator; +export const applicationSchematic = convertNxGenerator(configurationGenerator); diff --git a/packages/ionic-angular/src/generators/configuration/lib/add-capacitor.ts b/packages/ionic-angular/src/generators/configuration/lib/add-capacitor.ts new file mode 100644 index 000000000..23ae41029 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/lib/add-capacitor.ts @@ -0,0 +1,17 @@ +import { Tree } from '@nx/devkit'; +import { capacitorConfigurationGenerator } from '@nxext/capacitor'; +import { ConfigurationGeneratorSchema } from '../schema'; + +export async function addCapacitor(host: Tree, options: ConfigurationGeneratorSchema) { + if (options.capacitor) { + return await capacitorConfigurationGenerator(host, { + project: options.project, + appName: options.project, + appId: 'io.ionic.starter', + skipFormat: options.skipFormat, + }); + } else { + // eslint-disable-next-line @typescript-eslint/no-empty-function + return () => {}; + } +} diff --git a/packages/ionic-angular/src/generators/application/lib/add-dependencies.ts b/packages/ionic-angular/src/generators/configuration/lib/add-dependencies.ts similarity index 100% rename from packages/ionic-angular/src/generators/application/lib/add-dependencies.ts rename to packages/ionic-angular/src/generators/configuration/lib/add-dependencies.ts diff --git a/packages/ionic-angular/src/generators/application/lib/update-workspace.ts b/packages/ionic-angular/src/generators/configuration/lib/update-workspace.ts similarity index 69% rename from packages/ionic-angular/src/generators/application/lib/update-workspace.ts rename to packages/ionic-angular/src/generators/configuration/lib/update-workspace.ts index 3a823192c..1f1ccf17e 100644 --- a/packages/ionic-angular/src/generators/application/lib/update-workspace.ts +++ b/packages/ionic-angular/src/generators/configuration/lib/update-workspace.ts @@ -4,12 +4,16 @@ import { Tree, updateProjectConfiguration, } from '@nx/devkit'; -import { NormalizedSchema } from '../schema'; +import { ConfigurationGeneratorSchema } from '../schema'; -export function updateWorkspace(host: Tree, options: NormalizedSchema) { - const project = readProjectConfiguration(host, options.appProjectName); - project.targets.build.options.assets = [ - ...project.targets.build.options.assets.filter( +export function updateWorkspace( + host: Tree, + options: ConfigurationGeneratorSchema +) { + const projectConfig = readProjectConfiguration(host, options.project); + const projectRoot = projectConfig.root; + projectConfig.targets.build.options.assets = [ + ...projectConfig.targets.build.options.assets.filter( // eslint-disable-next-line @typescript-eslint/no-explicit-any (asset: any) => !asset.toString().includes('src/favicon.ico') ), @@ -20,12 +24,10 @@ export function updateWorkspace(host: Tree, options: NormalizedSchema) { }, ]; - project.targets.build.options.styles = [ - ...project.targets.build.options.styles, + projectConfig.targets.build.options.styles = [ + ...projectConfig.targets.build.options.styles, { - input: normalizePath( - `${options.appProjectRoot}/src/theme/variables.scss` - ), + input: normalizePath(`${projectRoot}/src/theme/variables.scss`), }, { input: normalizePath('node_modules/@ionic/angular/css/core.css'), @@ -65,5 +67,5 @@ export function updateWorkspace(host: Tree, options: NormalizedSchema) { }, ]; - updateProjectConfiguration(host, options.appProjectName, project); + updateProjectConfiguration(host, options.project, projectConfig); } diff --git a/packages/ionic-angular/src/generators/configuration/schema.d.ts b/packages/ionic-angular/src/generators/configuration/schema.d.ts new file mode 100644 index 000000000..4c26dec73 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/schema.d.ts @@ -0,0 +1,7 @@ +import { E2eTestRunner, UnitTestRunner } from '@nx/angular'; + +export interface ConfigurationGeneratorSchema { + project: string; + capacitor: boolean; + skipFormat: boolean; +} diff --git a/packages/ionic-angular/src/generators/configuration/schema.json b/packages/ionic-angular/src/generators/configuration/schema.json new file mode 100644 index 000000000..57a90d0a1 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/schema.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "IonicAngularConfiguration", + "title": "Configure Ionic for an Angular Application", + "type": "object", + "properties": { + "project": { + "description": "The name of the project.", + "type": "string", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "Which project would you like to configure?" + }, + "capacitor": { + "type": "boolean", + "description": "Generate a Capacitor project.", + "default": true + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false + } + }, + "required": ["project"] +} diff --git a/packages/ionic-angular/src/generators/page/files/__name__-routing.module.ts.template b/packages/ionic-angular/src/generators/page/files/__name__-routing.module.ts.template deleted file mode 100644 index 7eea4833d..000000000 --- a/packages/ionic-angular/src/generators/page/files/__name__-routing.module.ts.template +++ /dev/null @@ -1,17 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; - -import { <%= className %>Page } from './<%= fileName %>.page'; - -const routes: Routes = [ - { - path: '', - component: <%= className %>Page - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule], -}) -export class <%= className %>PageRoutingModule {} diff --git a/packages/ionic-angular/src/generators/page/files/__name__.module.ts.template b/packages/ionic-angular/src/generators/page/files/__name__.module.ts.template deleted file mode 100644 index 59e41383c..000000000 --- a/packages/ionic-angular/src/generators/page/files/__name__.module.ts.template +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; - -import { IonicModule } from '@ionic/angular'; - -import { <%= className %>PageRoutingModule } from './<%= fileName %>-routing.module'; - -import { <%= className %>Page } from './<%= fileName %>.page'; - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - IonicModule, - <%= className %>PageRoutingModule - ], - declarations: [<%= className %>Page] -}) -export class <%= className %>PageModule {} diff --git a/packages/ionic-angular/src/generators/page/files/__name__.page.html.template b/packages/ionic-angular/src/generators/page/files/__name__.page.html.template deleted file mode 100644 index 83afec302..000000000 --- a/packages/ionic-angular/src/generators/page/files/__name__.page.html.template +++ /dev/null @@ -1,9 +0,0 @@ - - - <%= className %> - - - - - - diff --git a/packages/ionic-angular/src/generators/page/files/__name__.page.scss.template b/packages/ionic-angular/src/generators/page/files/__name__.page.scss.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-angular/src/generators/page/files/__name__.page.spec.ts.template b/packages/ionic-angular/src/generators/page/files/__name__.page.spec.ts.template deleted file mode 100644 index 1a48c3422..000000000 --- a/packages/ionic-angular/src/generators/page/files/__name__.page.spec.ts.template +++ /dev/null @@ -1,24 +0,0 @@ -import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { IonicModule } from '@ionic/angular'; - -import { <%= className %>Page } from './<%= fileName %>.page'; - -describe('<%= className %>Page', () => { - let component: <%= className %>Page; - let fixture: ComponentFixture<<%= className %>Page>; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - declarations: [ <%= className %>Page ], - imports: [IonicModule.forRoot()] - }).compileComponents(); - - fixture = TestBed.createComponent(<%= className %>Page); - component = fixture.componentInstance; - fixture.detectChanges(); - })); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/packages/ionic-angular/src/generators/page/files/__name__.page.ts.template b/packages/ionic-angular/src/generators/page/files/__name__.page.ts.template deleted file mode 100644 index 9b2757da7..000000000 --- a/packages/ionic-angular/src/generators/page/files/__name__.page.ts.template +++ /dev/null @@ -1,12 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -@Component({ - selector: '<%= prefix %>-<%= fileName %>', - templateUrl: './<%= fileName %>.page.html', - styleUrls: ['./<%= fileName %>.page.scss'], -}) -export class <%= className %>Page { - - constructor() { } - -} diff --git a/packages/ionic-angular/src/generators/page/generator.spec.ts b/packages/ionic-angular/src/generators/page/generator.spec.ts deleted file mode 100644 index dc36143eb..000000000 --- a/packages/ionic-angular/src/generators/page/generator.spec.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { Tree, updateJson } from '@nx/devkit'; - -import { pageGenerator } from './generator'; -import { PageGeneratorSchema } from './schema'; -import { ApplicationGeneratorSchema } from '../application/schema'; -import { applicationGenerator } from '../application/generator'; - -// eslint-disable-next-line @typescript-eslint/no-var-requires -const devkit = require('@nx/devkit'); - -xdescribe('page generator', () => { - jest.spyOn(devkit, 'ensurePackage').mockReturnValue(Promise.resolve()); - - let host: Tree; - - const projectOptions: ApplicationGeneratorSchema = { - name: 'my-app', - template: 'blank', - unitTestRunner: 'jest', - e2eTestRunner: 'cypress', - capacitor: false, - skipFormat: false, - }; - - const options: PageGeneratorSchema = { project: 'my-app', name: 'test' }; - const projectRoot = `apps/${options.project}`; - - beforeEach(async () => { - host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - await applicationGenerator(host, projectOptions); - }); - - it('should create page files', async () => { - await pageGenerator(host, options); - - expect( - host.exists( - `${projectRoot}/src/app/${options.name}/${options.name}-routing.module.ts` - ) - ).toBeTruthy(); - - expect( - host.exists( - `${projectRoot}/src/app/${options.name}/${options.name}.page.html` - ) - ).toBeTruthy(); - - expect( - host.exists( - `${projectRoot}/src/app/${options.name}/${options.name}.page.spec.ts` - ) - ).toBeTruthy(); - - expect( - host.exists( - `${projectRoot}/src/app/${options.name}/${options.name}.module.ts` - ) - ).toBeTruthy(); - - expect( - host.exists( - `${projectRoot}/src/app/${options.name}/${options.name}.page.scss` - ) - ).toBeTruthy(); - - expect( - host.exists( - `${projectRoot}/src/app/${options.name}/${options.name}.page.ts` - ) - ).toBeTruthy(); - }); - - describe('--directory', () => { - it('should create page files inside directory', async () => { - await pageGenerator(host, { ...options, directory: 'myDir' }); - - expect( - host.exists( - `${projectRoot}/src/app/myDir/${options.name}/${options.name}-routing.module.ts` - ) - ).toBeTruthy(); - - expect( - host.exists( - `${projectRoot}/src/app/myDir/${options.name}/${options.name}.page.html` - ) - ).toBeTruthy(); - - expect( - host.exists( - `${projectRoot}/src/app/myDir/${options.name}/${options.name}.page.spec.ts` - ) - ).toBeTruthy(); - - expect( - host.exists( - `${projectRoot}/src/app/myDir/${options.name}/${options.name}.module.ts` - ) - ).toBeTruthy(); - - expect( - host.exists( - `${projectRoot}/src/app/myDir/${options.name}/${options.name}.page.scss` - ) - ).toBeTruthy(); - - expect( - host.exists( - `${projectRoot}/src/app/myDir/${options.name}/${options.name}.page.ts` - ) - ).toBeTruthy(); - }); - }); -}); diff --git a/packages/ionic-angular/src/generators/page/generator.ts b/packages/ionic-angular/src/generators/page/generator.ts deleted file mode 100644 index ab59aa1a1..000000000 --- a/packages/ionic-angular/src/generators/page/generator.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { - convertNxGenerator, - ensurePackage, - formatFiles, - generateFiles, - getWorkspaceLayout, - names, - NX_VERSION, - offsetFromRoot, - Tree, -} from '@nx/devkit'; -import * as path from 'path'; -import { updateAppRoutingModule } from './lib/update-routing-file'; -import { NormalizedSchema, PageGeneratorSchema } from './schema'; - -async function normalizeOptions( - tree: Tree, - options: PageGeneratorSchema -): Promise { - ensurePackage('@nx/js', NX_VERSION); - const { getNpmScope } = await import( - '@nx/js/src/utils/package-json/get-npm-scope' - ); - const { appsDir } = getWorkspaceLayout(tree); - const projectRoot = `${appsDir}/${options.project}`; - const npmScope = getNpmScope(tree); - - return { - ...options, - projectRoot, - prefix: npmScope, - }; -} - -function addFiles(tree: Tree, options: NormalizedSchema) { - const templateOptions = { - ...options, - ...names(options.name), - name: names(options.name).fileName, - offsetFromRoot: offsetFromRoot(options.projectRoot), - template: '', - }; - - const pageDir = options.directory - ? path.join( - options.projectRoot, - `/src/app/${options.directory}/${names(options.name).fileName}` - ) - : path.join( - options.projectRoot, - `/src/app/${names(options.name).fileName}` - ); - - generateFiles(tree, path.join(__dirname, 'files'), pageDir, templateOptions); -} - -export async function pageGenerator(tree: Tree, options: PageGeneratorSchema) { - const normalizedOptions = await normalizeOptions(tree, options); - addFiles(tree, normalizedOptions); - updateAppRoutingModule(tree, normalizedOptions); - - await formatFiles(tree); -} - -export default pageGenerator; -export const pageSchematic = convertNxGenerator(pageGenerator); diff --git a/packages/ionic-angular/src/generators/page/lib/update-routing-file.ts b/packages/ionic-angular/src/generators/page/lib/update-routing-file.ts deleted file mode 100644 index 0686240f0..000000000 --- a/packages/ionic-angular/src/generators/page/lib/update-routing-file.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { names, Tree } from '@nx/devkit'; -import { tsquery } from '@phenomnomnominal/tsquery'; -import { NormalizedSchema } from '../schema'; -import { - ArrayLiteralExpression, - Identifier, - TypeReferenceNode, - VariableStatement, -} from 'typescript'; -import * as path from 'path'; - -export function updateAppRoutingModule(tree: Tree, options: NormalizedSchema) { - const appRoutingModuleFilePath = path.join( - options.projectRoot, - `/src/app/app-routing.module.ts` - ); - - let appRoutingModule: string; - if (tree.exists(appRoutingModuleFilePath)) { - appRoutingModule = tree.read(appRoutingModuleFilePath, 'utf-8'); - } - - if (appRoutingModule !== '') { - const newContents = tsquery.replace( - appRoutingModule, - 'VariableStatement', - (node) => { - let modifiedNode = node.getFullText(); - - const vsNode = node as VariableStatement; - - vsNode.declarationList.declarations.forEach((declaration) => { - const typeNode = declaration.type as TypeReferenceNode; - const identifier = typeNode.typeName as Identifier; - if (identifier.escapedText === 'Routes') { - const pageNames = names(options.name); - const importPath = options.directory - ? `./${options.directory}/${pageNames.fileName}/${pageNames.fileName}.module` - : `./${pageNames.fileName}/${pageNames.fileName}.module`; - - const toInsert = `{ - path: '${pageNames.fileName}', - loadChildren: () => - import('${importPath}').then((m) => m.${pageNames.className}PageModule), - }, - `; - - const arrLiteral = - declaration.initializer as ArrayLiteralExpression; - - if (arrLiteral.elements.length > 0) { - const nodeArray = arrLiteral.elements; - - const insertPosition = nodeArray[0].getStart(); - - const previousRoutes = vsNode.getFullText(); - const prefix = previousRoutes.substring(0, insertPosition); - const suffix = previousRoutes.substring(insertPosition); - const newRoutes = `${prefix}${toInsert}${suffix}`; - - modifiedNode = newRoutes; - } - } - }); - - return modifiedNode; - } - ); - - if (newContents !== appRoutingModule) { - tree.write(appRoutingModuleFilePath, newContents); - } - } -} diff --git a/packages/ionic-angular/src/generators/page/schema.d.ts b/packages/ionic-angular/src/generators/page/schema.d.ts deleted file mode 100644 index f76fa4aed..000000000 --- a/packages/ionic-angular/src/generators/page/schema.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export interface PageGeneratorSchema { - name: string; - project: string; - directory?: string; -} - -export interface NormalizedSchema extends PageGeneratorSchema { - projectRoot: string; - prefix: string; -} diff --git a/packages/ionic-angular/src/generators/page/schema.json b/packages/ionic-angular/src/generators/page/schema.json deleted file mode 100644 index a83231a12..000000000 --- a/packages/ionic-angular/src/generators/page/schema.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema", - "$id": "Page", - "title": "", - "type": "object", - "properties": { - "project": { - "type": "string", - "description": "The name of the project.", - "alias": "p", - "$default": { - "$source": "projectName" - }, - "x-prompt": "What is the name of the project for this page?" - }, - "name": { - "type": "string", - "description": "", - "$default": { - "$source": "argv", - "index": 0 - }, - "x-prompt": "What name would you like to use?" - }, - "directory": { - "type": "string", - "description": "A directory where the page is created", - "alias": "d" - } - }, - "required": ["project", "name"] -} diff --git a/packages/ionic-angular/src/index.ts b/packages/ionic-angular/src/index.ts index 1697adbed..cd9ce518f 100644 --- a/packages/ionic-angular/src/index.ts +++ b/packages/ionic-angular/src/index.ts @@ -1,2 +1,2 @@ -export { applicationGenerator } from './generators/application/generator'; -export { ApplicationGeneratorSchema } from './generators/application/schema'; +export { configurationGenerator } from './generators/configuration/generator'; +export { ConfigurationGeneratorSchema } from './generators/configuration/schema'; From baa8b31a9c32421b17d22f311fb9e9e3be746f82 Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Wed, 25 Sep 2024 10:55:30 +0200 Subject: [PATCH 03/17] feat(ionic-angular): bump `@ionic/angular` to v8 --- .../src/generators/configuration/lib/add-dependencies.ts | 4 ---- packages/ionic-angular/src/utils/versions.ts | 3 +-- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/ionic-angular/src/generators/configuration/lib/add-dependencies.ts b/packages/ionic-angular/src/generators/configuration/lib/add-dependencies.ts index f32397f7d..52da082e1 100644 --- a/packages/ionic-angular/src/generators/configuration/lib/add-dependencies.ts +++ b/packages/ionic-angular/src/generators/configuration/lib/add-dependencies.ts @@ -2,7 +2,6 @@ import { addDependenciesToPackageJson, Tree } from '@nx/devkit'; import { ionicAngularVersion, ioniconsVersion, - capacitorPluginVersion, } from '../../../utils/versions'; export function addDependencies(host: Tree) { @@ -11,9 +10,6 @@ export function addDependencies(host: Tree) { { '@ionic/angular': ionicAngularVersion, ionicons: ioniconsVersion, - '@capacitor/haptics': capacitorPluginVersion, - '@capacitor/keyboard': capacitorPluginVersion, - '@capacitor/status-bar': capacitorPluginVersion, }, {} ); diff --git a/packages/ionic-angular/src/utils/versions.ts b/packages/ionic-angular/src/utils/versions.ts index 469ff0607..a03949a90 100644 --- a/packages/ionic-angular/src/utils/versions.ts +++ b/packages/ionic-angular/src/utils/versions.ts @@ -1,3 +1,2 @@ -export const ionicAngularVersion = '^7.0.0'; +export const ionicAngularVersion = '^8.0.0'; export const ioniconsVersion = '^7.0.0'; -export const capacitorPluginVersion = '^5.0.0'; From c4d5959b8a7f422c59750e204182181244df4ed4 Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Wed, 25 Sep 2024 11:34:59 +0200 Subject: [PATCH 04/17] feat(capacitor): bump capacitor packages to v6 --- packages/capacitor/src/utils/versions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/capacitor/src/utils/versions.ts b/packages/capacitor/src/utils/versions.ts index e072249fd..a1d828954 100644 --- a/packages/capacitor/src/utils/versions.ts +++ b/packages/capacitor/src/utils/versions.ts @@ -1 +1 @@ -export const capacitorVersion = '^5.0.3'; +export const capacitorVersion = '^6.0.0'; From eaf2df7591c064a9698b0caf996036f6bca40da6 Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Wed, 25 Sep 2024 11:35:42 +0200 Subject: [PATCH 05/17] refactor(ionic-react): use capacitor configuration generator --- .../src/generators/application/lib/add-capacitor.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ionic-react/src/generators/application/lib/add-capacitor.ts b/packages/ionic-react/src/generators/application/lib/add-capacitor.ts index 25388ef05..b64ee154b 100644 --- a/packages/ionic-react/src/generators/application/lib/add-capacitor.ts +++ b/packages/ionic-react/src/generators/application/lib/add-capacitor.ts @@ -1,9 +1,9 @@ import { Tree } from '@nx/devkit'; -import { capacitorProjectGenerator } from '@nxext/capacitor'; +import { capacitorConfigurationGenerator } from '@nxext/capacitor'; import { NormalizedSchema } from '../schema'; export async function addCapacitor(host: Tree, options: NormalizedSchema) { - return await capacitorProjectGenerator(host, { + return await capacitorConfigurationGenerator(host, { project: options.appProjectName, appName: options.appName, appId: 'io.ionic.starter', From 5b504490a38abdbac34f0917294300769f5645fc Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Wed, 25 Sep 2024 11:39:11 +0200 Subject: [PATCH 06/17] chore: add pnpm-lock.yaml to .prettierignore + format files --- .prettierignore | 4 +++- .../src/generators/configuration/generator.spec.ts | 7 +++++-- .../src/generators/configuration/lib/add-capacitor.ts | 5 ++++- .../src/generators/configuration/lib/add-dependencies.ts | 5 +---- tsconfig.base.json | 8 ++++---- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/.prettierignore b/.prettierignore index a577e7030..cffb17964 100644 --- a/.prettierignore +++ b/.prettierignore @@ -7,4 +7,6 @@ /build /.nx/cache -/.nx/workspace-data \ No newline at end of file +/.nx/workspace-data + +pnpm-lock.yaml diff --git a/packages/ionic-angular/src/generators/configuration/generator.spec.ts b/packages/ionic-angular/src/generators/configuration/generator.spec.ts index 8c7d44c8d..d33c95506 100644 --- a/packages/ionic-angular/src/generators/configuration/generator.spec.ts +++ b/packages/ionic-angular/src/generators/configuration/generator.spec.ts @@ -5,11 +5,14 @@ import { ConfigurationGeneratorSchema } from './schema'; import { applicationGenerator } from '@nx/angular/generators'; describe('configuration schematic', () => { - let host: Tree; const appName = 'my-app'; const projectRoot = `apps/${appName}`; - const options: ConfigurationGeneratorSchema = { project: appName, capacitor: true, skipFormat: true }; + const options: ConfigurationGeneratorSchema = { + project: appName, + capacitor: true, + skipFormat: true, + }; beforeEach(async () => { host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); diff --git a/packages/ionic-angular/src/generators/configuration/lib/add-capacitor.ts b/packages/ionic-angular/src/generators/configuration/lib/add-capacitor.ts index 23ae41029..1a1f888a2 100644 --- a/packages/ionic-angular/src/generators/configuration/lib/add-capacitor.ts +++ b/packages/ionic-angular/src/generators/configuration/lib/add-capacitor.ts @@ -2,7 +2,10 @@ import { Tree } from '@nx/devkit'; import { capacitorConfigurationGenerator } from '@nxext/capacitor'; import { ConfigurationGeneratorSchema } from '../schema'; -export async function addCapacitor(host: Tree, options: ConfigurationGeneratorSchema) { +export async function addCapacitor( + host: Tree, + options: ConfigurationGeneratorSchema +) { if (options.capacitor) { return await capacitorConfigurationGenerator(host, { project: options.project, diff --git a/packages/ionic-angular/src/generators/configuration/lib/add-dependencies.ts b/packages/ionic-angular/src/generators/configuration/lib/add-dependencies.ts index 52da082e1..ed8553b09 100644 --- a/packages/ionic-angular/src/generators/configuration/lib/add-dependencies.ts +++ b/packages/ionic-angular/src/generators/configuration/lib/add-dependencies.ts @@ -1,8 +1,5 @@ import { addDependenciesToPackageJson, Tree } from '@nx/devkit'; -import { - ionicAngularVersion, - ioniconsVersion, -} from '../../../utils/versions'; +import { ionicAngularVersion, ioniconsVersion } from '../../../utils/versions'; export function addDependencies(host: Tree) { return addDependenciesToPackageJson( diff --git a/tsconfig.base.json b/tsconfig.base.json index 4aa6a1f0f..a45eaf2c1 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -16,14 +16,14 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { + "@nxext/capacitor": ["packages/capacitor/src/index.ts"], "@nxext/common": ["packages/common/src/index.ts"], "@nxext/e2e-utils": ["e2e/utils/index.ts"], + "@nxext/ionic-angular": ["packages/ionic-angular/src/index.ts"], + "@nxext/ionic-react": ["packages/ionic-react/src/index.ts"], "@nxext/preact": ["packages/preact/src/index.ts"], "@nxext/stencil": ["packages/stencil/src/index.ts"], - "@nxext/svelte": ["packages/svelte/src/index.ts"], - "@nxext/capacitor": ["packages/capacitor/src/index.ts"], - "@nxext/ionic-angular": ["packages/ionic-angular/src/index.ts"], - "@nxext/ionic-react": ["packages/ionic-react/src/index.ts"] + "@nxext/svelte": ["packages/svelte/src/index.ts"] } }, "exclude": ["node_modules", "tmp"] From d4eb5d29fc4baaf6e491a56d20e79763b95268ab Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Wed, 25 Sep 2024 11:40:21 +0200 Subject: [PATCH 07/17] docs: generate Ionic + Capacitor docs --- docs/docs/capacitor/executors.md | 19 +++++ docs/docs/capacitor/generators.md | 61 ++++++++++++++ docs/docs/ionic-angular/executors.md | 0 docs/docs/ionic-angular/generators.md | 47 +++++++++++ docs/docs/ionic-react/executors.md | 0 docs/docs/ionic-react/generators.md | 111 ++++++++++++++++++++++++++ 6 files changed, 238 insertions(+) create mode 100644 docs/docs/capacitor/executors.md create mode 100644 docs/docs/capacitor/generators.md create mode 100644 docs/docs/ionic-angular/executors.md create mode 100644 docs/docs/ionic-angular/generators.md create mode 100644 docs/docs/ionic-react/executors.md create mode 100644 docs/docs/ionic-react/generators.md diff --git a/docs/docs/capacitor/executors.md b/docs/docs/capacitor/executors.md new file mode 100644 index 000000000..0a0f727f6 --- /dev/null +++ b/docs/docs/capacitor/executors.md @@ -0,0 +1,19 @@ +## @nxext/capacitor:cap + +Run a Capacitor command + +Options can be configured in the 'project.json' when defining the executor, or when invoking it. Read more about how to configure targets and executors here: https://nx.dev/configuration/projectjson#targets. + +### Options + +#### cmd + +Type: `string` + +The Capacitor command. + +#### preserveProjectNodeModules + +Type: `boolean` + +Preserve the node_modules folder inside the project dir. diff --git a/docs/docs/capacitor/generators.md b/docs/docs/capacitor/generators.md new file mode 100644 index 000000000..d8389f90c --- /dev/null +++ b/docs/docs/capacitor/generators.md @@ -0,0 +1,61 @@ +## @nxext/capacitor:configuration + +Configure Capacitor for an Nx project + +### Usage + +```bash +nx generate configuration ... +``` + +By default, Nx will search for `configuration` in the default collection provisioned in nx.json. + +You can specify the collection explicitly as follows: + +```bash +nx g @nxext/capacitor:configuration ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g configuration ... --dry-run +``` + +### Options + +#### project (_**required**_) + +Alias(es): p + +Type: `string` + +The name of the frontend project for Capacitor. + +#### appId + +Default: `io.ionic.starter` + +Type: `string` + +The app ID for the project. + +#### appName + +Type: `string` + +The application name for the project. + +#### skipFormat + +Default: `false` + +Type: `boolean` + +Skip formatting files. + +#### webDir + +Type: `string` + +The directory of your projects built web assets. diff --git a/docs/docs/ionic-angular/executors.md b/docs/docs/ionic-angular/executors.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/docs/ionic-angular/generators.md b/docs/docs/ionic-angular/generators.md new file mode 100644 index 000000000..b79cc54c2 --- /dev/null +++ b/docs/docs/ionic-angular/generators.md @@ -0,0 +1,47 @@ +## @nxext/ionic-angular:configuration + +Configure Ionic for an Angular application. + +### Usage + +```bash +nx generate configuration ... +``` + +By default, Nx will search for `configuration` in the default collection provisioned in nx.json. + +You can specify the collection explicitly as follows: + +```bash +nx g @nxext/ionic-angular:configuration ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g configuration ... --dry-run +``` + +### Options + +#### project (_**required**_) + +Type: `string` + +The name of the project. + +#### capacitor + +Default: `true` + +Type: `boolean` + +Generate a Capacitor project. + +#### skipFormat + +Default: `false` + +Type: `boolean` + +Skip formatting files. diff --git a/docs/docs/ionic-react/executors.md b/docs/docs/ionic-react/executors.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/docs/ionic-react/generators.md b/docs/docs/ionic-react/generators.md new file mode 100644 index 000000000..35f6f1a00 --- /dev/null +++ b/docs/docs/ionic-react/generators.md @@ -0,0 +1,111 @@ +## @nxext/ionic-react:application + +Create an Ionic React application. + +### Usage + +```bash +nx generate application ... +``` + +```bash +nx g app ... # same +``` + +By default, Nx will search for `application` in the default collection provisioned in nx.json. + +You can specify the collection explicitly as follows: + +```bash +nx g @nxext/ionic-react:application ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g application ... --dry-run +``` + +### Examples + +Generate apps/myorg/myapp and apps/myorg/myapp-e2e: + +```bash +nx g app myapp --directory=myorg +``` + +### Options + +#### name (_**required**_) + +Type: `string` + +The name of the application. + +#### capacitor + +Default: `true` + +Type: `boolean` + +Generate a Capacitor project. + +#### directory + +Alias(es): d + +Type: `string` + +The directory of the new application. + +#### e2eTestRunner + +Default: `cypress` + +Type: `string` + +Possible values: `cypress`, `none` + +Test runner to use for end to end (e2e) tests. + +#### skipFormat + +Default: `false` + +Type: `boolean` + +Skip formatting files. + +#### standaloneConfig + +Type: `boolean` + +Split the project configuration into `/project.json` rather than including it inside `workspace.json`. + +#### tags + +Alias(es): t + +Type: `string` + +Add tags to the application (used for linting). + +#### template + +Default: `blank` + +Type: `string` + +Possible values: `blank`, `list`, `sidemenu`, `tabs` + +The starter template to use. + +#### unitTestRunner + +Default: `jest` + +Type: `string` + +Possible values: `jest`, `none` + +Test runner to use for unit tests. From 1b0c3b39ebd022f75b456cf02db14f6000a7de7c Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Fri, 27 Sep 2024 07:33:52 +0200 Subject: [PATCH 08/17] refactor(ionic-angular): add template files --- .../files/ionic.config.json.template | 7 +++ .../configuration/files/main.ts.template | 14 +++++ .../files/src/app/app.component.html.template | 3 + .../src/app/app.component.spec.ts.template | 16 +++++ .../files/src/app/app.component.ts.template | 10 +++ .../files/src/app/app.routes.ts.template | 8 +++ .../explore-container.component.html | 12 ++++ .../explore-container.component.scss | 27 +++++++++ .../explore-container.component.spec.ts | 18 ++++++ .../explore-container.component.ts | 11 ++++ .../src/app/tab1/tab1.page.html.template | 17 ++++++ .../src/app/tab1/tab1.page.scss.template | 0 .../src/app/tab1/tab1.page.spec.ts.template | 18 ++++++ .../files/src/app/tab1/tab1.page.ts.template | 14 +++++ .../src/app/tab2/tab2.page.html.template | 17 ++++++ .../src/app/tab2/tab2.page.scss.template | 0 .../src/app/tab2/tab2.page.spec.ts.template | 18 ++++++ .../files/src/app/tab2/tab2.page.ts.template | 16 +++++ .../src/app/tab3/tab3.page.html.template | 17 ++++++ .../src/app/tab3/tab3.page.scss.template | 0 .../src/app/tab3/tab3.page.spec.ts.template | 18 ++++++ .../files/src/app/tab3/tab3.page.ts.template | 14 +++++ .../src/app/tabs/tabs.page.html.template | 18 ++++++ .../src/app/tabs/tabs.page.scss.template | 1 + .../src/app/tabs/tabs.page.spec.ts.template | 26 ++++++++ .../files/src/app/tabs/tabs.page.ts.template | 19 ++++++ .../src/app/tabs/tabs.routes.ts.template | 36 +++++++++++ .../files/src/index.html.template | 26 ++++++++ .../files/src/public/favicon.png | Bin 0 -> 930 bytes .../configuration/files/src/public/shapes.svg | 1 + .../files/src/styles.scss.template | 10 +++ .../files/src/theme/variables.scss.template | 2 + .../src/generators/configuration/generator.ts | 9 ++- .../src/generators/configuration/lib/files.ts | 28 +++++++++ .../configuration/lib/normalize-options.ts | 18 ++++++ .../configuration/lib/update-workspace.ts | 57 +++++------------- 36 files changed, 483 insertions(+), 43 deletions(-) create mode 100644 packages/ionic-angular/src/generators/configuration/files/ionic.config.json.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/main.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/app.component.html.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/app.component.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/app.component.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/app.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.html create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.scss create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.spec.ts create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.ts create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.html.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.scss.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.html.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.scss.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.html.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.scss.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.html.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.scss.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.spec.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.routes.ts.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/index.html.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/public/favicon.png create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/public/shapes.svg create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/styles.scss.template create mode 100644 packages/ionic-angular/src/generators/configuration/files/src/theme/variables.scss.template create mode 100644 packages/ionic-angular/src/generators/configuration/lib/files.ts create mode 100644 packages/ionic-angular/src/generators/configuration/lib/normalize-options.ts diff --git a/packages/ionic-angular/src/generators/configuration/files/ionic.config.json.template b/packages/ionic-angular/src/generators/configuration/files/ionic.config.json.template new file mode 100644 index 000000000..28f1e4a1a --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/ionic.config.json.template @@ -0,0 +1,7 @@ +{ + "name": "<%= name %>", + "integrations": { + "capacitor": {} + }, + "type": "angular-standalone" +} diff --git a/packages/ionic-angular/src/generators/configuration/files/main.ts.template b/packages/ionic-angular/src/generators/configuration/files/main.ts.template new file mode 100644 index 000000000..db355ecf1 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/main.ts.template @@ -0,0 +1,14 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { RouteReuseStrategy, provideRouter, withPreloading, PreloadAllModules } from '@angular/router'; +import { IonicRouteStrategy, provideIonicAngular } from '@ionic/angular/standalone'; + +import { routes } from './app/app.routes'; +import { AppComponent } from './app/app.component'; + +bootstrapApplication(AppComponent, { + providers: [ + { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }, + provideIonicAngular(), + provideRouter(routes, withPreloading(PreloadAllModules)), + ], +}); diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/app.component.html.template b/packages/ionic-angular/src/generators/configuration/files/src/app/app.component.html.template new file mode 100644 index 000000000..13b96776e --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/app.component.html.template @@ -0,0 +1,3 @@ + + + diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/app.component.spec.ts.template b/packages/ionic-angular/src/generators/configuration/files/src/app/app.component.spec.ts.template new file mode 100644 index 000000000..118209f91 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/app.component.spec.ts.template @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; +import { provideRouter } from '@angular/router'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + it('should create the app', async () => { + await TestBed.configureTestingModule({ + imports: [AppComponent], + providers: [provideRouter([])] + }).compileComponents(); + + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/app.component.ts.template b/packages/ionic-angular/src/generators/configuration/files/src/app/app.component.ts.template new file mode 100644 index 000000000..b0a2e140c --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/app.component.ts.template @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; +import { IonApp, IonRouterOutlet } from '@ionic/angular/standalone'; + +@Component({ + selector: 'app-root', + templateUrl: 'app.component.html', + standalone: true, + imports: [IonApp, IonRouterOutlet], +}) +export class AppComponent {} diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/app.routes.ts.template b/packages/ionic-angular/src/generators/configuration/files/src/app/app.routes.ts.template new file mode 100644 index 000000000..7cf07064a --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/app.routes.ts.template @@ -0,0 +1,8 @@ +import { Routes } from '@angular/router'; + +export const routes: Routes = [ + { + path: '', + loadChildren: () => import('./tabs/tabs.routes.ts.template').then((m) => m.routes), + }, +]; diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.html b/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.html new file mode 100644 index 000000000..a3fcb604f --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.html @@ -0,0 +1,12 @@ +
+ {{ name }} +

+ Explore + UI Components +

+
diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.scss b/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.scss new file mode 100644 index 000000000..34a8a465d --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.scss @@ -0,0 +1,27 @@ +#container { + text-align: center; + + position: absolute; + left: 0; + right: 0; + top: 50%; + transform: translateY(-50%); +} + +#container strong { + font-size: 20px; + line-height: 26px; +} + +#container p { + font-size: 16px; + line-height: 22px; + + color: #8c8c8c; + + margin: 0; +} + +#container a { + text-decoration: none; +} diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.spec.ts b/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.spec.ts new file mode 100644 index 000000000..aa956d9b9 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.spec.ts @@ -0,0 +1,18 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ExploreContainerComponent } from './explore-container.component'; + +describe('ExploreContainerComponent', () => { + let component: ExploreContainerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + fixture = TestBed.createComponent(ExploreContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.ts b/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.ts new file mode 100644 index 000000000..d2073a628 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.ts @@ -0,0 +1,11 @@ +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'app-explore-container', + templateUrl: './explore-container.component.html', + styleUrls: ['./explore-container.component.scss'], + standalone: true, +}) +export class ExploreContainerComponent { + @Input() name?: string; +} diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.html.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.html.template new file mode 100644 index 000000000..22e11e475 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.html.template @@ -0,0 +1,17 @@ + + + + Tab 1 + + + + + + + + Tab 1 + + + + + diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.scss.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.scss.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.spec.ts.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.spec.ts.template new file mode 100644 index 000000000..fcc00f940 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.spec.ts.template @@ -0,0 +1,18 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { Tab1Page } from './tab1.page'; + +describe('Tab1Page', () => { + let component: Tab1Page; + let fixture: ComponentFixture; + + beforeEach(async () => { + fixture = TestBed.createComponent(Tab1Page); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.ts.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.ts.template new file mode 100644 index 000000000..125fdf9be --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tab1/tab1.page.ts.template @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/angular/standalone'; +import { ExploreContainerComponent } from '../explore-container/explore-container.component'; + +@Component({ + selector: 'app-tab1', + templateUrl: 'tab1.page.html', + styleUrls: ['tab1.page.scss'], + standalone: true, + imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent], +}) +export class Tab1Page { + constructor() {} +} diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.html.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.html.template new file mode 100644 index 000000000..38b153ec4 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.html.template @@ -0,0 +1,17 @@ + + + + Tab 2 + + + + + + + + Tab 2 + + + + + diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.scss.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.scss.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.spec.ts.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.spec.ts.template new file mode 100644 index 000000000..92c0cac4a --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.spec.ts.template @@ -0,0 +1,18 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { Tab2Page } from './tab2.page'; + +describe('Tab2Page', () => { + let component: Tab2Page; + let fixture: ComponentFixture; + + beforeEach(async () => { + fixture = TestBed.createComponent(Tab2Page); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.ts.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.ts.template new file mode 100644 index 000000000..6fd1fdda6 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tab2/tab2.page.ts.template @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/angular/standalone'; +import { ExploreContainerComponent } from '../explore-container/explore-container.component'; + +@Component({ + selector: 'app-tab2', + templateUrl: 'tab2.page.html', + styleUrls: ['tab2.page.scss'], + standalone: true, + imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent] +}) +export class Tab2Page { + + constructor() {} + +} diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.html.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.html.template new file mode 100644 index 000000000..222333d58 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.html.template @@ -0,0 +1,17 @@ + + + + Tab 3 + + + + + + + + Tab 3 + + + + + diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.scss.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.scss.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.spec.ts.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.spec.ts.template new file mode 100644 index 000000000..a03da9934 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.spec.ts.template @@ -0,0 +1,18 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { Tab3Page } from './tab3.page'; + +describe('Tab3Page', () => { + let component: Tab3Page; + let fixture: ComponentFixture; + + beforeEach(async () => { + fixture = TestBed.createComponent(Tab3Page); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.ts.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.ts.template new file mode 100644 index 000000000..5e29647d9 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tab3/tab3.page.ts.template @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/angular/standalone'; +import { ExploreContainerComponent } from '../explore-container/explore-container.component'; + +@Component({ + selector: 'app-tab3', + templateUrl: 'tab3.page.html', + styleUrls: ['tab3.page.scss'], + standalone: true, + imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent], +}) +export class Tab3Page { + constructor() {} +} diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.html.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.html.template new file mode 100644 index 000000000..0f38384c5 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.html.template @@ -0,0 +1,18 @@ + + + + + Tab 1 + + + + + Tab 2 + + + + + Tab 3 + + + diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.scss.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.scss.template new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.scss.template @@ -0,0 +1 @@ + diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.spec.ts.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.spec.ts.template new file mode 100644 index 000000000..2ebc97e2d --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.spec.ts.template @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { provideRouter } from '@angular/router'; + +import { TabsPage } from './tabs.page'; + +describe('TabsPage', () => { + let component: TabsPage; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TabsPage], + providers: [provideRouter([])] + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(TabsPage); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.ts.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.ts.template new file mode 100644 index 000000000..62fd0c0f4 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.page.ts.template @@ -0,0 +1,19 @@ +import { Component, EnvironmentInjector, inject } from '@angular/core'; +import { IonTabs, IonTabBar, IonTabButton, IonIcon, IonLabel } from '@ionic/angular/standalone'; +import { addIcons } from 'ionicons'; +import { triangle, ellipse, square } from 'ionicons/icons'; + +@Component({ + selector: 'app-tabs', + templateUrl: 'tabs.page.html', + styleUrls: ['tabs.page.scss'], + standalone: true, + imports: [IonTabs, IonTabBar, IonTabButton, IonIcon, IonLabel], +}) +export class TabsPage { + public environmentInjector = inject(EnvironmentInjector); + + constructor() { + addIcons({ triangle, ellipse, square }); + } +} diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.routes.ts.template b/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.routes.ts.template new file mode 100644 index 000000000..a551a2b5e --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/app/tabs/tabs.routes.ts.template @@ -0,0 +1,36 @@ +import { Routes } from '@angular/router'; +import { TabsPage } from './tabs.page.ts.template'; + +export const routes: Routes = [ + { + path: 'tabs', + component: TabsPage, + children: [ + { + path: 'tab1', + loadComponent: () => + import('../tab1/tab1.page').then((m) => m.Tab1Page), + }, + { + path: 'tab2', + loadComponent: () => + import('../tab2/tab2.page').then((m) => m.Tab2Page), + }, + { + path: 'tab3', + loadComponent: () => + import('../tab3/tab3.page').then((m) => m.Tab3Page), + }, + { + path: '', + redirectTo: '/tabs/tab1', + pathMatch: 'full', + }, + ], + }, + { + path: '', + redirectTo: '/tabs/tab1', + pathMatch: 'full', + }, +]; diff --git a/packages/ionic-angular/src/generators/configuration/files/src/index.html.template b/packages/ionic-angular/src/generators/configuration/files/src/index.html.template new file mode 100644 index 000000000..e81ffbdab --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/index.html.template @@ -0,0 +1,26 @@ + + + + + + <%= className %> + + + + + + + + + + + + + + + + + <<%= prefix %>-root>-root> + + + diff --git a/packages/ionic-angular/src/generators/configuration/files/src/public/favicon.png b/packages/ionic-angular/src/generators/configuration/files/src/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..51888a7bbdb59f04c29c548523eb2638c1c954f5 GIT binary patch literal 930 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!x&nMcT-^(N+`Ik{1{5}NM-k9f zx+Ot=!3-}y{#<)Uok@}X^0T)Mjw~(h@l#Ir^NC7r=_#0-8E$a3RKVL~nc3p~*UxA# z4bjg_XJBBO<>}%W5^;EK_{&+V40u?Vtzk_Oy;*YMVqw~ozwz&rPG6d~>D#mR`SK=; zww9K@s-5|}%Dy=+ak|}>#qwwKGH>ZO4~|`P_r2LJy1RYqyXB`=?Mw?@F8Z!h{rcpz z^y94Mdt1KFIr?nR|NE2g?N}2vO^d(4;=OB>WP0Plul!REN;cgwUAJuA?C`^98NGCJ zuf=eS_OHmETd)0azdLJ6Z^FIm6*YNHw|4%lGf`stp1;dK$1sNYdj7ec{*dYEN(RM7|LFZWoy#R9733Kz`kee` zcsH&1+JCz2|7qRT%bgpNUdZ3E%i6T)I?vY6{p)ga_qlB<;GAPn(!{OF;x_wm_K%n( zW67=BbK}Hx+Mo2yW_)0K?|;#s9f!Uw=S;9NQ)S^>UOs1+lefL)nQKa6oJzg9f7^uT zr^QQJHL|;hJ!n29P`>r{pI$??E8ll+Vp%D3sqgGAQ?16Ir>}307i!n%dGB~BKleRm zV`}#;lUe7&`Rm%PqCLs%HOEe${KnWk%jlG>GM}cUf9>%Jt~^m(q1U%2$4$<)xHgTq zd0EM;Wjbazr!IcCcJ{`1i$kvS+;+RTmT^vJdf^@OKlARE7bo`3-BEDmtJB75>uhqr zB>Z2>{qec~lUw13i#jzoi~HY diff --git a/packages/ionic-angular/src/generators/configuration/files/src/styles.scss.template b/packages/ionic-angular/src/generators/configuration/files/src/styles.scss.template new file mode 100644 index 000000000..097cf6dea --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/styles.scss.template @@ -0,0 +1,10 @@ +/* + * App Global CSS + * ---------------------------------------------------------------------------- + * Put style rules here that you want to apply globally. These styles are for + * the entire app and not just one component. Additionally, this file can be + * used as an entry point to import other CSS/Sass files to be included in the + * output CSS. + * For more information on global stylesheets, visit the documentation: + * https://ionicframework.com/docs/layout/global-stylesheets + */ diff --git a/packages/ionic-angular/src/generators/configuration/files/src/theme/variables.scss.template b/packages/ionic-angular/src/generators/configuration/files/src/theme/variables.scss.template new file mode 100644 index 000000000..6146c3923 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/files/src/theme/variables.scss.template @@ -0,0 +1,2 @@ +// For information on how to create your own theme, please see: +// http://ionicframework.com/docs/theming/ diff --git a/packages/ionic-angular/src/generators/configuration/generator.ts b/packages/ionic-angular/src/generators/configuration/generator.ts index d36030811..1b917ba86 100644 --- a/packages/ionic-angular/src/generators/configuration/generator.ts +++ b/packages/ionic-angular/src/generators/configuration/generator.ts @@ -8,15 +8,20 @@ import { addCapacitor } from './lib/add-capacitor'; import { addDependencies } from './lib/add-dependencies'; import { updateWorkspace } from './lib/update-workspace'; import { ConfigurationGeneratorSchema } from './schema'; +import { addFiles, removeFiles } from './lib/files'; +import { normalizeOptions } from './lib/normalize-options'; export async function configurationGenerator( host: Tree, schema: ConfigurationGeneratorSchema ) { + const options = normalizeOptions(host, schema); const installTask = addDependencies(host); - updateWorkspace(host, schema); + addFiles(host, options); + removeFiles(host, options); + updateWorkspace(host, options); - const capacitorTask = await addCapacitor(host, schema); + const capacitorTask = await addCapacitor(host, options); if (!schema.skipFormat) { await formatFiles(host); diff --git a/packages/ionic-angular/src/generators/configuration/lib/files.ts b/packages/ionic-angular/src/generators/configuration/lib/files.ts new file mode 100644 index 000000000..42a432730 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/lib/files.ts @@ -0,0 +1,28 @@ +import { + generateFiles, + names, + normalizePath, + offsetFromRoot, + Tree, +} from '@nx/devkit'; +import { NormalizedOptions } from './normalize-options'; + +export function addFiles(host: Tree, options: NormalizedOptions) { + const templateOptions = { + ...options, + ...names(options.project), + offsetFromRoot: offsetFromRoot(options.projectRoot), + }; + + const filesDir = normalizePath(__dirname + '/../files'); + + generateFiles(host, filesDir, options.projectRoot, templateOptions); +} + +export function removeFiles(host: Tree, options: NormalizedOptions) { + if (host.exists(`${options.projectRoot}/public/favicon.ico`)) { + host.delete(`${options.projectRoot}/public/favicon.ico`); + } else if (host.exists(`${options.projectRoot}/src/favicon.ico`)) { + host.delete(`${options.projectRoot}/src/favicon.ico`); + } +} diff --git a/packages/ionic-angular/src/generators/configuration/lib/normalize-options.ts b/packages/ionic-angular/src/generators/configuration/lib/normalize-options.ts new file mode 100644 index 000000000..4093e5928 --- /dev/null +++ b/packages/ionic-angular/src/generators/configuration/lib/normalize-options.ts @@ -0,0 +1,18 @@ +import { readProjectConfiguration, Tree } from '@nx/devkit'; +import { ConfigurationGeneratorSchema } from '../schema'; + +export interface NormalizedOptions extends ConfigurationGeneratorSchema { + projectRoot: string; +} + +export function normalizeOptions( + host: Tree, + schema: ConfigurationGeneratorSchema +): NormalizedOptions { + const { root } = readProjectConfiguration(host, schema.project); + + return { + projectRoot: root, + ...schema, + }; +} diff --git a/packages/ionic-angular/src/generators/configuration/lib/update-workspace.ts b/packages/ionic-angular/src/generators/configuration/lib/update-workspace.ts index 1f1ccf17e..dec47d6db 100644 --- a/packages/ionic-angular/src/generators/configuration/lib/update-workspace.ts +++ b/packages/ionic-angular/src/generators/configuration/lib/update-workspace.ts @@ -12,10 +12,12 @@ export function updateWorkspace( ) { const projectConfig = readProjectConfiguration(host, options.project); const projectRoot = projectConfig.root; + projectConfig.targets.build.options.assets = [ ...projectConfig.targets.build.options.assets.filter( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (asset: any) => !asset.toString().includes('src/favicon.ico') + (asset: string | Record) => + asset.toString().includes('src/favicon.ico') || + asset.toString().includes(`public/favicon.ico`) ), { glob: '**/*.svg', @@ -26,45 +28,18 @@ export function updateWorkspace( projectConfig.targets.build.options.styles = [ ...projectConfig.targets.build.options.styles, - { - input: normalizePath(`${projectRoot}/src/theme/variables.scss`), - }, - { - input: normalizePath('node_modules/@ionic/angular/css/core.css'), - }, - { - input: normalizePath('node_modules/@ionic/angular/css/normalize.css'), - }, - { - input: normalizePath('node_modules/@ionic/angular/css/structure.css'), - }, - { - input: normalizePath('node_modules/@ionic/angular/css/typography.css'), - }, - { - input: normalizePath('node_modules/@ionic/angular/css/display.css'), - }, - { - input: normalizePath('node_modules/@ionic/angular/css/padding.css'), - }, - { - input: normalizePath( - 'node_modules/@ionic/angular/css/float-elements.css' - ), - }, - { - input: normalizePath( - 'node_modules/@ionic/angular/css/text-alignment.css' - ), - }, - { - input: normalizePath( - 'node_modules/@ionic/angular/css/text-transformation.css' - ), - }, - { - input: normalizePath('node_modules/@ionic/angular/css/flex-utils.css'), - }, + normalizePath(`${projectRoot}/src/theme/variables.scss`), + normalizePath('node_modules/@ionic/angular/css/core.css'), + normalizePath('node_modules/@ionic/angular/css/normalize.css'), + normalizePath('node_modules/@ionic/angular/css/structure.css'), + normalizePath('node_modules/@ionic/angular/css/typography.css'), + normalizePath('node_modules/@ionic/angular/css/display.css'), + normalizePath('node_modules/@ionic/angular/css/padding.css'), + normalizePath('node_modules/@ionic/angular/css/float-elements.css'), + normalizePath('node_modules/@ionic/angular/css/text-alignment.css'), + normalizePath('node_modules/@ionic/angular/css/text-transformation.css'), + normalizePath('node_modules/@ionic/angular/css/flex-utils.css'), + normalizePath('node_modules/@ionic/angular/css/palettes/dark.system.css'), ]; updateProjectConfiguration(host, options.project, projectConfig); From a808eaaecd6db822ed20bba8f3558f9d5a533094 Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Fri, 27 Sep 2024 09:25:48 +0200 Subject: [PATCH 09/17] feat(ionic-react): replace app generator by a config generator --- packages/ionic-react/generators.json | 17 +- .../files/base/src/App.tsx.template | 30 --- .../files/base/src/setupTests.ts.template | 16 -- .../base/src/theme/variables.css.template | 236 ------------------ .../files/blank/src/App.test.tsx.template | 8 - .../files/blank/src/App.tsx.template | 42 ---- .../components/ExploreContainer.css.template | 24 -- .../components/ExploreContainer.tsx.template | 15 -- .../files/blank/src/pages/Home.css.template | 0 .../files/blank/src/pages/Home.tsx.template | 25 -- .../files/list/src/App.test.tsx.template | 8 - .../files/list/src/App.tsx.template | 46 ---- .../components/MessageListItem.css.template | 59 ----- .../components/MessageListItem.tsx.template | 33 --- .../files/list/src/data/messages.ts.template | 62 ----- .../files/list/src/pages/Home.css.template | 0 .../files/list/src/pages/Home.tsx.template | 60 ----- .../list/src/pages/ViewMessage.css.template | 40 --- .../list/src/pages/ViewMessage.tsx.template | 78 ------ .../files/sidemenu/src/App.test.tsx.template | 8 - .../files/sidemenu/src/App.tsx.template | 48 ---- .../components/ExploreContainer.css.template | 24 -- .../components/ExploreContainer.tsx.template | 16 -- .../sidemenu/src/components/Menu.css.template | 113 --------- .../sidemenu/src/components/Menu.tsx.template | 100 -------- .../sidemenu/src/pages/Page.css.template | 0 .../sidemenu/src/pages/Page.tsx.template | 33 --- .../files/tabs/src/App.test.tsx.template | 8 - .../components/ExploreContainer.css.template | 24 -- .../components/ExploreContainer.tsx.template | 16 -- .../files/tabs/src/pages/Tab1.css.template | 0 .../files/tabs/src/pages/Tab1.tsx.template | 25 -- .../files/tabs/src/pages/Tab2.css.template | 0 .../files/tabs/src/pages/Tab2.tsx.template | 25 -- .../files/tabs/src/pages/Tab3.css.template | 0 .../files/tabs/src/pages/Tab3.tsx.template | 25 -- .../generators/application/generator.spec.ts | 200 --------------- .../src/generators/application/generator.ts | 49 ---- .../application/lib/add-dependencies.ts | 35 --- .../generators/application/lib/add-react.ts | 26 -- .../application/lib/change-react-router.ts | 26 -- .../src/generators/application/lib/files.ts | 58 ----- .../application/lib/normalize-options.ts | 27 -- .../application/lib/remove-plain-reactapp.ts | 6 - .../application/lib/update-cypress-setup.ts | 62 ----- .../lib/update-jest-babel-setup.ts | 94 ------- .../src/generators/application/schema.d.ts | 18 -- .../src/generators/application/schema.json | 87 ------- .../files}/ionic.config.json.template | 0 .../files/public}/favicon.png | Bin .../files}/src/App.spec.tsx.template | 0 .../files}/src/App.tsx.template | 11 + .../files}/src/index.html.template | 10 +- .../files}/src/main.tsx.template | 0 .../files}/src/manifest.json.template | 0 .../files/src/theme/variables.css.template | 2 + .../configuration/generator.spec.ts | 92 +++++++ .../src/generators/configuration/generator.ts | 38 +++ .../lib/add-capacitor.ts | 0 .../configuration/lib/add-dependencies.ts | 18 ++ .../src/generators/configuration/lib/files.ts | 32 +++ .../configuration/lib/normalize-options.ts | 15 ++ .../lib/update-workspace.ts | 16 +- .../src/generators/configuration/schema.d.ts | 9 + .../src/generators/configuration/schema.json | 28 +++ packages/ionic-react/src/index.ts | 4 +- packages/ionic-react/src/utils/versions.ts | 10 +- 67 files changed, 267 insertions(+), 1970 deletions(-) delete mode 100644 packages/ionic-react/src/generators/application/files/base/src/App.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/base/src/setupTests.ts.template delete mode 100644 packages/ionic-react/src/generators/application/files/base/src/theme/variables.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/blank/src/App.test.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/blank/src/App.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/blank/src/pages/Home.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/blank/src/pages/Home.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/list/src/App.test.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/list/src/App.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/list/src/data/messages.ts.template delete mode 100644 packages/ionic-react/src/generators/application/files/list/src/pages/Home.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/list/src/pages/Home.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/App.test.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/App.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/App.test.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.css.template delete mode 100644 packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.tsx.template delete mode 100644 packages/ionic-react/src/generators/application/generator.spec.ts delete mode 100644 packages/ionic-react/src/generators/application/generator.ts delete mode 100644 packages/ionic-react/src/generators/application/lib/add-dependencies.ts delete mode 100644 packages/ionic-react/src/generators/application/lib/add-react.ts delete mode 100644 packages/ionic-react/src/generators/application/lib/change-react-router.ts delete mode 100644 packages/ionic-react/src/generators/application/lib/files.ts delete mode 100644 packages/ionic-react/src/generators/application/lib/normalize-options.ts delete mode 100644 packages/ionic-react/src/generators/application/lib/remove-plain-reactapp.ts delete mode 100644 packages/ionic-react/src/generators/application/lib/update-cypress-setup.ts delete mode 100644 packages/ionic-react/src/generators/application/lib/update-jest-babel-setup.ts delete mode 100644 packages/ionic-react/src/generators/application/schema.d.ts delete mode 100644 packages/ionic-react/src/generators/application/schema.json rename packages/ionic-react/src/generators/{application/files/base => configuration/files}/ionic.config.json.template (100%) rename packages/ionic-react/src/generators/{application/files/base/src/assets/icon => configuration/files/public}/favicon.png (100%) rename packages/ionic-react/src/generators/{application/files/base => configuration/files}/src/App.spec.tsx.template (100%) rename packages/ionic-react/src/generators/{application/files/tabs => configuration/files}/src/App.tsx.template (86%) rename packages/ionic-react/src/generators/{application/files/base => configuration/files}/src/index.html.template (74%) rename packages/ionic-react/src/generators/{application/files/base => configuration/files}/src/main.tsx.template (100%) rename packages/ionic-react/src/generators/{application/files/base => configuration/files}/src/manifest.json.template (100%) create mode 100644 packages/ionic-react/src/generators/configuration/files/src/theme/variables.css.template create mode 100644 packages/ionic-react/src/generators/configuration/generator.spec.ts create mode 100644 packages/ionic-react/src/generators/configuration/generator.ts rename packages/ionic-react/src/generators/{application => configuration}/lib/add-capacitor.ts (100%) create mode 100644 packages/ionic-react/src/generators/configuration/lib/add-dependencies.ts create mode 100644 packages/ionic-react/src/generators/configuration/lib/files.ts create mode 100644 packages/ionic-react/src/generators/configuration/lib/normalize-options.ts rename packages/ionic-react/src/generators/{application => configuration}/lib/update-workspace.ts (56%) create mode 100644 packages/ionic-react/src/generators/configuration/schema.d.ts create mode 100644 packages/ionic-react/src/generators/configuration/schema.json diff --git a/packages/ionic-react/generators.json b/packages/ionic-react/generators.json index 80544dd6c..8dadb71df 100644 --- a/packages/ionic-react/generators.json +++ b/packages/ionic-react/generators.json @@ -3,19 +3,10 @@ "name": "IonicReact", "version": "0.0.1", "generators": { - "application": { - "factory": "./src/generators/application/generator", - "schema": "./src/generators/application/schema.json", - "aliases": ["app"], - "description": "Create an Ionic React application." - } - }, - "schematics": { - "application": { - "factory": "./src/generators/application/generator", - "schema": "./src/generators/application/schema.json", - "aliases": ["app"], - "description": "Create an Ionic React application." + "configuration": { + "factory": "./src/generators/configuration/generator", + "schema": "./src/generators/configuration/schema.json", + "description": "Configure Ionic for a React application." } } } diff --git a/packages/ionic-react/src/generators/application/files/base/src/App.tsx.template b/packages/ionic-react/src/generators/application/files/base/src/App.tsx.template deleted file mode 100644 index ab2bc3163..000000000 --- a/packages/ionic-react/src/generators/application/files/base/src/App.tsx.template +++ /dev/null @@ -1,30 +0,0 @@ -import React, { Component } from 'react'; -/* Core CSS required for Ionic components to work properly */ -import '@ionic/react/css/core.css'; - -/* Basic CSS for apps built with Ionic */ -import '@ionic/react/css/normalize.css'; -import '@ionic/react/css/structure.css'; -import '@ionic/react/css/typography.css'; - -/* Optional CSS utils that can be commented out */ -import '@ionic/react/css/padding.css'; -import '@ionic/react/css/float-elements.css'; -import '@ionic/react/css/text-alignment.css'; -import '@ionic/react/css/text-transformation.css'; -import '@ionic/react/css/flex-utils.css'; -import '@ionic/react/css/display.css'; - -/* Theme variables */ -import './theme/variables.css'; - -const App: React.FunctionComponent = () => { - return ( -
-
-
-
- ); -} - -export default App; diff --git a/packages/ionic-react/src/generators/application/files/base/src/setupTests.ts.template b/packages/ionic-react/src/generators/application/files/base/src/setupTests.ts.template deleted file mode 100644 index 497168372..000000000 --- a/packages/ionic-react/src/generators/application/files/base/src/setupTests.ts.template +++ /dev/null @@ -1,16 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom/extend-expect'; - -// Mock matchmedia -window.matchMedia = window.matchMedia || function() { - return { - matches: false, - // eslint-disable-next-line @typescript-eslint/no-empty-function - addListener: function() {}, - // eslint-disable-next-line @typescript-eslint/no-empty-function - removeListener: function() {} - }; -}; diff --git a/packages/ionic-react/src/generators/application/files/base/src/theme/variables.css.template b/packages/ionic-react/src/generators/application/files/base/src/theme/variables.css.template deleted file mode 100644 index a44fcdd01..000000000 --- a/packages/ionic-react/src/generators/application/files/base/src/theme/variables.css.template +++ /dev/null @@ -1,236 +0,0 @@ -/* Ionic Variables and Theming. For more info, please see: -http://ionicframework.com/docs/theming/ */ - -/** Ionic CSS Variables **/ -:root { - /** primary **/ - --ion-color-primary: #3880ff; - --ion-color-primary-rgb: 56, 128, 255; - --ion-color-primary-contrast: #ffffff; - --ion-color-primary-contrast-rgb: 255, 255, 255; - --ion-color-primary-shade: #3171e0; - --ion-color-primary-tint: #4c8dff; - - /** secondary **/ - --ion-color-secondary: #3dc2ff; - --ion-color-secondary-rgb: 61, 194, 255; - --ion-color-secondary-contrast: #ffffff; - --ion-color-secondary-contrast-rgb: 255, 255, 255; - --ion-color-secondary-shade: #36abe0; - --ion-color-secondary-tint: #50c8ff; - - /** tertiary **/ - --ion-color-tertiary: #5260ff; - --ion-color-tertiary-rgb: 82, 96, 255; - --ion-color-tertiary-contrast: #ffffff; - --ion-color-tertiary-contrast-rgb: 255, 255, 255; - --ion-color-tertiary-shade: #4854e0; - --ion-color-tertiary-tint: #6370ff; - - /** success **/ - --ion-color-success: #2dd36f; - --ion-color-success-rgb: 45, 211, 111; - --ion-color-success-contrast: #ffffff; - --ion-color-success-contrast-rgb: 255, 255, 255; - --ion-color-success-shade: #28ba62; - --ion-color-success-tint: #42d77d; - - /** warning **/ - --ion-color-warning: #ffc409; - --ion-color-warning-rgb: 255, 196, 9; - --ion-color-warning-contrast: #000000; - --ion-color-warning-contrast-rgb: 0, 0, 0; - --ion-color-warning-shade: #e0ac08; - --ion-color-warning-tint: #ffca22; - - /** danger **/ - --ion-color-danger: #eb445a; - --ion-color-danger-rgb: 235, 68, 90; - --ion-color-danger-contrast: #ffffff; - --ion-color-danger-contrast-rgb: 255, 255, 255; - --ion-color-danger-shade: #cf3c4f; - --ion-color-danger-tint: #ed576b; - - /** dark **/ - --ion-color-dark: #222428; - --ion-color-dark-rgb: 34, 36, 40; - --ion-color-dark-contrast: #ffffff; - --ion-color-dark-contrast-rgb: 255, 255, 255; - --ion-color-dark-shade: #1e2023; - --ion-color-dark-tint: #383a3e; - - /** medium **/ - --ion-color-medium: #92949c; - --ion-color-medium-rgb: 146, 148, 156; - --ion-color-medium-contrast: #ffffff; - --ion-color-medium-contrast-rgb: 255, 255, 255; - --ion-color-medium-shade: #808289; - --ion-color-medium-tint: #9d9fa6; - - /** light **/ - --ion-color-light: #f4f5f8; - --ion-color-light-rgb: 244, 245, 248; - --ion-color-light-contrast: #000000; - --ion-color-light-contrast-rgb: 0, 0, 0; - --ion-color-light-shade: #d7d8da; - --ion-color-light-tint: #f5f6f9; -} - -@media (prefers-color-scheme: dark) { - /* - * Dark Colors - * ------------------------------------------- - */ - - body { - --ion-color-primary: #428cff; - --ion-color-primary-rgb: 66,140,255; - --ion-color-primary-contrast: #ffffff; - --ion-color-primary-contrast-rgb: 255,255,255; - --ion-color-primary-shade: #3a7be0; - --ion-color-primary-tint: #5598ff; - - --ion-color-secondary: #50c8ff; - --ion-color-secondary-rgb: 80,200,255; - --ion-color-secondary-contrast: #ffffff; - --ion-color-secondary-contrast-rgb: 255,255,255; - --ion-color-secondary-shade: #46b0e0; - --ion-color-secondary-tint: #62ceff; - - --ion-color-tertiary: #6a64ff; - --ion-color-tertiary-rgb: 106,100,255; - --ion-color-tertiary-contrast: #ffffff; - --ion-color-tertiary-contrast-rgb: 255,255,255; - --ion-color-tertiary-shade: #5d58e0; - --ion-color-tertiary-tint: #7974ff; - - --ion-color-success: #2fdf75; - --ion-color-success-rgb: 47,223,117; - --ion-color-success-contrast: #000000; - --ion-color-success-contrast-rgb: 0,0,0; - --ion-color-success-shade: #29c467; - --ion-color-success-tint: #44e283; - - --ion-color-warning: #ffd534; - --ion-color-warning-rgb: 255,213,52; - --ion-color-warning-contrast: #000000; - --ion-color-warning-contrast-rgb: 0,0,0; - --ion-color-warning-shade: #e0bb2e; - --ion-color-warning-tint: #ffd948; - - --ion-color-danger: #ff4961; - --ion-color-danger-rgb: 255,73,97; - --ion-color-danger-contrast: #ffffff; - --ion-color-danger-contrast-rgb: 255,255,255; - --ion-color-danger-shade: #e04055; - --ion-color-danger-tint: #ff5b71; - - --ion-color-dark: #f4f5f8; - --ion-color-dark-rgb: 244,245,248; - --ion-color-dark-contrast: #000000; - --ion-color-dark-contrast-rgb: 0,0,0; - --ion-color-dark-shade: #d7d8da; - --ion-color-dark-tint: #f5f6f9; - - --ion-color-medium: #989aa2; - --ion-color-medium-rgb: 152,154,162; - --ion-color-medium-contrast: #000000; - --ion-color-medium-contrast-rgb: 0,0,0; - --ion-color-medium-shade: #86888f; - --ion-color-medium-tint: #a2a4ab; - - --ion-color-light: #222428; - --ion-color-light-rgb: 34,36,40; - --ion-color-light-contrast: #ffffff; - --ion-color-light-contrast-rgb: 255,255,255; - --ion-color-light-shade: #1e2023; - --ion-color-light-tint: #383a3e; - } - - /* - * iOS Dark Theme - * ------------------------------------------- - */ - - .ios body { - --ion-background-color: #000000; - --ion-background-color-rgb: 0,0,0; - - --ion-text-color: #ffffff; - --ion-text-color-rgb: 255,255,255; - - --ion-color-step-50: #0d0d0d; - --ion-color-step-100: #1a1a1a; - --ion-color-step-150: #262626; - --ion-color-step-200: #333333; - --ion-color-step-250: #404040; - --ion-color-step-300: #4d4d4d; - --ion-color-step-350: #595959; - --ion-color-step-400: #666666; - --ion-color-step-450: #737373; - --ion-color-step-500: #808080; - --ion-color-step-550: #8c8c8c; - --ion-color-step-600: #999999; - --ion-color-step-650: #a6a6a6; - --ion-color-step-700: #b3b3b3; - --ion-color-step-750: #bfbfbf; - --ion-color-step-800: #cccccc; - --ion-color-step-850: #d9d9d9; - --ion-color-step-900: #e6e6e6; - --ion-color-step-950: #f2f2f2; - - --ion-item-background: #000000; - - --ion-card-background: #1c1c1d; - } - - .ios ion-modal { - --ion-background-color: var(--ion-color-step-100); - --ion-toolbar-background: var(--ion-color-step-150); - --ion-toolbar-border-color: var(--ion-color-step-250); - } - - - /* - * Material Design Dark Theme - * ------------------------------------------- - */ - - .md body { - --ion-background-color: #121212; - --ion-background-color-rgb: 18,18,18; - - --ion-text-color: #ffffff; - --ion-text-color-rgb: 255,255,255; - - --ion-border-color: #222222; - - --ion-color-step-50: #1e1e1e; - --ion-color-step-100: #2a2a2a; - --ion-color-step-150: #363636; - --ion-color-step-200: #414141; - --ion-color-step-250: #4d4d4d; - --ion-color-step-300: #595959; - --ion-color-step-350: #656565; - --ion-color-step-400: #717171; - --ion-color-step-450: #7d7d7d; - --ion-color-step-500: #898989; - --ion-color-step-550: #949494; - --ion-color-step-600: #a0a0a0; - --ion-color-step-650: #acacac; - --ion-color-step-700: #b8b8b8; - --ion-color-step-750: #c4c4c4; - --ion-color-step-800: #d0d0d0; - --ion-color-step-850: #dbdbdb; - --ion-color-step-900: #e7e7e7; - --ion-color-step-950: #f3f3f3; - - --ion-item-background: #1e1e1e; - - --ion-toolbar-background: #1f1f1f; - - --ion-tab-bar-background: #1f1f1f; - - --ion-card-background: #1e1e1e; - } -} diff --git a/packages/ionic-react/src/generators/application/files/blank/src/App.test.tsx.template b/packages/ionic-react/src/generators/application/files/blank/src/App.test.tsx.template deleted file mode 100644 index 8c927a8d7..000000000 --- a/packages/ionic-react/src/generators/application/files/blank/src/App.test.tsx.template +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import { render } from '@testing-library/react'; -import App from './App'; - -test('renders without crashing', () => { - const { baseElement } = render(); - expect(baseElement).toBeDefined(); -}); diff --git a/packages/ionic-react/src/generators/application/files/blank/src/App.tsx.template b/packages/ionic-react/src/generators/application/files/blank/src/App.tsx.template deleted file mode 100644 index 6033a6a60..000000000 --- a/packages/ionic-react/src/generators/application/files/blank/src/App.tsx.template +++ /dev/null @@ -1,42 +0,0 @@ -import { Redirect, Route } from 'react-router-dom'; -import { IonApp, IonRouterOutlet, setupIonicReact } from '@ionic/react'; -import { IonReactRouter } from '@ionic/react-router'; -import Home from './pages/Home'; - -/* Core CSS required for Ionic components to work properly */ -import '@ionic/react/css/core.css'; - -/* Basic CSS for apps built with Ionic */ -import '@ionic/react/css/normalize.css'; -import '@ionic/react/css/structure.css'; -import '@ionic/react/css/typography.css'; - -/* Optional CSS utils that can be commented out */ -import '@ionic/react/css/padding.css'; -import '@ionic/react/css/float-elements.css'; -import '@ionic/react/css/text-alignment.css'; -import '@ionic/react/css/text-transformation.css'; -import '@ionic/react/css/flex-utils.css'; -import '@ionic/react/css/display.css'; - -/* Theme variables */ -import './theme/variables.css'; - -setupIonicReact(); - -const App: React.FC = () => ( - - - - - - - - - - - - -); - -export default App; diff --git a/packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.css.template b/packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.css.template deleted file mode 100644 index 11d2f90d9..000000000 --- a/packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.css.template +++ /dev/null @@ -1,24 +0,0 @@ -.container { - text-align: center; - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); -} - -.container strong { - font-size: 20px; - line-height: 26px; -} - -.container p { - font-size: 16px; - line-height: 22px; - color: #8c8c8c; - margin: 0; -} - -.container a { - text-decoration: none; -} diff --git a/packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.tsx.template b/packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.tsx.template deleted file mode 100644 index 239c682da..000000000 --- a/packages/ionic-react/src/generators/application/files/blank/src/components/ExploreContainer.tsx.template +++ /dev/null @@ -1,15 +0,0 @@ -import './ExploreContainer.css'; - -// eslint-disable-next-line @typescript-eslint/no-empty-interface -interface ContainerProps { } - -const ExploreContainer: React.FC = () => { - return ( -
- Ready to create an app? -

Start with Ionic UI Components

-
- ); -}; - -export default ExploreContainer; diff --git a/packages/ionic-react/src/generators/application/files/blank/src/pages/Home.css.template b/packages/ionic-react/src/generators/application/files/blank/src/pages/Home.css.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-react/src/generators/application/files/blank/src/pages/Home.tsx.template b/packages/ionic-react/src/generators/application/files/blank/src/pages/Home.tsx.template deleted file mode 100644 index 922267da7..000000000 --- a/packages/ionic-react/src/generators/application/files/blank/src/pages/Home.tsx.template +++ /dev/null @@ -1,25 +0,0 @@ -import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react'; -import ExploreContainer from '../components/ExploreContainer'; -import './Home.css'; - -const Home: React.FC = () => { - return ( - - - - Blank - - - - - - Blank - - - - - - ); -}; - -export default Home; diff --git a/packages/ionic-react/src/generators/application/files/list/src/App.test.tsx.template b/packages/ionic-react/src/generators/application/files/list/src/App.test.tsx.template deleted file mode 100644 index 8c927a8d7..000000000 --- a/packages/ionic-react/src/generators/application/files/list/src/App.test.tsx.template +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import { render } from '@testing-library/react'; -import App from './App'; - -test('renders without crashing', () => { - const { baseElement } = render(); - expect(baseElement).toBeDefined(); -}); diff --git a/packages/ionic-react/src/generators/application/files/list/src/App.tsx.template b/packages/ionic-react/src/generators/application/files/list/src/App.tsx.template deleted file mode 100644 index 6450e1045..000000000 --- a/packages/ionic-react/src/generators/application/files/list/src/App.tsx.template +++ /dev/null @@ -1,46 +0,0 @@ -import { Redirect, Route } from 'react-router-dom'; -import { IonApp, IonRouterOutlet, setupIonicReact } from '@ionic/react'; -import { IonReactRouter } from '@ionic/react-router'; -import Home from './pages/Home'; -import ViewMessage from './pages/ViewMessage'; - -/* Core CSS required for Ionic components to work properly */ -import '@ionic/react/css/core.css'; - -/* Basic CSS for apps built with Ionic */ -import '@ionic/react/css/normalize.css'; -import '@ionic/react/css/structure.css'; -import '@ionic/react/css/typography.css'; - -/* Optional CSS utils that can be commented out */ -import '@ionic/react/css/padding.css'; -import '@ionic/react/css/float-elements.css'; -import '@ionic/react/css/text-alignment.css'; -import '@ionic/react/css/text-transformation.css'; -import '@ionic/react/css/flex-utils.css'; -import '@ionic/react/css/display.css'; - -/* Theme variables */ -import './theme/variables.css'; - -setupIonicReact(); - -const App: React.FC = () => ( - - - - - - - - - - - - - - - -); - -export default App; diff --git a/packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.css.template b/packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.css.template deleted file mode 100644 index da6b0c791..000000000 --- a/packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.css.template +++ /dev/null @@ -1,59 +0,0 @@ -ion-item { - --padding-start: 0; - --inner-padding-end: 0; -} - -ion-label { - margin-top: 12px; - margin-bottom: 12px; -} - -ion-item h2 { - font-weight: 600; - margin: 0; -} - -ion-item p { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - width: 95%; -} - -ion-item .date { - float: right; - align-items: center; - display: flex; -} - -ion-item ion-icon { - color: #c9c9ca; -} - -ion-item ion-note { - font-size: 15px; - margin-right: 8px; - font-weight: normal; -} - -ion-item ion-note.md { - margin-right: 14px; -} - -.dot { - display: block; - height: 12px; - width: 12px; - border-radius: 50%; - align-self: start; - margin: 16px 10px 16px 16px; -} - -.dot-unread { - background: var(--ion-color-primary); -} - -ion-footer ion-title { - font-size: 11px; - font-weight: normal; -} \ No newline at end of file diff --git a/packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.tsx.template b/packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.tsx.template deleted file mode 100644 index d489cb515..000000000 --- a/packages/ionic-react/src/generators/application/files/list/src/components/MessageListItem.tsx.template +++ /dev/null @@ -1,33 +0,0 @@ -import { - IonItem, - IonLabel, - IonNote - } from '@ionic/react'; -import { Message } from '../data/messages'; -import './MessageListItem.css'; - -interface MessageListItemProps { - message: Message; -} - -const MessageListItem: React.FC = ({ message }) => { - return ( - -
- -

- {message.fromName} - - {message.date} - -

-

{message.subject}

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -

-
-
- ); -}; - -export default MessageListItem; diff --git a/packages/ionic-react/src/generators/application/files/list/src/data/messages.ts.template b/packages/ionic-react/src/generators/application/files/list/src/data/messages.ts.template deleted file mode 100644 index d98995845..000000000 --- a/packages/ionic-react/src/generators/application/files/list/src/data/messages.ts.template +++ /dev/null @@ -1,62 +0,0 @@ -export interface Message { - fromName: string; - subject: string; - date: string; - id: number; -} - -const messages: Message[] = [ - { - fromName: 'Matt Chorsey', - subject: 'New event: Trip to Vegas', - date: '9:32 AM', - id: 0 - }, - { - fromName: 'Lauren Ruthford', - subject: 'Long time no chat', - date: '6:12 AM', - id: 1 - }, - { - fromName: 'Jordan Firth', - subject: 'Report Results', - date: '4:55 AM', - id: 2 - - }, - { - fromName: 'Bill Thomas', - subject: 'The situation', - date: 'Yesterday', - id: 3 - }, - { - fromName: 'Joanne Pollan', - subject: 'Updated invitation: Swim lessons', - date: 'Yesterday', - id: 4 - }, - { - fromName: 'Andrea Cornerston', - subject: 'Last minute ask', - date: 'Yesterday', - id: 5 - }, - { - fromName: 'Moe Chamont', - subject: 'Family Calendar - Version 1', - date: 'Last Week', - id: 6 - }, - { - fromName: 'Kelly Richardson', - subject: 'Placeholder Headhots', - date: 'Last Week', - id: 7 - } -]; - -export const getMessages = () => messages; - -export const getMessage = (id: number) => messages.find(m => m.id === id); diff --git a/packages/ionic-react/src/generators/application/files/list/src/pages/Home.css.template b/packages/ionic-react/src/generators/application/files/list/src/pages/Home.css.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-react/src/generators/application/files/list/src/pages/Home.tsx.template b/packages/ionic-react/src/generators/application/files/list/src/pages/Home.tsx.template deleted file mode 100644 index 9395c4ff2..000000000 --- a/packages/ionic-react/src/generators/application/files/list/src/pages/Home.tsx.template +++ /dev/null @@ -1,60 +0,0 @@ -import MessageListItem from '../components/MessageListItem'; -import { useState } from 'react'; -import { Message, getMessages } from '../data/messages'; -import { - IonContent, - IonHeader, - IonList, - IonPage, - IonRefresher, - IonRefresherContent, - IonTitle, - IonToolbar, - useIonViewWillEnter -} from '@ionic/react'; -import './Home.css'; - -const Home: React.FC = () => { - - const [messages, setMessages] = useState([]); - - useIonViewWillEnter(() => { - const msgs = getMessages(); - setMessages(msgs); - }); - - const refresh = (e: CustomEvent) => { - setTimeout(() => { - e.detail.complete(); - }, 3000); - }; - - return ( - - - - Inbox - - - - - - - - - - - Inbox - - - - - - {messages.map(m => )} - - - - ); -}; - -export default Home; diff --git a/packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.css.template b/packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.css.template deleted file mode 100644 index 1a77b1c68..000000000 --- a/packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.css.template +++ /dev/null @@ -1,40 +0,0 @@ -#view-message-page ion-item { - --inner-padding-end: 0; - --background: transparent; -} - -#view-message-page ion-label { - margin-top: 12px; - margin-bottom: 12px; -} - -#view-message-page ion-item h2 { - font-weight: 600; -} - -#view-message-page ion-item .date { - float: right; - align-items: center; - display: flex; -} - -#view-message-page ion-item ion-icon { - font-size: 42px; - margin-right: 8px; -} - -#view-message-page ion-item ion-note { - font-size: 15px; - margin-right: 12px; - font-weight: normal; -} - -#view-message-page h1 { - margin: 0; - font-weight: bold; - font-size: 22px; -} - -#view-message-page p { - line-height: 22px; -} \ No newline at end of file diff --git a/packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.tsx.template b/packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.tsx.template deleted file mode 100644 index e7f7e6094..000000000 --- a/packages/ionic-react/src/generators/application/files/list/src/pages/ViewMessage.tsx.template +++ /dev/null @@ -1,78 +0,0 @@ -import { useState } from 'react'; -import { Message, getMessage } from '../data/messages'; -import { - IonBackButton, - IonButtons, - IonContent, - IonHeader, - IonIcon, - IonItem, - IonLabel, - IonNote, - IonPage, - IonToolbar, - useIonViewWillEnter, -} from '@ionic/react'; -import { personCircle } from 'ionicons/icons'; -import { useParams } from 'react-router'; -import './ViewMessage.css'; - -function ViewMessage() { - const [message, setMessage] = useState(); - const params = useParams<{ id: string }>(); - - useIonViewWillEnter(() => { - const msg = getMessage(parseInt(params.id, 10)); - setMessage(msg); - }); - - return ( - - - - - - - - - - - {message ? ( - <> - - - -

- {message.fromName} - - {message.date} - -

-

- To: Me -

-
-
- -
-

{message.subject}

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut - enim ad minim veniam, quis nostrud exercitation ullamco laboris - nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor - in reprehenderit in voluptate velit esse cillum dolore eu fugiat - nulla pariatur. Excepteur sint occaecat cupidatat non proident, - sunt in culpa qui officia deserunt mollit anim id est laborum. -

-
- - ) : ( -
Message not found
- )} -
-
- ); -} - -export default ViewMessage; diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/App.test.tsx.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/App.test.tsx.template deleted file mode 100644 index 8c927a8d7..000000000 --- a/packages/ionic-react/src/generators/application/files/sidemenu/src/App.test.tsx.template +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import { render } from '@testing-library/react'; -import App from './App'; - -test('renders without crashing', () => { - const { baseElement } = render(); - expect(baseElement).toBeDefined(); -}); diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/App.tsx.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/App.tsx.template deleted file mode 100644 index 178ec67f2..000000000 --- a/packages/ionic-react/src/generators/application/files/sidemenu/src/App.tsx.template +++ /dev/null @@ -1,48 +0,0 @@ -import { IonApp, IonRouterOutlet, IonSplitPane, setupIonicReact } from '@ionic/react'; -import { IonReactRouter } from '@ionic/react-router'; -import { Redirect, Route } from 'react-router-dom'; -import Menu from './components/Menu'; -import Page from './pages/Page'; - -/* Core CSS required for Ionic components to work properly */ -import '@ionic/react/css/core.css'; - -/* Basic CSS for apps built with Ionic */ -import '@ionic/react/css/normalize.css'; -import '@ionic/react/css/structure.css'; -import '@ionic/react/css/typography.css'; - -/* Optional CSS utils that can be commented out */ -import '@ionic/react/css/padding.css'; -import '@ionic/react/css/float-elements.css'; -import '@ionic/react/css/text-alignment.css'; -import '@ionic/react/css/text-transformation.css'; -import '@ionic/react/css/flex-utils.css'; -import '@ionic/react/css/display.css'; - -/* Theme variables */ -import './theme/variables.css'; - -setupIonicReact(); - -const App: React.FC = () => { - return ( - - - - - - - - - - - - - - - - ); -}; - -export default App; diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.css.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.css.template deleted file mode 100644 index bdb7b9917..000000000 --- a/packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.css.template +++ /dev/null @@ -1,24 +0,0 @@ -#container { - text-align: center; - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); -} - -#container strong { - font-size: 20px; - line-height: 26px; -} - -#container p { - font-size: 16px; - line-height: 22px; - color: #8c8c8c; - margin: 0; -} - -#container a { - text-decoration: none; -} diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.tsx.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.tsx.template deleted file mode 100644 index 0711cabd7..000000000 --- a/packages/ionic-react/src/generators/application/files/sidemenu/src/components/ExploreContainer.tsx.template +++ /dev/null @@ -1,16 +0,0 @@ -import './ExploreContainer.css'; - -interface ContainerProps { - name: string; -} - -const ExploreContainer: React.FC = ({ name }) => { - return ( -
- {name} -

Explore UI Components

-
- ); -}; - -export default ExploreContainer; diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.css.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.css.template deleted file mode 100644 index 0ca47a267..000000000 --- a/packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.css.template +++ /dev/null @@ -1,113 +0,0 @@ -ion-menu ion-content { - --background: var(--ion-item-background, var(--ion-background-color, #fff)); -} - -ion-menu.md ion-content { - --padding-start: 8px; - --padding-end: 8px; - --padding-top: 20px; - --padding-bottom: 20px; -} - -ion-menu.md ion-list { - padding: 20px 0; -} - -ion-menu.md ion-note { - margin-bottom: 30px; -} - -ion-menu.md ion-list-header, ion-menu.md ion-note { - padding-left: 10px; -} - -ion-menu.md ion-list#inbox-list { - border-bottom: 1px solid var(--ion-color-step-150, #d7d8da); -} - -ion-menu.md ion-list#inbox-list ion-list-header { - font-size: 22px; - font-weight: 600; - min-height: 20px; -} - -ion-menu.md ion-list#labels-list ion-list-header { - font-size: 16px; - margin-bottom: 18px; - color: #757575; - min-height: 26px; -} - -ion-menu.md ion-item { - --padding-start: 10px; - --padding-end: 10px; - border-radius: 4px; -} - -ion-menu.md ion-item.selected { - --background: rgba(var(--ion-color-primary-rgb), 0.14); -} - -ion-menu.md ion-item.selected ion-icon { - color: var(--ion-color-primary); -} - -ion-menu.md ion-item ion-icon { - color: #616e7e; -} - -ion-menu.md ion-item ion-label { - font-weight: 500; -} - -ion-menu.ios ion-content { - --padding-bottom: 20px; -} - -ion-menu.ios ion-list { - padding: 20px 0 0 0; -} - -ion-menu.ios ion-note { - line-height: 24px; - margin-bottom: 20px; -} - -ion-menu.ios ion-item { - --padding-start: 16px; - --padding-end: 16px; - --min-height: 50px; -} - -ion-menu.ios ion-item ion-icon { - font-size: 24px; - color: #73849a; -} - -ion-menu.ios ion-item .selected ion-icon { - color: var(--ion-color-primary); -} - -ion-menu.ios ion-list#labels-list ion-list-header { - margin-bottom: 8px; -} - -ion-menu.ios ion-list-header, -ion-menu.ios ion-note { - padding-left: 16px; - padding-right: 16px; -} - -ion-menu.ios ion-note { - margin-bottom: 8px; -} - -ion-note { - display: inline-block; - font-size: 16px; - color: var(--ion-color-medium-shade); -} - -ion-item.selected { - --color: var(--ion-color-primary); -} \ No newline at end of file diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.tsx.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.tsx.template deleted file mode 100644 index 31e99c335..000000000 --- a/packages/ionic-react/src/generators/application/files/sidemenu/src/components/Menu.tsx.template +++ /dev/null @@ -1,100 +0,0 @@ -import { - IonContent, - IonIcon, - IonItem, - IonLabel, - IonList, - IonListHeader, - IonMenu, - IonMenuToggle, - IonNote, -} from '@ionic/react'; - -import { useLocation } from 'react-router-dom'; -import { archiveOutline, archiveSharp, bookmarkOutline, heartOutline, heartSharp, mailOutline, mailSharp, paperPlaneOutline, paperPlaneSharp, trashOutline, trashSharp, warningOutline, warningSharp } from 'ionicons/icons'; -import './Menu.css'; - -interface AppPage { - url: string; - iosIcon: string; - mdIcon: string; - title: string; -} - -const appPages: AppPage[] = [ - { - title: 'Inbox', - url: '/page/Inbox', - iosIcon: mailOutline, - mdIcon: mailSharp - }, - { - title: 'Outbox', - url: '/page/Outbox', - iosIcon: paperPlaneOutline, - mdIcon: paperPlaneSharp - }, - { - title: 'Favorites', - url: '/page/Favorites', - iosIcon: heartOutline, - mdIcon: heartSharp - }, - { - title: 'Archived', - url: '/page/Archived', - iosIcon: archiveOutline, - mdIcon: archiveSharp - }, - { - title: 'Trash', - url: '/page/Trash', - iosIcon: trashOutline, - mdIcon: trashSharp - }, - { - title: 'Spam', - url: '/page/Spam', - iosIcon: warningOutline, - mdIcon: warningSharp - } -]; - -const labels = ['Family', 'Friends', 'Notes', 'Work', 'Travel', 'Reminders']; - -const Menu: React.FC = () => { - const location = useLocation(); - - return ( - - - - Inbox - hi@ionicframework.com - {appPages.map((appPage, index) => { - return ( - - - - - ); - })} - - - - Labels - {labels.map((label, index) => ( - - - ))} - - - - ); -}; - -export default Menu; diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.css.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.css.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.tsx.template b/packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.tsx.template deleted file mode 100644 index 24ac77a87..000000000 --- a/packages/ionic-react/src/generators/application/files/sidemenu/src/pages/Page.tsx.template +++ /dev/null @@ -1,33 +0,0 @@ -import { IonButtons, IonContent, IonHeader, IonMenuButton, IonPage, IonTitle, IonToolbar } from '@ionic/react'; -import { useParams } from 'react-router'; -import ExploreContainer from '../components/ExploreContainer'; -import './Page.css'; - -const Page: React.FC = () => { - - const { name } = useParams<{ name: string; }>(); - - return ( - - - - - - - {name} - - - - - - - {name} - - - - - - ); -}; - -export default Page; diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/App.test.tsx.template b/packages/ionic-react/src/generators/application/files/tabs/src/App.test.tsx.template deleted file mode 100644 index 8c927a8d7..000000000 --- a/packages/ionic-react/src/generators/application/files/tabs/src/App.test.tsx.template +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import { render } from '@testing-library/react'; -import App from './App'; - -test('renders without crashing', () => { - const { baseElement } = render(); - expect(baseElement).toBeDefined(); -}); diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.css.template b/packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.css.template deleted file mode 100644 index e99f514fb..000000000 --- a/packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.css.template +++ /dev/null @@ -1,24 +0,0 @@ -.container { - text-align: center; - position: absolute; - left: 0; - right: 0; - top: 50%; - transform: translateY(-50%); -} - -.container strong { - font-size: 20px; - line-height: 26px; -} - -.container p { - font-size: 16px; - line-height: 22px; - color: #8c8c8c; - margin: 0; -} - -.container a { - text-decoration: none; -} \ No newline at end of file diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.tsx.template b/packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.tsx.template deleted file mode 100644 index 354df7b7b..000000000 --- a/packages/ionic-react/src/generators/application/files/tabs/src/components/ExploreContainer.tsx.template +++ /dev/null @@ -1,16 +0,0 @@ -import './ExploreContainer.css'; - -interface ContainerProps { - name: string; -} - -const ExploreContainer: React.FC = ({ name }) => { - return ( -
- {name} -

Explore UI Components

-
- ); -}; - -export default ExploreContainer; diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.css.template b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.css.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.tsx.template b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.tsx.template deleted file mode 100644 index 97aa72d86..000000000 --- a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab1.tsx.template +++ /dev/null @@ -1,25 +0,0 @@ -import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react'; -import ExploreContainer from '../components/ExploreContainer'; -import './Tab1.css'; - -const Tab1: React.FC = () => { - return ( - - - - Tab 1 - - - - - - Tab 1 - - - - - - ); -}; - -export default Tab1; diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.css.template b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.css.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.tsx.template b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.tsx.template deleted file mode 100644 index 05458aa0a..000000000 --- a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab2.tsx.template +++ /dev/null @@ -1,25 +0,0 @@ -import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react'; -import ExploreContainer from '../components/ExploreContainer'; -import './Tab2.css'; - -const Tab2: React.FC = () => { - return ( - - - - Tab 2 - - - - - - Tab 2 - - - - - - ); -}; - -export default Tab2; diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.css.template b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.css.template deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.tsx.template b/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.tsx.template deleted file mode 100644 index 3a29b8a5c..000000000 --- a/packages/ionic-react/src/generators/application/files/tabs/src/pages/Tab3.tsx.template +++ /dev/null @@ -1,25 +0,0 @@ -import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react'; -import ExploreContainer from '../components/ExploreContainer'; -import './Tab3.css'; - -const Tab3: React.FC = () => { - return ( - - - - Tab 3 - - - - - - Tab 3 - - - - - - ); -}; - -export default Tab3; diff --git a/packages/ionic-react/src/generators/application/generator.spec.ts b/packages/ionic-react/src/generators/application/generator.spec.ts deleted file mode 100644 index b78d1fa34..000000000 --- a/packages/ionic-react/src/generators/application/generator.spec.ts +++ /dev/null @@ -1,200 +0,0 @@ -import { readJson, readProjectConfiguration, Tree } from '@nx/devkit'; -import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; -import { applicationGenerator } from './generator'; -import { ApplicationGeneratorSchema } from './schema'; - -describe('application', () => { - let host: Tree; - - const options: ApplicationGeneratorSchema = { - name: 'my-app', - unitTestRunner: 'jest', - e2eTestRunner: 'cypress', - template: 'blank', - capacitor: false, - skipFormat: true, - }; - - const projectRoot = `apps/${options.name}`; - - function testGeneratedFiles(tree: Tree, options: ApplicationGeneratorSchema) { - // Common files - expect(tree.exists(`${projectRoot}/.eslintrc.json`)).toBeTruthy(); - expect(tree.exists(`${projectRoot}/src/index.html`)).toBeTruthy(); - expect(tree.exists(`${projectRoot}/src/manifest.json`)).toBeTruthy(); - expect( - tree.exists(`${projectRoot}/src/assets/icon/favicon.png`) - ).toBeTruthy(); - - // Starter templates - expect(tree.exists(`${projectRoot}/src/App.tsx`)).toBeTruthy(); - expect(tree.exists(`${projectRoot}/src/pages/Home.tsx`)).toBeTruthy(); - expect( - tree.exists(`${projectRoot}/src/components/ExploreContainer.tsx`) - ).toBeTruthy(); - - expect( - tree.exists(`${projectRoot}/src/components/ExploreContainer.css`) - ).toBeTruthy(); - expect(tree.exists(`${projectRoot}/src/pages/Home.css`)).toBeTruthy(); - - // Capacitor files - if (options.capacitor) { - expect(tree.exists(`${projectRoot}/capacitor.config.ts`)).toBeTruthy(); - } - } - - beforeEach(() => { - host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); - }); - - it('should add dependencies to package.json', async () => { - await applicationGenerator(host, options); - - const packageJson = readJson(host, 'package.json'); - expect(packageJson.dependencies['@ionic/react']).toBeDefined(); - expect(packageJson.dependencies['@ionic/react-router']).toBeDefined(); - expect(packageJson.devDependencies['@nx/react']).toBeDefined(); - }); - - it('should generate application', async () => { - await applicationGenerator(host, options); - - testGeneratedFiles(host, { ...options }); - }); - - it('should delete unused @nx/react files', async () => { - await applicationGenerator(host, options); - - expect(host.exists(`${projectRoot}/src/app/app.css`)).toBeFalsy(); - expect(host.exists(`${projectRoot}/src/favicon.ico`)).toBeFalsy(); - }); - - it('should update assets in project configuration', async () => { - await applicationGenerator(host, options); - const project = readProjectConfiguration(host, options.name); - - expect(project.targets.build.options.assets).not.toContain( - `${projectRoot}/src/favicon.ico` - ); - expect(project.targets.build.options.assets).toContain( - `${projectRoot}/src/manifest.json` - ); - }); - - describe('--template', () => { - it('should add base template files', async () => { - await applicationGenerator(host, options); - - expect(host.exists(`${projectRoot}/ionic.config.json`)).toBeTruthy(); - expect( - host.exists(`${projectRoot}/src/theme/variables.css`) - ).toBeTruthy(); - }); - - it('should add blank template files', async () => { - await applicationGenerator(host, { ...options, template: 'blank' }); - - expect( - host.exists(`${projectRoot}/src/components/ExploreContainer.tsx`) - ).toBeTruthy(); - }); - - it('should add list template files', async () => { - await applicationGenerator(host, { ...options, template: 'list' }); - - expect( - host.exists(`${projectRoot}/src/pages/ViewMessage.tsx`) - ).toBeTruthy(); - }); - - it('should add sidemenu template files', async () => { - await applicationGenerator(host, { ...options, template: 'sidemenu' }); - - expect(host.exists(`${projectRoot}/src/pages/Page.tsx`)).toBeTruthy(); - }); - - it('should add tabs template files', async () => { - await applicationGenerator(host, { ...options, template: 'tabs' }); - - expect(host.exists(`${projectRoot}/src/pages/Tab1.tsx`)).toBeTruthy(); - }); - }); - - describe('--directory', () => { - it('should update project configuration with directory', async () => { - await applicationGenerator(host, { ...options, directory: 'myDir' }); - const project = readProjectConfiguration(host, `my-dir-${options.name}`); - const projectE2e = readProjectConfiguration( - host, - `my-dir-${options.name}-e2e` - ); - - expect(project.root).toEqual('apps/my-dir/my-app'); - expect(projectE2e.root).toEqual('apps/my-dir/my-app-e2e'); - }); - - it('should generate files', async () => { - await applicationGenerator(host, { ...options, directory: 'myDir' }); - - expect(host.exists('apps/my-dir/my-app/src/main.ts')); - }); - - it('should generate Capacitor project', async () => { - await applicationGenerator(host, { - ...options, - directory: 'my-dir', - capacitor: true, - }); - - expect( - host.exists(`apps/my-dir/my-app/capacitor.config.ts`) - ).toBeDefined(); - }); - }); - - describe('--unitTestRunner', () => { - it('none', async () => { - await applicationGenerator(host, { - ...options, - unitTestRunner: 'none', - }); - - expect(host.exists(`${projectRoot}/src/app/App.spec.tsx`)).toBeFalsy(); - }); - }); - - describe('--capacitor', () => { - describe('true', () => { - it('should generate Capacitor project', async () => { - await applicationGenerator(host, { ...options, capacitor: true }); - - testGeneratedFiles(host, { ...options, capacitor: true }); - }); - }); - }); - - describe('--standaloneConfig', () => { - describe('true', () => { - it('should generate package.json', async () => { - await applicationGenerator(host, { - ...options, - standaloneConfig: true, - }); - - expect(host.exists(`${projectRoot}/package.json`)).toBeDefined(); - }); - }); - - describe('false', () => { - it('should not generate package.json', async () => { - await applicationGenerator(host, { - ...options, - standaloneConfig: false, - }); - - expect(host.exists(`${projectRoot}/package.json`)).toBeFalsy(); - }); - }); - }); -}); diff --git a/packages/ionic-react/src/generators/application/generator.ts b/packages/ionic-react/src/generators/application/generator.ts deleted file mode 100644 index cede8d0ce..000000000 --- a/packages/ionic-react/src/generators/application/generator.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { - convertNxGenerator, - formatFiles, - GeneratorCallback, - runTasksInSerial, - Tree, -} from '@nx/devkit'; -import { addCapacitor } from './lib/add-capacitor'; -import { addDependencies } from './lib/add-dependencies'; -import { addReact } from './lib/add-react'; -import { addFiles, deleteUnusedFiles } from './lib/files'; -import { normalizeOptions } from './lib/normalize-options'; -import { updateWorkspace } from './lib/update-workspace'; -import { ApplicationGeneratorSchema } from './schema'; -import { changeReactRouter } from './lib/change-react-router'; -import { removePlainReactapp } from './lib/remove-plain-reactapp'; -import { updateJestBabelSetup } from './lib/update-jest-babel-setup'; -import { updateCypressSetup } from './lib/update-cypress-setup'; - -export async function applicationGenerator( - host: Tree, - options: ApplicationGeneratorSchema -) { - const normalizedOptions = normalizeOptions(host, options); - const installTask = addDependencies(host); - const reactTask = await addReact(host, options); - const routerTask = changeReactRouter(host); - addFiles(host, normalizedOptions); - deleteUnusedFiles(host, normalizedOptions); - updateWorkspace(host, normalizedOptions); - removePlainReactapp(host, normalizedOptions); - updateJestBabelSetup(host, normalizedOptions); - updateCypressSetup(host, normalizedOptions); - - // eslint-disable-next-line @typescript-eslint/no-empty-function - let capacitorTask: GeneratorCallback = () => {}; - if (options.capacitor) { - capacitorTask = await addCapacitor(host, normalizedOptions); - } - - if (!options.skipFormat) { - await formatFiles(host); - } - - return runTasksInSerial(installTask, reactTask, routerTask, capacitorTask); -} - -export default applicationGenerator; -export const applicationSchematic = convertNxGenerator(applicationGenerator); diff --git a/packages/ionic-react/src/generators/application/lib/add-dependencies.ts b/packages/ionic-react/src/generators/application/lib/add-dependencies.ts deleted file mode 100644 index 0846e5139..000000000 --- a/packages/ionic-react/src/generators/application/lib/add-dependencies.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { addDependenciesToPackageJson, Tree } from '@nx/devkit'; -import { - ionicReactRouterVersion, - ionicReactVersion, - webVitalsVersion, - workboxVersion, - capacitorPluginVersion, -} from '../../../utils/versions'; - -export function addDependencies(host: Tree) { - return addDependenciesToPackageJson( - host, - { - '@ionic/react': ionicReactVersion, - '@ionic/react-router': ionicReactRouterVersion, - 'web-vitals': webVitalsVersion, - '@capacitor/haptics': capacitorPluginVersion, - '@capacitor/keyboard': capacitorPluginVersion, - '@capacitor/status-bar': capacitorPluginVersion, - 'workbox-background-sync': workboxVersion, - 'workbox-broadcast-update': workboxVersion, - 'workbox-cacheable-response': workboxVersion, - 'workbox-core': workboxVersion, - 'workbox-expiration': workboxVersion, - 'workbox-google-analytics': workboxVersion, - 'workbox-navigation-preload': workboxVersion, - 'workbox-precaching': workboxVersion, - 'workbox-range-requests': workboxVersion, - 'workbox-routing': workboxVersion, - 'workbox-strategies': workboxVersion, - 'workbox-streams': workboxVersion, - }, - {} - ); -} diff --git a/packages/ionic-react/src/generators/application/lib/add-react.ts b/packages/ionic-react/src/generators/application/lib/add-react.ts deleted file mode 100644 index 6d419d7f5..000000000 --- a/packages/ionic-react/src/generators/application/lib/add-react.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Tree, ensurePackage, NX_VERSION } from '@nx/devkit'; -import { Linter } from '@nx/eslint'; -import { ApplicationGeneratorSchema } from '../schema'; - -export async function addReact( - host: Tree, - options: ApplicationGeneratorSchema -) { - ensurePackage('@nx/react', NX_VERSION); - const { applicationGenerator } = await import('@nx/react'); - return await applicationGenerator(host, { - ...options, - name: options.name, - style: 'css', - skipFormat: options.skipFormat, - directory: options.directory, - unitTestRunner: options.unitTestRunner, - e2eTestRunner: options.e2eTestRunner, - linter: Linter.EsLint, - pascalCaseFiles: true, - classComponent: false, - routing: true, - globalCss: true, - bundler: options.bundler, - }); -} diff --git a/packages/ionic-react/src/generators/application/lib/change-react-router.ts b/packages/ionic-react/src/generators/application/lib/change-react-router.ts deleted file mode 100644 index ac70c1bbe..000000000 --- a/packages/ionic-react/src/generators/application/lib/change-react-router.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { - addDependenciesToPackageJson, - removeDependenciesFromPackageJson, - Tree, - runTasksInSerial, -} from '@nx/devkit'; -import { - reactRouterDomVersion, - typesReactRouterDomVersion, -} from '../../../utils/versions'; - -export function changeReactRouter(host: Tree) { - const removeTask = removeDependenciesFromPackageJson( - host, - ['react-router-dom'], - [] - ); - - const routerTask = addDependenciesToPackageJson( - host, - { 'react-router-dom': reactRouterDomVersion }, - { '@types/react-router-dom': typesReactRouterDomVersion } - ); - - return runTasksInSerial(removeTask, routerTask); -} diff --git a/packages/ionic-react/src/generators/application/lib/files.ts b/packages/ionic-react/src/generators/application/lib/files.ts deleted file mode 100644 index 9cae03dfe..000000000 --- a/packages/ionic-react/src/generators/application/lib/files.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { - generateFiles, - names, - normalizePath, - offsetFromRoot, - Tree, -} from '@nx/devkit'; -import { NormalizedSchema } from '../schema'; - -export function addBaseFiles(host: Tree, options: NormalizedSchema) { - const templateOptions = { - ...options, - ...names(options.name), - offsetFromRoot: offsetFromRoot(options.appProjectRoot), - template: '', - }; - - generateFiles( - host, - normalizePath(__dirname + '/../files/base'), - options.appProjectRoot, - templateOptions - ); -} - -export function addTemplateFiles(host: Tree, options: NormalizedSchema) { - const templateOptions = { - ...options, - ...names(options.name), - offsetFromRoot: offsetFromRoot(options.appProjectRoot), - template: '', - }; - - generateFiles( - host, - normalizePath(__dirname + `/../files/${options.template}`), - options.appProjectRoot, - templateOptions - ); -} - -export function addFiles(host: Tree, options: NormalizedSchema) { - addBaseFiles(host, options); - addTemplateFiles(host, options); - - if (options.unitTestRunner === 'none') { - host.delete(`${options.appProjectRoot}/src/app/App.spec.tsx`); - } -} - -export function deleteUnusedFiles(host: Tree, options: NormalizedSchema) { - host.delete(options.appProjectRoot + '/src/favicon.ico'); - host.delete(options.appProjectRoot + `/src/app/App.css`); - host.delete(options.appProjectRoot + `/src/app/logo.svg`); - host.delete(options.appProjectRoot + `/src/app/star.svg`); - - return host; -} diff --git a/packages/ionic-react/src/generators/application/lib/normalize-options.ts b/packages/ionic-react/src/generators/application/lib/normalize-options.ts deleted file mode 100644 index 32468aee6..000000000 --- a/packages/ionic-react/src/generators/application/lib/normalize-options.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { getWorkspaceLayout, names, normalizePath, Tree } from '@nx/devkit'; -import { ApplicationGeneratorSchema, NormalizedSchema } from '../schema'; - -export function normalizeOptions( - host: Tree, - options: ApplicationGeneratorSchema -): NormalizedSchema { - const appName = options.name; - - const appDirectory = options.directory - ? `${names(options.directory).fileName}/${names(options.name).fileName}` - : names(options.name).fileName; - - const appProjectName = appDirectory.replace(new RegExp('/', 'g'), '-'); - - const { appsDir } = getWorkspaceLayout(host); - const appProjectRoot = normalizePath(`${appsDir}/${appDirectory}`); - - return { - ...options, - appName, - name: names(options.name).fileName, - appProjectName, - appProjectRoot, - bundler: 'webpack', - }; -} diff --git a/packages/ionic-react/src/generators/application/lib/remove-plain-reactapp.ts b/packages/ionic-react/src/generators/application/lib/remove-plain-reactapp.ts deleted file mode 100644 index 0dcf60bc8..000000000 --- a/packages/ionic-react/src/generators/application/lib/remove-plain-reactapp.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { joinPathFragments, Tree } from '@nx/devkit'; -import { NormalizedSchema } from '../schema'; - -export function removePlainReactapp(host: Tree, options: NormalizedSchema) { - host.delete(joinPathFragments(options.appProjectRoot, 'src/app')); -} diff --git a/packages/ionic-react/src/generators/application/lib/update-cypress-setup.ts b/packages/ionic-react/src/generators/application/lib/update-cypress-setup.ts deleted file mode 100644 index 1bef81260..000000000 --- a/packages/ionic-react/src/generators/application/lib/update-cypress-setup.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { getWorkspaceLayout, joinPathFragments, names, Tree } from '@nx/devkit'; -import { NormalizedSchema } from '../schema'; - -function getParameters(options: NormalizedSchema) { - const files = { - blank: { elem: 'strong', title: 'Ready to create an app?' }, - list: { elem: 'ion-title', title: 'Inbox' }, - sidemenu: { elem: 'ion-title', title: 'Inbox' }, - tabs: { elem: 'strong', title: 'Tab 1' }, - }; - - return files[options.template]; -} - -export function updateCypressSetup(tree: Tree, options: NormalizedSchema) { - if (options.e2eTestRunner !== 'cypress') { - return; - } - - updateFiles(tree, options); -} - -function updateFiles(tree: Tree, options: NormalizedSchema) { - const { appsDir } = getWorkspaceLayout(tree); - - const name = `${options.name}-e2e`; - const e2eProjectRoot = options.directory - ? joinPathFragments(appsDir, names(options.directory).fileName, name) - : joinPathFragments(appsDir, name); - - const { elem, title } = getParameters(options); - - tree.write( - joinPathFragments(e2eProjectRoot, 'src/support/app.po.ts'), - `export const getGreeting = () => cy.get('${elem}');` - ); - - const testContent = ` -import { getGreeting } from '../support/app.po'; - -describe('app-blank', () => { - beforeEach(() => cy.visit('/')); - - it('should display welcome message', () => { - // Custom command example, see \`../support/commands.ts\` file - cy.login('my-email@something.com', 'myPassword'); - - // Function helper example, see \`../support/app.po.ts\` file - getGreeting().contains('${title}'); - }); -}); - `; - const testFiles = [ - joinPathFragments(e2eProjectRoot, 'src/integration/app.spec.ts'), - joinPathFragments(e2eProjectRoot, 'src/e2e/app.cy.ts'), - ]; - for (const testFile of testFiles) { - if (tree.exists(testFile)) { - tree.write(testFile, testContent); - } - } -} diff --git a/packages/ionic-react/src/generators/application/lib/update-jest-babel-setup.ts b/packages/ionic-react/src/generators/application/lib/update-jest-babel-setup.ts deleted file mode 100644 index 20ec18d7f..000000000 --- a/packages/ionic-react/src/generators/application/lib/update-jest-babel-setup.ts +++ /dev/null @@ -1,94 +0,0 @@ -import type { Node, PropertyAssignment } from 'typescript'; -import { Tree, joinPathFragments } from '@nx/devkit'; -import { tsquery } from '@phenomnomnominal/tsquery'; -import { NormalizedSchema } from '../schema'; - -export function updateJestBabelSetup(tree: Tree, options: NormalizedSchema) { - if (options.unitTestRunner !== 'jest' || options.bundler === 'vite') { - return; - } - - const jestConfigPath = joinPathFragments( - options.appProjectRoot, - 'jest.config.ts' - ); - const jestFileContents = tree.read(jestConfigPath, 'utf-8'); - const changedFileContents = - replaceTransformAndAddIgnorePattern(jestFileContents); - tree.write(jestConfigPath, changedFileContents); - tree.delete(joinPathFragments(options.appProjectRoot, 'src/App.spec.tsx')); -} - -export function replaceTransformAndAddIgnorePattern(fileContents: string) { - let updatedFileContents = updateTransformProperty(fileContents); - updatedFileContents = updateTransformIgnorePattern(updatedFileContents); - - if (fileContents === updatedFileContents) { - return updatedFileContents; - } - - return updatedFileContents; -} - -function updateTransformProperty(fileContents: string) { - const JEST_PRESET_AST_QUERY = - 'Identifier[name=transform] ~ ObjectLiteralExpression > PropertyAssignment:has(StringLiteral[value=babel-jest])'; - - const TRANSFORMER_STRING = - "'^.+\\\\.[tj]sx?$': ['babel-jest', {configFile: path.resolve(__dirname, '.babelrc')}]"; - - const ast = tsquery.ast(fileContents); - const transformerExpressionNode = tsquery(ast, JEST_PRESET_AST_QUERY, { - visitAllChildren: true, - })[0] as Node; - - if (!transformerExpressionNode) { - return fileContents; - } - - const transformerIndex = transformerExpressionNode.pos; - const transformerEndIndex = transformerExpressionNode.end; - - return `${fileContents.slice( - 0, - transformerIndex - )}\n${TRANSFORMER_STRING}${fileContents.slice(transformerEndIndex)}`; -} - -function updateTransformIgnorePattern(fileContents: string) { - const TRANSFORM_OBJECT_AST_QUERY = - 'PropertyAssignment:has(Identifier[name=transform])'; - let TRANSFORM_IGNORE_PATTERN_STRING = - "transformIgnorePatterns: ['node_modules/(?!(@ionic/react|@ionic/react-router|@ionic/core|@stencil/core|ionicons)/)'],"; - - if ( - fileContents.includes( - "transformIgnorePatterns: ['node_modules/(?!(@ionic/react|@ionic/react-router|@ionic/core|@stencil/core|ionicons)/)']" - ) - ) { - return fileContents; - } - - const ast = tsquery.ast(fileContents); - - const transformObjectNode = tsquery(ast, TRANSFORM_OBJECT_AST_QUERY, { - visitAllChildren: true, - })[0] as PropertyAssignment; - - if (!transformObjectNode) { - return fileContents; - } - - let transformEndIndex = transformObjectNode.getEnd(); - if (fileContents.charAt(transformEndIndex) == ',') { - transformEndIndex = transformObjectNode.getEnd() + 1; - TRANSFORM_IGNORE_PATTERN_STRING = `\n${TRANSFORM_IGNORE_PATTERN_STRING}`; - } else { - TRANSFORM_IGNORE_PATTERN_STRING = `,\n${TRANSFORM_IGNORE_PATTERN_STRING}`; - } - - return `import * as path from 'path';\n\n${fileContents.slice( - 0, - transformEndIndex - )}${TRANSFORM_IGNORE_PATTERN_STRING}${fileContents.slice(transformEndIndex)}`; -} diff --git a/packages/ionic-react/src/generators/application/schema.d.ts b/packages/ionic-react/src/generators/application/schema.d.ts deleted file mode 100644 index 622be9d5e..000000000 --- a/packages/ionic-react/src/generators/application/schema.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -export interface ApplicationGeneratorSchema { - name: string; - directory?: string; - unitTestRunner: 'jest' | 'none'; - e2eTestRunner: 'cypress' | 'none'; - tags?: string; - template: 'blank' | 'list' | 'sidemenu' | 'tabs'; - capacitor: boolean; - skipFormat: boolean; - standaloneConfig?: boolean; - bundler?: 'webpack' | 'vite'; -} - -export interface NormalizedSchema extends ApplicationGeneratorSchema { - appName: string; - appProjectName: string; - appProjectRoot: string; -} diff --git a/packages/ionic-react/src/generators/application/schema.json b/packages/ionic-react/src/generators/application/schema.json deleted file mode 100644 index fd1a9360a..000000000 --- a/packages/ionic-react/src/generators/application/schema.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "$schema": "http://json-schema.org/schema", - "id": "Application", - "title": "Create an Ionic React Application for Nx", - "examples": [ - { - "command": "g app myapp --directory=myorg", - "description": "Generate apps/myorg/myapp and apps/myorg/myapp-e2e" - } - ], - "type": "object", - "properties": { - "name": { - "description": "The name of the application.", - "type": "string", - "$default": { - "$source": "argv", - "index": 0 - }, - "x-prompt": "What name would you like to use for the application?" - }, - "directory": { - "description": "The directory of the new application.", - "type": "string", - "alias": "d" - }, - "unitTestRunner": { - "type": "string", - "enum": ["jest", "none"], - "description": "Test runner to use for unit tests.", - "default": "jest" - }, - "e2eTestRunner": { - "type": "string", - "enum": ["cypress", "none"], - "description": "Test runner to use for end to end (e2e) tests.", - "default": "cypress" - }, - "tags": { - "type": "string", - "description": "Add tags to the application (used for linting).", - "alias": "t" - }, - "template": { - "description": "The starter template to use.", - "type": "string", - "default": "blank", - "x-prompt": { - "message": "Which starter template would you like to use?", - "type": "list", - "items": [ - { - "value": "blank", - "label": "blank | A blank starter project" - }, - { - "value": "list", - "label": "list | A starting project with a list" - }, - { - "value": "sidemenu", - "label": "sidemenu | A starting project with a list" - }, - { - "value": "tabs", - "label": "tabs | A starting project with a simple tabbed interface" - } - ] - } - }, - "capacitor": { - "type": "boolean", - "description": "Generate a Capacitor project.", - "default": true - }, - "skipFormat": { - "description": "Skip formatting files.", - "type": "boolean", - "default": false - }, - "standaloneConfig": { - "description": "Split the project configuration into `/project.json` rather than including it inside `workspace.json`.", - "type": "boolean" - } - }, - "required": ["name"] -} diff --git a/packages/ionic-react/src/generators/application/files/base/ionic.config.json.template b/packages/ionic-react/src/generators/configuration/files/ionic.config.json.template similarity index 100% rename from packages/ionic-react/src/generators/application/files/base/ionic.config.json.template rename to packages/ionic-react/src/generators/configuration/files/ionic.config.json.template diff --git a/packages/ionic-react/src/generators/application/files/base/src/assets/icon/favicon.png b/packages/ionic-react/src/generators/configuration/files/public/favicon.png similarity index 100% rename from packages/ionic-react/src/generators/application/files/base/src/assets/icon/favicon.png rename to packages/ionic-react/src/generators/configuration/files/public/favicon.png diff --git a/packages/ionic-react/src/generators/application/files/base/src/App.spec.tsx.template b/packages/ionic-react/src/generators/configuration/files/src/App.spec.tsx.template similarity index 100% rename from packages/ionic-react/src/generators/application/files/base/src/App.spec.tsx.template rename to packages/ionic-react/src/generators/configuration/files/src/App.spec.tsx.template diff --git a/packages/ionic-react/src/generators/application/files/tabs/src/App.tsx.template b/packages/ionic-react/src/generators/configuration/files/src/App.tsx.template similarity index 86% rename from packages/ionic-react/src/generators/application/files/tabs/src/App.tsx.template rename to packages/ionic-react/src/generators/configuration/files/src/App.tsx.template index 18d5ad367..cd2a292d0 100644 --- a/packages/ionic-react/src/generators/application/files/tabs/src/App.tsx.template +++ b/packages/ionic-react/src/generators/configuration/files/src/App.tsx.template @@ -31,6 +31,17 @@ import '@ionic/react/css/text-transformation.css'; import '@ionic/react/css/flex-utils.css'; import '@ionic/react/css/display.css'; +/** + * Ionic Dark Mode + * ----------------------------------------------------- + * For more info, please see: + * https://ionicframework.com/docs/theming/dark-mode + */ + +/* import '@ionic/react/css/palettes/dark.always.css'; */ +/* import '@ionic/react/css/palettes/dark.class.css'; */ +import '@ionic/react/css/palettes/dark.system.css'; + /* Theme variables */ import './theme/variables.css'; diff --git a/packages/ionic-react/src/generators/application/files/base/src/index.html.template b/packages/ionic-react/src/generators/configuration/files/src/index.html.template similarity index 74% rename from packages/ionic-react/src/generators/application/files/base/src/index.html.template rename to packages/ionic-react/src/generators/configuration/files/src/index.html.template index 67383bd68..e4bc75852 100644 --- a/packages/ionic-react/src/generators/application/files/base/src/index.html.template +++ b/packages/ionic-react/src/generators/configuration/files/src/index.html.template @@ -3,7 +3,7 @@ <%= className %> - + @@ -14,17 +14,17 @@ - + - + - + -
+ diff --git a/packages/ionic-react/src/generators/application/files/base/src/main.tsx.template b/packages/ionic-react/src/generators/configuration/files/src/main.tsx.template similarity index 100% rename from packages/ionic-react/src/generators/application/files/base/src/main.tsx.template rename to packages/ionic-react/src/generators/configuration/files/src/main.tsx.template diff --git a/packages/ionic-react/src/generators/application/files/base/src/manifest.json.template b/packages/ionic-react/src/generators/configuration/files/src/manifest.json.template similarity index 100% rename from packages/ionic-react/src/generators/application/files/base/src/manifest.json.template rename to packages/ionic-react/src/generators/configuration/files/src/manifest.json.template diff --git a/packages/ionic-react/src/generators/configuration/files/src/theme/variables.css.template b/packages/ionic-react/src/generators/configuration/files/src/theme/variables.css.template new file mode 100644 index 000000000..131c41904 --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/files/src/theme/variables.css.template @@ -0,0 +1,2 @@ +/* For information on how to create your own theme, please see: +http://ionicframework.com/docs/theming/ */ diff --git a/packages/ionic-react/src/generators/configuration/generator.spec.ts b/packages/ionic-react/src/generators/configuration/generator.spec.ts new file mode 100644 index 000000000..8b29c3c8f --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/generator.spec.ts @@ -0,0 +1,92 @@ +import { readJson, readProjectConfiguration, Tree } from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import { configurationGenerator } from './generator'; +import { ConfigurationGeneratorSchema } from './schema'; + +describe('application', () => { + let host: Tree; + + const options: ConfigurationGeneratorSchema = { + project: 'my-app', + capacitor: false, + skipFormat: true, + }; + + const projectRoot = `apps/${options.project}`; + + function testGeneratedFiles( + tree: Tree, + options: ConfigurationGeneratorSchema + ) { + // Common files + expect(tree.exists(`${projectRoot}/src/index.html`)).toBeTruthy(); + expect(tree.exists(`${projectRoot}/src/manifest.json`)).toBeTruthy(); + expect(tree.exists(`${projectRoot}/src/public/favicon.png`)).toBeTruthy(); + + // Starter templates + expect(tree.exists(`${projectRoot}/src/App.tsx`)).toBeTruthy(); + expect(tree.exists(`${projectRoot}/src/pages/Home.tsx`)).toBeTruthy(); + expect( + tree.exists(`${projectRoot}/src/components/ExploreContainer.tsx`) + ).toBeTruthy(); + + expect( + tree.exists(`${projectRoot}/src/components/ExploreContainer.css`) + ).toBeTruthy(); + expect(tree.exists(`${projectRoot}/src/pages/Home.css`)).toBeTruthy(); + + // Capacitor files + if (options.capacitor) { + expect(tree.exists(`${projectRoot}/capacitor.config.ts`)).toBeTruthy(); + } + } + + beforeEach(() => { + host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + }); + + it('should add dependencies to package.json', async () => { + await configurationGenerator(host, options); + + const packageJson = readJson(host, 'package.json'); + expect(packageJson.dependencies['@ionic/react']).toBeDefined(); + expect(packageJson.dependencies['@ionic/react-router']).toBeDefined(); + expect(packageJson.devDependencies['@nx/react']).toBeDefined(); + }); + + it('should generate application', async () => { + await configurationGenerator(host, options); + + testGeneratedFiles(host, { ...options }); + }); + + it('should delete unused @nx/react files', async () => { + await configurationGenerator(host, options); + + expect(host.exists(`${projectRoot}/src/app/app.css`)).toBeFalsy(); + expect(host.exists(`${projectRoot}/public/favicon.ico`)).toBeFalsy(); + expect(host.exists(`${projectRoot}/src/favicon.ico`)).toBeFalsy(); + }); + + it('should update assets in project configuration', async () => { + await configurationGenerator(host, options); + const project = readProjectConfiguration(host, options.project); + + expect(project.targets.build.options.assets).not.toContain( + `${projectRoot}/src/favicon.ico` + ); + expect(project.targets.build.options.assets).toContain( + `${projectRoot}/src/manifest.json` + ); + }); + + describe('--capacitor', () => { + describe('true', () => { + it('should generate Capacitor project', async () => { + await configurationGenerator(host, { ...options, capacitor: true }); + + testGeneratedFiles(host, { ...options, capacitor: true }); + }); + }); + }); +}); diff --git a/packages/ionic-react/src/generators/configuration/generator.ts b/packages/ionic-react/src/generators/configuration/generator.ts new file mode 100644 index 000000000..ae947b215 --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/generator.ts @@ -0,0 +1,38 @@ +import { + convertNxGenerator, + formatFiles, + GeneratorCallback, + runTasksInSerial, + Tree, +} from '@nx/devkit'; +import { addCapacitor } from './lib/add-capacitor'; +import { addDependencies } from './lib/add-dependencies'; +import { addFiles, deleteFiles } from './lib/files'; +import { normalizeOptions } from './lib/normalize-options'; +import { updateWorkspace } from './lib/update-workspace'; +import { ConfigurationGeneratorSchema } from './schema'; + +export async function configurationGenerator( + host: Tree, + options: ConfigurationGeneratorSchema +) { + const normalizedOptions = normalizeOptions(host, options); + const installTask = addDependencies(host); + addFiles(host, normalizedOptions); + deleteFiles(host, normalizedOptions); + updateWorkspace(host, normalizedOptions); + // eslint-disable-next-line @typescript-eslint/no-empty-function + let capacitorTask: GeneratorCallback = () => {}; + if (options.capacitor) { + capacitorTask = await addCapacitor(host, normalizedOptions); + } + + if (!options.skipFormat) { + await formatFiles(host); + } + + return runTasksInSerial(installTask, capacitorTask); +} + +export default configurationGenerator; +export const applicationSchematic = convertNxGenerator(configurationGenerator); diff --git a/packages/ionic-react/src/generators/application/lib/add-capacitor.ts b/packages/ionic-react/src/generators/configuration/lib/add-capacitor.ts similarity index 100% rename from packages/ionic-react/src/generators/application/lib/add-capacitor.ts rename to packages/ionic-react/src/generators/configuration/lib/add-capacitor.ts diff --git a/packages/ionic-react/src/generators/configuration/lib/add-dependencies.ts b/packages/ionic-react/src/generators/configuration/lib/add-dependencies.ts new file mode 100644 index 000000000..e352c7a6e --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/lib/add-dependencies.ts @@ -0,0 +1,18 @@ +import { addDependenciesToPackageJson, Tree } from '@nx/devkit'; +import { + ionicReactRouterVersion, + ionicReactVersion, + ionIconsVersion, +} from '../../../utils/versions'; + +export function addDependencies(host: Tree) { + return addDependenciesToPackageJson( + host, + { + '@ionic/react': ionicReactVersion, + '@ionic/react-router': ionicReactRouterVersion, + ionicons: ionIconsVersion, + }, + {} + ); +} diff --git a/packages/ionic-react/src/generators/configuration/lib/files.ts b/packages/ionic-react/src/generators/configuration/lib/files.ts new file mode 100644 index 000000000..563e350ed --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/lib/files.ts @@ -0,0 +1,32 @@ +import { + generateFiles, + names, + normalizePath, + offsetFromRoot, + Tree, +} from '@nx/devkit'; +import { NormalizedSchema } from '../schema'; + +export function addFiles(host: Tree, options: NormalizedSchema) { + const templateOptions = { + ...options, + ...names(options.project), + offsetFromRoot: offsetFromRoot(options.projectRoot), + template: '', + }; + + generateFiles( + host, + normalizePath(__dirname + '/../files'), + options.projectRoot, + templateOptions + ); +} + +export function deleteFiles(host: Tree, options: NormalizedSchema) { + host.delete(options.projectRoot + '/src/favicon.ico'); + host.delete(options.projectRoot + `/src/app`); + host.delete(options.projectRoot + `/src/styles.css`); + + return host; +} diff --git a/packages/ionic-react/src/generators/configuration/lib/normalize-options.ts b/packages/ionic-react/src/generators/configuration/lib/normalize-options.ts new file mode 100644 index 000000000..92b089b1c --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/lib/normalize-options.ts @@ -0,0 +1,15 @@ +import { readProjectConfiguration, Tree } from '@nx/devkit'; +import { ConfigurationGeneratorSchema, NormalizedSchema } from '../schema'; + +export function normalizeOptions( + host: Tree, + options: ConfigurationGeneratorSchema +): NormalizedSchema { + const projectConfig = readProjectConfiguration(host, options.project); + + return { + ...options, + project: options.project, + projectRoot: projectConfig.root, + }; +} diff --git a/packages/ionic-react/src/generators/application/lib/update-workspace.ts b/packages/ionic-react/src/generators/configuration/lib/update-workspace.ts similarity index 56% rename from packages/ionic-react/src/generators/application/lib/update-workspace.ts rename to packages/ionic-react/src/generators/configuration/lib/update-workspace.ts index ae05758a8..07c00d47d 100644 --- a/packages/ionic-react/src/generators/application/lib/update-workspace.ts +++ b/packages/ionic-react/src/generators/configuration/lib/update-workspace.ts @@ -5,14 +5,16 @@ import { updateProjectConfiguration, } from '@nx/devkit'; import { NormalizedSchema } from '../schema'; + export function updateWorkspace(host: Tree, options: NormalizedSchema) { - const project = readProjectConfiguration(host, options.appProjectName); + const project = readProjectConfiguration(host, options.project); project.targets.build.options.assets = [ ...project.targets.build.options.assets.filter( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (asset: any) => !asset.toString().includes('src/favicon.ico') + (asset: string | Record) => + asset.toString().includes('src/favicon.ico') || + asset.toString().includes(`public/favicon.ico`) ), - options.appProjectRoot + '/src/manifest.json', + options.projectRoot + '/src/manifest.json', { glob: '**/*.svg', input: 'node_modules/ionicons/dist/ionicons/svg', @@ -22,10 +24,8 @@ export function updateWorkspace(host: Tree, options: NormalizedSchema) { project.targets.build.options.styles = [ ...project.targets.build.options.styles, - { - input: normalizePath(`${options.appProjectRoot}/src/theme/variables.css`), - }, + normalizePath(`${options.projectRoot}/src/theme/variables.css`), ]; - updateProjectConfiguration(host, options.appProjectName, project); + updateProjectConfiguration(host, options.project, project); } diff --git a/packages/ionic-react/src/generators/configuration/schema.d.ts b/packages/ionic-react/src/generators/configuration/schema.d.ts new file mode 100644 index 000000000..02432e46a --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/schema.d.ts @@ -0,0 +1,9 @@ +export interface ConfigurationGeneratorSchema { + project: string; + capacitor: boolean; + skipFormat: boolean; +} + +export interface NormalizedSchema extends ConfigurationGeneratorSchema { + projectRoot: string; +} diff --git a/packages/ionic-react/src/generators/configuration/schema.json b/packages/ionic-react/src/generators/configuration/schema.json new file mode 100644 index 000000000..cc9274745 --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/schema.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "Application", + "title": "Configure Ionic for a React application", + "type": "object", + "properties": { + "project": { + "description": "The name of the project.", + "type": "string", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "Which project would you like to configure?" + }, + "capacitor": { + "type": "boolean", + "description": "Generate a Capacitor project.", + "default": true + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false + } + }, + "required": ["project"] +} diff --git a/packages/ionic-react/src/index.ts b/packages/ionic-react/src/index.ts index 1697adbed..cd9ce518f 100644 --- a/packages/ionic-react/src/index.ts +++ b/packages/ionic-react/src/index.ts @@ -1,2 +1,2 @@ -export { applicationGenerator } from './generators/application/generator'; -export { ApplicationGeneratorSchema } from './generators/application/schema'; +export { configurationGenerator } from './generators/configuration/generator'; +export { ConfigurationGeneratorSchema } from './generators/configuration/schema'; diff --git a/packages/ionic-react/src/utils/versions.ts b/packages/ionic-react/src/utils/versions.ts index e71544f71..7716359eb 100644 --- a/packages/ionic-react/src/utils/versions.ts +++ b/packages/ionic-react/src/utils/versions.ts @@ -1,7 +1,3 @@ -export const ionicReactVersion = '^7.0.0'; -export const ionicReactRouterVersion = '^7.0.0'; -export const webVitalsVersion = '^0.2.4'; -export const workboxVersion = '^5.1.4'; -export const reactRouterDomVersion = '5.3.3'; -export const typesReactRouterDomVersion = '5.3.3'; -export const capacitorPluginVersion = '5.0.2'; +export const ionicReactVersion = '^8.0.0'; +export const ionicReactRouterVersion = '^8.0.0'; +export const ionIconsVersion = '^7.0.0'; From bde484e29b5b95d11ef185b99b45d928e19dc4dd Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Fri, 27 Sep 2024 09:27:27 +0200 Subject: [PATCH 10/17] docs(ionic-react): generate docs --- docs/docs/ionic-react/generators.md | 80 +++-------------------------- 1 file changed, 8 insertions(+), 72 deletions(-) diff --git a/docs/docs/ionic-react/generators.md b/docs/docs/ionic-react/generators.md index 35f6f1a00..2b8501148 100644 --- a/docs/docs/ionic-react/generators.md +++ b/docs/docs/ionic-react/generators.md @@ -1,46 +1,34 @@ -## @nxext/ionic-react:application +## @nxext/ionic-react:configuration -Create an Ionic React application. +Configure Ionic for a React application. ### Usage ```bash -nx generate application ... +nx generate configuration ... ``` -```bash -nx g app ... # same -``` - -By default, Nx will search for `application` in the default collection provisioned in nx.json. +By default, Nx will search for `configuration` in the default collection provisioned in nx.json. You can specify the collection explicitly as follows: ```bash -nx g @nxext/ionic-react:application ... +nx g @nxext/ionic-react:configuration ... ``` Show what will be generated without writing to disk: ```bash -nx g application ... --dry-run -``` - -### Examples - -Generate apps/myorg/myapp and apps/myorg/myapp-e2e: - -```bash -nx g app myapp --directory=myorg +nx g configuration ... --dry-run ``` ### Options -#### name (_**required**_) +#### project (_**required**_) Type: `string` -The name of the application. +The name of the project. #### capacitor @@ -50,24 +38,6 @@ Type: `boolean` Generate a Capacitor project. -#### directory - -Alias(es): d - -Type: `string` - -The directory of the new application. - -#### e2eTestRunner - -Default: `cypress` - -Type: `string` - -Possible values: `cypress`, `none` - -Test runner to use for end to end (e2e) tests. - #### skipFormat Default: `false` @@ -75,37 +45,3 @@ Default: `false` Type: `boolean` Skip formatting files. - -#### standaloneConfig - -Type: `boolean` - -Split the project configuration into `/project.json` rather than including it inside `workspace.json`. - -#### tags - -Alias(es): t - -Type: `string` - -Add tags to the application (used for linting). - -#### template - -Default: `blank` - -Type: `string` - -Possible values: `blank`, `list`, `sidemenu`, `tabs` - -The starter template to use. - -#### unitTestRunner - -Default: `jest` - -Type: `string` - -Possible values: `jest`, `none` - -Test runner to use for unit tests. From 3d56120ef2379352f30443bdac3e241fe891ce59 Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Fri, 27 Sep 2024 09:34:07 +0200 Subject: [PATCH 11/17] refactor(ionic-angular): use template file extension --- ...r.component.html => explore-container.component.html.template} | 0 ...r.component.scss => explore-container.component.scss.template} | 0 ...onent.spec.ts => explore-container.component.spec.ts.template} | 0 ...ainer.component.ts => explore-container.component.ts.template} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/{explore-container.component.html => explore-container.component.html.template} (100%) rename packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/{explore-container.component.scss => explore-container.component.scss.template} (100%) rename packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/{explore-container.component.spec.ts => explore-container.component.spec.ts.template} (100%) rename packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/{explore-container.component.ts => explore-container.component.ts.template} (100%) diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.html b/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.html.template similarity index 100% rename from packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.html rename to packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.html.template diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.scss b/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.scss.template similarity index 100% rename from packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.scss rename to packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.scss.template diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.spec.ts b/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.spec.ts.template similarity index 100% rename from packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.spec.ts rename to packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.spec.ts.template diff --git a/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.ts b/packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.ts.template similarity index 100% rename from packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.ts rename to packages/ionic-angular/src/generators/configuration/files/src/app/explore-container/explore-container.component.ts.template From 75ca85c8752afdfb54f06556494f107092bb04f3 Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Fri, 27 Sep 2024 09:35:08 +0200 Subject: [PATCH 12/17] refactor(ionic-react): use project name from schema --- .../src/generators/configuration/lib/add-capacitor.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ionic-react/src/generators/configuration/lib/add-capacitor.ts b/packages/ionic-react/src/generators/configuration/lib/add-capacitor.ts index b64ee154b..a66ff8371 100644 --- a/packages/ionic-react/src/generators/configuration/lib/add-capacitor.ts +++ b/packages/ionic-react/src/generators/configuration/lib/add-capacitor.ts @@ -4,8 +4,8 @@ import { NormalizedSchema } from '../schema'; export async function addCapacitor(host: Tree, options: NormalizedSchema) { return await capacitorConfigurationGenerator(host, { - project: options.appProjectName, - appName: options.appName, + project: options.project, + appName: options.project, appId: 'io.ionic.starter', skipFormat: options.skipFormat, }); From 03e6fe2cbcc26d638c38db8b5b498c4e3a146d01 Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Fri, 27 Sep 2024 10:04:47 +0200 Subject: [PATCH 13/17] refactor(ionic-react): cleanup + fix minor issues --- packages/ionic-react/package.json | 4 ---- .../configuration/files/ionic.config.json.template | 2 +- .../src/generators/configuration/lib/update-workspace.ts | 6 ++++++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/ionic-react/package.json b/packages/ionic-react/package.json index 5d6163445..5ce71b303 100644 --- a/packages/ionic-react/package.json +++ b/packages/ionic-react/package.json @@ -22,10 +22,6 @@ "dependencies": { "@nxext/capacitor": "^19.0.0", "@nx/devkit": "^19.0.0", - "@nx/eslint": "^19.0.0", - "@nx/react": "^19.0.0", - "typescript": "5.4.5", - "@phenomnomnominal/tsquery": "~5.0.1", "tslib": "^2.3.0" }, "peerDependencies": {} diff --git a/packages/ionic-react/src/generators/configuration/files/ionic.config.json.template b/packages/ionic-react/src/generators/configuration/files/ionic.config.json.template index 70a029142..eabcbfde5 100644 --- a/packages/ionic-react/src/generators/configuration/files/ionic.config.json.template +++ b/packages/ionic-react/src/generators/configuration/files/ionic.config.json.template @@ -1,5 +1,5 @@ { - "name": "<%= appName %>", + "name": "<%= name %>", "integrations": { "capacitor": {} }, diff --git a/packages/ionic-react/src/generators/configuration/lib/update-workspace.ts b/packages/ionic-react/src/generators/configuration/lib/update-workspace.ts index 07c00d47d..3da14e981 100644 --- a/packages/ionic-react/src/generators/configuration/lib/update-workspace.ts +++ b/packages/ionic-react/src/generators/configuration/lib/update-workspace.ts @@ -8,6 +8,12 @@ import { NormalizedSchema } from '../schema'; export function updateWorkspace(host: Tree, options: NormalizedSchema) { const project = readProjectConfiguration(host, options.project); + project.targets.build ??= { + options: { + assets: [], + styles: [], + }, + }; project.targets.build.options.assets = [ ...project.targets.build.options.assets.filter( (asset: string | Record) => From f6a2f734266d058c1b2997857d4fa37ce094feff Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Fri, 27 Sep 2024 10:25:06 +0200 Subject: [PATCH 14/17] refactor(ionic-angular): cleanup + fix minor issues --- packages/ionic-angular/package.json | 1 + .../src/generators/configuration/generator.ts | 4 ++-- .../src/generators/configuration/lib/files.ts | 8 +++----- .../generators/configuration/lib/normalize-options.ts | 10 ++++++++-- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/ionic-angular/package.json b/packages/ionic-angular/package.json index 644f340ca..08da48233 100644 --- a/packages/ionic-angular/package.json +++ b/packages/ionic-angular/package.json @@ -22,6 +22,7 @@ "dependencies": { "@nxext/capacitor": "^19.0.0", "@nx/devkit": "^19.0.0", + "@nx/js": "^19.0.0", "@nx/angular": "^19.0.0", "tslib": "^2.3.0" }, diff --git a/packages/ionic-angular/src/generators/configuration/generator.ts b/packages/ionic-angular/src/generators/configuration/generator.ts index 1b917ba86..a85c3cb3a 100644 --- a/packages/ionic-angular/src/generators/configuration/generator.ts +++ b/packages/ionic-angular/src/generators/configuration/generator.ts @@ -15,10 +15,10 @@ export async function configurationGenerator( host: Tree, schema: ConfigurationGeneratorSchema ) { - const options = normalizeOptions(host, schema); + const options = await normalizeOptions(host, schema); const installTask = addDependencies(host); - addFiles(host, options); removeFiles(host, options); + addFiles(host, options); updateWorkspace(host, options); const capacitorTask = await addCapacitor(host, options); diff --git a/packages/ionic-angular/src/generators/configuration/lib/files.ts b/packages/ionic-angular/src/generators/configuration/lib/files.ts index 42a432730..7921c4abe 100644 --- a/packages/ionic-angular/src/generators/configuration/lib/files.ts +++ b/packages/ionic-angular/src/generators/configuration/lib/files.ts @@ -20,9 +20,7 @@ export function addFiles(host: Tree, options: NormalizedOptions) { } export function removeFiles(host: Tree, options: NormalizedOptions) { - if (host.exists(`${options.projectRoot}/public/favicon.ico`)) { - host.delete(`${options.projectRoot}/public/favicon.ico`); - } else if (host.exists(`${options.projectRoot}/src/favicon.ico`)) { - host.delete(`${options.projectRoot}/src/favicon.ico`); - } + host.delete(`${options.projectRoot}/public/favicon.ico`); + host.delete(`${options.projectRoot}/src/favicon.ico`); + host.delete(`${options.projectRoot}/src/app`); } diff --git a/packages/ionic-angular/src/generators/configuration/lib/normalize-options.ts b/packages/ionic-angular/src/generators/configuration/lib/normalize-options.ts index 4093e5928..60e9b7331 100644 --- a/packages/ionic-angular/src/generators/configuration/lib/normalize-options.ts +++ b/packages/ionic-angular/src/generators/configuration/lib/normalize-options.ts @@ -3,16 +3,22 @@ import { ConfigurationGeneratorSchema } from '../schema'; export interface NormalizedOptions extends ConfigurationGeneratorSchema { projectRoot: string; + prefix: string; } -export function normalizeOptions( +export async function normalizeOptions( host: Tree, schema: ConfigurationGeneratorSchema -): NormalizedOptions { +): Promise { const { root } = readProjectConfiguration(host, schema.project); + const { getNpmScope } = await import( + '@nx/js/src/utils/package-json/get-npm-scope' + ); + const npmScope = getNpmScope(host); return { projectRoot: root, + prefix: npmScope, ...schema, }; } From ad19a50df56a9fbc69fb9d030bcd3e1dabb6cea9 Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Fri, 27 Sep 2024 10:46:08 +0200 Subject: [PATCH 15/17] test(ionic-react): update specs --- .../components/ExploreContainer.css.template | 24 +++++++++ .../components/ExploreContainer.tsx.template | 16 ++++++ .../configuration/files/src/package.json | 50 +++++++++++++++++++ .../files/src/pages/Tab1.css.template | 0 .../files/src/pages/Tab1.tsx.template | 25 ++++++++++ .../files/src/pages/Tab2.css.template | 0 .../files/src/pages/Tab2.tsx.template | 25 ++++++++++ .../files/src/pages/Tab3.css.template | 0 .../files/src/pages/Tab3.tsx.template | 25 ++++++++++ .../configuration/generator.spec.ts | 21 ++++---- .../src/generators/configuration/lib/files.ts | 1 + 11 files changed, 178 insertions(+), 9 deletions(-) create mode 100644 packages/ionic-react/src/generators/configuration/files/src/components/ExploreContainer.css.template create mode 100644 packages/ionic-react/src/generators/configuration/files/src/components/ExploreContainer.tsx.template create mode 100644 packages/ionic-react/src/generators/configuration/files/src/package.json create mode 100644 packages/ionic-react/src/generators/configuration/files/src/pages/Tab1.css.template create mode 100644 packages/ionic-react/src/generators/configuration/files/src/pages/Tab1.tsx.template create mode 100644 packages/ionic-react/src/generators/configuration/files/src/pages/Tab2.css.template create mode 100644 packages/ionic-react/src/generators/configuration/files/src/pages/Tab2.tsx.template create mode 100644 packages/ionic-react/src/generators/configuration/files/src/pages/Tab3.css.template create mode 100644 packages/ionic-react/src/generators/configuration/files/src/pages/Tab3.tsx.template diff --git a/packages/ionic-react/src/generators/configuration/files/src/components/ExploreContainer.css.template b/packages/ionic-react/src/generators/configuration/files/src/components/ExploreContainer.css.template new file mode 100644 index 000000000..e99f514fb --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/files/src/components/ExploreContainer.css.template @@ -0,0 +1,24 @@ +.container { + text-align: center; + position: absolute; + left: 0; + right: 0; + top: 50%; + transform: translateY(-50%); +} + +.container strong { + font-size: 20px; + line-height: 26px; +} + +.container p { + font-size: 16px; + line-height: 22px; + color: #8c8c8c; + margin: 0; +} + +.container a { + text-decoration: none; +} \ No newline at end of file diff --git a/packages/ionic-react/src/generators/configuration/files/src/components/ExploreContainer.tsx.template b/packages/ionic-react/src/generators/configuration/files/src/components/ExploreContainer.tsx.template new file mode 100644 index 000000000..354df7b7b --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/files/src/components/ExploreContainer.tsx.template @@ -0,0 +1,16 @@ +import './ExploreContainer.css'; + +interface ContainerProps { + name: string; +} + +const ExploreContainer: React.FC = ({ name }) => { + return ( +
+ {name} +

Explore UI Components

+
+ ); +}; + +export default ExploreContainer; diff --git a/packages/ionic-react/src/generators/configuration/files/src/package.json b/packages/ionic-react/src/generators/configuration/files/src/package.json new file mode 100644 index 000000000..218d9164f --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/files/src/package.json @@ -0,0 +1,50 @@ +{ + "name": "photo-gallery-react", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview", + "test.e2e": "cypress run", + "test.unit": "vitest", + "lint": "eslint" + }, + "dependencies": { + "@capacitor/app": "6.0.1", + "@capacitor/core": "6.1.2", + "@capacitor/haptics": "6.0.1", + "@capacitor/keyboard": "6.0.2", + "@capacitor/status-bar": "6.0.1", + "@ionic/react": "^8.0.0", + "@ionic/react-router": "^8.0.0", + "@types/react-router": "^5.1.20", + "@types/react-router-dom": "^5.3.3", + "ionicons": "^7.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router": "^5.3.4", + "react-router-dom": "^5.3.4" + }, + "devDependencies": { + "@capacitor/cli": "6.1.2", + "@testing-library/dom": ">=7.21.4", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^14.0.0", + "@testing-library/user-event": "^14.4.3", + "@types/react": "^18.0.27", + "@types/react-dom": "^18.0.10", + "@vitejs/plugin-legacy": "^5.0.0", + "@vitejs/plugin-react": "^4.0.1", + "cypress": "^13.5.0", + "eslint": "^8.35.0", + "eslint-plugin-react": "^7.32.2", + "jsdom": "^22.1.0", + "terser": "^5.4.0", + "typescript": "^5.1.6", + "vite": "~5.2.0", + "vitest": "^0.34.6" + }, + "description": "An Ionic project" +} diff --git a/packages/ionic-react/src/generators/configuration/files/src/pages/Tab1.css.template b/packages/ionic-react/src/generators/configuration/files/src/pages/Tab1.css.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-react/src/generators/configuration/files/src/pages/Tab1.tsx.template b/packages/ionic-react/src/generators/configuration/files/src/pages/Tab1.tsx.template new file mode 100644 index 000000000..97aa72d86 --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/files/src/pages/Tab1.tsx.template @@ -0,0 +1,25 @@ +import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react'; +import ExploreContainer from '../components/ExploreContainer'; +import './Tab1.css'; + +const Tab1: React.FC = () => { + return ( + + + + Tab 1 + + + + + + Tab 1 + + + + + + ); +}; + +export default Tab1; diff --git a/packages/ionic-react/src/generators/configuration/files/src/pages/Tab2.css.template b/packages/ionic-react/src/generators/configuration/files/src/pages/Tab2.css.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-react/src/generators/configuration/files/src/pages/Tab2.tsx.template b/packages/ionic-react/src/generators/configuration/files/src/pages/Tab2.tsx.template new file mode 100644 index 000000000..05458aa0a --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/files/src/pages/Tab2.tsx.template @@ -0,0 +1,25 @@ +import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react'; +import ExploreContainer from '../components/ExploreContainer'; +import './Tab2.css'; + +const Tab2: React.FC = () => { + return ( + + + + Tab 2 + + + + + + Tab 2 + + + + + + ); +}; + +export default Tab2; diff --git a/packages/ionic-react/src/generators/configuration/files/src/pages/Tab3.css.template b/packages/ionic-react/src/generators/configuration/files/src/pages/Tab3.css.template new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ionic-react/src/generators/configuration/files/src/pages/Tab3.tsx.template b/packages/ionic-react/src/generators/configuration/files/src/pages/Tab3.tsx.template new file mode 100644 index 000000000..3a29b8a5c --- /dev/null +++ b/packages/ionic-react/src/generators/configuration/files/src/pages/Tab3.tsx.template @@ -0,0 +1,25 @@ +import { IonContent, IonHeader, IonPage, IonTitle, IonToolbar } from '@ionic/react'; +import ExploreContainer from '../components/ExploreContainer'; +import './Tab3.css'; + +const Tab3: React.FC = () => { + return ( + + + + Tab 3 + + + + + + Tab 3 + + + + + + ); +}; + +export default Tab3; diff --git a/packages/ionic-react/src/generators/configuration/generator.spec.ts b/packages/ionic-react/src/generators/configuration/generator.spec.ts index 8b29c3c8f..64418cab0 100644 --- a/packages/ionic-react/src/generators/configuration/generator.spec.ts +++ b/packages/ionic-react/src/generators/configuration/generator.spec.ts @@ -1,4 +1,5 @@ import { readJson, readProjectConfiguration, Tree } from '@nx/devkit'; +import { applicationGenerator } from '@nx/angular/generators'; import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; import { configurationGenerator } from './generator'; import { ConfigurationGeneratorSchema } from './schema'; @@ -21,19 +22,18 @@ describe('application', () => { // Common files expect(tree.exists(`${projectRoot}/src/index.html`)).toBeTruthy(); expect(tree.exists(`${projectRoot}/src/manifest.json`)).toBeTruthy(); - expect(tree.exists(`${projectRoot}/src/public/favicon.png`)).toBeTruthy(); + expect(tree.exists(`${projectRoot}/public/favicon.png`)).toBeTruthy(); - // Starter templates + // Starter template expect(tree.exists(`${projectRoot}/src/App.tsx`)).toBeTruthy(); - expect(tree.exists(`${projectRoot}/src/pages/Home.tsx`)).toBeTruthy(); + expect(tree.exists(`${projectRoot}/src/pages/Tab1.tsx`)).toBeTruthy(); + expect(tree.exists(`${projectRoot}/src/pages/Tab1.css`)).toBeTruthy(); expect( - tree.exists(`${projectRoot}/src/components/ExploreContainer.tsx`) + tree.exists(`${projectRoot}/src/components/ExploreContainer.css`) ).toBeTruthy(); - expect( - tree.exists(`${projectRoot}/src/components/ExploreContainer.css`) + tree.exists(`${projectRoot}/src/components/ExploreContainer.tsx`) ).toBeTruthy(); - expect(tree.exists(`${projectRoot}/src/pages/Home.css`)).toBeTruthy(); // Capacitor files if (options.capacitor) { @@ -41,8 +41,12 @@ describe('application', () => { } } - beforeEach(() => { + beforeEach(async () => { host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' }); + await applicationGenerator(host, { + name: options.project, + skipFormat: true, + }); }); it('should add dependencies to package.json', async () => { @@ -51,7 +55,6 @@ describe('application', () => { const packageJson = readJson(host, 'package.json'); expect(packageJson.dependencies['@ionic/react']).toBeDefined(); expect(packageJson.dependencies['@ionic/react-router']).toBeDefined(); - expect(packageJson.devDependencies['@nx/react']).toBeDefined(); }); it('should generate application', async () => { diff --git a/packages/ionic-react/src/generators/configuration/lib/files.ts b/packages/ionic-react/src/generators/configuration/lib/files.ts index 563e350ed..0f2673259 100644 --- a/packages/ionic-react/src/generators/configuration/lib/files.ts +++ b/packages/ionic-react/src/generators/configuration/lib/files.ts @@ -24,6 +24,7 @@ export function addFiles(host: Tree, options: NormalizedSchema) { } export function deleteFiles(host: Tree, options: NormalizedSchema) { + host.delete(options.projectRoot + '/public/favicon.ico'); host.delete(options.projectRoot + '/src/favicon.ico'); host.delete(options.projectRoot + `/src/app`); host.delete(options.projectRoot + `/src/styles.css`); From c4f3ff4593f1fe059408f8d774d94de61fbf5787 Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Fri, 27 Sep 2024 10:57:02 +0200 Subject: [PATCH 16/17] refactor(ionic-react): remove extra package.json --- .../configuration/files/src/package.json | 50 ------------------- 1 file changed, 50 deletions(-) delete mode 100644 packages/ionic-react/src/generators/configuration/files/src/package.json diff --git a/packages/ionic-react/src/generators/configuration/files/src/package.json b/packages/ionic-react/src/generators/configuration/files/src/package.json deleted file mode 100644 index 218d9164f..000000000 --- a/packages/ionic-react/src/generators/configuration/files/src/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "photo-gallery-react", - "private": true, - "version": "0.0.1", - "type": "module", - "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "preview": "vite preview", - "test.e2e": "cypress run", - "test.unit": "vitest", - "lint": "eslint" - }, - "dependencies": { - "@capacitor/app": "6.0.1", - "@capacitor/core": "6.1.2", - "@capacitor/haptics": "6.0.1", - "@capacitor/keyboard": "6.0.2", - "@capacitor/status-bar": "6.0.1", - "@ionic/react": "^8.0.0", - "@ionic/react-router": "^8.0.0", - "@types/react-router": "^5.1.20", - "@types/react-router-dom": "^5.3.3", - "ionicons": "^7.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-router": "^5.3.4", - "react-router-dom": "^5.3.4" - }, - "devDependencies": { - "@capacitor/cli": "6.1.2", - "@testing-library/dom": ">=7.21.4", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^14.0.0", - "@testing-library/user-event": "^14.4.3", - "@types/react": "^18.0.27", - "@types/react-dom": "^18.0.10", - "@vitejs/plugin-legacy": "^5.0.0", - "@vitejs/plugin-react": "^4.0.1", - "cypress": "^13.5.0", - "eslint": "^8.35.0", - "eslint-plugin-react": "^7.32.2", - "jsdom": "^22.1.0", - "terser": "^5.4.0", - "typescript": "^5.1.6", - "vite": "~5.2.0", - "vitest": "^0.34.6" - }, - "description": "An Ionic project" -} From 81c9f77b81ff989bf038293346efad731f103e0b Mon Sep 17 00:00:00 2001 From: Edouard Bozon Date: Fri, 27 Sep 2024 11:03:58 +0200 Subject: [PATCH 17/17] test(ionic-angular): update spec --- .../src/generators/configuration/generator.spec.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/ionic-angular/src/generators/configuration/generator.spec.ts b/packages/ionic-angular/src/generators/configuration/generator.spec.ts index d33c95506..0875ff264 100644 --- a/packages/ionic-angular/src/generators/configuration/generator.spec.ts +++ b/packages/ionic-angular/src/generators/configuration/generator.spec.ts @@ -46,11 +46,7 @@ describe('configuration schematic', () => { expect(assets).not.toContain(`${projectRoot}/src/favicon.ico`); expect(styles).toEqual( - expect.arrayContaining([ - expect.objectContaining({ - input: `${projectRoot}/src/theme/variables.scss`, - }), - ]) + expect.arrayContaining([`${projectRoot}/src/theme/variables.scss`]) ); });